* @package user * @version $Id$ * @link http://www.zentao.net */ class user extends control { private $referer; /** * Construct * * @access public * @return void */ public function __construct() { parent::__construct(); $this->loadModel('company')->setMenu(); $this->loadModel('dept'); } /** * View a user. * * @param string $account * @access public * @return void */ public function view($account) { $this->locate($this->createLink('user', 'todo', "account=$account")); } /** * Todos of a user. * * @param string $account * @param string $type the tod type, today|lastweek|thisweek|all|undone, or a date. * @param string $status * @access public * @return void */ public function todo($account, $type = 'today', $status = 'all') { /* Set thie url to session. */ $uri = $this->app->getURI(true); $this->session->set('todoList', $uri); $this->session->set('bugList', $uri); $this->session->set('taskList', $uri); /* set menus. */ $this->lang->set('menugroup.user', 'company'); $this->user->setMenu($this->user->getPairs('noempty|noclosed'), $account); /* Get user, totos. */ $user = $this->dao->findByAccount($account)->from(TABLE_USER)->fetch(); $todos = $this->loadModel('todo')->getList($type, $account, $status); $date = (int)$type == 0 ? $this->todo->today() : $type; $header['title'] = $this->lang->company->orgView . $this->lang->colon . $this->lang->user->todo; $position[] = $this->lang->user->todo; $this->view->header = $header; $this->view->position = $position; $this->view->tabID = 'todo'; $this->view->dates = $this->todo->buildDateList(); $this->view->date = $date; $this->view->todos = $todos; $this->view->user = $user; $this->view->account = $account; $this->view->type = $type; $this->display(); } /** * Taskes of a user. * * @param string $account * @access public * @return void */ public function task($account) { /* Save the session. */ $this->session->set('taskList', $this->app->getURI(true)); /* Set the menu. */ $this->lang->set('menugroup.user', 'company'); $this->user->setMenu($this->user->getPairs('noempty|noclosed'), $account); /* Assign. */ $header['title'] = $this->lang->user->common . $this->lang->colon . $this->lang->user->task; $position[] = $this->lang->user->task; $this->view->header = $header; $this->view->position = $position; $this->view->tabID = 'task'; $this->view->tasks = $this->loadModel('task')->getUserTasks($account); $this->view->user = $this->dao->findByAccount($account)->from(TABLE_USER)->fetch(); $this->display(); } /** * User bugs. * * @param string $account * @access public * @return void */ public function bug($account) { /* Save the session. */ $this->session->set('bugList', $this->app->getURI(true)); /* Set menu. */ $this->lang->set('menugroup.user', 'company'); $this->user->setMenu($this->user->getPairs('noempty|noclosed'), $account); /* Load the lang of bug module. */ $this->app->loadLang('bug'); $header['title'] = $this->lang->user->common . $this->lang->colon . $this->lang->user->bug; $position[] = $this->lang->user->bug; $this->view->header = $header; $this->view->position = $position; $this->view->tabID = 'bug'; $this->view->bugs = $this->user->getBugs($account); $this->view->user = $this->dao->findByAccount($account)->from(TABLE_USER)->fetch(); $this->view->users = $this->user->getPairs('noletter'); $this->display(); } /** * User projects. * * @param string $account * @access public * @return void */ public function project($account) { /* Set the menus. */ $this->loadModel('project'); $this->lang->set('menugroup.user', 'company'); $this->user->setMenu($this->user->getPairs('noempty|noclosed'), $account); $header['title'] = $this->lang->user->common . $this->lang->colon . $this->lang->user->project; $position[] = $this->lang->user->project; $this->view->header = $header; $this->view->position = $position; $this->view->tabID = 'project'; $this->view->projects = $this->user->getProjects($account); $this->view->user = $this->dao->findByAccount($account)->from(TABLE_USER)->fetch(); $this->display(); } /** * The profile of a user. * * @param string $account * @access public * @return void */ public function profile($account) { $header['title'] = $this->lang->user->common . $this->lang->colon . $this->lang->user->profile; $position[] = $this->lang->user->profile; /* Set menu. */ $this->user->setMenu($this->user->getPairs('noempty|noclosed'), $account); $user = $this->user->getById($account); $deptPath = $this->dept->getParents($user->dept); $this->view->header = $header; $this->view->position = $position; $this->view->user = $user; $this->view->deptPath = $deptPath; $this->display(); } /** * Set the rerferer. * * @param string $referer * @access private * @return void */ private function setReferer($referer = '') { if(!empty($referer)) { $this->referer = helper::safe64Decode($referer); } else { $this->referer = $this->server->http_referer ? $this->server->http_referer: ''; } $this->referer = htmlspecialchars($this->referer); } /** * Create a suer. * * @param int $deptID * @access public * @return void */ public function create($deptID = 0) { $this->lang->set('menugroup.user', 'company'); $this->lang->user->menu = $this->lang->company->menu; if(!empty($_POST)) { $this->user->create(); if(dao::isError()) die(js::error(dao::getError())); die(js::locate($this->createLink('company', 'browse'), 'parent')); } $header['title'] = $this->lang->company->common . $this->lang->colon . $this->lang->user->create; $position[] = $this->lang->user->create; $this->view->header = $header; $this->view->position = $position; $this->view->depts = $this->dept->getOptionMenu(); $this->view->deptID = $deptID; $this->display(); } /** * Edit a user. * * @param string|int $userID the int user id or account * @access public * @return void */ public function edit($userID) { $this->lang->set('menugroup.user', 'company'); $this->lang->user->menu = $this->lang->company->menu; if(!empty($_POST)) { $this->user->update($userID); if(dao::isError()) die(js::error(dao::getError())); die(js::locate($this->createLink('company', 'browse'), 'parent')); } $header['title'] = $this->lang->company->common . $this->lang->colon . $this->lang->user->edit; $position[] = $this->lang->user->edit; $this->view->header = $header; $this->view->position = $position; $this->view->user = $this->user->getById($userID); $this->view->depts = $this->dept->getOptionMenu(); $this->display(); } /** * Delete a user. * * @param int $userID * @param string $confirm yes|no * @access public * @return void */ public function delete($userID, $confirm = 'no') { if($confirm == 'no') { die(js::confirm($this->lang->user->confirmDelete, $this->createLink('user', 'delete', "userID=$userID&confirm=yes"))); } else { $this->user->delete(TABLE_USER, $userID); die(js::locate($this->createLink('company', 'browse'), 'parent')); } } /** * User login, identify him and authorize him. * * @access public * @return void */ public function login($referer = '', $from = '') { $this->setReferer($referer); $loginLink = $this->createLink('user', 'login'); $denyLink = $this->createLink('user', 'deny'); /* If user is logon, back to the rerferer. */ if($this->user->isLogon()) { if(strpos($this->referer, $loginLink) === false and strpos($this->referer, $denyLink) === false and strpos($this->referer, $this->app->company->pms) !== false ) { $this->locate($this->referer); } else { $this->locate($this->createLink($this->config->default->module)); } } /* Passed account and password by post or get. */ if(!empty($_POST) or (isset($_GET['account']) and isset($_GET['password']))) { $account = ''; $password = ''; if($this->post->account) $account = $this->post->account; if($this->get->account) $account = $this->get->account; if($this->post->password) $password = $this->post->password; if($this->get->password) $password = $this->get->password; $user = $this->user->identify($account, $password); if($user) { /* Authorize him and save to session. */ $user->rights = $this->user->authorize($account); $this->session->set('user', $user); $this->app->user = $this->session->user; $this->loadModel('action')->create('user', $user->id, 'login'); /* Keep login. */ if($this->post->keepLogin) $this->user->keepLogin($user); /* Go to the referer. */ if($this->post->referer and strpos($this->post->referer, $loginLink) === false and strpos($this->post->referer, $denyLink) === false ) { if($this->app->getViewType() == 'json') die(json_encode(array('status' => 'success'))); if($this->config->requestType == 'PATH_INFO') { $path = substr($this->post->referer, strrpos($this->post->referer, '/')+1); $path = rtrim($path, 'html'); $path = rtrim($path, '.'); list($module, $method) = explode($this->config->requestFix, $path); } else { $module = $this->get->m; $method = $this->get->f; } if(common::hasPriv($module, $method)) die(js::locate($this->post->referer, 'parent')); else die(js::locate($this->config->default->module, 'parent')); } else { if($this->app->getViewType() == 'json') die(json_encode(array('status' => 'success'))); die(js::locate($this->createLink($this->config->default->module), 'parent')); } } else { if($this->app->getViewType() == 'json') die(json_encode(array('status' => 'failed'))); die(js::error($this->lang->user->loginFailed)); } } else { $header['title'] = $this->lang->user->login; $this->view->header = $header; $this->view->referer = $this->referer; $this->view->s = $this->loadModel('setting')->getItem('system', 'global', 'sn'); $this->view->keepLogin = $this->cookie->keepLogin ? $this->cookie->keepLogin : 'off'; $this->display(); } } /** * Deny page. * * @param string $module * @param string $method * @param string $refererBeforeDeny the referer of the denied page. * @access public * @return void */ public function deny($module, $method, $refererBeforeDeny = '') { $this->setReferer(); $header['title'] = $this->lang->user->deny; $this->view->header = $header; $this->view->module = $module; $this->view->method = $method; $this->view->denyPage = $this->referer; // The denied page. $this->view->refererBeforeDeny = $refererBeforeDeny; // The referer of the denied page. $this->app->loadLang($module); $this->app->loadLang('index'); $this->display(); exit; } /** * Logout. * * @access public * @return void */ public function logout($referer = 0) { $this->loadModel('action')->create('user', $this->app->user->id, 'logout'); session_destroy(); setcookie('za', false); setcookie('zp', false); $vars = !empty($referer) ? "referer=$referer" : ''; $this->locate($this->createLink('user', 'login', $vars)); } }