Esempio n. 1
0
 public function prevSave(Tudu_Model_Tudu_Entity_Tudu $tudu, Tudu_Model_Tudu_Entity_Extension_Abstract &$data)
 {
     $steps = $data->getSteps();
     $currentStepId = null;
     // 没有预订流程,按照图度参数生成流程步骤
     if (empty($steps)) {
         $steps = array();
         $orderNum = 1;
         if ($tudu->reviewer) {
             $stepId = Dao_Td_Tudu_Step::getStepId();
             $reviewStep = new Tudu_Model_Tudu_Entity_Step(array('orgid' => $tudu->orgId, 'tuduid' => $tudu->tuduId, 'uniqueid' => $tudu->uniqueId, 'stepid' => $stepId, 'type' => Dao_Td_Tudu_Step::TYPE_EXAMINE, 'prevstepid' => self::NODE_HEAD, 'nextstepid' => self::NODE_END, 'ordernum' => $orderNum++));
             foreach ($tudu->reviewer as $sec) {
                 $reviewStep->addSection($sec);
             }
             $steps[$stepId] = $reviewStep;
             $currentStepId = $stepId;
         }
         if ($tudu->to) {
             $stepId = Dao_Td_Tudu_Step::getStepId();
             $prevId = self::NODE_HEAD;
             if ($currentStepId) {
                 $steps[$currentStepId]->nextStepId = $stepId;
                 $prevId = $currentStepId;
             } else {
                 $currentStepId = $stepId;
             }
             $step = new Tudu_Model_Tudu_Entity_Step(array('orgid' => $tudu->orgId, 'tuduid' => $tudu->tuduId, 'uniqueid' => $tudu->uniqueId, 'stepid' => $stepId, 'type' => $tudu->acceptMode ? Dao_Td_Tudu_Step::TYPE_CLAIM : Dao_Td_Tudu_Step::TYPE_EXECUTE, 'prevstepid' => $prevId, 'nextstepid' => self::NODE_END, 'ordernum' => $orderNum++));
             $sec = array();
             foreach ($tudu->to as $user) {
                 $sec[] = $user;
             }
             $step->addSection($sec);
             $steps[$stepId] = $step;
         }
     } else {
         $from = explode(' ', $tudu->target);
         $prevUsers = array(array('email' => $from[0], 'truename' => $from[1]));
         $addressBook = Tudu_AddressBook::getInstance();
         foreach ($steps as $step) {
             $users = $step->getAttribute('users');
             // 解析步骤人员
             if (is_string($users)) {
                 if (0 === strpos($users, '^')) {
                     foreach ($prevUsers as $u) {
                         $u = $addressBook->searchUser($tudu->orgId, $u['email']);
                         $sections = $this->_getHeigherUsers($u['email'], $tudu->orgId, $u['deptid'] === null ? '^root' : $u['deptid'], $users == '^uppers');
                         if (null === $sections) {
                             require_once 'Tudu/Model/Tudu/Exception.php';
                             throw new Tudu_Model_Tudu_Exception('Missing flow steps upper reviewer');
                         }
                     }
                 } else {
                     $sections = $this->parseStepUsers($steps, $users);
                 }
             }
             $step->setAttribute('tuduid', $tudu->tuduId);
             $step->setAttribute('orgid', $tudu->orgId);
             foreach ($sections as $section) {
                 $step->addSection($section);
             }
             $prevUsers = array_pop($sections);
         }
     }
     $data->setAttribute('flowsteps', $steps);
 }