diff --git a/php/classes/AliasMgr.php b/php/classes/AliasMgr.php index 08d790b..f8f4e55 100644 --- a/php/classes/AliasMgr.php +++ b/php/classes/AliasMgr.php @@ -61,10 +61,31 @@ class AliasMgr extends AmdaObjectMgr { /***************************************************************** * PUBLIC FUNCTIONS *****************************************************************/ - + + public function getAliasArraySorted($byParamLength) { + $AliasList = $this->contentDom->getElementsByTagName('alias'); + $AliasArray = array(); + + foreach ($AliasList as $alias) { + $AliasArray[$alias->getAttribute('xml:id')] = $alias->getAttribute('name'); + } + + if ($byParamLength) { // sort array by parameter length + $keys = array_map('strlen', array_keys($AliasArray)); + array_multisort($keys, SORT_DESC, $AliasArray); + } + else { // sort array by alias length + $keys = array_map('strlen',$AliasArray); + array_multisort($keys,SORT_DESC,$AliasArray); + } + + return $AliasArray; + } + + public function getList() { $AliasList = $this->contentDom->getElementsByTagName('alias'); - + return $AliasList; } @@ -72,10 +93,12 @@ class AliasMgr extends AmdaObjectMgr { $aliasName="#".$aliasName; $pos = strpos($chain, $paramName); + while ( $pos !== FALSE ) { $pos = $pos+strlen($paramName); if (preg_match('/[-+*,^<>&|=\/\[\]\(\)\ ]/', $chain[$pos]) || $chain[$pos] === '') { $chain = substr_replace($chain, $aliasName,$pos-strlen($paramName),strlen($paramName)); + $pos = $pos-strlen($paramName)+strlen($aliasName); } $pos = strpos($chain, $paramName, $pos); } @@ -90,6 +113,7 @@ class AliasMgr extends AmdaObjectMgr { $pos = $pos+strlen($aliasName); if (preg_match('/[-+*,^<>&|=\/\[\]\(\)\ ]/', $chain[$pos]) || $chain[$pos] === '') { $chain = substr_replace($chain, $paramName,$pos-strlen($aliasName),strlen($aliasName)); + $pos = $pos-strlen($aliasName)+strlen($paramName); } $pos = strpos($chain, $aliasName, $pos); } diff --git a/php/classes/AmdaObjectMgr.php b/php/classes/AmdaObjectMgr.php index 2475e84..be5c663 100644 --- a/php/classes/AmdaObjectMgr.php +++ b/php/classes/AmdaObjectMgr.php @@ -223,23 +223,24 @@ class AmdaObjectMgr protected function setAlias($chain) { $aliasMgr = new AliasMgr(); - $listeAlias = $aliasMgr->getList(); - - foreach($listeAlias as $alias) + $aliasArray = $aliasMgr->getAliasArraySorted(true); + + foreach($aliasArray as $key => $value) { - $chain = $aliasMgr->substrParamAlias($chain, $alias->getAttribute("xml:id"),$alias->getAttribute("name")); + $chain = $aliasMgr->substrParamAlias($chain, $key,$value); } + return $chain; } protected function resetAlias($chain) { $aliasMgr = new AliasMgr(); - $listeAlias = $aliasMgr->getList(); + $aliasArray = $aliasMgr->getAliasArraySorted(false); - foreach($listeAlias as $alias) + foreach($aliasArray as $key => $value) { - $chain = $aliasMgr->substrAliasParam($chain, $alias->getAttribute("xml:id"),$alias->getAttribute("name")); + $chain = $aliasMgr->substrAliasParam($chain, $key, $value); } return $chain; } diff --git a/php/classes/RequestMgr.php b/php/classes/RequestMgr.php index 60844a3..6afb75b 100644 --- a/php/classes/RequestMgr.php +++ b/php/classes/RequestMgr.php @@ -102,23 +102,29 @@ class RequestMgr extends AmdaObjectMgr if (!($objToGet = $this->contentDom->getElementById($id))) return array('error' => NO_SUCH_ID); $obj = json_decode(file_get_contents(USERREQDIR.$id)); + //if alias exists, replace parameter name by alias name - if (file_exists(USERWSDIR.'Alias.xml')) - { - if ($this->type == 'condition') - { - $obj->expression =$this->setAlias($obj->expression); + if (file_exists(USERWSDIR.'Alias.xml')) { + if ($this->type == 'condition') { + $obj->expression = $this->setAlias($obj->expression); } - else if ($this->type == 'request') - { - for ($i=0; $i < count($obj->children); $i++) { - for ($j=0; $j < count($obj->children[$i]->children); $j++) { - $obj->children[$i]->children[$j]->name = $this->setAlias($obj->children[$i]->children[$j]->name); + else if ($this->type == 'request') { + $tabs = $obj->tabs; + foreach ($tabs as $tab) { // tabs + $panels = $tab->panels; + foreach ($panels as $panel) { // panels + $params = $panel->params; + foreach ($params as $param) { // params + $alias = $this->setAlias($param->paramid); + if ($alias != $param->paramid) { + $param->{'real-paramid'} = $param->paramid; + $param->{'real-type'} = $param->type; + $param->paramid = $alias; + } + } } } - //TODO Ajout des SCATTER - // if $obj->children[$i]->plotType == "SCATTER" - //$obj->children[$i]->scatterParam->data->name pour 1 panel (bug si 2 panels devient $obj->children[$i]->scatterParam->data->data->name) + //TODO add SCATTER } } //if Start Time - Stop Time @@ -161,21 +167,9 @@ class RequestMgr extends AmdaObjectMgr { if ($this->type == 'condition') { - $p->expression = $this->resetAlias($p->expression); + $p->expression = $this->resetAlias(trim($p->expression)); $info = $p->expression; } - else if ($this->type == 'request') - { - $info = ''; - for ($i=0; $i < count($p->children); $i++) - { - for ($j=0; $j < count($p->children[$i]->children); $j++) - { - $p->children[$i]->children[$j]->name = $this->resetAlias($p->children[$i]->children[$j]->name); - $info = $info.' '.$p->children[$i]->children[$j]->name; - } - } - } } $this->descFileName = USERREQDIR.$this->id; @@ -192,7 +186,7 @@ class RequestMgr extends AmdaObjectMgr public static function checkRequest($obj) { - if (!file_exists(orbitsAllXml)) return array('success' => false, 'message' => 'no orbits descriotion file'); + if (!file_exists(orbitsAllXml)) return array('success' => false, 'message' => 'no orbits description file'); //check for orbit templateArgs $args = array(); -- libgit2 0.21.2