Merge branch 'master' of https://git.zcorp.cc/zentaopms
This commit is contained in:
@@ -6,7 +6,7 @@ ALTER TABLE `zt_project` CHANGE `acl` `acl` char(30) NOT NULL DEFAULT 'open';
|
||||
ALTER TABLE `zt_project` ADD `product` varchar(20) NOT NULL DEFAULT 'single' AFTER `type`;
|
||||
ALTER TABLE `zt_project` ADD `lifetime` char(30) NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_project` ADD `budget` varchar(30) NOT NULL DEFAULT '0' AFTER `lifetime`;
|
||||
ALTER TABLE `zt_project` ADD `budgetUnit` char(30) NOT NULL DEFAULT 'yuan' AFTER `budget`;
|
||||
ALTER TABLE `zt_project` ADD `budgetUnit` char(30) NOT NULL DEFAULT 'wanyuan' AFTER `budget`;
|
||||
ALTER TABLE `zt_project` ADD `percent` float unsigned NOT NULL DEFAULT '0' AFTER `budgetUnit`;
|
||||
ALTER TABLE `zt_project` ADD `path` varchar(255) NOT NULL AFTER `parent`;
|
||||
ALTER TABLE `zt_project` ADD `grade` tinyint unsigned NOT NULL AFTER `path`;
|
||||
|
||||
+1
-1
@@ -709,7 +709,7 @@ CREATE TABLE IF NOT EXISTS `zt_project` (
|
||||
`product` char(30) NOT NULL DEFAULT 'single',
|
||||
`lifetime` char(30) NOT NULL,
|
||||
`budget` varchar(30) NOT NULL DEFAULT '0',
|
||||
`budgetUnit` char(30) NOT NULL DEFAULT 'yuan',
|
||||
`budgetUnit` char(30) NOT NULL DEFAULT 'wanyuan',
|
||||
`attribute` varchar(30) NOT NULL DEFAULT '',
|
||||
`percent` float unsigned NOT NULL DEFAULT '0',
|
||||
`milestone` enum('0','1') NOT NULL DEFAULT '0',
|
||||
|
||||
@@ -1385,6 +1385,8 @@ class bugModel extends model
|
||||
->beginIF($projectID)->andWhere('PRJ')->eq($projectID)->fi()
|
||||
->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('status')->ne('closed')->fi()
|
||||
->beginIF($type != 'all')->andWhere("`$type`")->eq($account)->fi()
|
||||
->beginIF($this->app->rawMethod == 'contribute')->andWhere("status")->in('resolved,closed')->fi()
|
||||
->beginIF($this->app->rawMethod == 'work')->andWhere("status")->eq('active')->fi()
|
||||
->orderBy($orderBy)
|
||||
->beginIF($limit > 0)->limit($limit)->fi()
|
||||
->page($pager)
|
||||
|
||||
@@ -285,7 +285,7 @@ $lang->my->contributeMenu->execution = '执行|my|contribute|mode=execution&type
|
||||
$lang->my->contributeMenu->task = '任务|my|contribute|mode=task';
|
||||
$lang->my->contributeMenu->story = '需求|my|contribute|mode=story';
|
||||
$lang->my->contributeMenu->bug = 'Bug|my|contribute|mode=bug';
|
||||
$lang->my->contributeMenu->testtask = '用例|my|contribute|mode=testtask&type=wait';
|
||||
$lang->my->contributeMenu->testtask = '用例|my|contribute|mode=testtask&type=done';
|
||||
$lang->my->contributeMenu->issue = '问题|my|contribute|mode=issue';
|
||||
$lang->my->contributeMenu->risk = '风险|my|contribute|mode=risk';
|
||||
|
||||
|
||||
@@ -87,14 +87,9 @@ $lang->resource->my = new stdclass();
|
||||
$lang->resource->my->index = 'index';
|
||||
$lang->resource->my->todo = 'todo';
|
||||
$lang->resource->my->calendar = 'calendar';
|
||||
$lang->resource->my->task = 'task';
|
||||
$lang->resource->my->bug = 'bug';
|
||||
$lang->resource->my->testTask = 'testTask';
|
||||
$lang->resource->my->testCase = 'testCase';
|
||||
$lang->resource->my->story = 'story';
|
||||
$lang->resource->my->requirement = 'requirement';
|
||||
$lang->resource->my->work = 'work';
|
||||
$lang->resource->my->contribute = 'contribute';
|
||||
$lang->resource->my->project = 'project';
|
||||
$lang->resource->my->execution = 'execution';
|
||||
$lang->resource->my->profile = 'profile';
|
||||
$lang->resource->my->dynamic = 'dynamic';
|
||||
$lang->resource->my->editProfile = 'editProfile';
|
||||
@@ -106,22 +101,17 @@ $lang->resource->my->unbind = 'unbind';
|
||||
|
||||
$lang->my->methodOrder[0] = 'index';
|
||||
$lang->my->methodOrder[5] = 'todo';
|
||||
$lang->my->methodOrder[10] = 'task';
|
||||
$lang->my->methodOrder[15] = 'bug';
|
||||
$lang->my->methodOrder[20] = 'testTask';
|
||||
$lang->my->methodOrder[25] = 'testCase';
|
||||
$lang->my->methodOrder[30] = 'story';
|
||||
$lang->my->methodOrder[35] = 'requirement';
|
||||
$lang->my->methodOrder[40] = 'project';
|
||||
$lang->my->methodOrder[45] = 'execution';
|
||||
$lang->my->methodOrder[50] = 'profile';
|
||||
$lang->my->methodOrder[55] = 'dynamic';
|
||||
$lang->my->methodOrder[60] = 'editProfile';
|
||||
$lang->my->methodOrder[65] = 'changePassword';
|
||||
$lang->my->methodOrder[75] = 'manageContacts';
|
||||
$lang->my->methodOrder[80] = 'deleteContacts';
|
||||
$lang->my->methodOrder[85] = 'score';
|
||||
$lang->my->methodOrder[90] = 'unbind';
|
||||
$lang->my->methodOrder[10] = 'work';
|
||||
$lang->my->methodOrder[15] = 'contribute';
|
||||
$lang->my->methodOrder[20] = 'project';
|
||||
$lang->my->methodOrder[25] = 'profile';
|
||||
$lang->my->methodOrder[30] = 'dynamic';
|
||||
$lang->my->methodOrder[35] = 'editProfile';
|
||||
$lang->my->methodOrder[40] = 'changePassword';
|
||||
$lang->my->methodOrder[45] = 'manageContacts';
|
||||
$lang->my->methodOrder[50] = 'deleteContacts';
|
||||
$lang->my->methodOrder[55] = 'score';
|
||||
$lang->my->methodOrder[60] = 'unbind';
|
||||
|
||||
/* Todo. */
|
||||
$lang->resource->todo = new stdclass();
|
||||
|
||||
@@ -160,6 +160,8 @@ class issueModel extends model
|
||||
$issueList = $this->dao->select('*')->from(TABLE_ISSUE)
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere($type)->eq($this->app->user->account)->fi()
|
||||
->beginIF($this->app->rawMethod == 'contribute')->andWhere("status")->in('resolved,canceled,closed')->fi()
|
||||
->beginIF($this->app->rawMethod == 'work')->andWhere("status")->notin('resolved,canceled,closed')->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll();
|
||||
|
||||
+8
-41
@@ -118,7 +118,14 @@ class my extends control
|
||||
$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");
|
||||
if($mode == 'story' or $mode == 'requirement')
|
||||
{
|
||||
echo $this->fetch('my', 'story', "type=$type&storyType=$mode&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $this->fetch('my', $mode, "type=$type&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -180,46 +187,6 @@ class my extends control
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* My requirement.
|
||||
|
||||
* @param string $type
|
||||
* @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->type = $type;
|
||||
$this->view->projects = $this->loadModel('program')->getPRJPairs();
|
||||
$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 stories
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ $(function()
|
||||
if(typeof(mode) != 'undefined')
|
||||
{
|
||||
if(mode == 'testcase') mode = 'testtask';
|
||||
if(mode == 'requirement') mode = 'story';
|
||||
$('#subNavbar li[data-id=' + mode + ']').addClass('active');
|
||||
}
|
||||
var scp = $('[data-id="changePassword"] a');
|
||||
|
||||
@@ -5,6 +5,8 @@ $lang->my->common = 'Dashboard';
|
||||
$lang->my->index = 'Home';
|
||||
$lang->my->todo = 'Meine ToDos';
|
||||
$lang->my->calendar = 'Kalender';
|
||||
$lang->my->work = 'Work';
|
||||
$lang->my->contribute = 'Contribute';
|
||||
$lang->my->task = 'Aufgaben';
|
||||
$lang->my->bug = 'Bugs';
|
||||
$lang->my->testTask = 'Builds';
|
||||
@@ -26,8 +28,6 @@ $lang->my->limited = 'Eingeschränkte Möglichkeiten (Bearbeiten nur eige
|
||||
$lang->my->score = 'Meine Wertung';
|
||||
$lang->my->scoreRule = 'Wertungs regeln';
|
||||
$lang->my->noTodo = 'Keine toDos. ';
|
||||
$lang->my->requirement = 'User requirements';
|
||||
$lang->my->story = 'Software requirements';
|
||||
|
||||
$lang->my->myExecutions = 'My Stage/Sprint/Iteration';
|
||||
$lang->my->name = 'Name';
|
||||
|
||||
@@ -5,6 +5,8 @@ $lang->my->common = 'Dashboard';
|
||||
$lang->my->index = 'Home';
|
||||
$lang->my->todo = 'My Todos';
|
||||
$lang->my->calendar = 'Schedule';
|
||||
$lang->my->work = 'Work';
|
||||
$lang->my->contribute = 'Contribute';
|
||||
$lang->my->task = 'My Tasks';
|
||||
$lang->my->bug = 'My Bugs';
|
||||
$lang->my->testTask = 'My Builds';
|
||||
@@ -26,8 +28,6 @@ $lang->my->limited = 'Limited Actions (Users can only edit what involves
|
||||
$lang->my->score = 'My Points';
|
||||
$lang->my->scoreRule = 'Point Rules';
|
||||
$lang->my->noTodo = 'No todos yet. ';
|
||||
$lang->my->requirement = 'User requirements';
|
||||
$lang->my->story = 'Software requirements';
|
||||
|
||||
$lang->my->myExecutions = "My Stage/Sprint/Iteration";
|
||||
$lang->my->name = 'Name';
|
||||
|
||||
@@ -5,6 +5,8 @@ $lang->my->common = 'Tableau de Bord';
|
||||
$lang->my->index = 'Accueil';
|
||||
$lang->my->todo = 'Mon Agenda';
|
||||
$lang->my->calendar = 'Calendrier';
|
||||
$lang->my->work = 'Work';
|
||||
$lang->my->contribute = 'Contribute';
|
||||
$lang->my->task = 'Mes Tâches';
|
||||
$lang->my->bug = 'Mes Bugs';
|
||||
$lang->my->testTask = 'Mes Builds';
|
||||
@@ -26,8 +28,6 @@ $lang->my->limited = 'Actions Limitées (Les utilisateurs peuvent seuleme
|
||||
$lang->my->score = 'Mes Points';
|
||||
$lang->my->scoreRule = 'Règles Point';
|
||||
$lang->my->noTodo = "Je n'ai rien à faire pour l'instant.";
|
||||
$lang->my->requirement = 'User requirements';
|
||||
$lang->my->story = 'Software requirements';
|
||||
|
||||
$lang->my->myExecutions = 'My Stage/Sprint/Iteration';
|
||||
$lang->my->name = 'Name';
|
||||
|
||||
@@ -5,6 +5,8 @@ $lang->my->common = '';
|
||||
$lang->my->index = 'Trang chủ';
|
||||
$lang->my->todo = 'Việc của bạn';
|
||||
$lang->my->calendar = 'Lịch trình';
|
||||
$lang->my->work = 'Work';
|
||||
$lang->my->contribute = 'Contribute';
|
||||
$lang->my->task = 'Nhiệm vụ';
|
||||
$lang->my->bug = 'Bugs của bạn';
|
||||
$lang->my->testTask = 'Bản dựng của bạn';
|
||||
@@ -26,8 +28,6 @@ $lang->my->limited = 'Hành động bị giới hạn (Người dùng ch
|
||||
$lang->my->score = 'Điểm của bạn';
|
||||
$lang->my->scoreRule = 'Quy định điểm';
|
||||
$lang->my->noTodo = 'Chưa có việc nào.';
|
||||
$lang->my->requirement = 'User requirements';
|
||||
$lang->my->story = 'Software requirements';
|
||||
|
||||
$lang->my->myExecutions = "My Stage/Sprint/Iteration";
|
||||
$lang->my->name = 'Name';
|
||||
|
||||
@@ -5,6 +5,8 @@ $lang->my->common = '我的地盘';
|
||||
$lang->my->index = '首页';
|
||||
$lang->my->todo = '我的待办';
|
||||
$lang->my->calendar = '日程';
|
||||
$lang->my->work = '待处理';
|
||||
$lang->my->contribute = '贡献';
|
||||
$lang->my->task = '我的任务';
|
||||
$lang->my->bug = '我的Bug';
|
||||
$lang->my->testTask = '我的版本';
|
||||
@@ -28,8 +30,6 @@ $lang->my->limited = '受限操作(只能编辑与自己相关的内容)'
|
||||
$lang->my->score = '我的积分';
|
||||
$lang->my->scoreRule = '积分规则';
|
||||
$lang->my->noTodo = '暂时没有待办。';
|
||||
$lang->my->requirement = '用户需求';
|
||||
$lang->my->story = '软件需求';
|
||||
|
||||
$lang->my->myExecutions = "我参与的阶段/冲刺/迭代";
|
||||
$lang->my->name = '名称';
|
||||
|
||||
@@ -18,8 +18,11 @@
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=assignedTo"), "<span class='text'>{$lang->bug->assignedTo}</span>" . ($type == 'assignedTo' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=openedBy"), "<span class='text'>{$lang->bug->openedByMe}</span>" . ($type == 'openedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=resolvedBy"), "<span class='text'>{$lang->bug->resolvedByMe}</span>" . ($type == 'resolvedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'resolvedBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->bug->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'contribute')
|
||||
{
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=resolvedBy"), "<span class='text'>{$lang->bug->resolvedByMe}</span>" . ($type == 'resolvedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'resolvedBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->bug->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=assignedTo"), "<span class='text'>{$lang->my->taskMenu->assignedToMe}</span>" . ($type == 'assignedTo' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=createdBy"), "<span class='text'>{$lang->my->taskMenu->openedByMe}</span>" . ($type == 'createdBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'createdBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->my->taskMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->my->taskMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=assignedTo"), "<span class='text'>{$lang->my->taskMenu->assignedToMe}</span>" . ($type == 'assignedTo' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=createdBy"), "<span class='text'>{$lang->my->taskMenu->openedByMe}</span>" . ($type == 'createdBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'createdBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->my->taskMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->my->taskMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,24 +16,24 @@
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo "<span class='nav-title'>{$lang->my->requirement}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=assignedTo"), "<span class='text'>{$lang->my->storyMenu->assignedToMe}</span>" . ($type == 'assignedTo' & $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' & $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=openedBy"), "<span class='text'>{$lang->my->storyMenu->openedByMe}</span>" . ($type == 'openedBy' & $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedBy' & $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=reviewedBy"), "<span class='text'>{$lang->my->storyMenu->reviewedByMe}</span>" . ($type == 'reviewedBy' & $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewedBy' & $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=closedBy"), "<span class='text'>{$lang->my->storyMenu->closedByMe}</span>" . ($type == 'closedBy' & $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' & $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo "<span class='nav-title'>{$lang->productURCommon}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=assignedTo&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->assignedToMe}</span>" . ($type == 'assignedTo' && $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' && $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=openedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->openedByMe}</span>" . ($type == 'openedBy' && $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedBy' && $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=requirement&type=reviewedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->reviewedByMe}</span>" . ($type == 'reviewedBy' && $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewedBy' && $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=requirement&type=closedBy&&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->closedByMe}</span>" . ($type == 'closedBy' && $mode == 'requirement' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' && $mode == 'requirement' ? ' btn-active-text' : '') . "'");
|
||||
echo "<span class='nav-title'> | </span>";
|
||||
echo "<span class='nav-title'>{$lang->my->story}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=assignedTo"), "<span class='text'>{$lang->my->storyMenu->assignedToMe}</span>" . ($type == 'assignedTo' & $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' & $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=openedBy"), "<span class='text'>{$lang->my->storyMenu->openedByMe}</span>" . ($type == 'openedBy' & $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedBy' & $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=reviewedBy"), "<span class='text'>{$lang->my->storyMenu->reviewedByMe}</span>" . ($type == 'reviewedBy' & $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewedBy' & $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=closedBy"), "<span class='text'>{$lang->my->storyMenu->closedByMe}</span>" . ($type == 'closedBy' & $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' & $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
echo "<span class='nav-title'>{$lang->productSRCommon}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=assignedTo&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->assignedToMe}</span>" . ($type == 'assignedTo' && $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' && $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=openedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->openedByMe}</span>" . ($type == 'openedBy' && $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedBy' && $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=story&type=reviewedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->reviewedByMe}</span>" . ($type == 'reviewedBy' && $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewedBy' && $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=story&type=closedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->closedByMe}</span>" . ($type == 'closedBy' && $mode == 'story' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' && $mode == 'story' ? ' btn-active-text' : '') . "'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
<?php if(!$stories):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->story->noStory;?></span></p>
|
||||
<p><span class="text-muted"><?php echo $mode == 'story' ? $lang->story->noStory : $lang->story->noRequirement;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<form id='myStoryForm' class="main-table table-story" data-ride="table" method="post">
|
||||
@@ -56,7 +56,7 @@
|
||||
<?php endif;?>
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
<th class='c-pri w-40px'> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='c-pri w-40px'> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='c-name'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->my->name);?></th>
|
||||
<th class='c-product'> <?php common::printOrderLink('productTitle', $orderBy, $vars, $lang->story->product);?></th>
|
||||
<?php if($mode == 'story'):?>
|
||||
@@ -130,7 +130,8 @@
|
||||
</td>
|
||||
<td class='c-pri'><span class='label-pri <?php echo 'label-pri-' . $child->pri;?>' title='<?php echo zget($lang->story->priList, $child->pri, $child->pri);?>'><?php echo zget($lang->story->priList, $child->pri, $child->pri);?></span></td>
|
||||
<td class='c-name nobr'>
|
||||
<?php echo '<span class="label label-badge label-light" title="' . $this->lang->story->children .'">' . $this->lang->story->childrenAB . '</span> ' . html::a($storyLink, $child->title, null, "style='color: $child->color'");?>
|
||||
<?php $childrenAB = $mode == 'story' ? $this->lang->story->childrenAB : 'SR';?>
|
||||
<?php echo '<span class="label label-badge label-light" title="' . $this->lang->story->children .'">' . $childrenAB . '</span> ' . html::a($storyLink, $child->title, null, "style='color: $child->color'");?>
|
||||
</td>
|
||||
<td class='c-product'><?php echo $child->productTitle;?></td>
|
||||
<?php if($mode == 'story'):?>
|
||||
|
||||
@@ -18,10 +18,14 @@
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=assignedTo"), "<span class='text'>{$lang->my->taskMenu->assignedToMe}</span>" . ($type == 'assignedTo' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=openedBy"), "<span class='text'>{$lang->my->taskMenu->openedByMe}</span>" . ($type == 'openedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedBy' ? ' btn-active-text' : '') . "'");
|
||||
?>
|
||||
<?php if($app->rawMethod == 'contribute'):?>
|
||||
<?php
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=finishedBy"), "<span class='text'>{$lang->my->taskMenu->finishedByMe}</span>" . ($type == 'finishedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'finishedBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=closedBy"), "<span class='text'>{$lang->my->taskMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=canceledBy"), "<span class='text'>{$lang->my->taskMenu->canceledByMe}</span>" . ($type == 'canceledBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'canceledBy' ? ' btn-active-text' : '') . "'");
|
||||
?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent">
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
<?php
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo "<span class='nav-title'>{$lang->testtask->common}: </span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=testtask&type=wait"), "<span class='text'>{$lang->testtask->wait}</span>", '', "class='btn btn-link'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=testtask&type=done"), "<span class='text'>{$lang->testtask->done}</span>", '', "class='btn btn-link'");
|
||||
if($app->rawMethod == 'work') echo html::a(inlink($app->rawMethod, "mode=testtask&type=wait"), "<span class='text'>{$lang->testtask->wait}</span>", '', "class='btn btn-link'");
|
||||
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=testtask&type=done"), "<span class='text'>{$lang->testtask->done}</span>", '', "class='btn btn-link'");
|
||||
echo "<span class='divider'></span>";
|
||||
echo "<span class='nav-title'>{$lang->testcase->common}: </span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=assigntome"), "<span class='text'>{$lang->testcase->assignToMe}</span>" . ($type == 'assigntome' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assigntome' ? ' btn-active-text' : '') . "'");
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
<?php
|
||||
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
|
||||
echo "<span class='nav-title'>{$lang->testtask->common}: </span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=wait"), "<span class='text'>{$lang->testtask->wait}</span>" . ($type == 'wait' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'wait' ? ' btn-active-text' : '') . "'");
|
||||
echo html::a(inlink($app->rawMethod, "mode=$mode&type=done"), "<span class='text'>{$lang->testtask->done}</span>" . ($type == 'done' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'done' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'work') echo html::a(inlink($app->rawMethod, "mode=$mode&type=wait"), "<span class='text'>{$lang->testtask->wait}</span>" . ($type == 'wait' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'wait' ? ' btn-active-text' : '') . "'");
|
||||
if($app->rawMethod == 'contribute') echo html::a(inlink($app->rawMethod, "mode=$mode&type=done"), "<span class='text'>{$lang->testtask->done}</span>" . ($type == 'done' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'done' ? ' btn-active-text' : '') . "'");
|
||||
echo "<span class='divider'></span>";
|
||||
echo "<span class='nav-title'>{$lang->testcase->common}: </span>";
|
||||
echo html::a(inlink($app->rawMethod, "mode=testcase&type=assigntome"), "<span class='text'>{$lang->testcase->assignToMe}</span>", '', "class='btn btn-link'");
|
||||
|
||||
@@ -54,7 +54,6 @@ $lang->program->begin = 'Begin';
|
||||
$lang->program->end = 'End';
|
||||
$lang->program->PRJStatus = 'Status';
|
||||
$lang->program->PRJPM = 'Manager';
|
||||
$lang->program->PO = 'Product Owner';
|
||||
$lang->program->PRJBudget = 'Budget';
|
||||
$lang->program->PRJTemplate = 'Template';
|
||||
$lang->program->PRJEstimate = 'Estimates';
|
||||
@@ -93,9 +92,9 @@ $lang->program->future = 'TBD';
|
||||
$lang->program->productNotEmpty = 'Please link products or create products.';
|
||||
$lang->program->existProductName = 'Product name already exists.';
|
||||
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['yuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['wanyuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
|
||||
$lang->program->modelList['scrum'] = "Scrum";
|
||||
$lang->program->modelList['waterfall'] = "CMMI";
|
||||
@@ -208,7 +207,6 @@ $lang->program->PGMName = 'Name';
|
||||
$lang->program->PGMTemplate = 'Template';
|
||||
$lang->program->PGMCategory = 'Type';
|
||||
$lang->program->PGMDesc = 'Description';
|
||||
$lang->program->PGMCode = 'Code';
|
||||
$lang->program->PGMCopy = 'Copy Program';
|
||||
$lang->program->PGMStatus = 'Status';
|
||||
$lang->program->PGMPM = 'Program manager';
|
||||
|
||||
@@ -54,7 +54,6 @@ $lang->program->begin = 'Begin';
|
||||
$lang->program->end = 'End';
|
||||
$lang->program->PRJStatus = 'Status';
|
||||
$lang->program->PRJPM = 'Manager';
|
||||
$lang->program->PO = 'Product Owner';
|
||||
$lang->program->PRJBudget = 'Budget';
|
||||
$lang->program->PRJTemplate = 'Template';
|
||||
$lang->program->PRJEstimate = 'Estimates';
|
||||
@@ -93,9 +92,9 @@ $lang->program->future = 'TBD';
|
||||
$lang->program->productNotEmpty = 'Please link products or create products.';
|
||||
$lang->program->existProductName = 'Product name already exists.';
|
||||
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['yuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['wanyuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
|
||||
$lang->program->modelList['scrum'] = "Scrum";
|
||||
$lang->program->modelList['waterfall'] = "CMMI";
|
||||
@@ -208,7 +207,6 @@ $lang->program->PGMName = 'Name';
|
||||
$lang->program->PGMTemplate = 'Template';
|
||||
$lang->program->PGMCategory = 'Type';
|
||||
$lang->program->PGMDesc = 'Description';
|
||||
$lang->program->PGMCode = 'Code';
|
||||
$lang->program->PGMCopy = 'Copy Program';
|
||||
$lang->program->PGMStatus = 'Status';
|
||||
$lang->program->PGMPM = 'Program manager';
|
||||
|
||||
@@ -54,7 +54,6 @@ $lang->program->begin = 'Begin';
|
||||
$lang->program->end = 'End';
|
||||
$lang->program->PRJStatus = 'Status';
|
||||
$lang->program->PRJPM = 'Manager';
|
||||
$lang->program->PO = 'Product Owner';
|
||||
$lang->program->PRJBudget = 'Budget';
|
||||
$lang->program->PRJTemplate = 'Template';
|
||||
$lang->program->PRJEstimate = 'Estimates';
|
||||
@@ -93,9 +92,9 @@ $lang->program->future = 'TBD';
|
||||
$lang->program->productNotEmpty = 'Please link products or create products.';
|
||||
$lang->program->existProductName = 'Product name already exists.';
|
||||
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['yuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['wanyuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
|
||||
$lang->program->modelList['scrum'] = "Scrum";
|
||||
$lang->program->modelList['waterfall'] = "CMMI";
|
||||
@@ -208,7 +207,6 @@ $lang->program->PGMName = 'Name';
|
||||
$lang->program->PGMTemplate = 'Template';
|
||||
$lang->program->PGMCategory = 'Type';
|
||||
$lang->program->PGMDesc = 'Description';
|
||||
$lang->program->PGMCode = 'Code';
|
||||
$lang->program->PGMCopy = 'Copy Program';
|
||||
$lang->program->PGMStatus = 'Status';
|
||||
$lang->program->PGMPM = 'Program manager';
|
||||
|
||||
@@ -54,7 +54,6 @@ $lang->program->begin = 'Begin';
|
||||
$lang->program->end = 'End';
|
||||
$lang->program->PRJStatus = 'Status';
|
||||
$lang->program->PRJPM = 'Manager';
|
||||
$lang->program->PO = 'Product Owner';
|
||||
$lang->program->PRJBudget = 'Budget';
|
||||
$lang->program->PRJTemplate = 'Template';
|
||||
$lang->program->PRJEstimate = 'Estimates';
|
||||
@@ -93,9 +92,9 @@ $lang->program->future = 'TBD';
|
||||
$lang->program->productNotEmpty = 'Please link products or create products.';
|
||||
$lang->program->existProductName = 'Product name already exists.';
|
||||
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['yuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['wanyuan'] = 'Wanyuan';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
|
||||
$lang->program->modelList['scrum'] = "Scrum";
|
||||
$lang->program->modelList['waterfall'] = "CMMI";
|
||||
@@ -208,7 +207,6 @@ $lang->program->PGMName = 'Name';
|
||||
$lang->program->PGMTemplate = 'Template';
|
||||
$lang->program->PGMCategory = 'Type';
|
||||
$lang->program->PGMDesc = 'Description';
|
||||
$lang->program->PGMCode = 'Code';
|
||||
$lang->program->PGMCopy = 'Copy Program';
|
||||
$lang->program->PGMStatus = 'Status';
|
||||
$lang->program->PGMPM = 'Program manager';
|
||||
|
||||
@@ -54,7 +54,6 @@ $lang->program->begin = '计划开始';
|
||||
$lang->program->end = '计划完成';
|
||||
$lang->program->PRJStatus = '项目状态';
|
||||
$lang->program->PRJPM = '项目负责人';
|
||||
$lang->program->PO = '产品负责人';
|
||||
$lang->program->PRJBudget = '项目预算';
|
||||
$lang->program->PRJTemplate = '项目模板';
|
||||
$lang->program->PRJEstimate = '预计';
|
||||
@@ -93,9 +92,9 @@ $lang->program->future = '待定';
|
||||
$lang->program->productNotEmpty = '请关联产品或创建产品。';
|
||||
$lang->program->existProductName = '产品名称已存在。';
|
||||
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['yuan'] = '万元';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['wanyuan'] = '万元';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
|
||||
$lang->program->modelList['scrum'] = "Scrum";
|
||||
$lang->program->modelList['waterfall'] = "瀑布";
|
||||
@@ -208,7 +207,6 @@ $lang->program->PGMName = '项目集名称';
|
||||
$lang->program->PGMTemplate = '项目集模板';
|
||||
$lang->program->PGMCategory = '项目集类型';
|
||||
$lang->program->PGMDesc = '项目集描述';
|
||||
$lang->program->PGMCode = '项目集代号';
|
||||
$lang->program->PGMCopy = '复制项目集';
|
||||
$lang->program->PGMStatus = '状态';
|
||||
$lang->program->PGMPM = '项目集负责人';
|
||||
|
||||
@@ -56,7 +56,6 @@ $lang->program->begin = '計劃開始';
|
||||
$lang->program->end = '計劃完成';
|
||||
$lang->program->PRJStatus = '項目狀態';
|
||||
$lang->program->PRJPM = '項目負責人';
|
||||
$lang->program->PO = '產品負責人';
|
||||
$lang->program->PRJBudget = '項目預算';
|
||||
$lang->program->PRJTemplate = '項目模板';
|
||||
$lang->program->PRJEstimate = '預計';
|
||||
@@ -95,9 +94,9 @@ $lang->program->future = '待定';
|
||||
$lang->program->productNotEmpty = '請關聯產品或創建產品。';
|
||||
$lang->program->existProductName = '產品名稱已存在。';
|
||||
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['yuan'] = '萬元';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
$lang->program->unitList[''] = '';
|
||||
$lang->program->unitList['wanyuan'] = '萬元';
|
||||
$lang->program->unitList['dollar'] = 'Dollars';
|
||||
|
||||
$lang->program->modelList['scrum'] = "Scrum";
|
||||
$lang->program->modelList['waterfall'] = "瀑布";
|
||||
@@ -211,7 +210,6 @@ $lang->program->PGMName = '項目集名稱';
|
||||
$lang->program->PGMTemplate = '項目集模板';
|
||||
$lang->program->PGMCategory = '項目集類型';
|
||||
$lang->program->PGMDesc = '項目集描述';
|
||||
$lang->program->PGMCode = '項目集代號';
|
||||
$lang->program->PGMCopy = '複製項目集';
|
||||
$lang->program->PGMStatus = '狀態';
|
||||
$lang->program->PGMPM = '項目集負責人';
|
||||
|
||||
@@ -122,6 +122,7 @@ class programModel extends model
|
||||
->setDefault('openedDate', helper::now())
|
||||
->setIF($this->post->acl == 'open', 'whitelist', '')
|
||||
->setIF($this->post->delta == 999, 'end', LONG_TIME)
|
||||
->setIF($this->post->budget != 0, 'budget', number_format($this->post->budget, 2))
|
||||
->add('type', 'program')
|
||||
->join('whitelist', ',')
|
||||
->cleanFloat('budget')
|
||||
@@ -223,6 +224,7 @@ class programModel extends model
|
||||
->setIF($this->post->acl == 'open', 'whitelist', '')
|
||||
->setIF($this->post->delta == 999, 'end', LONG_TIME)
|
||||
->setIF($this->post->future, 'budget', 0)
|
||||
->setIF($this->post->budget != 0, 'budget', number_format($this->post->budget, 2))
|
||||
->join('whitelist', ',')
|
||||
->stripTags($this->config->program->editor->pgmedit['id'], $this->config->allowedTags)
|
||||
->remove('uid,delta,future')
|
||||
@@ -1293,6 +1295,17 @@ class programModel extends model
|
||||
{
|
||||
$projectID = $this->dao->lastInsertId();
|
||||
|
||||
/* Add the creator to team. */
|
||||
$this->app->loadLang('user');
|
||||
$member = new stdclass();
|
||||
$member->root = $projectID;
|
||||
$member->account = $this->app->user->account;
|
||||
$member->role = $this->lang->user->roleList[$this->app->user->role];
|
||||
$member->join = helper::today();
|
||||
$member->type = 'project';
|
||||
$member->hours = $this->config->project->defaultWorkhours;
|
||||
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
|
||||
|
||||
$whitelist = explode(',', $project->whitelist);
|
||||
$this->loadModel('personnel')->updateWhitelist($whitelist, 'project', $projectID);
|
||||
if($project->acl != 'open') $this->loadModel('user')->updateUserView($projectID, 'project');
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td><?php echo zget($users, $program->PM);?></td>
|
||||
<td class='text-left'><?php echo $program->budget ? $program->budget . ' ' . zget($lang->program->unitList, $program->budgetUnit) : '';?></td>
|
||||
<td class='text-left'><?php echo $program->budget != 0 ? $program->budget . ' ' . zget($lang->program->unitList, $program->budgetUnit) : '';?></td>
|
||||
<td class='c-status'><span class="status-program status-<?php echo $program->status?>"><?php echo zget($lang->project->statusList, $program->status, '');?></span></td>
|
||||
<td><?php echo $program->begin;?></td>
|
||||
<td><?php echo $program->end == LONG_TIME ? $lang->program->PRJLongTime : $program->end;?></td>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('budget', '', "class='form-control'" . (strpos($requiredFields, 'budget') !== false ? ' required' : ''));?>
|
||||
<span class='input-group-addon'></span>
|
||||
<?php echo html::select('budgetUnit', $lang->program->unitList, empty($parentProgram->budgetUnit) ? 'yuan' : $parentProgram->budgetUnit, "class='form-control'");?>
|
||||
<?php echo html::select('budgetUnit', $lang->program->unitList, empty($parentProgram->budgetUnit) ? 'wanyuan' : $parentProgram->budgetUnit, "class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<th><?php echo $lang->program->PGMBudget;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('budget', $program->budget ? $program->budget : '', "class='form-control'" . (strpos($requiredFields, 'budget') !== false ? ' required' : '') . ($program->budget == 0 ? 'disabled' : ''));?>
|
||||
<?php echo html::input('budget', $program->budget != 0 ? $program->budget : '', "class='form-control'" . (strpos($requiredFields, 'budget') !== false ? ' required' : '') . ($program->budget == 0 ? 'disabled' : ''));?>
|
||||
<span class='input-group-addon'></span>
|
||||
<?php echo html::select('budgetUnit', $lang->program->unitList, $program->budgetUnit, "class='form-control'");?>
|
||||
</div>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php foreach($lang->product->featureBar['all'] as $key => $label):?>
|
||||
<?php $active = $key == $browseType ? 'btn-active-text' : '';?>
|
||||
<?php if($key == $browseType) $label .= " <span class='label label-light label-badge'>{$pager->recTotal}</span>";?>
|
||||
<?php echo html::a(inlink("pgmproduct", "programID=$program->id&browseType=$key&orderBy=$orderBy"), "<span class='text'>{$label}</span>", '', "class='btn btn-link $active'");?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
@@ -40,7 +41,6 @@
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
<th class="text-left"><?php common::printOrderLink('name', $orderBy, $vars, $lang->product->name);?></th>
|
||||
<th class='w-200px text-left' title='<?php echo $lang->product->program;?>'><?php echo $lang->product->program;?></th>
|
||||
<th class='w-120px' title='<?php echo $lang->product->activeStoriesTitle;?>'><?php echo $lang->product->activeStories;?></th>
|
||||
<th class='w-120px' title='<?php echo $lang->product->changedStoriesTitle;?>'><?php echo $lang->product->changedStories;?></th>
|
||||
<th class='w-100px' title='<?php echo $lang->product->draftStoriesTitle;?>'><?php echo $lang->product->draftStories;?></th>
|
||||
@@ -65,7 +65,6 @@
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class="c-name" title='<?php echo $product->name?>'><?php echo html::a($this->createLink('product', 'browse', 'product=' . $product->id), $product->name);?></td>
|
||||
<td class="c-name"><?php echo $program->name;?></td>
|
||||
<td><?php echo $product->stories['active'];?></td>
|
||||
<td><?php echo $product->stories['changed'];?></td>
|
||||
<td><?php echo $product->stories['draft'];?></td>
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('budget', '', "class='form-control'" . (strpos($requiredFields, 'budget') !== false ? ' required' : ''));?>
|
||||
<span class='input-group-addon'></span>
|
||||
<?php echo html::select('budgetUnit', $lang->program->unitList, empty($parentProgram->budgetUnit) ? 'yuan' : $parentProgram->budgetUnit, "class='form-control'");?>
|
||||
<?php echo html::select('budgetUnit', $lang->program->unitList, empty($parentProgram->budgetUnit) ? 'wanyuan' : $parentProgram->budgetUnit, "class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
<td class='muted'></td>
|
||||
|
||||
@@ -399,7 +399,7 @@ class projectModel extends model
|
||||
$member->hours = $this->config->project->defaultWorkhours;
|
||||
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
|
||||
|
||||
$this->addExecutionMembers($this->session->PRJ, array($member));
|
||||
$this->addProjectMembers($this->session->PRJ, array($member));
|
||||
}
|
||||
|
||||
/* Create doc lib. */
|
||||
@@ -2377,7 +2377,7 @@ class projectModel extends model
|
||||
/* Add iteration or phase team members to the project team. */
|
||||
if($projectType == 'stage' || $projectType == 'sprint')
|
||||
{
|
||||
$this->addExecutionMembers($project->project, $projectMember);
|
||||
$this->addProjectMembers($project->project, $projectMember);
|
||||
if($project->acl != 'open') $this->updateUserView($projectID, 'sprint', $changedAccounts);
|
||||
}
|
||||
}
|
||||
@@ -2390,10 +2390,10 @@ class projectModel extends model
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function addExecutionMembers($executionID = 0, $members = array())
|
||||
public function addProjectMembers($projectID = 0, $members = array())
|
||||
{
|
||||
$executionType = 'project';
|
||||
$oldJoin = $this->dao->select('`account`, `join`')->from(TABLE_TEAM)->where('root')->eq($executionID)->andWhere('type')->eq($executionType)->fetchPairs();
|
||||
$projectType = 'project';
|
||||
$oldJoin = $this->dao->select('`account`, `join`')->from(TABLE_TEAM)->where('root')->eq($projectID)->andWhere('type')->eq($projectType)->fetchPairs();
|
||||
|
||||
$accounts = array();
|
||||
foreach($members as $account => $member)
|
||||
@@ -2401,8 +2401,8 @@ class projectModel extends model
|
||||
if(isset($oldJoin[$member->account])) continue;
|
||||
|
||||
$accounts[] = $member->account;
|
||||
$member->root = $executionID;
|
||||
$member->type = $executionType;
|
||||
$member->root = $projectID;
|
||||
$member->type = $projectType;
|
||||
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
|
||||
}
|
||||
|
||||
@@ -2412,8 +2412,8 @@ class projectModel extends model
|
||||
$changedAccounts = array_merge($changedAccounts, array_diff($oldAccounts, $accounts));
|
||||
$changedAccounts = array_unique($changedAccounts);
|
||||
|
||||
$this->loadModel('user')->updateUserView($executionID, $executionType, $changedAccounts);
|
||||
$linkedProducts = $this->loadModel('product')->getProductPairsByProject($executionID);
|
||||
$this->loadModel('user')->updateUserView($projectID, $projectType, $changedAccounts);
|
||||
$linkedProducts = $this->loadModel('product')->getProductPairsByProject($projectID);
|
||||
if(!empty($linkedProducts)) $this->user->updateUserView(array_keys($linkedProducts), 'product', $changedAccounts);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ $config->release = new stdclass();
|
||||
$config->release->create = new stdclass();
|
||||
$config->release->edit = new stdclass();
|
||||
$config->release->create->requiredFields = 'name,date';
|
||||
$config->release->edit->requiredFields = 'name,date,build';
|
||||
$config->release->edit->requiredFields = 'name,date';
|
||||
|
||||
$config->release->editor = new stdclass();
|
||||
$config->release->editor->create = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
|
||||
@@ -77,15 +77,9 @@ class release extends control
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('view', "releaseID=$releaseID")));
|
||||
}
|
||||
|
||||
$builds = $this->loadModel('build')->getProductBuildPairs($productID, $branch, 'notrunk|withbranch', false);
|
||||
$releaseBuilds = $this->release->getReleaseBuilds($productID, $branch);
|
||||
foreach($releaseBuilds as $build) unset($builds[$build]);
|
||||
unset($builds['trunk']);
|
||||
|
||||
$this->commonAction($productID, $branch);
|
||||
$this->view->title = $this->view->product->name . $this->lang->colon . $this->lang->release->create;
|
||||
$this->view->position[] = $this->lang->release->create;
|
||||
$this->view->builds = $builds;
|
||||
$this->view->productID = $productID;
|
||||
$this->view->lastRelease = $this->release->getLast($productID, $branch);
|
||||
$this->display();
|
||||
@@ -119,16 +113,13 @@ class release extends control
|
||||
$this->loadModel('bug');
|
||||
$this->loadModel('build');
|
||||
|
||||
/* Get release and build. */
|
||||
/* Get release. */
|
||||
$release = $this->release->getById((int)$releaseID);
|
||||
$this->commonAction($release->product, $release->branch);
|
||||
$build = $this->build->getById($release->build);
|
||||
|
||||
$this->view->title = $this->view->product->name . $this->lang->colon . $this->lang->release->edit;
|
||||
$this->view->position[] = $this->lang->release->edit;
|
||||
$this->view->release = $release;
|
||||
$this->view->build = $build;
|
||||
$this->view->builds = $this->loadModel('build')->getProductBuildPairs($release->product, $release->branch, 'notrunk|withbranch', false);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
@@ -114,9 +114,6 @@ class releaseModel extends model
|
||||
$branch = (int)$branch;
|
||||
$buildID = 0;
|
||||
|
||||
/* Check build if build is required. */
|
||||
if(strpos($this->config->release->create->requiredFields, 'build') !== false and $this->post->build == false) return dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->release->build);
|
||||
|
||||
/* Check date must be not more than today. */
|
||||
if($this->post->date > date('Y-m-d')) return dao::$errors[] = $this->lang->release->errorDate;
|
||||
|
||||
|
||||
@@ -31,10 +31,6 @@
|
||||
<?php if($lastRelease) echo '(' . $lang->release->last . ': ' . $lastRelease->name . ')';?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->build;?></th>
|
||||
<td><?php echo html::select('build', $builds, '', "class='form-control chosen'");?></td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->date;?></th>
|
||||
<td><?php echo html::input('date', helper::today(), "class='form-control form-date' required");?></td><td></td>
|
||||
|
||||
@@ -35,10 +35,6 @@
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->build;?></th>
|
||||
<td><?php echo html::select('build', $builds, $release->build, "class='form-control chosen' required"); ?></td><td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->date;?></th>
|
||||
<td><?php echo html::input('date', $release->date, "class='form-control form-date' required");?></td><td></td>
|
||||
|
||||
@@ -246,6 +246,8 @@ class riskModel extends model
|
||||
$riskList = $this->dao->select('*')->from(TABLE_RISK)
|
||||
->where('deleted')->eq('0')
|
||||
->andWhere($type)->eq($this->app->user->account)->fi()
|
||||
->beginIF($this->app->rawMethod == 'contribute')->andWhere("status")->in('closed,canceled')->fi()
|
||||
->beginIF($this->app->rawMethod == 'work')->andWhere("status")->in('active,hangup')->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll();
|
||||
|
||||
@@ -2503,6 +2503,8 @@ class storyModel extends model
|
||||
->beginIF($type == 'reviewedBy')->andWhere("CONCAT(',', reviewedBy, ',')")->like("%,$account,%")->fi()
|
||||
->beginIF($type == 'closedBy')->andWhere('closedBy')->eq($account)->fi()
|
||||
->fi()
|
||||
->beginIF($this->app->rawMethod == 'contribute')->andWhere("t1.status")->eq('closed')->fi()
|
||||
->beginIF($this->app->rawMethod == 'work')->andWhere("t1.status")->in('draft,active,changed')->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll('id');
|
||||
|
||||
@@ -2072,6 +2072,8 @@ class taskModel extends model
|
||||
->orWhere('t1.finishedList')->like("%,{$account},%")
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->beginIF($this->app->rawMethod == 'contribute')->andWhere("t1.status")->in('closed,done,cancel')->fi()
|
||||
->beginIF($this->app->rawMethod == 'work')->andWhere("t1.status")->in('wait,doing,pause')->fi()
|
||||
->beginIF($type != 'all' and $type != 'finishedBy')->andWhere("t1.`$type`")->eq($account)->fi()
|
||||
->orderBy($orderBy)
|
||||
->beginIF($limit > 0)->limit($limit)->fi()
|
||||
|
||||
@@ -655,6 +655,10 @@ class upgradeModel extends model
|
||||
$this->processBuildTable();
|
||||
$this->processSprintConcept();
|
||||
$this->appendExec('20_0_beta1');
|
||||
case '20_0_beta3':
|
||||
$this->saveLogs('Execute 20_0_beta3');
|
||||
$this->adjustBudget();
|
||||
$this->appendExec('20_0_beta3');
|
||||
}
|
||||
|
||||
$this->deletePatch();
|
||||
@@ -4405,4 +4409,31 @@ class upgradeModel extends model
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adjust budget units and values.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function adjustBudget()
|
||||
{
|
||||
$budgets = $this->dao->select('id,budget,budgetUnit')->from(TABLE_PROJECT)
|
||||
->where('type')->in('project,program')
|
||||
->fetchAll('id');
|
||||
|
||||
foreach($budgets as $id => $budget)
|
||||
{
|
||||
$data = array();
|
||||
if($budget->budgetUnit == 'yuan')
|
||||
{
|
||||
$data['budget'] = number_format($budget->budget / 10000, 2);
|
||||
$data['budgetUnit'] = 'wanyuan';
|
||||
}
|
||||
|
||||
if($data) $this->dao->update(TABLE_PROJECT)->data($data)->where('id')->eq($id)->exec();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user