490 lines
18 KiB
PHP
490 lines
18 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()
|
|
{
|
|
parent::__construct();
|
|
$this->loadModel('user');
|
|
$this->loadModel('dept');
|
|
$this->my->setMenu();
|
|
}
|
|
|
|
/**
|
|
* Index page, goto todo.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function index()
|
|
{
|
|
$account = $this->app->user->account;
|
|
|
|
/* Get project and product stats. */
|
|
$projectStats = $this->loadModel('project')->getProjectStats();
|
|
$productStats = $this->loadModel('product')->getStats();
|
|
|
|
/* Set the dynamic pager. */
|
|
$this->app->loadClass('pager', true);
|
|
$pager = new pager($recTotal = 1000, $this->config->my->dynamicCounts); // Init the $recTotal var, thus omit one sql query.
|
|
|
|
$this->view->projectStats = $projectStats;
|
|
$this->view->productStats = $productStats;
|
|
$this->view->actions = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', $pager);
|
|
$this->view->todos = $this->loadModel('todo')->getList('all', $account, 'wait, doing', $this->config->my->todoCounts);
|
|
$this->view->tasks = $this->loadModel('task')->getUserTasks($account, 'assignedTo', $this->config->my->taskCounts);
|
|
$this->view->bugs = $this->loadModel('bug')->getUserBugPairs($account, false, $this->config->my->bugCounts);
|
|
$this->view->stories = $this->loadModel('story')->getUserStoryPairs($account, $this->config->my->storyCounts);
|
|
$this->view->users = $this->loadModel('user')->getPairs('noletter|withguest');
|
|
$this->view->title = $this->lang->my->common;
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My todos.
|
|
*
|
|
* @param string $type
|
|
* @param string $account
|
|
* @param string $status
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function todo($type = 'today', $account = '', $status = 'all', $orderBy = "date_desc,status,begin", $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* Save session. */
|
|
$uri = $this->app->getURI(true);
|
|
$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);
|
|
|
|
/* 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->account = $this->app->user->account;
|
|
$this->view->orderBy = $orderBy == 'date_desc,status,begin,id_desc' ? '' : $orderBy;
|
|
$this->view->pager = $pager;
|
|
$this->view->importFuture = ($type != 'today');
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My stories
|
|
|
|
* @param string $type
|
|
* @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. */
|
|
$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);
|
|
$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 tasks
|
|
*
|
|
* @param string $type
|
|
* @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. */
|
|
$this->session->set('taskList', $this->app->getURI(true));
|
|
$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->task;
|
|
$this->view->position[] = $this->lang->my->task;
|
|
$this->view->tabID = 'task';
|
|
$this->view->tasks = $this->loadModel('task')->getUserTasks($this->app->user->account, $type, 0, $pager, $sort);
|
|
$this->view->type = $type;
|
|
$this->view->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
|
$this->view->pager = $pager;
|
|
$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. */
|
|
$this->session->set('bugList', $this->app->getURI(true));
|
|
$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);
|
|
|
|
/* Save bugIDs session for get the pre and next bug. */
|
|
$bugIDs = '';
|
|
foreach($bugs as $bug) $bugIDs .= ',' . $bug->id;
|
|
$this->session->set('bugIDs', $bugIDs . ',');
|
|
|
|
/* 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->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->display();
|
|
}
|
|
|
|
/**
|
|
* My test task.
|
|
*
|
|
* @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. */
|
|
$this->session->set('testtaskList', $this->app->getURI(true));
|
|
|
|
$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->display();
|
|
|
|
}
|
|
|
|
/**
|
|
* My test case.
|
|
*
|
|
* @param string $type
|
|
* @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. */
|
|
$this->session->set('caseList', $this->app->getURI(true));
|
|
$this->app->loadLang('testcase');
|
|
$this->app->loadLang('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->dao->select('t1.assignedTo AS assignedTo, t2.*')->from(TABLE_TESTRUN)->alias('t1')
|
|
->leftJoin(TABLE_CASE)->alias('t2')->on('t1.case = t2.id')
|
|
->leftJoin(TABLE_TESTTASK)->alias('t3')->on('t1.task = t3.id')
|
|
->Where('t1.assignedTo')->eq($this->app->user->account)
|
|
->andWhere('t1.status')->ne('done')
|
|
->andWhere('t3.status')->ne('done')
|
|
->andWhere('t3.deleted')->eq(0)
|
|
->andWhere('t2.deleted')->eq(0)
|
|
->orderBy($sort)->page($pager)->fetchAll();
|
|
}
|
|
elseif($type == 'donebyme')
|
|
{
|
|
$cases = $this->dao->select('t1.assignedTo AS assignedTo, t2.*')->from(TABLE_TESTRUN)->alias('t1')
|
|
->leftJoin(TABLE_CASE)->alias('t2')->on('t1.case = t2.id')
|
|
->Where('t1.assignedTo')->eq($this->app->user->account)
|
|
->andWhere('t1.status')->eq('done')
|
|
->andWhere('t2.deleted')->eq(0)
|
|
->orderBy($sort)->page($pager)->fetchAll();
|
|
}
|
|
elseif($type == 'openedbyme')
|
|
{
|
|
$cases = $this->dao->findByOpenedBy($this->app->user->account)->from(TABLE_CASE)
|
|
->andWhere('deleted')->eq(0)
|
|
->orderBy($sort)->page($pager)->fetchAll();
|
|
}
|
|
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', $type == 'assigntome' ? false : true);
|
|
|
|
/* 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->recTotal = $recTotal;
|
|
$this->view->recPerPage = $recPerPage;
|
|
$this->view->pageID = $pageID;
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->pager = $pager;
|
|
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* My projects.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function project()
|
|
{
|
|
$this->app->loadLang('project');
|
|
|
|
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->myProject;
|
|
$this->view->position[] = $this->lang->my->myProject;
|
|
$this->view->tabID = 'project';
|
|
$this->view->projects = @array_reverse($this->user->getProjects($this->app->user->account));
|
|
|
|
$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))
|
|
{
|
|
$this->user->update($this->app->user->id);
|
|
if(dao::isError()) die(js::error(dao::getError()));
|
|
die(js::locate($this->createLink('my', 'profile'), 'parent'));
|
|
}
|
|
|
|
$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->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()));
|
|
die(js::locate($this->createLink('my', 'profile'), '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->display();
|
|
}
|
|
|
|
/**
|
|
* View my profile.
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function profile()
|
|
{
|
|
if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back'));
|
|
|
|
$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->display();
|
|
}
|
|
|
|
/**
|
|
* My dynamic.
|
|
*
|
|
* @param string $type
|
|
* @param string $orderBy
|
|
* @param int $recTotal
|
|
* @param int $recPerPage
|
|
* @param int $pageID
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function dynamic($type = 'today', $orderBy = 'date_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
|
{
|
|
/* 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 = pager::init($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Append id for secend sort. */
|
|
$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;
|
|
|
|
/* Assign. */
|
|
$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->actions = $this->loadModel('action')->getDynamic($this->app->user->account, $type, $sort, $pager);
|
|
$this->display();
|
|
}
|
|
|
|
/**
|
|
* 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'));
|
|
}
|
|
}
|
|
|
|
}
|