| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- <?php
- /**
- * The control file of personnel of ZenTaoPMS.
- *
- * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
- * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Chunsheng Wang <chunsheng@cnezsoft.com>
- * @package personnel
- * @version $Id$
- * @link https://www.zentao.net
- */
- class personnel extends control
- {
- /**
- * 获取可访问人员列表。
- * Get a list of people who can be accessed.
- *
- * @param int $programID
- * @param int $deptID
- * @param string $browseType
- * @param int $param
- * @param int $recTotal
- * @param int $recPerPage
- * @param int $pageID
- * @access public
- * @return void
- */
- public function accessible($programID = 0, $deptID = 0, $browseType = 'browse', $param = 0, $recTotal = 0, $recPerPage = 15, $pageID = 1)
- {
- common::setMenuVars('program', $programID);
- $this->app->loadLang('user');
- $program = $this->loadMOdel('program')->getByID($programID);
- /* Build the search form. */
- $queryID = $browseType == 'bysearch' ? (int)$param : 0;
- $actionURL = $this->createLink('personnel', 'accessible', "pargramID={$programID}&deptID={$deptID}&browseType=bysearch&quertID=myQueryID");
- $this->config->personnel->accessible->search['params']['role']['values'] = $this->lang->user->roleList;
- $this->config->personnel->accessible->search['params']['gender']['values'] = $this->lang->user->genderList;
- $this->personnel->buildSearchForm($queryID, $actionURL);
- /* Get personnel list. */
- $personnelList = $this->personnel->getAccessiblePersonnel($programID, $deptID, $browseType, $queryID);
- /* Set the pager. */
- $this->app->loadClass('pager', true);
- $recTotal = count($personnelList);
- $pager = new pager($recTotal, $recPerPage, $pageID);
- $personnelList = array_chunk($personnelList, $pager->recPerPage);
- $this->view->title = $this->lang->personnel->accessible;
- $this->view->deptID = $deptID;
- $this->view->programID = $programID;
- $this->view->acl = $program->acl;
- $this->view->recTotal = $recTotal;
- $this->view->recPerPage = $recPerPage;
- $this->view->pageID = $pageID;
- $this->view->pager = $pager;
- $this->view->param = $param;
- $this->view->browseType = $browseType;
- $this->view->personnelList = empty($personnelList) ? $personnelList : $personnelList[$pageID - 1];
- $this->view->deptList = $this->loadModel('dept')->getOptionMenu();
- $this->view->dept = $this->dept->getByID($deptID);
- $this->view->deptTree = $this->dept->getTreeMenu(0, array(new personnelModel, 'createMemberLink'), $programID);
- $this->display();
- }
- /**
- * 投入人员列表。
- * Access to investable personnel.
- *
- * @param int $browseType
- * @access public
- * @return void
- * @param int $programID
- */
- public function invest($programID = 0)
- {
- common::setMenuVars('program', $programID);
- $this->app->loadLang('user');
- $this->view->title = $this->lang->personnel->invest;
- $this->view->investList = $this->personnel->getInvest($programID);
- $this->view->programID = $programID;
- $this->display();
- }
- /**
- * 白名单人员列表。
- * White list personnel.
- *
- * @param int $objectID
- * @param string $module personnel|program|project|product
- * @param string $objectType program|project|product|sprint
- * @param string $orderby
- * @param int $recTotal
- * @param int $recPerPage
- * @param int $pageID
- * @param int $programID
- * @param string $from project|program|programproject
- * @access public
- * @return void
- * @param string $orderBy
- */
- public function whitelist($objectID = 0, $module = 'personnel', $objectType = 'program', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1, $programID = 0, $from = '')
- {
- if($this->app->tab == 'program') common::setMenuVars('program', $objectID);
- /* Load lang and set session. */
- $this->app->loadLang('user');
- $this->app->session->set('whitelistList', $this->app->getURI(true), $this->app->tab);
- /* Load pager. */
- $this->app->loadClass('pager', true);
- $pager = pager::init($recTotal, $recPerPage, $pageID);
- /* Set back link. */
- $goback = $this->session->projectList ? $this->session->projectList : $this->createLink('program', 'whitelist', "projectID=$objectID");
- if($from == 'program') $goback = $this->createLink('program', 'browse');
- if($from == 'programproject') $goback = $this->session->programProject ? $this->session->programProject : $this->createLink('program', 'project', "programID={$programID}");
- $this->view->title = $this->lang->personnel->whitelist;
- $this->view->pager = $pager;
- $this->view->objectID = $objectID;
- $this->view->objectType = $objectType;
- $this->view->whitelist = $this->personnel->getWhitelist($objectID, $objectType, $orderBy, $pager);
- $this->view->depts = $this->loadModel('dept')->getOptionMenu();
- $this->view->module = $module;
- $this->view->goback = $goback;
- $this->view->from = $from;
- /* Set object. */
- if($this->app->tab == 'execution') $objectType = 'execution';
- $dropMenuObjectID = $objectType . 'ID';
- $this->view->{$dropMenuObjectID} = $objectID;
- $this->view->projectProgramID = $programID;
- $this->display();
- }
- /**
- * 增加人员到白名单。
- * Adding users to the white list.
- *
- * @param int $objectID
- * @param int $deptID
- * @param int $copyID
- * @param string $objectType program|project|product|sprint
- * @param string $module
- * @param int $programID
- * @param string $from project|program|programproject
- * @access public
- * @return void
- */
- public function addWhitelist($objectID = 0, $deptID = 0, $copyID = 0, $objectType = 'program', $module = 'personnel', $programID = 0, $from = '')
- {
- if($this->app->tab == 'program') common::setMenuVars('program', $objectID);
- if($_POST)
- {
- $formData = form::batchData($this->config->personnel->form->addWhitelist)->get();
- $whitelist = array();
- foreach($formData as $object) $whitelist[] = $object->account;
- $this->personnel->updateWhitelist($whitelist, $objectType, $objectID);
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => $this->getError()));
- if($objectType == 'project')
- {
- $shadowProduct = $this->loadModel('product')->getShadowProductByProject($objectID);
- if($shadowProduct) $this->personnel->updateWhitelist($whitelist, 'product', $shadowProduct->id);
- }
- $this->loadModel('action')->create('whitelist', $objectID, 'managedWhitelist', '', $objectType);
- $locateLink = $this->createLink($module, 'whitelist', "objectID=$objectID");
- $tab = $module == 'program' ? ($from == 'project' || $from == 'my' ? '#open=project' : '#open=program') : '';
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink . $tab));
- }
- $this->loadModel('dept');
- $deptUsers = empty($deptID) ? array() : $this->dept->getDeptUserPairs($deptID);
- $copyObjectType = $objectType;
- if($copyObjectType == 'sprint')
- {
- $object = $this->loadModel('project')->getByID($copyID);
- if(!empty($object->type) && $object->type == 'project') $copyObjectType = 'project';
- }
- $copyUsers = empty($copyID) ? array() : $this->personnel->getWhitelistAccount($copyID, $copyObjectType);
- $appendUsers = array_unique($deptUsers + $copyUsers);
- $this->personnelZen->setSelectObjectTips($objectID, $objectType, $module);
- $this->view->title = $this->lang->personnel->addWhitelist;
- $this->view->objectID = $objectID;
- $this->view->objectType = $objectType;
- $this->view->objects = $this->personnel->getCopiedObjects($objectID, $objectType);
- $this->view->module = $module;
- $this->view->deptID = $deptID;
- $this->view->appendUsers = $appendUsers;
- $this->view->whitelist = $this->personnel->getWhitelist($objectID, $objectType);
- $this->view->depts = $this->dept->getOptionMenu();
- $this->view->users = $this->loadModel('user')->getPairs('noclosed|nodeleted');
- $this->view->dept = $this->dept->getByID($deptID);
- $this->view->programID = $programID;
- $this->view->from = $from;
- $this->view->copyID = $copyID;
- $this->display();
- }
- /*
- * 从白名单中移除人员。
- * Removing users from the white list.
- *
- * @param int $id
- * @access public
- * @return void
- */
- /**
- * @param int $id
- */
- public function unbindWhitelist($id = 0)
- {
- $acl = $this->dao->select('*')->from(TABLE_ACL)->where('id')->eq($id)->fetch();
- if(empty($acl)) return $this->send(array('result' => 'success', 'load' => true));
- $this->personnel->unbindWhitelist($acl);
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => $this->getError()));
- /* Delete program and project white list. */
- if($acl->objectType == 'product')
- {
- $product = $this->loadModel('product')->getByID($acl->objectID);
- if($product->program) $this->personnel->deleteProgramWhitelist($product->program, $acl->account);
- }
- if($acl->objectType == 'sprint') $this->personnel->deleteProjectWhitelist($acl->objectID, $acl->account);
- /* Update user view, and log actions. */
- $this->loadModel('user')->updateUserView(array($acl->objectID), $acl->objectType, array($acl->account));
- $this->loadModel('action')->create('whitelist', $acl->objectID, 'managedWhitelist', '', $acl->objectType);
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => true));
- }
- }
|