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); }