Example #1
0
 /**
  * Internal routine for parsing the provider options from the command line
  *
  * @return null
  */
 protected function _parseProviderOptionsPart()
 {
     if (current($this->_argumentsWorking) == '?') {
         $this->_help = true;
         return;
     }
     $searchParams = array('type' => 'Tool', 'providerName' => $this->_request->getProviderName(), 'actionName' => $this->_request->getActionName(), 'specialtyName' => $this->_request->getSpecialtyName(), 'clientName' => 'console');
     $actionableMethodLongParamsMetadata = $this->_manifestRepository->getMetadata(array_merge($searchParams, array('name' => 'actionableMethodLongParams')));
     $actionableMethodShortParamsMetadata = $this->_manifestRepository->getMetadata(array_merge($searchParams, array('name' => 'actionableMethodShortParams')));
     $paramNameShortValues = $actionableMethodShortParamsMetadata->getValue();
     $getoptOptions = array();
     $wordArguments = array();
     $longParamCanonicalNames = array();
     $actionableMethodLongParamsMetadataReference = $actionableMethodLongParamsMetadata->getReference();
     foreach ($actionableMethodLongParamsMetadata->getValue() as $parameterNameLong => $consoleParameterNameLong) {
         $optionConfig = $consoleParameterNameLong . '|';
         $parameterInfo = $actionableMethodLongParamsMetadataReference['parameterInfo'][$parameterNameLong];
         // process ParameterInfo into array for command line option matching
         if ($parameterInfo['type'] == 'string' || $parameterInfo['type'] == 'bool') {
             $optionConfig .= $paramNameShortValues[$parameterNameLong] . ($parameterInfo['optional'] ? '-' : '=') . 's';
         } elseif (in_array($parameterInfo['type'], array('int', 'integer', 'float'))) {
             $optionConfig .= $paramNameShortValues[$parameterNameLong] . ($parameterInfo['optional'] ? '-' : '=') . 'i';
         } else {
             $optionConfig .= $paramNameShortValues[$parameterNameLong] . '-s';
         }
         $getoptOptions[$optionConfig] = $parameterInfo['description'] != '' ? $parameterInfo['description'] : 'No description available.';
         // process ParameterInfo into array for command line WORD (argument) matching
         $wordArguments[$parameterInfo['position']]['parameterName'] = $parameterInfo['name'];
         $wordArguments[$parameterInfo['position']]['optional'] = $parameterInfo['optional'];
         $wordArguments[$parameterInfo['position']]['type'] = $parameterInfo['type'];
         // keep a translation of console to canonical names
         $longParamCanonicalNames[$consoleParameterNameLong] = $parameterNameLong;
     }
     if (!$getoptOptions) {
         // no options to parse here, return
         return;
     }
     // if non-option arguments exist, attempt to process them before processing options
     $wordStack = array();
     while ($wordOnTop = array_shift($this->_argumentsWorking)) {
         if (substr($wordOnTop, 0, 1) != '-') {
             array_push($wordStack, $wordOnTop);
         } else {
             // put word back on stack and move on
             array_unshift($this->_argumentsWorking, $wordOnTop);
             break;
         }
         if (count($wordStack) == count($wordArguments)) {
             // when we get at most the number of arguments we are expecting
             // then break out.
             break;
         }
     }
     if ($wordStack && $wordArguments) {
         for ($wordIndex = 1; $wordIndex <= count($wordArguments); $wordIndex++) {
             if (!array_key_exists($wordIndex - 1, $wordStack) || !array_key_exists($wordIndex, $wordArguments)) {
                 break;
             }
             $this->_request->setProviderParameter($wordArguments[$wordIndex]['parameterName'], $wordStack[$wordIndex - 1]);
             unset($wordStack[$wordIndex - 1]);
         }
     }
     $getoptParser = new \Zend\Console\Getopt($getoptOptions, $this->_argumentsWorking, array('parseAll' => false));
     $getoptParser->parse();
     foreach ($getoptParser->getOptions() as $option) {
         $value = $getoptParser->getOption($option);
         $providerParamOption = $longParamCanonicalNames[$option];
         $this->_request->setProviderParameter($providerParamOption, $value);
     }
     $this->_argumentsWorking = $getoptParser->getRemainingArgs();
     return;
 }