oDb = &$oDb; $this->asMaps = []; } private function setMaps() { $asMaps = $this->oDb->selectRows(['from'=>self::MAP_TABLE]); foreach($asMaps as $asMap) $this->asMaps[$asMap['codename']] = $asMap; } private function getMaps($sCodeName='') { if(empty($this->asMaps)) $this->setMaps(); return ($sCodeName=='')?$this->asMaps:$this->asMaps[$sCodeName]; } public function getProjectMaps($iProjectId) { $asMappings = $this->oDb->selectRows( [ 'select' => [Db::getId(self::MAP_TABLE), 'default_map'], 'from' => self::MAPPING_TABLE, 'constraint'=> ["IFNULL(id_project, {$iProjectId})" => $iProjectId] ], Db::getId(self::MAP_TABLE) ); $asProjectMaps = []; foreach($this->getMaps() as $asMap) { if(array_key_exists($asMap['id_map'], $asMappings)) { $asMap['default_map'] = $asMappings[$asMap['id_map']]; $asProjectMaps[] = $asMap; } } return $asProjectMaps; } public function getMapUrl($sCodeName, $asParams) { $asMap = $this->getMaps($sCodeName); $asParams['token'] = $asMap['token']; return self::populateParams($asMap['pattern'], $asParams); } private static function populateParams($sUrl, $asParams) { foreach($asParams as $sParam=>$sValue) { $sUrl = str_replace('{'.$sParam.'}', $sValue, $sUrl); } return $sUrl; } }