示例#1
0
文件: Steps.php 项目: knatorski/SMS
 /** zagnieżdża proces za aktualnie wykonywanym krokiem
  *
  * uwaga w tej chwili istnieje możliwość zagnieżdżania procesów tylko w głównym procesie,
  * jeżeli kiedyś zajdzie taka potrzeba należy dorobić funkcjonalność zagnieżdzania procesów w głąb o więcej niż 1 stopień
  *
  * @param string $processName
  */
 public function includeProcessAfterActualStep($processName)
 {
     $model = new Process();
     $row = $model->fetchRow($model->select()->where('process_name = ?', $processName));
     if (is_null($row)) {
         throw new Exception('Nie znaleziono procesu o takiej nazwie');
     }
     $row = $row->toArray();
     $processId = $row['id'];
     $processDescription = $row['description'];
     $model = new ProcessSteps();
     $rowset = $model->fetchAll($model->select()->where('process_id = ?', $processId)->order('step_order'));
     if (is_null($rowset)) {
         throw new Exception('Nie znaleziono żadnych kroków przypisanych do tego procesu');
     }
     $rowset = $rowset->toArray();
     // jeżeli jesteśmy w głównym procesie
     if ($this->actualProcesName == $this->generalProcesName) {
         // budowana nowa tablica kroków z zagnieżdzonym procesem
         $newStepsArray = array();
         for ($i = 0; $i <= $this->actualStep; $i++) {
             $newStepsArray[] = $this->sessionNamespace->stepArray[$i];
         }
         $includedProcessArray = array(self::INCLUDED_PROCESS => true, 'processName' => $processName, 'description' => $processDescription, 'done' => false, 'stepArray' => array());
         foreach ($rowset as $stepRow) {
             $tmpArray = array('action_name' => $stepRow['action'], 'controller' => $stepRow['controller'], 'description' => $stepRow['description'], 'done' => false);
             $includedProcessArray['stepArray'][] = $tmpArray;
         }
         $newStepsArray[] = $includedProcessArray;
         for ($i = $this->actualStep + 1; $i < count($this->sessionNamespace->stepArray); $i++) {
             $newStepsArray[] = $this->sessionNamespace->stepArray[$i];
         }
         $this->sessionNamespace->stepArray = $newStepsArray;
         $this->setStepsToView();
     } else {
         // @to_do zrobić możliwość zagnieżdżania procesów w głąb więcej niż o jeden!
         throw new Exception('Nie można zagnieżdżać procesów więcej niż 1 w głąb');
     }
 }
示例#2
0
文件: Action.php 项目: knatorski/SMS
 public function __call($methodName, $args)
 {
     // jeżeli nie używać kolejki kroków
     if (!Base_Controller_Action_Helper_Steps::getUseSteps()) {
         return parent::__call($methodName, $args);
     }
     // jeżeli akcja nie jest akcją inicjującą proces
     if (substr($methodName, -13, 7) != 'Process' || substr($methodName, -6) != 'Action') {
         return parent::__call($methodName, $args);
     }
     $stepsHelper = $this->_helper->getHelper('steps');
     $processName = substr($methodName, 0, -13);
     // jeżeli akcja zamykająca proces, zakończ proces i przekieruj na wyszukiwanie
     if ($processName == 'stop') {
         $ownerAction = $stepsHelper->getOwnerAction();
         $this->_helper->messenger->error("Proces '" . $stepsHelper->getGeneralProcesDesc() . "' został anulowany");
         $stepsHelper->closeStepsQueue();
         $redirector = $this->_helper->getHelper('Redirector');
         $redirector->setExit(true);
         if ($ownerAction === false || !is_array($ownerAction)) {
             $this->_helper->redirector('index', 'index', null, array());
         } else {
             $this->_helper->redirector($ownerAction['action'], $ownerAction['controller'], null, $ownerAction['params']);
         }
         return;
     }
     // jeżeli jesteśmy w kolejce kroków
     if ($stepsHelper->isStepsQueue()) {
         // jeżeli wywołany proces jest innym procesem niż ten w kolejce
         if ($stepsHelper->getGeneralProcessName() != $processName) {
             $stepsHelper->closeStepsQueue();
             $stepsHelper->initNewProcess($processName);
         }
         // jeżeli kolejka kroków nie istnieje
     } else {
         $model = new Process();
         $row = $model->fetchRow($model->select('id')->where('process_name = ? ', $processName));
         if (is_null($row)) {
             return parent::__call($methodName, $args);
         }
         $stepsHelper->initNewProcess($processName);
     }
     $stepsHelper->forwardToActualStep($this->getRequest()->getParams());
 }