コード例 #1
0
ファイル: Io.php プロジェクト: php-yaoi/php-yaoi
 /**
  * @param State $commandState
  * @return Expression
  * @todo add verbosity on missing command in app tree
  */
 public function makeAnchor(State $commandState)
 {
     $commandClass = $commandState->commandClass;
     $commandClasses = array();
     if ($commandClass !== $this->definition->commandClass) {
         while (isset($this->definitionTree[$commandClass])) {
             $commandClass = $this->definitionTree[$commandClass];
             $commandClasses[] = $commandClass;
             // TODO rename $commandClass as it is a structure
             $commandClass = $commandClass[0];
         }
     }
     $properties = array();
     for ($i = count($commandClasses) - 1; $i >= 0; --$i) {
         /** @var Command|string $commandClass */
         list($commandClass, $optionName, $enumName) = $commandClasses[$i];
         $optionsArray = $commandClass::definition()->optionsArray();
         if (isset($this->requestStates[$commandClass])) {
             $commandStateArray = $this->requestStates[$commandClass]->export();
         } else {
             $commandStateArray = null;
         }
         if ($commandStateArray) {
             foreach ($commandStateArray as $name => $value) {
                 if (!isset($optionsArray[$name])) {
                     continue;
                 }
                 if ($name === $optionName) {
                     $properties[] = array($optionsArray[$name], $enumName);
                 } else {
                     $properties[] = array($optionsArray[$name], $value);
                 }
             }
         } else {
             if (isset($optionsArray[$optionName])) {
                 $properties[] = array($optionsArray[$optionName], $enumName);
             }
         }
     }
     $commandClass = $commandState->commandClass;
     $optionsArray = $commandClass::definition()->optionsArray();
     foreach ($commandState->export() as $name => $value) {
         if (!isset($optionsArray[$name])) {
             continue;
         }
         $properties[] = array($optionsArray[$name], $value);
     }
     return $this->requestMapper->makeAnchor($properties);
 }