TWizardNavigationEventParameter represents the parameter for {@link TWizard}'s navigation events. The index of the currently active step can be obtained from {@link getCurrentStepIndex CurrentStepIndex}, while the index of the candidate new step is in {@link getNextStepIndex NextStepIndex}. By modifying {@link setNextStepIndex NextStepIndex}, the new step can be changed to another one. If there is anything wrong with the navigation and it is not wanted, set {@link setCancelNavigation CancelNavigation} to true.
С версии: 3.0
Автор: Qiang Xue (qiang.xue@gmail.com)
Наследование: extends Prado\TEventParameter
Пример #1
0
 /**
  * Handles bubbled events.
  * This method mainly translate certain command events into
  * wizard-specific events.
  * @param mixed sender of the original command event
  * @param TEventParameter event parameter
  * @throws TInvalidDataValueException if a navigation command is associated with an invalid parameter
  */
 public function bubbleEvent($sender, $param)
 {
     if ($param instanceof \Prado\Web\UI\TCommandEventParameter) {
         $command = $param->getCommandName();
         if (strcasecmp($command, self::CMD_CANCEL) === 0) {
             $this->onCancelButtonClick($param);
             return true;
         }
         $type = $this->getStepType($this->getActiveStep());
         $index = $this->getActiveStepIndex();
         $navParam = new TWizardNavigationEventParameter($index);
         if ($sender instanceof \Prado\Web\UI\IButtonControl && $sender->getCausesValidation() && ($page = $this->getPage()) !== null && !$page->getIsValid()) {
             $navParam->setCancelNavigation(true);
         }
         $handled = false;
         $movePrev = false;
         $this->_activeStepIndexSet = false;
         if (strcasecmp($command, self::CMD_NEXT) === 0) {
             if ($type !== self::ST_START && $type !== self::ST_STEP) {
                 throw new TInvalidDataValueException('wizard_command_invalid', self::CMD_NEXT);
             }
             if ($index < $this->getWizardSteps()->getCount() - 1) {
                 $navParam->setNextStepIndex($index + 1);
             }
             $this->onNextButtonClick($navParam);
             $handled = true;
         } else {
             if (strcasecmp($command, self::CMD_PREVIOUS) === 0) {
                 if ($type !== self::ST_FINISH && $type !== self::ST_STEP) {
                     throw new TInvalidDataValueException('wizard_command_invalid', self::CMD_PREVIOUS);
                 }
                 $movePrev = true;
                 if (($prevIndex = $this->getPreviousStepIndex(false)) >= 0) {
                     $navParam->setNextStepIndex($prevIndex);
                 }
                 $this->onPreviousButtonClick($navParam);
                 $handled = true;
             } else {
                 if (strcasecmp($command, self::CMD_COMPLETE) === 0) {
                     if ($type !== self::ST_FINISH) {
                         throw new TInvalidDataValueException('wizard_command_invalid', self::CMD_COMPLETE);
                     }
                     if ($index < $this->getWizardSteps()->getCount() - 1) {
                         $navParam->setNextStepIndex($index + 1);
                     }
                     $this->onCompleteButtonClick($navParam);
                     $handled = true;
                 } else {
                     if (strcasecmp($command, self::CMD_MOVETO) === 0) {
                         if ($this->_cancelNavigation) {
                             // may be set in onSideBarButtonClick
                             $navParam->setCancelNavigation(true);
                         }
                         $requestedStep = $param->getCommandParameter();
                         if (!is_numeric($requestedStep)) {
                             $requestedIndex = -1;
                             foreach ($this->getWizardSteps() as $index => $step) {
                                 if ($step->getId() === $requestedStep) {
                                     $requestedIndex = $index;
                                     break;
                                 }
                             }
                             if ($requestedIndex < 0) {
                                 throw new TConfigurationException('wizard_step_invalid');
                             }
                         } else {
                             $requestedIndex = TPropertyValue::ensureInteger($requestedStep);
                         }
                         $navParam->setNextStepIndex($requestedIndex);
                         $handled = true;
                     }
                 }
             }
         }
         if ($handled) {
             if (!$navParam->getCancelNavigation()) {
                 $nextStepIndex = $navParam->getNextStepIndex();
                 if (!$this->_activeStepIndexSet && $this->allowNavigationToStep($nextStepIndex)) {
                     if ($movePrev) {
                         $this->getPreviousStepIndex(true);
                     }
                     // pop out the previous move from history
                     $this->setActiveStepIndex($nextStepIndex);
                 }
             } else {
                 $this->setActiveStepIndex($index);
             }
             return true;
         }
     }
     return false;
 }