| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- <?php
- class stakeholder extends control
- {
- /**
- * 干系人列表页面。
- * Stakeholder list.
- *
- * @param int $projectID
- * @param string $browseType all|inside|outside|key
- * @param string $orderBy
- * @param int $recTotal
- * @param int $recPerPage
- * @param int $pageID
- * @access public
- * @return void
- */
- public function browse($projectID, $browseType = 'all', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
- {
- $this->app->loadLang('user');
- $projectID = $this->loadModel('project')->setMenu($projectID);
- if(!$projectID) return $this->locate($this->createLink('project', 'browse'));
- /* Get stake holders list. */
- $this->app->loadClass('pager', true);
- $pager = pager::init($recTotal, $recPerPage, $pageID);
- $stakeholders = $this->stakeholder->getStakeholders($projectID, $browseType, $orderBy, $pager);
- /* Save SQL to session for previous and next buttons on the stakeholder detail page. */
- $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'stakeholder');
- $this->view->title = $this->lang->stakeholder->browse;
- $this->view->pager = $pager;
- $this->view->recTotal = $recTotal;
- $this->view->recPerPage = $recPerPage;
- $this->view->pageID = $pageID;
- $this->view->projectID = $projectID;
- $this->view->orderBy = $orderBy;
- $this->view->browseType = $browseType;
- $this->view->stakeholders = $stakeholders;
- $this->display();
- }
- /**
- * 创建一个干系人。
- * Create a stakeholder.
- *
- * @param int objectID
- * @access public
- * @return void
- */
- public function create($objectID = 0)
- {
- if($_POST)
- {
- if($this->post->from != 'outside') $this->config->stakeholder->create->requiredFields .= ',user';
- if($this->post->from == 'outside' && $this->post->newUser)
- {
- $this->config->stakeholder->create->requiredFields .= $this->post->newCompany ? ',companyName' : ',company';
- }
- $stakeholderData = form::data()->setDefault('objectID', $objectID)->get();
- $stakeholderID = $this->stakeholder->create($stakeholderData);
- if(!$stakeholderID || dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- $this->loadModel('action')->create('stakeholder', $stakeholderID, 'added');
- if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $stakeholderID));
- $moduleName = $this->app->tab == 'program' ? 'program' : $this->moduleName;
- $methodName = $this->app->tab == 'program' ? 'stakeholder' : 'browse';
- $param = $this->app->tab == 'program' ? "programID=$objectID" : "projectID=$objectID";
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $this->createLink($moduleName, $methodName, $param)));
- }
- $members = array();
- if($this->app->tab == 'program')
- {
- common::setMenuVars('program', $objectID);
- $members = $this->loadModel('program')->getTeamMemberPairs($objectID);
- }
- else
- {
- $this->loadModel('project')->setMenu($objectID);
- $members = $this->loadModel('user')->getTeamMemberPairs($objectID, 'project');
- }
- $stakeholders = $this->loadModel('stakeholder')->getStakeHolderPairs($objectID);
- foreach($members as $account => $realname)
- {
- if(isset($stakeholders[$account])) unset($members[$account]);
- }
- $this->view->title = $this->lang->stakeholder->create;
- $this->view->companys = $this->loadModel('company')->getOutsideCompanies();
- $this->view->programID = $this->app->tab == 'program' ? $objectID : 0;
- $this->view->projectID = $this->app->tab == 'project' ? $objectID : 0;
- $this->view->members = $members;
- $this->view->objectID = $objectID;
- $this->display();
- }
- /**
- * 批量创建干系人页面。
- * Batch create stakeholders.
- *
- * @param int $projectID
- * @param string $dept
- * @param int $parentID
- * @access public
- * @return void
- */
- public function batchCreate($projectID, $dept = '', $parentID = 0)
- {
- if($_POST)
- {
- $stakeholderList = $this->stakeholder->batchCreate($projectID, $_POST['accounts']);
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $stakeholderList));
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $this->createLink('stakeholder', 'browse', "projectID=$projectID")));
- }
- if($this->app->tab == 'program')
- {
- common::setMenuVars('program', $projectID);
- }
- else
- {
- $this->loadModel('project')->setMenu($projectID);
- }
- $this->loadModel('dept');
- $this->loadModel('execution');
- $this->view->title = $this->lang->stakeholder->batchCreate;
- $this->view->project = $this->loadModel('project')->getByID($this->session->project);
- $this->view->users = $this->loadModel('user')->getPairs('all|nodeleted|noclosed');
- $this->view->deptUsers = $dept === '' ? array() : $this->dept->getDeptUserPairs((int)$dept);
- $this->view->dept = $dept;
- $this->view->projectID = $projectID;
- $this->view->depts = $this->dept->getOptionMenu();
- $this->view->stakeholders = $this->stakeholder->getStakeholders($projectID, 'all', 'id_desc');
- $this->view->parentStakeholders = $this->loadModel('program')->getStakeholders($parentID, 't1.id_desc');
- $this->display();
- }
- /**
- * 编辑一个干系人。
- * Edit a stakeholder.
- *
- * @param int $stakeholderID
- * @access public
- * @return void
- */
- public function edit($stakeholderID = 0)
- {
- $stakeholder = $this->stakeholder->getByID($stakeholderID);
- $this->loadModel('project')->setMenu($stakeholder->objectID);
- if($_POST)
- {
- $postData = form::data()->get();
- $changes = $this->stakeholder->edit($stakeholderID, $postData);
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- $actionID = $this->loadModel('action')->create('stakeholder', $stakeholderID, 'Edited');
- $this->action->logHistory($actionID, $changes);
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $this->createLink('stakeholder', 'browse', "projectID={$stakeholder->objectID}")));
- }
- $users = array();
- if($stakeholder->from == 'team') $users = $this->loadModel('user')->getTeamMemberPairs($this->session->project, 'project');
- if($stakeholder->from == 'company')
- {
- $members = $this->loadModel('user')->getTeamMemberPairs($this->session->project, 'project');
- $users = $this->user->getPairs('noclosed');
- $users = array_diff($users, $members);
- }
- if($stakeholder->objectType == 'project') $this->view->projectID = $stakeholder->objectID;
- $this->view->title = $this->lang->stakeholder->edit;
- $this->view->stakeholder = $stakeholder;
- $this->view->users = $users;
- $this->view->companys = $this->loadModel('company')->getOutsideCompanies();
- $this->display();
- }
- /**
- * Ajax:获取项目集或项目的团队成员。
- * Ajax: Get team members of the program or project.
- *
- * @param int $programID
- * @param int $projectID
- * @access public
- * @return void
- */
- public function ajaxGetMembers($programID = 0, $projectID = 0)
- {
- if($programID)
- {
- $members = $this->loadModel('program')->getTeamMemberPairs($programID);
- }
- else
- {
- $members = $this->loadModel('user')->getTeamMemberPairs($projectID, 'project');
- }
- $stakeholders = $this->loadModel('stakeholder')->getStakeHolderPairs($programID ? $programID : $projectID);
- foreach($members as $account => $realname)
- {
- if(isset($stakeholders[$account])) unset($members[$account]);
- }
- $items = array();
- foreach($members as $account => $realname) $items[] = array('value' => $account, 'text' => $realname, 'keys' => $realname);
- return print(json_encode($items));
- }
- /**
- * Ajax:获取公司用户。
- * Ajax: Get company user.
- *
- * @param int $programID
- * @param int $projectID
- * @access public
- * @return void
- */
- public function ajaxGetCompanyUser($programID = 0, $projectID = 0)
- {
- if($programID)
- {
- $members = $this->loadModel('program')->getTeamMemberPairs($programID);
- }
- else
- {
- $members = $this->loadModel('user')->getTeamMemberPairs($projectID, 'project');
- }
- $users = $this->loadModel('user')->getPairs('noclosed');
- $companyUsers = array_diff($users, $members);
- $stakeholders = $this->loadModel('stakeholder')->getStakeHolderPairs($programID ? $programID : $projectID);
- foreach($companyUsers as $account => $realname)
- {
- if(isset($stakeholders[$account])) unset($companyUsers[$account]);
- }
- $userItems = array();
- foreach($companyUsers as $account => $realname) $userItems[] = array('text' => $realname, 'value' => $account);
- return print(json_encode($userItems));
- }
- /**
- * Ajax:获取外部用户。
- * Ajax: Get outside user.
- *
- * @access public
- * @return void
- * @param int $objectID
- */
- public function ajaxGetOutsideUser($objectID = 0)
- {
- $users = $this->loadModel('user')->getPairs('noclosed|outside|noletter');
- $stakeholders = $this->loadModel('stakeholder')->getStakeHolderPairs($objectID);
- foreach($users as $account => $realname)
- {
- if(isset($stakeholders[$account])) unset($users[$account]);
- }
- $items = array();
- foreach($users as $account => $realname) $items[] = array('text' => $realname, 'value' => $account);
- return print(json_encode($items));
- }
- /**
- * 删除一个干系人。
- * Deleted user.
- *
- * @access public
- * @param int $userID
- * @return void
- */
- public function delete($userID)
- {
- $stakeholder = $this->stakeholder->getByID($userID);
- $this->stakeholder->delete(TABLE_STAKEHOLDER, $userID);
- $project = $this->session->project ? array($this->session->project) : array();
- $this->loadModel('user')->updateUserView($project, 'project', array($stakeholder->user));
- /* Update linked products view. */
- if($stakeholder->objectType == 'project' && $stakeholder->objectID)
- {
- $this->loadModel('project')->updateInvolvedUserView($stakeholder->objectID, array($stakeholder->user));
- }
- return $this->send(array('result' => 'success', 'load' => true));
- }
- /**
- * 查看干系人详情。
- * View stakeholder detail.
- *
- * @access public
- * @param int $stakeholderID
- * @return void
- */
- public function view($stakeholderID = 0)
- {
- $stakeholder = $this->stakeholder->getByID($stakeholderID);
- $this->loadModel('project')->setMenu($stakeholder->objectID);
- $this->commonAction($stakeholderID, 'stakeholder');
- if($stakeholder->objectType == 'project') $this->view->projectID = $stakeholder->objectID;
- $this->view->title = $this->lang->stakeholder->common . $this->lang->hyphen . $this->lang->stakeholder->view;
- $this->view->user = $stakeholder;
- $this->view->users = $this->loadModel('user')->getTeamMemberPairs($this->session->project, 'project', 'nodeleted');
- $this->view->expects = $this->stakeholder->getExpectByUser($stakeholderID);
- $this->display();
- }
- /**
- * 添加沟通记录。
- * Add communication record.
- *
- * @access public
- * @param int $stakeholderID
- * @return void
- */
- public function communicate($stakeholderID)
- {
- if(!empty($_POST))
- {
- $data = form::data()->get();
- $this->loadModel('action')->create('stakeholder', $stakeholderID, 'communicate', $data->comment);
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- return $this->send(array('result' => 'success', 'closeModal' => true));
- }
- $this->commonAction($stakeholderID, 'stakeholder');
- $this->view->title = $this->lang->stakeholder->common . $this->lang->hyphen . $this->lang->stakeholder->communicate;
- $this->view->user = $this->stakeholder->getByID($stakeholderID);
- $this->view->objectID = $stakeholderID;
- $this->view->users = $this->loadModel('user')->getTeamMemberPairs($this->view->user->objectID, 'project', 'nodeleted');
- $this->display();
- }
- /**
- * 添加期望记录。
- * Add expect record.
- *
- * @access public
- * @param int $stakeholderID
- * @return void
- */
- public function expect($stakeholderID)
- {
- if(!empty($_POST))
- {
- $expectData = form::data()
- ->add('userID', $stakeholderID)
- ->add('createdBy', $this->app->user->account)
- ->add('createdDate', helper::now())
- ->add('project', $this->session->project)
- ->get();
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- $this->stakeholder->expect($expectData);
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- return $this->send(array('result' => 'success', 'closeModal' => true));
- }
- $this->view->title = $this->lang->stakeholder->common . $this->lang->hyphen . $this->lang->stakeholder->communicate;
- $this->view->user = $this->stakeholder->getByID($stakeholderID);
- $this->display();
- }
- /**
- * 获取干系人的动态。
- * Common actions of stakeholder module.
- *
- * @param int $stakeholderID
- * @access public
- * @return void
- */
- public function commonAction($stakeholderID)
- {
- $this->view->actions = $this->loadModel('action')->getList('stakeholder', $stakeholderID);
- }
- /**
- * 干系人问题列表。
- * Issue list of stakeholder.
- *
- * @param int $stakeholderID
- * @access public
- * @return void
- */
- public function userIssue($stakeholderID)
- {
- $this->loadModel('issue');
- $stakeholder = $this->stakeholder->getByID($stakeholderID);
- $this->view->title = $this->lang->stakeholder->common . $this->lang->hyphen . $this->lang->stakeholder->communicate;
- $this->view->stakeholder = $stakeholder;
- $this->view->projectID = $stakeholder->objectID;
- $this->view->issueList = $this->stakeholder->getStakeholderIssue($stakeholder->user);
- $this->display();
- }
- }
|