978 lines
35 KiB
PHP
978 lines
35 KiB
PHP
<?php
|
|
/**
|
|
* The control file of dashboard module of ZenTaoPMS.
|
|
*
|
|
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
|
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
|
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
|
* @package dashboard
|
|
* @version $Id: control.php 5020 2013-07-05 02:03:26Z wyd621@gmail.com $
|
|
* @link http://www.zentao.net
|
|
*/
|
|
class my extends control
|
|
{
|
|
/**
|
|
* Construct function.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function __construct($module = '', $method = '')
|
|
{
|
|
parent::__construct($module, $method);
|
|
$this->loadModel('user');
|
|
$this->loadModel('dept');
|
|
}
|
|
|
|
/**
|
|
* Index page, goto todo.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function index()
|
|
{
|
|
$this->view->title = $this->lang->my->common;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Get score list
|
|
*
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
*
|
|
* @access public
|
|
* @return mixed
|
|
*/
|
|
public function score($recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
$scores = $this->loadModel('score')->getListByAccount($this->app->user->account, $pager);
|
|
|
|
$this->view->title = $this->lang->score->common;
|
|
$this->view->user = $this->loadModel('user')->getById($this->app->user->account);
|
|
$this->view->pager = $pager;
|
|
$this->view->scores = $scores;
|
|
$this->view->position[] = $this->lang->score->record;
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My calendar.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function calendar()
|
|
{
|
|
$this->locate($this->createLink('my', 'todo', 'type=before&userID=&status=undone'));
|
|
}
|
|
|
|
/**
|
|
* My work view.
|
|
*
|
|
* @param string $mode
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function work($mode = 'task', $type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
$moduleIndex = array_search('my', $this->lang->noMenuModule);
|
|
if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]);
|
|
|
|
echo $this->fetch('my', $mode, "type=$type&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
|
}
|
|
|
|
/**
|
|
* My contribute view.
|
|
*
|
|
* @param string $mode
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function contribute($mode = 'task', $type = 'openedBy', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
$moduleIndex = array_search('my', $this->lang->noMenuModule);
|
|
if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]);
|
|
|
|
if(($mode == 'issue' or $mode == 'risk') and $type == 'openedBy') $type = 'createdBy';
|
|
|
|
echo $this->fetch('my', $mode, "type=$type&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
|
}
|
|
|
|
/**
|
|
* My todos.
|
|
*
|
|
* @param string $type
|
|
* @param int $userID
|
|
* @param string $status
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function todo($type = 'before', $userID = '', $status = 'all', $orderBy = "date_desc,status,begin", $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
$this->lang->navGroup->my = 'system';
|
|
/* Save session. */
|
|
$uri = $this->app->getURI(true);
|
|
if($this->app->viewType != 'json')
|
|
{
|
|
$this->session->set('todoList', $uri);
|
|
$this->session->set('bugList', $uri);
|
|
$this->session->set('taskList', $uri);
|
|
}
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
if(empty($userID)) $userID = $this->app->user->id;
|
|
$user = $this->loadModel('user')->getById($userID, 'id');
|
|
$account = $user->account;
|
|
|
|
/* The title and position. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->todo;
|
|
$this->view->position[] = $this->lang->my->todo;
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
/* Assign. */
|
|
$this->view->todos = $this->loadModel('todo')->getList($type, $account, $status, 0, $pager, $sort);
|
|
$this->view->date = (int)$type == 0 ? date(DT_DATE1) : date(DT_DATE1, strtotime($type));
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->status = $status;
|
|
$this->view->user = $user;
|
|
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
|
$this->view->account = $this->app->user->account;
|
|
$this->view->orderBy = $orderBy == 'date_desc,status,begin,id_desc' ? '' : $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->times = date::buildTimeList($this->config->todo->times->begin, $this->config->todo->times->end, $this->config->todo->times->delta);
|
|
$this->view->time = date::now();
|
|
$this->view->importFuture = ($type != 'today');
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My stories.
|
|
*
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function story($type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session. */
|
|
if($this->app->viewType != 'json') $this->session->set('storyList', $this->app->getURI(true));
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
/* Assign. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->story;
|
|
$this->view->position[] = $this->lang->my->story;
|
|
$this->view->stories = $this->loadModel('story')->getUserStories($this->app->user->account, $type, $sort, $pager, 'story');
|
|
$this->view->users = $this->user->getPairs('noletter');
|
|
$this->view->projects = $this->loadModel('project')->getPairsByProgram();
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'story';
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My requirements.
|
|
*
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function requirement($type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session. */
|
|
if($this->app->viewType != 'json') $this->session->set('storyList', $this->app->getURI(true));
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
/* Assign. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->story;
|
|
$this->view->position[] = $this->lang->my->story;
|
|
$this->view->stories = $this->loadModel('story')->getUserStories($this->app->user->account, $type, $sort, $pager, 'requirement');
|
|
$this->view->users = $this->user->getPairs('noletter');
|
|
$this->view->projects = $this->loadModel('project')->getPairsByProgram();
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'requirement';
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My tasks
|
|
*
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function task($type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session. */
|
|
if($this->app->viewType != 'json')
|
|
{
|
|
$this->session->set('taskList', $this->app->getURI(true), 'execution');
|
|
}
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
/* Get tasks. */
|
|
$tasks = $this->loadModel('task')->getUserTasks($this->app->user->account, $type, 0, $pager, $sort);
|
|
|
|
$parents = array();
|
|
foreach($tasks as $task)
|
|
{
|
|
if($task->parent > 0) $parents[$task->parent] = $task->parent;
|
|
}
|
|
$parents = $this->dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id');
|
|
|
|
foreach($tasks as $task)
|
|
{
|
|
if($task->parent > 0)
|
|
{
|
|
if(isset($tasks[$task->parent]))
|
|
{
|
|
$tasks[$task->parent]->children[$task->id] = $task;
|
|
unset($tasks[$task->id]);
|
|
}
|
|
else
|
|
{
|
|
$parent = $parents[$task->parent];
|
|
$task->parentName = $parent->name;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Get the story language configuration. */
|
|
$this->app->loadLang('story');
|
|
|
|
/* Assign. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->task;
|
|
$this->view->position[] = $this->lang->my->task;
|
|
$this->view->tabID = 'task';
|
|
$this->view->tasks = $tasks;
|
|
$this->view->summary = $this->loadModel('execution')->summary($tasks);
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->projects = $this->loadModel('project')->getPairsByProgram();
|
|
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'task';
|
|
|
|
if($this->app->viewType == 'json') $this->view->tasks = array_values($this->view->tasks);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My bugs.
|
|
*
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function bug($type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session. load Lang. */
|
|
if($this->app->viewType != 'json') $this->session->set('bugList', $this->app->getURI(true), 'qa');
|
|
$this->app->loadLang('bug');
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
if($this->app->getViewType() == 'mhtml') $recPerPage = 10;
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
$bugs = $this->loadModel('bug')->getUserBugs($this->app->user->account, $type, $sort, 0, $pager);
|
|
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'bug');
|
|
|
|
/* assign. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->bug;
|
|
$this->view->position[] = $this->lang->my->bug;
|
|
$this->view->bugs = $bugs;
|
|
$this->view->users = $this->user->getPairs('noletter');
|
|
$this->view->memberPairs = $this->user->getPairs('noletter|nodeleted');
|
|
$this->view->tabID = 'bug';
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'bug';
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My test task.
|
|
*
|
|
* @param string $type wait|done
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function testtask($type = 'wait', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Save session. */
|
|
if($this->app->viewType != 'json') $this->session->set('testtaskList', $this->app->getURI(true), 'qa');
|
|
|
|
$this->app->loadLang('testcase');
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->testTask;
|
|
$this->view->position[] = $this->lang->my->testTask;
|
|
$this->view->tasks = $this->loadModel('testtask')->getByUser($this->app->user->account, $pager, $sort, $type);
|
|
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->type = $type;
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'testtask';
|
|
$this->display();
|
|
|
|
}
|
|
|
|
/**
|
|
* My test case.
|
|
*
|
|
* @param string $type assigntome|openedbyme
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function testcase($type = 'assigntome', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session, load lang. */
|
|
if($this->app->viewType != 'json') $this->session->set('caseList', $this->app->getURI(true), 'qa');
|
|
$this->loadModel('testcase');
|
|
$this->loadModel('testtask');
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
$cases = array();
|
|
if($type == 'assigntome')
|
|
{
|
|
$cases = $this->testcase->getByAssignedTo($this->app->user->account, $sort, $pager, 'skip');
|
|
}
|
|
elseif($type == 'openedbyme')
|
|
{
|
|
$cases = $this->testcase->getByOpenedBy($this->app->user->account, $sort, $pager, 'skip');
|
|
}
|
|
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', $type == 'assigntome' ? false : true);
|
|
|
|
$cases = $this->testcase->appendData($cases, $type == 'assigntome' ? 'run' : 'case');
|
|
|
|
/* Assign. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->testCase;
|
|
$this->view->position[] = $this->lang->my->testCase;
|
|
$this->view->cases = $cases;
|
|
$this->view->users = $this->user->getPairs('noletter');
|
|
$this->view->tabID = 'test';
|
|
$this->view->type = $type;
|
|
$this->view->summary = $this->testcase->summary($cases);
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'testcase';
|
|
|
|
$this->display();
|
|
}
|
|
|
|
public function doc($type = 'openedbyme', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session, load lang. */
|
|
if($this->app->viewType != 'json') $this->session->set('docList', $this->app->getURI(true), 'doc');
|
|
$this->loadModel('doc');
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
$docs = $this->doc->getDocsByBrowseType(0, $type, 0, 0, $sort, $pager);
|
|
|
|
/* Assign. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->doc;
|
|
$this->view->position[] = $this->lang->my->doc;
|
|
$this->view->docs = $docs;
|
|
$this->view->users = $this->user->getPairs('noletter');
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
|
|
$this->display();
|
|
|
|
}
|
|
|
|
/**
|
|
* My projects.
|
|
*
|
|
* @param string $status doing|wait|suspended|closed|openedbyme
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function project($status = 'doing', $recTotal = 0, $recPerPage = 15, $pageID = 1)
|
|
{
|
|
$this->loadModel('program');
|
|
$this->app->loadLang('project');
|
|
|
|
$this->app->session->set('programList', $this->app->getURI(true), 'program');
|
|
$this->app->session->set('projectBrowse', $this->app->getURI(true), 'project');
|
|
|
|
/* Set the pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Get PM id list. */
|
|
$accounts = array();
|
|
$projects = $this->user->getExecutions($this->app->user->account, 'project', $status, 'id_desc', $pager);
|
|
foreach($projects as $project)
|
|
{
|
|
if(!empty($project->PM) and !in_array($project->PM, $accounts)) $accounts[] = $project->PM;
|
|
}
|
|
$PMList = $this->user->getListByAccounts($accounts, 'account');
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->project;
|
|
$this->view->position[] = $this->lang->my->project;
|
|
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
|
$this->view->projects = $projects;
|
|
$this->view->PMList = $PMList;
|
|
$this->view->pager = $pager;
|
|
$this->view->status = $status;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My executions.
|
|
* @param string $type undone|done
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function execution($type = 'undone', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 15, $pageID = 1)
|
|
{
|
|
$this->app->loadLang('project');
|
|
$this->app->loadLang('execution');
|
|
|
|
/* Set the pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->execution;
|
|
$this->view->position[] = $this->lang->my->execution;
|
|
$this->view->tabID = 'project';
|
|
$this->view->executions = $this->user->getExecutions($this->app->user->account, 'execution', $type, $orderBy, $pager);
|
|
$this->view->type = $type;
|
|
$this->view->pager = $pager;
|
|
$this->view->mode = 'execution';
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My issues.
|
|
*
|
|
* @access public
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @return void
|
|
*/
|
|
public function issue($type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Set the pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
$this->view->title = $this->lang->my->issue;
|
|
$this->view->position[] = $this->lang->my->issue;
|
|
$this->view->mode = 'issue';
|
|
$this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter');
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->type = $type;
|
|
$this->view->issues = $this->loadModel('issue')->getUserIssues($type, $this->app->user->account, $orderBy, $pager);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My risks.
|
|
*
|
|
* @access public
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @return void
|
|
*/
|
|
public function risk($type = 'assignedTo', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Set the pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
$this->view->title = $this->lang->my->risk;
|
|
$this->view->position[] = $this->lang->my->risk;
|
|
$this->view->risks = $this->loadModel('risk')->getUserRisks($type, $this->app->user->account, $orderBy, $pager);
|
|
$this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter');
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->type = $type;
|
|
$this->view->mode = 'risk';
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My team.
|
|
*
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function team($orderBy = 'id', $recTotal = 0, $recPerPage = 15, $pageID = 1)
|
|
{
|
|
$this->lang->navGroup->my = 'system';
|
|
|
|
/* Set the pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
/* Get users by dept. */
|
|
$user = $this->loadModel('user')->getById($this->app->user->account, 'account');
|
|
$deptID = $user->dept;
|
|
$users = $this->loadModel('company')->getUsers('inside', 'bydept', 0, $deptID, $sort, $pager);
|
|
foreach($users as $user) unset($user->password); // Remove passwd.
|
|
|
|
$this->view->title = $this->lang->my->team;
|
|
$this->view->position[] = $this->lang->my->team;
|
|
$this->view->users = $users;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Edit profile
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function editProfile()
|
|
{
|
|
if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back'));
|
|
if(!empty($_POST))
|
|
{
|
|
$_POST['account'] = $this->app->user->account;
|
|
$this->user->update($this->app->user->id);
|
|
if(dao::isError()) die(js::error(dao::getError()));
|
|
die(js::locate($this->createLink('my', 'profile'), 'parent'));
|
|
}
|
|
|
|
$this->app->loadConfig('user');
|
|
$this->app->loadLang('user');
|
|
|
|
$userGroups = $this->loadModel('group')->getByAccount($this->app->user->account);
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->editProfile;
|
|
$this->view->position[] = $this->lang->my->editProfile;
|
|
$this->view->user = $this->user->getById($this->app->user->account);
|
|
$this->view->rand = $this->user->updateSessionRandom();
|
|
$this->view->userGroups = implode(',', array_keys($userGroups));
|
|
$this->view->groups = $this->dao->select('id, name')->from(TABLE_GROUP)->fetchPairs('id', 'name');
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Change password
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function changePassword()
|
|
{
|
|
if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back'));
|
|
if(!empty($_POST))
|
|
{
|
|
$this->user->updatePassword($this->app->user->id);
|
|
if(dao::isError()) die(js::error(dao::getError()));
|
|
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
|
|
die(js::locate($this->createLink('my', 'index'), 'parent.parent'));
|
|
}
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->changePassword;
|
|
$this->view->position[] = $this->lang->my->changePassword;
|
|
$this->view->user = $this->user->getById($this->app->user->account);
|
|
$this->view->rand = $this->user->updateSessionRandom();
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Manage contacts.
|
|
*
|
|
* @param int $listID
|
|
* @param string $mode
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function manageContacts($listID = 0, $mode = '')
|
|
{
|
|
if($_POST)
|
|
{
|
|
$data = fixer::input('post')->get();
|
|
if($data->mode == 'new')
|
|
{
|
|
$listID = $this->user->createContactList($data->newList, $data->users);
|
|
$this->user->setGlobalContacts($listID, isset($data->share));
|
|
if(isonlybody()) die(js::closeModal('parent.parent', '', ' function(){parent.parent.ajaxGetContacts(\'#mailto\')}'));
|
|
die(js::locate(inlink('manageContacts', "listID=$listID"), 'parent'));
|
|
}
|
|
elseif($data->mode == 'edit')
|
|
{
|
|
$this->user->updateContactList($data->listID, $data->listName, $data->users);
|
|
$this->user->setGlobalContacts($data->listID, isset($data->share));
|
|
die(js::locate(inlink('manageContacts', "listID={$data->listID}"), 'parent'));
|
|
}
|
|
}
|
|
|
|
$mode = empty($mode) ? 'edit' : $mode;
|
|
$lists = $this->user->getContactLists($this->app->user->account);
|
|
|
|
$globalContacts = isset($this->config->my->global->globalContacts) ? $this->config->my->global->globalContacts : '';
|
|
$globalContacts = !empty($globalContacts) ? explode(',', $globalContacts) : array();
|
|
|
|
$myContacts = $this->user->getListByAccount($this->app->user->account);
|
|
$disabled = $globalContacts;
|
|
|
|
if(!empty($myContacts) && !empty($globalContacts))
|
|
{
|
|
foreach($globalContacts as $id)
|
|
{
|
|
if(in_array($id, array_keys($myContacts))) unset($disabled[array_search($id, $disabled)]);
|
|
}
|
|
}
|
|
|
|
$listID = $listID ? $listID : key($lists);
|
|
if(!$listID) $mode = 'new';
|
|
|
|
/* Create or manage list according to mode. */
|
|
if($mode == 'new')
|
|
{
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->user->contacts->createList;
|
|
$this->view->position[] = $this->lang->user->contacts->createList;
|
|
}
|
|
else
|
|
{
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->user->contacts->manage;
|
|
$this->view->position[] = $this->lang->user->contacts->manage;
|
|
$this->view->list = $this->user->getContactListByID($listID);
|
|
}
|
|
|
|
$users = $this->user->getPairs('noletter|noempty|noclosed|noclosed', $mode == 'new' ? '' : $this->view->list->userList, $this->config->maxCount);
|
|
if(isset($this->config->user->moreLink)) $this->config->moreLinks['users[]'] = $this->config->user->moreLink;
|
|
|
|
$this->view->mode = $mode;
|
|
$this->view->lists = $lists;
|
|
$this->view->listID = $listID;
|
|
$this->view->users = $users;
|
|
$this->view->disabled = $disabled;
|
|
$this->view->globalContacts = $globalContacts;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Delete a contact list.
|
|
*
|
|
* @param int $listID
|
|
* @param string $confirm
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function deleteContacts($listID, $confirm = 'no')
|
|
{
|
|
if($confirm == 'no')
|
|
{
|
|
die(js::confirm($this->lang->user->contacts->confirmDelete, inlink('deleteContacts', "listID=$listID&confirm=yes")));
|
|
}
|
|
else
|
|
{
|
|
$this->user->deleteContactList($listID);
|
|
die(js::locate(inlink('manageContacts'), 'parent'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Build contact lists.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function buildContactLists()
|
|
{
|
|
$this->view->contactLists = $this->user->getContactLists($this->app->user->account, 'withnote');
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* View my profile.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function profile()
|
|
{
|
|
if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back'));
|
|
|
|
$this->app->loadConfig('user');
|
|
$this->app->loadLang('user');
|
|
$user = $this->user->getById($this->app->user->account);
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->profile;
|
|
$this->view->position[] = $this->lang->my->profile;
|
|
$this->view->user = $user;
|
|
$this->view->groups = $this->loadModel('group')->getByAccount($this->app->user->account);
|
|
$this->view->deptPath = $this->dept->getParents($user->dept);
|
|
$this->view->personalData = $this->user->getPersonalData();
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* User preference setting.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function preference()
|
|
{
|
|
$this->loadModel('setting');
|
|
|
|
if($_POST)
|
|
{
|
|
foreach($_POST as $key => $value) $this->setting->setItem("{$this->app->user->account}.common.$key", $value);
|
|
|
|
$this->setting->setItem("{$this->app->user->account}.common.preferenceSetted", 1);
|
|
if(isOnlybody()) die(js::closeModal('parent.parent'));
|
|
|
|
die(js::locate($this->createLink('my', 'index'), 'parent'));
|
|
}
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->preference;
|
|
$this->view->position[] = $this->lang->my->preference;
|
|
|
|
$this->view->URSRList = $this->loadModel('custom')->getURSRPairs();
|
|
$this->view->URSR = isset($this->config->URSR) ? $this->config->URSR : $this->setting->getItem('owner=system&module=custom&key=URSR');
|
|
$this->view->programLink = isset($this->config->programLink) ? $this->config->programLink : 'program-browse';
|
|
$this->view->productLink = isset($this->config->productLink) ? $this->config->productLink : 'product-all';
|
|
$this->view->projectLink = isset($this->config->projectLink) ? $this->config->projectLink : 'project-browse';
|
|
$this->view->executionLink = isset($this->config->executionLink) ? $this->config->executionLink : 'execution-task';
|
|
$this->view->preferenceSetted = isset($this->config->preferenceSetted) ? true : false;
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My dynamic.
|
|
*
|
|
* @param string $type
|
|
* @param int $recTotal
|
|
* @param string $date
|
|
* @param string $direction next|pre
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function dynamic($type = 'today', $recTotal = 0, $date = '', $direction = 'next')
|
|
{
|
|
/* Save session. */
|
|
$uri = $this->app->getURI(true);
|
|
$this->session->set('productList', $uri);
|
|
$this->session->set('productPlanList', $uri);
|
|
$this->session->set('releaseList', $uri);
|
|
$this->session->set('storyList', $uri);
|
|
$this->session->set('projectList', $uri);
|
|
$this->session->set('taskList', $uri);
|
|
$this->session->set('buildList', $uri);
|
|
$this->session->set('bugList', $uri);
|
|
$this->session->set('caseList', $uri);
|
|
$this->session->set('testtaskList', $uri);
|
|
|
|
/* Set the pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
$pager = new pager($recTotal, $recPerPage = 50, $pageID = 1);
|
|
|
|
/* Append id for secend sort. */
|
|
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
|
|
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
|
|
|
/* The header and position. */
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->dynamic;
|
|
$this->view->position[] = $this->lang->my->dynamic;
|
|
|
|
$date = empty($date) ? '' : date('Y-m-d', $date);
|
|
$actions = $this->loadModel('action')->getDynamic($this->app->user->account, $type, $sort, $pager, 'all', 'all', $date, $direction);
|
|
|
|
/* Assign. */
|
|
$this->view->type = $type;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $type);
|
|
$this->view->direction = $direction;
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* Upload avatar.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function uploadAvatar()
|
|
{
|
|
if($_SERVER['REQUEST_METHOD'] == 'POST')
|
|
{
|
|
$result = $this->loadModel('user')->uploadAvatar();
|
|
$this->send($result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unbind ranzhi
|
|
*
|
|
* @param string $confirm
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function unbind($confirm = 'no')
|
|
{
|
|
$this->loadModel('user');
|
|
if($confirm == 'no')
|
|
{
|
|
die(js::confirm($this->lang->user->confirmUnbind, $this->createLink('my', 'unbind', "confirm=yes")));
|
|
}
|
|
else
|
|
{
|
|
$this->user->unbind($this->app->user->account);
|
|
die(js::locate($this->createLink('my', 'profile'), 'parent'));
|
|
}
|
|
}
|
|
}
|