Merge branch '15.0.beta3' of http://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3
This commit is contained in:
@@ -39,7 +39,6 @@ ALTER TABLE `zt_webhook` CHANGE `projects` `executions` mediumint(8) unsigned NO
|
||||
ALTER TABLE `zt_task` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_doclib` ADD `project` mediumint(8) unsigned NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_doc` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_story` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_bug` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_case` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testtask` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
|
||||
@@ -807,7 +807,6 @@ CREATE TABLE IF NOT EXISTS `zt_stakeholder` (
|
||||
-- DROP TABLE IF EXISTS `zt_story`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_story` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`project` mediumint(8) unsigned NOT NULL,
|
||||
`parent` mediumint(9) NOT NULL default '0',
|
||||
`product` mediumint(8) unsigned NOT NULL default '0',
|
||||
`branch` mediumint(8) unsigned NOT NULL default '0',
|
||||
@@ -1550,7 +1549,6 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1,'program','whitelist'),
|
||||
(1,'program','unbindWhielist'),
|
||||
(1,'program','unlinkStakeholder'),
|
||||
(1,'program','view'),
|
||||
(1,'project','activate'),
|
||||
(1,'project','all'),
|
||||
(1,'project','batchedit'),
|
||||
@@ -2358,7 +2356,6 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(4,'program','whitelist'),
|
||||
(4,'program','unbindWhielist'),
|
||||
(4,'program','unlinkStakeholder'),
|
||||
(4,'program','view'),
|
||||
(4,'project','activate'),
|
||||
(4,'project','all'),
|
||||
(4,'project','batchedit'),
|
||||
@@ -4147,5 +4144,3 @@ INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'URSR', '6');
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'unitList', 'CNY,USD');
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'defaultCurrency', 'CNY');
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1');
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRExecution', '1');
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
*/
|
||||
|
||||
helper::import(dirname(dirname(__FILE__)) . '/base/front/front.class.php');
|
||||
|
||||
/**
|
||||
* html类,生成html标签。
|
||||
* The html class, to build html tags.
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<th class='text-left'><?php echo $lang->testtask->product;?></th>
|
||||
<?php endif;?>
|
||||
<?php if($longBlock):?>
|
||||
<th class='text-left'><?php echo $lang->testtask->project?></th>
|
||||
<th class='text-left'><?php echo $lang->testtask->execution?></th>
|
||||
<?php endif;?>
|
||||
<th class='text-left'><?php echo $lang->testtask->build;?></th>
|
||||
<th class='w-date'><?php echo $lang->testtask->status;?></th>
|
||||
|
||||
@@ -144,21 +144,21 @@ class buildModel extends model
|
||||
$this->session->set('projectBuildForm', $query->form);
|
||||
}
|
||||
}
|
||||
if($this->session->PRJBuildQuery == false) $this->session->set('projectBuildQuery', ' 1 = 1');
|
||||
if($this->session->projectBuildQuery == false) $this->session->set('projectBuildQuery', ' 1 = 1');
|
||||
|
||||
$buildQuery = $this->session->PRJBuildQuery;
|
||||
$buildQuery = $this->session->projectBuildQuery;
|
||||
|
||||
/* Distinguish between repeated fields. */
|
||||
$fields = array('id' => '`id`', 'name' => '`name`', 'product' => '`product`', 'desc' => '`desc`', 'project' => '`project`');
|
||||
foreach($fields as $field)
|
||||
{
|
||||
if(strpos($this->session->PRJBuildQuery, $field) !== false)
|
||||
if(strpos($this->session->projectBuildQuery, $field) !== false)
|
||||
{
|
||||
$buildQuery = str_replace($field, "t1." . $field, $buildQuery);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->getExecutionBuilds($executionID, 'bysearch', $buildQuery);
|
||||
return $this->getProjectBuilds($projectID, 'bysearch', $buildQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -122,7 +122,7 @@ class caselibModel extends model
|
||||
{
|
||||
$dropMenuLink = helper::createLink('caselib', 'ajaxGetDropMenu', "objectID=$libID&module=caselib&method=browse");
|
||||
|
||||
$output = "<div class='btn-group header-angle-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentLibName}'><span class='text'><i class='icon icon-product'></i> {$currentLibName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output = "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentLibName}'><span class='text'><i class='icon icon-product'></i> {$currentLibName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
$this->lang->qa->switcherMenu = $output;
|
||||
|
||||
+31
-27
@@ -155,9 +155,9 @@ $lang->dividerMenu = ',qa,report,admin,';
|
||||
|
||||
/* Program set menu. */
|
||||
$lang->program = new stdclass();
|
||||
$lang->program->menu = new stdclass();
|
||||
//$lang->program->menu->index = 'Dashboard|program|index|';
|
||||
$lang->program->menu->browse = array('link' => 'Program|program|browse|');
|
||||
$lang->program->homeMenu = new stdclass();
|
||||
//$lang->program->homeMenu->index = 'Dashboard|program|index|';
|
||||
$lang->program->homeMenu->browse = array('link' => 'Program|program|browse|');
|
||||
|
||||
$lang->project = new stdclass();
|
||||
$lang->project->menu = new stdclass();
|
||||
@@ -172,36 +172,36 @@ else
|
||||
|
||||
$lang->project->dividerMenu = ',execution,programplan,doc,other,';
|
||||
|
||||
$lang->program->viewMenu = new stdclass();
|
||||
$lang->program->viewMenu->product = array('link' => 'Product|program|product|program=%s', 'alias' => 'view');
|
||||
$lang->program->viewMenu->project = array('link' => "Project|program|project|program=%s");
|
||||
$lang->program->viewMenu->personnel = array('link' => "Member|personnel|invest|program=%s");
|
||||
$lang->program->viewMenu->stakeholder = array('link' => "Stakeholder|program|stakeholder|program=%s", 'alias' => 'createstakeholder');
|
||||
$lang->program->menu = new stdclass();
|
||||
$lang->program->menu->product = array('link' => 'Product|program|product|programID=%s', 'alias' => 'view');
|
||||
$lang->program->menu->project = array('link' => "Project|program|project|programID=%s");
|
||||
$lang->program->menu->personnel = array('link' => "Member|personnel|invest|programID=%s");
|
||||
$lang->program->menu->stakeholder = array('link' => "Stakeholder|program|stakeholder|programID=%s", 'alias' => 'createstakeholder');
|
||||
|
||||
$lang->personnel = new stdClass();
|
||||
$lang->personnel->menu = new stdClass();
|
||||
$lang->personnel->menu->invest = array('link' => "Investment|personnel|invest|program=%s");
|
||||
$lang->personnel->menu->accessible = array('link' => "Accessible|personnel|accessible|program=%s");
|
||||
$lang->personnel->menu->whitelist = array('link' => "Whitelist|personnel|whitelist|program=%s", 'alias' => 'addwhitelist');
|
||||
$lang->personnel->menu->invest = array('link' => "Investment|personnel|invest|programID=%s");
|
||||
$lang->personnel->menu->accessible = array('link' => "Accessible|personnel|accessible|programID=%s");
|
||||
$lang->personnel->menu->whitelist = array('link' => "Whitelist|personnel|whitelist|program=ID%s", 'alias' => 'addwhitelist');
|
||||
|
||||
/* Scrum menu. */
|
||||
$lang->product = new stdclass();
|
||||
$lang->product->menu = new stdclass();
|
||||
$lang->product->menu->home = 'Dashboard|product|index|';
|
||||
$lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit');
|
||||
$lang->product->homeMenu = new stdclass();
|
||||
$lang->product->homeMenu->home = 'Dashboard|product|index|';
|
||||
$lang->product->homeMenu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit');
|
||||
|
||||
$lang->product->viewMenu = new stdclass();
|
||||
$lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s');
|
||||
$lang->product->menu = new stdclass();
|
||||
$lang->product->menu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s');
|
||||
if($config->URAndSR) $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan');
|
||||
$lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release');
|
||||
$lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s';
|
||||
$lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s";
|
||||
$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s");
|
||||
$lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
|
||||
$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s';
|
||||
$lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit');
|
||||
$lang->product->menu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->menu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = 'Roadmap|product|roadmap|productID=%s';
|
||||
$lang->product->menu->project = "Project|product|project|status=all&productID=%s";
|
||||
$lang->product->menu->track = array('link' => "Track|story|track|productID=%s");
|
||||
$lang->product->menu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
|
||||
$lang->product->menu->dynamic = 'Dynamic|product|dynamic|productID=%s';
|
||||
$lang->product->menu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit');
|
||||
|
||||
$lang->product->setMenu = new stdclass();
|
||||
$lang->product->setMenu->view = array('link' => 'View|product|view|productID={PRODUCT}', 'alias' => 'edit');
|
||||
@@ -333,8 +333,11 @@ $lang->story->menu = $lang->product->menu;
|
||||
|
||||
/* Project menu settings. */
|
||||
$lang->execution = new stdclass();
|
||||
$lang->execution->menu = new stdclass();
|
||||
$lang->execution->homeMenu = new stdclass();
|
||||
$lang->execution->homeMenu->index = 'Index|execution|index|';
|
||||
$lang->execution->homeMenu->list = array('link' => 'Execution|execution|all|', 'alias' => 'batchedit');
|
||||
|
||||
$lang->execution->menu = new stdclass();
|
||||
$lang->execution->menu->task = array('link' => 'Task|execution|task|executionID=%s', 'subModule' => 'task,tree', 'alias' => 'importtask,importbug');
|
||||
$lang->execution->menu->kanban = array('link' => 'Kanban|execution|kanban|executionID=%s');
|
||||
$lang->execution->menu->burn = array('link' => 'Burndown|execution|burn|executionID=%s');
|
||||
@@ -632,7 +635,6 @@ $lang->navGroup->tree = 'product';
|
||||
$lang->navGroup->project = 'project';
|
||||
$lang->navGroup->qa = 'project';
|
||||
$lang->navGroup->bug = 'project';
|
||||
$lang->navGroup->doc = 'project';
|
||||
$lang->navGroup->testcase = 'project';
|
||||
$lang->navGroup->testtask = 'project';
|
||||
$lang->navGroup->testreport = 'project';
|
||||
@@ -663,6 +665,8 @@ $lang->navGroup->execution = 'execution';
|
||||
$lang->navGroup->task = 'execution';
|
||||
$lang->navGroup->build = 'execution';
|
||||
|
||||
$lang->navGroup->doc = 'doc';
|
||||
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
$lang->navGroup->cmcl = 'system';
|
||||
|
||||
@@ -59,6 +59,12 @@ $lang->my->menuOrder[40] = 'follow';
|
||||
$lang->my->menuOrder[45] = 'contacts';
|
||||
$lang->todo->menuOrder = $lang->my->menuOrder;
|
||||
|
||||
/* program menu order. */
|
||||
$lang->program->menuOrder[5] = 'product';
|
||||
$lang->program->menuOrder[10] = 'project';
|
||||
$lang->program->menuOrder[15] = 'personnel';
|
||||
$lang->program->menuOrder[20] = 'stakeholder';
|
||||
|
||||
/* product menu order. */
|
||||
$lang->product->menuOrder[5] = 'dashboard';
|
||||
$lang->product->menuOrder[10] = 'story';
|
||||
|
||||
@@ -155,9 +155,9 @@ $lang->dividerMenu = ',qa,report,admin,';
|
||||
|
||||
/* Program set menu. */
|
||||
$lang->program = new stdclass();
|
||||
$lang->program->menu = new stdclass();
|
||||
//$lang->program->menu->index = '仪表盘|program|index|';
|
||||
$lang->program->menu->browse = array('link' => '项目集|program|browse|');
|
||||
$lang->program->homeMenu = new stdclass();
|
||||
//$lang->program->homeMenu->index = '仪表盘|program|index|';
|
||||
$lang->program->homeMenu->browse = array('link' => '项目集|program|browse|');
|
||||
|
||||
$lang->project = new stdclass();
|
||||
$lang->project->menu = new stdclass();
|
||||
@@ -172,36 +172,36 @@ else
|
||||
|
||||
$lang->project->dividerMenu = ',execution,programplan,doc,dynamic,';
|
||||
|
||||
$lang->program->viewMenu = new stdclass();
|
||||
$lang->program->viewMenu->product = array('link' => '产品|program|product|program=%s', 'alias' => 'view');
|
||||
$lang->program->viewMenu->project = array('link' => "项目|program|project|program=%s");
|
||||
$lang->program->viewMenu->personnel = array('link' => "人员|personnel|invest|program=%s");
|
||||
$lang->program->viewMenu->stakeholder = array('link' => "干系人|program|stakeholder|program=%s", 'alias' => 'createstakeholder');
|
||||
$lang->program->menu = new stdclass();
|
||||
$lang->program->menu->product = array('link' => '产品|program|product|programID=%s', 'alias' => 'view');
|
||||
$lang->program->menu->project = array('link' => "项目|program|project|programID=%s");
|
||||
$lang->program->menu->personnel = array('link' => "人员|personnel|invest|programID=%s");
|
||||
$lang->program->menu->stakeholder = array('link' => "干系人|program|stakeholder|programID=%s", 'alias' => 'createstakeholder');
|
||||
|
||||
$lang->personnel = new stdClass();
|
||||
$lang->personnel->menu = new stdClass();
|
||||
$lang->personnel->menu->invest = array('link' => "投入人员|personnel|invest|program=%s");
|
||||
$lang->personnel->menu->accessible = array('link' => "可访问人员|personnel|accessible|program=%s");
|
||||
$lang->personnel->menu->whitelist = array('link' => "白名单|personnel|whitelist|program=%s", 'alias' => 'addwhitelist');
|
||||
$lang->personnel->menu->invest = array('link' => "投入人员|personnel|invest|programID=%s");
|
||||
$lang->personnel->menu->accessible = array('link' => "可访问人员|personnel|accessible|programID=%s");
|
||||
$lang->personnel->menu->whitelist = array('link' => "白名单|personnel|whitelist|objectID=%s", 'alias' => 'addwhitelist');
|
||||
|
||||
/* Scrum menu. */
|
||||
$lang->product = new stdclass();
|
||||
$lang->product->menu = new stdclass();
|
||||
$lang->product->menu->home = '仪表盘|product|index|';
|
||||
$lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit,manageline');
|
||||
$lang->product->homeMenu = new stdclass();
|
||||
$lang->product->homeMenu->home = '仪表盘|product|index|';
|
||||
$lang->product->homeMenu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit,manageline');
|
||||
|
||||
$lang->product->viewMenu = new stdclass();
|
||||
$lang->product->viewMenu->dashboard = array('link' => '仪表盘|product|dashboard|productID=%s');
|
||||
if($config->URAndSR) $lang->product->viewMenu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->viewMenu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->viewMenu->plan = array('link' => "计划|productplan|browse|productID=%s", 'subModule' => 'productplan');
|
||||
$lang->product->viewMenu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->viewMenu->roadmap = '路线图|product|roadmap|productID=%s';
|
||||
$lang->product->viewMenu->project = "项目|product|project|status=all&productID=%s";
|
||||
$lang->product->viewMenu->track = array('link' => "矩阵|story|track|productID=%s");
|
||||
$lang->product->viewMenu->doc = array('link' => '文档|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
|
||||
$lang->product->viewMenu->dynamic = '动态|product|dynamic|productID=%s';
|
||||
$lang->product->viewMenu->set = array('link' => '设置|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit');
|
||||
$lang->product->menu = new stdclass();
|
||||
$lang->product->menu->dashboard = array('link' => '仪表盘|product|dashboard|productID=%s');
|
||||
if($config->URAndSR) $lang->product->menu->requirement = array('link' => "$lang->URCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->menu->story = array('link' => "$lang->SRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->menu->plan = array('link' => "计划|productplan|browse|productID=%s", 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = '路线图|product|roadmap|productID=%s';
|
||||
$lang->product->menu->project = "项目|product|project|status=all&productID=%s";
|
||||
$lang->product->menu->track = array('link' => "矩阵|story|track|productID=%s");
|
||||
$lang->product->menu->doc = array('link' => '文档|doc|objectLibs|type=product&objectID=%s', 'subModule' => 'doc');
|
||||
$lang->product->menu->dynamic = '动态|product|dynamic|productID=%s';
|
||||
$lang->product->menu->set = array('link' => '设置|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit');
|
||||
|
||||
$lang->product->setMenu = new stdclass();
|
||||
$lang->product->setMenu->view = array('link' => '概况|product|view|productID={PRODUCT}', 'alias' => 'edit');
|
||||
@@ -213,7 +213,7 @@ $lang->release = new stdclass();
|
||||
$lang->branch = new stdclass();
|
||||
$lang->productplan = new stdclass();
|
||||
|
||||
$lang->release->menu = $lang->product->viewMenu;
|
||||
$lang->release->menu = $lang->product->menu;
|
||||
$lang->branch->menu = $lang->product->menu;
|
||||
$lang->productplan->menu = $lang->product->menu;
|
||||
|
||||
@@ -584,41 +584,6 @@ $lang->webhook = new stdclass();
|
||||
$lang->message = new stdclass();
|
||||
$lang->search = new stdclass();
|
||||
|
||||
/* 菜单分组。*/
|
||||
$lang->menugroup = new stdclass();
|
||||
$lang->menugroup->release = 'product';
|
||||
$lang->menugroup->story = 'product';
|
||||
$lang->menugroup->branch = 'product';
|
||||
$lang->menugroup->productplan = 'product';
|
||||
$lang->menugroup->task = 'project';
|
||||
$lang->menugroup->build = 'project';
|
||||
$lang->menugroup->convert = 'admin';
|
||||
$lang->menugroup->upgrade = 'admin';
|
||||
$lang->menugroup->user = 'company';
|
||||
$lang->menugroup->group = 'company';
|
||||
$lang->menugroup->bug = 'qa';
|
||||
$lang->menugroup->case = 'qa';
|
||||
$lang->menugroup->testreport = 'qa';
|
||||
$lang->menugroup->people = 'admin';
|
||||
$lang->menugroup->dept = 'company';
|
||||
$lang->menugroup->todo = 'my';
|
||||
$lang->menugroup->score = 'my';
|
||||
$lang->menugroup->action = 'admin';
|
||||
$lang->menugroup->backup = 'admin';
|
||||
$lang->menugroup->cron = 'admin';
|
||||
$lang->menugroup->extension = 'admin';
|
||||
$lang->menugroup->custom = 'admin';
|
||||
$lang->menugroup->mail = 'admin';
|
||||
$lang->menugroup->dev = 'admin';
|
||||
$lang->menugroup->entry = 'admin';
|
||||
$lang->menugroup->webhook = 'admin';
|
||||
$lang->menugroup->message = 'admin';
|
||||
|
||||
$lang->menugroup->repo = 'ci';
|
||||
$lang->menugroup->jenkins = 'ci';
|
||||
$lang->menugroup->compile = 'ci';
|
||||
$lang->menugroup->job = 'ci';
|
||||
|
||||
/* Nav group.*/
|
||||
$lang->navGroup = new stdclass();
|
||||
$lang->navGroup->my = 'my';
|
||||
@@ -638,7 +603,6 @@ $lang->navGroup->tree = 'product';
|
||||
$lang->navGroup->project = 'project';
|
||||
$lang->navGroup->qa = 'project';
|
||||
$lang->navGroup->bug = 'project';
|
||||
$lang->navGroup->doc = 'project';
|
||||
$lang->navGroup->testcase = 'project';
|
||||
$lang->navGroup->testtask = 'project';
|
||||
$lang->navGroup->testreport = 'project';
|
||||
@@ -669,6 +633,8 @@ $lang->navGroup->execution = 'execution';
|
||||
$lang->navGroup->task = 'execution';
|
||||
$lang->navGroup->build = 'execution';
|
||||
|
||||
$lang->navGroup->doc = 'doc';
|
||||
|
||||
$lang->navGroup->company = 'system';
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
@@ -901,7 +867,7 @@ $lang->menu->scrum = new stdclass();
|
||||
$lang->menu->scrum->index = '仪表盘|project|index|project={PROJECT}';
|
||||
$lang->menu->scrum->execution = "$lang->executionCommon|execution|all|status=all&projectID={PROJECT}&from=project";
|
||||
$lang->menu->scrum->projectstory = array('link' => $lang->SRCommon . '|projectstory|story', 'alias' => 'story,track');
|
||||
$lang->menu->scrum->doc = '文档|doc|index|';
|
||||
$lang->menu->scrum->doc = array('link' => '文档|doc|objectLibs|type=project&objectID={PROJECT}', 'subModule' => 'doc');
|
||||
$lang->menu->scrum->qa = array('link' => '测试|qa|index', 'subModule' => 'testcase,testtask');
|
||||
$lang->menu->scrum->ci = '代码|repo|browse';
|
||||
$lang->menu->scrum->projectbuild = array('link' => '版本|projectbuild|browse|project={PROJECT}');
|
||||
|
||||
+78
-96
@@ -625,53 +625,46 @@ class commonModel extends model
|
||||
/**
|
||||
* Print the main menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @param string $currentModule
|
||||
* @param string $currentMethod
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printMainmenu($moduleName, $methodName = '')
|
||||
public static function printMainMenu($currentModule, $currentMethod)
|
||||
{
|
||||
global $app, $lang, $config;
|
||||
|
||||
if($moduleName == 'product' and $methodName == 'create') return;
|
||||
|
||||
/* Set the main main menu. */
|
||||
$mainMenu = $moduleName;
|
||||
$currentModule = $app->rawModule;
|
||||
$currentMethod = $app->rawMethod;
|
||||
|
||||
/* Set main menu by group. */
|
||||
$group = isset($lang->navGroup->$moduleName) ? $lang->navGroup->$moduleName : $moduleName;
|
||||
self::setMainMenuByGroup($group, $moduleName, $methodName);
|
||||
/* Set main menu by openApp and module. */
|
||||
$openApp = $app->openApp ? $app->openApp : $lang->navGroup->$currentModule;
|
||||
self::setMainMenuByOpenApp($openApp, $currentModule, $currentMethod);
|
||||
|
||||
/* Print all main menus. */
|
||||
$menu = customModel::getMainMenu();
|
||||
$activeName = 'active';
|
||||
$lastMenu = end($menu);
|
||||
if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName;
|
||||
|
||||
echo "<ul class='nav nav-default'>\n";
|
||||
foreach($menu as $menuItem)
|
||||
{
|
||||
if(isset($menuItem->hidden) && $menuItem->hidden) continue;
|
||||
if(empty($menuItem->link)) continue;
|
||||
if(isset($lang->$group->dividerMenu) and strpos($lang->$group->dividerMenu, ",{$menuItem->name},") !== false) echo "<li class='divider'></li>";
|
||||
if(isset($lang->$openApp->dividerMenu) and strpos($lang->$openApp->dividerMenu, ",{$menuItem->name},") !== false) echo "<li class='divider'></li>";
|
||||
|
||||
/* Init the these vars. */
|
||||
$alias = isset($menuItem->alias) ? $menuItem->alias : '';
|
||||
$subModule = isset($menuItem->subModule) ? explode(',', $menuItem->subModule) : array();
|
||||
$class = isset($menuItem->class) ? $menuItem->class : '';
|
||||
$active = $menuItem->name == $mainMenu ? "active" : '';
|
||||
if($subModule and in_array($currentModule, $subModule)) $active = 'active';
|
||||
$active = $menuItem->name == $currentModule ? "active" : '';
|
||||
if($subModule) $active = in_array($currentModule, $subModule) ? 'active' : '';
|
||||
|
||||
if($menuItem->link)
|
||||
{
|
||||
$target = '';
|
||||
$module = '';
|
||||
$method = '';
|
||||
$link = commonModel::createMenuLink($menuItem, $group);
|
||||
$link = commonModel::createMenuLink($menuItem, $openApp);
|
||||
if(is_array($menuItem->link))
|
||||
{
|
||||
if(isset($menuItem->link['target'])) $target = $menuItem->link['target'];
|
||||
@@ -716,7 +709,8 @@ class commonModel extends model
|
||||
if($currentModule == 'product' and $currentMethod == 'browse') $active = '';
|
||||
if($currentModule == 'story') $active = '';
|
||||
|
||||
$menuItemHtml = "<li class='$class $active' data-id='$menuItem->name'>" . html::a($link, $label, $target) . $subMenu . "</li>\n";
|
||||
$misc = $openApp != $lang->navGroup->$module ? "data-app='$openApp'" : '';
|
||||
$menuItemHtml = "<li class='$class $active' data-id='$menuItem->name'>" . html::a($link, $label, $target, $misc) . $subMenu . "</li>\n";
|
||||
|
||||
echo $menuItemHtml;
|
||||
}
|
||||
@@ -766,27 +760,25 @@ class commonModel extends model
|
||||
global $config, $lang, $app;
|
||||
$moduleName = $app->rawModule;
|
||||
$methodName = $app->rawMethod;
|
||||
$mainMenu = $moduleName;
|
||||
if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName;
|
||||
|
||||
/* Set main menu by group. */
|
||||
$group = isset($lang->navGroup->$moduleName) ? $lang->navGroup->$moduleName : '';
|
||||
if($moduleName == 'admin') return;
|
||||
if($group == 'repo' || $group == 'ops' || $group == 'feedback') return;
|
||||
if($group == 'my') self::getMyModuleMenu($moduleName, $methodName);
|
||||
if($group == 'project') self::getProjectModuleMenu($moduleName, $methodName);
|
||||
if($group == 'product')
|
||||
/* Set main menu by openApp. */
|
||||
$openApp = $app->openApp ? $app->openApp : $lang->navGroup->$moduleName;
|
||||
if(in_array($openApp, array('admin', 'repo', 'ops', 'feedback'))) return;
|
||||
|
||||
if($openApp == 'my') self::getMyModuleMenu($moduleName, $methodName);
|
||||
if($openApp == 'project') self::getProjectModuleMenu($moduleName, $methodName);
|
||||
if($openApp == 'product')
|
||||
{
|
||||
$lang->product->menu = $lang->product->setMenu;
|
||||
self::processMenuVars($lang->product->menu);
|
||||
}
|
||||
if($group == 'execution')
|
||||
if($openApp == 'execution')
|
||||
{
|
||||
if(in_array($methodName, array('grouptask', 'tree'))) $lang->execution->menu = $lang->execution->viewMenu;
|
||||
if(in_array($methodName, array('qa', 'bug', 'testtask', 'testcase', 'testreport'))) $lang->execution->menu = $lang->execution->qaMenu;
|
||||
if(in_array($methodName, array('view', 'manageproducts', 'team', 'whitelist', 'edit', 'managemembers', 'addwhitelist'))) $lang->execution->menu = self::processMenuVars($lang->execution->settingMenu);
|
||||
}
|
||||
if(strpos('qa|bug|testcase|testreport|testtask', $moduleName) !== false and $group == 'project')
|
||||
if(strpos('qa|bug|testcase|testreport|testtask', $moduleName) !== false and $openApp == 'project')
|
||||
{
|
||||
unset($lang->$moduleName->menu->testsuite);
|
||||
unset($lang->$moduleName->menu->caselib);
|
||||
@@ -842,7 +834,7 @@ class commonModel extends model
|
||||
$target = '';
|
||||
$module = '';
|
||||
$method = '';
|
||||
$link = commonModel::createMenuLink($menuItem, $group);
|
||||
$link = commonModel::createMenuLink($menuItem, $openApp);
|
||||
if(is_array($menuItem->link))
|
||||
{
|
||||
if(isset($menuItem->link['target'])) $target = $menuItem->link['target'];
|
||||
@@ -2300,80 +2292,20 @@ EOD;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set main menu by nav group.
|
||||
* Set main menu by openApp.
|
||||
*
|
||||
* @param string $group
|
||||
* @param string $openApp
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function setMainMenuByGroup($group, $moduleName, $methodName)
|
||||
public static function setMainMenuByOpenApp($openApp, $moduleName, $methodName)
|
||||
{
|
||||
global $lang, $config;
|
||||
if($group == 'my')
|
||||
{
|
||||
$lang->menu = $lang->my->menu;
|
||||
$lang->menuOrder = $lang->my->menuOrder;
|
||||
}
|
||||
if($group == 'system')
|
||||
{
|
||||
$lang->menu = $lang->system->menu;
|
||||
$lang->menuOrder = $lang->system->menuOrder;
|
||||
$lang->report->menu = $lang->measurement->menu;
|
||||
}
|
||||
if($group == 'doclib') return;
|
||||
if($group == 'report')
|
||||
{
|
||||
$lang->menu = $lang->report->menu;
|
||||
$lang->menuOrder = $lang->report->menuOrder;
|
||||
}
|
||||
if($group == 'qa')
|
||||
{
|
||||
$lang->menu = $lang->qa->menu;
|
||||
$lang->menuOrder = $lang->qa->menuOrder;
|
||||
}
|
||||
if($group == 'attend')
|
||||
{
|
||||
$lang->menu = $lang->attend->menu;
|
||||
$lang->menuOrder = $lang->attend->menuOrder;
|
||||
}
|
||||
if($group == 'admin')
|
||||
{
|
||||
$lang->menu = $lang->admin->menu;
|
||||
$lang->menuOrder = $lang->admin->menuOrder;
|
||||
}
|
||||
if($group == 'program')
|
||||
{
|
||||
$lang->menu = $lang->program->menu;
|
||||
}
|
||||
if($group == 'product')
|
||||
{
|
||||
$lang->menu = $lang->product->menu;
|
||||
$lang->menuOrder = $lang->product->menuOrder;
|
||||
}
|
||||
if($group == 'repo')
|
||||
{
|
||||
$lang->menu = $lang->repo->menu;
|
||||
$lang->menuOrder = $lang->repo->menuOrder;
|
||||
}
|
||||
if($group == 'ops')
|
||||
{
|
||||
$lang->menu = $lang->ops->menu;
|
||||
$lang->menuOrder = $lang->ops->menuOrder;
|
||||
}
|
||||
if($group == 'feedback')
|
||||
{
|
||||
$lang->menu = $lang->feedback->menu;
|
||||
$lang->menuOrder = $lang->feedback->menuOrder;
|
||||
}
|
||||
if($group == 'execution')
|
||||
{
|
||||
$lang->menu = $lang->execution->menu;
|
||||
$lang->menuOrder = $lang->execution->menuOrder;
|
||||
}
|
||||
if($group == 'project')
|
||||
|
||||
if($openApp == 'project')
|
||||
{
|
||||
if($config->systemMode == 'classic' or ($moduleName == 'project' and $methodName == 'browse'))
|
||||
{
|
||||
@@ -2383,7 +2315,36 @@ EOD;
|
||||
{
|
||||
$lang->menu = self::getProjectMainMenu($moduleName);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if(!isset($lang->$openApp->homeMenu))
|
||||
{
|
||||
$lang->menu = $lang->$openApp->menu;
|
||||
$lang->menuOrder = $lang->$openApp->menuOrder;
|
||||
return;
|
||||
}
|
||||
|
||||
if($methodName == 'create')
|
||||
{
|
||||
$lang->menu = $lang->$openApp->homeMenu;
|
||||
return;
|
||||
}
|
||||
|
||||
foreach($lang->$openApp->homeMenu as $menu)
|
||||
{
|
||||
$link = is_array($menu) ? $menu['link'] : $menu;
|
||||
$method = explode('|', $link)[2];
|
||||
|
||||
if($method == $methodName)
|
||||
{
|
||||
$lang->menu = $lang->$openApp->homeMenu;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$lang->menu = $lang->$openApp->menu;
|
||||
$lang->menuOrder = $lang->$openApp->menuOrder;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2519,6 +2480,27 @@ EOD;
|
||||
->fetchAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set objectID in current App.
|
||||
*
|
||||
* @param string $openApp
|
||||
* @param int $objectID
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
static public function setAppObjectID($openApp, $objectID)
|
||||
{
|
||||
global $lang;
|
||||
|
||||
foreach($lang->$openApp->menu as $label => $menu)
|
||||
{
|
||||
$lang->$openApp->menu->{$label}['link'] = is_array($menu) ? sprintf($menu['link'], $objectID) : sprintf($menu, $objectID);
|
||||
}
|
||||
|
||||
/* If objectID is set, cannot use homeMenu. */
|
||||
unset($lang->$openApp->homeMenu);
|
||||
}
|
||||
}
|
||||
|
||||
class common extends commonModel
|
||||
|
||||
@@ -8,13 +8,12 @@ include 'chosen.html.php';
|
||||
<?php $this->app->loadConfig('sso');?>
|
||||
<?php if(!empty($config->sso->redirect)) js::set('ssoRedirect', $config->sso->redirect);?>
|
||||
<?php
|
||||
$rawModule = zget($lang->navGroup, $app->rawModule);
|
||||
$isProgram = $rawModule == 'program';
|
||||
$isProduct = $rawModule == 'product';
|
||||
$isProject = $rawModule == 'project';
|
||||
$isExecution = $rawModule == 'execution';
|
||||
$isReport = $rawModule == 'report';
|
||||
$isQa = $rawModule == 'qa';
|
||||
$isProgram = $app->openApp == 'program';
|
||||
$isProduct = $app->openApp == 'product';
|
||||
$isProject = $app->openApp == 'project';
|
||||
$isExecution = $app->openApp == 'execution';
|
||||
$isReport = $app->openApp == 'report';
|
||||
$isQa = $app->openApp == 'qa';
|
||||
?>
|
||||
<header id='header'>
|
||||
<div id='mainHeader'>
|
||||
|
||||
@@ -184,7 +184,9 @@ class devModel extends model
|
||||
{
|
||||
$b++;
|
||||
$blocks[] = array();
|
||||
} else if($b == -1) {
|
||||
}
|
||||
else if($b == -1)
|
||||
{
|
||||
$b = 0;
|
||||
$blocks[] = array();
|
||||
}
|
||||
|
||||
+15
-27
@@ -30,7 +30,6 @@ class doc extends control
|
||||
$this->productID = $this->cookie->product ? $this->cookie->product : '0';
|
||||
$this->projectID = isset($_GET['project']) ? $_GET['project'] : 0;
|
||||
if($this->from == 'doc') $this->session->set('project', '');
|
||||
if(!$this->projectID) $this->lang->navGroup->doc = 'doc';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,17 +113,14 @@ class doc extends control
|
||||
/* According the from, set menus. */
|
||||
if($from == 'product')
|
||||
{
|
||||
$this->lang->navGroup->doc = 'product';
|
||||
$this->lang->doc->menuOrder = $this->lang->product->menuOrder;
|
||||
$this->product->setMenu($this->product->getPairs(), $productID);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->lang->noMenuModule[] = 'doc';
|
||||
$this->lang->set('menugroup.doc', 'product');
|
||||
}
|
||||
elseif($from == 'project')
|
||||
{
|
||||
$this->lang->navGroup->doc = 'project';
|
||||
$this->lang->doc->menu = $this->lang->project->menu;
|
||||
$this->lang->doc->menuOrder = $this->lang->project->menuOrder;
|
||||
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
|
||||
@@ -149,7 +145,7 @@ class doc extends control
|
||||
$sort = $this->loadModel('common')->appendOrder($orderBy);
|
||||
|
||||
/* Build the search form. */
|
||||
$actionURL = $this->createLink('doc', 'browse', "lib=$libID&browseType=bySearch&queryID=myQueryID&orderBy=$orderBy&from=$from");
|
||||
$actionURL = $this->createLink('doc', 'browse', "lib=$libID&browseType=bySearch&queryID=myQueryID&orderBy=$orderBy");
|
||||
$this->doc->buildSearchForm($libID, $this->libs, $queryID, $actionURL, $type);
|
||||
|
||||
$title = '';
|
||||
@@ -199,7 +195,7 @@ class doc extends control
|
||||
$this->view->browseType = $browseType;
|
||||
$this->view->param = $param;
|
||||
$this->view->type = $type;
|
||||
$this->view->from = $this->lang->navGroup->doc == 'project' ? 'project' : $from;
|
||||
$this->view->from = $from;
|
||||
$this->view->pager = $pager;
|
||||
$this->view->libs = $libs;
|
||||
$this->view->currentLib = $libID ? $lib : '';
|
||||
@@ -351,8 +347,7 @@ class doc extends control
|
||||
$this->lang->doc->menu = $this->lang->product->menu;
|
||||
$this->lang->doc->menuOrder = $this->lang->product->menuOrder;
|
||||
$this->product->setMenu($this->product->getPairs(), $lib->product);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($lib->product);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($lib->product);
|
||||
$this->lang->noMenuModule[] = 'doc';
|
||||
$this->lang->set('menugroup.doc', 'product');
|
||||
|
||||
@@ -439,8 +434,7 @@ class doc extends control
|
||||
$this->lang->navGroup->doc = 'product';
|
||||
$this->lang->doc->menuOrder = $this->lang->product->menuOrder;
|
||||
$this->product->setMenu($this->product->getPairs(), $objectID);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->noMenuModule[] = 'doc';
|
||||
$this->lang->set('menugroup.doc', 'product');
|
||||
}
|
||||
@@ -505,8 +499,7 @@ class doc extends control
|
||||
$this->lang->navGroup->doc = 'product';
|
||||
$this->lang->doc->menuOrder = $this->lang->product->menuOrder;
|
||||
$this->product->setMenu($this->product->getPairs(), $objectID);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->noMenuModule[] = 'doc';
|
||||
$this->lang->set('menugroup.doc', 'product');
|
||||
}
|
||||
@@ -836,8 +829,7 @@ class doc extends control
|
||||
$this->lang->navGroup->doc = 'product';
|
||||
$this->lang->doc->menuOrder = $this->lang->product->menuOrder;
|
||||
$this->product->setMenu($this->product->getPairs(), $objectID);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->noMenuModule[] = 'doc';
|
||||
$this->lang->set('menugroup.doc', 'product');
|
||||
}
|
||||
@@ -917,13 +909,12 @@ class doc extends control
|
||||
*
|
||||
* @param string $type
|
||||
* @param int $objectID
|
||||
* @param string $from
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function objectLibs($type, $objectID, $from = 'doc')
|
||||
public function objectLibs($type, $objectID)
|
||||
{
|
||||
$this->from = $from;
|
||||
$from = $this->app->openApp;
|
||||
setcookie('from', $from, $this->config->cookieLife, $this->config->webRoot, '', false, true);
|
||||
$this->session->set('docList', $this->app->getURI(true));
|
||||
|
||||
@@ -933,23 +924,20 @@ class doc extends control
|
||||
|
||||
if($from == 'product')
|
||||
{
|
||||
$this->lang->navGroup->doc = 'product';
|
||||
$this->lang->doc->menuOrder = $this->lang->product->menuOrder;
|
||||
$this->product->setMenu($this->product->getPairs(), $objectID);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($objectID);
|
||||
$this->lang->noMenuModule[] = 'doc';
|
||||
$this->lang->set('menugroup.doc', 'product');
|
||||
}
|
||||
elseif($from == 'project')
|
||||
{
|
||||
$this->lang->navGroup->doc = 'project';
|
||||
$this->lang->doc->menu = $this->lang->project->menu;
|
||||
$this->lang->doc->menuOrder = $this->lang->project->menuOrder;
|
||||
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
|
||||
$this->project->setMenu($this->project->getPairs($this->session->PRJ, 'all', 0, true), $objectID);
|
||||
$this->lang->set('menugroup.doc', 'project');
|
||||
}
|
||||
elseif($from == 'execution')
|
||||
{
|
||||
$this->lang->set('menugroup.doc', 'execution');
|
||||
}
|
||||
else
|
||||
{
|
||||
$crumb = html::a(inlink('allLibs', "type=$type"), $type == 'product' ? $this->lang->productCommon : $this->lang->executionCommon) . $this->lang->doc->separator;
|
||||
@@ -974,7 +962,7 @@ class doc extends control
|
||||
|
||||
$this->view->type = $type;
|
||||
$this->view->object = $object;
|
||||
$this->view->from = $this->lang->navGroup->doc == 'project' ? 'project' : $from;
|
||||
$this->view->from = $$from;
|
||||
$this->view->libs = $this->doc->getLibsByObject($type, $objectID);
|
||||
$this->view->canBeChanged = common::canModify($type, $object); // Determines whether an object is editable.
|
||||
$this->display();
|
||||
|
||||
@@ -146,7 +146,9 @@ $(document).ready(function()
|
||||
var deltaX = e.pageX - mouseDownX;
|
||||
setFirstColWidth(startFirstWidth + deltaX);
|
||||
e.preventDefault();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
$(document).off(documentEventName);
|
||||
$element.removeClass('row-spliting');
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ class docModel extends model
|
||||
*/
|
||||
public function setMenu($type = '', $libID = 0, $moduleID = 0, $productID = 0, $executionID = 0, $crumb = '')
|
||||
{
|
||||
$btnStyle = $this->lang->navGroup->doc == 'doc' ? 'header-angle-btn' : 'angle-btn';
|
||||
$btnStyle = $this->lang->navGroup->doc == 'doc' ? 'header-btn' : 'angle-btn';
|
||||
$isLimitWidth = $this->lang->navGroup->doc == 'doc' ? '' : 'btn-limit';
|
||||
$selectHtml = "<div class='btn-group $btnStyle'>";
|
||||
$selectHtml .= html::a(helper::createLink('doc', 'index'), $this->lang->doc->index, '', "class='btn'");
|
||||
@@ -1829,10 +1829,10 @@ class docModel extends model
|
||||
$navCSS .= <<<EOF
|
||||
#subHeader {margin-top: -50px; background: rgba(0,0,0,0);}
|
||||
#pageActions .btn-link {color: #fff; font-size: 14px; line-height: 18px; border: #84a2e2 1px solid;}
|
||||
.header-angle-btn {padding: 0;}
|
||||
.header-angle-btn .btn{padding: 6px 12px;}
|
||||
.header-btn {padding: 0;}
|
||||
.header-btn .btn{padding: 6px 12px;}
|
||||
EOF;
|
||||
if($this->app->rawMethod != 'index') $navCSS .= '.header-angle-btn+.header-angle-btn::after, .header-angle-btn+.header-angle-btn::before {top: -50px;}';
|
||||
if($this->app->rawMethod != 'index') $navCSS .= '.header-btn+.header-btn::after, .header-btn+.header-btn::before {top: -50px;}';
|
||||
}
|
||||
return $navCSS;
|
||||
}
|
||||
|
||||
@@ -190,7 +190,6 @@ $lang->execution->batchUnlinkStory = 'Mehere Storys entfernen';
|
||||
$lang->execution->importTask = 'Importiere Aufgaben';
|
||||
$lang->execution->importPlanStories = 'Verknüpfe Story aus Plan';
|
||||
$lang->execution->importBug = 'Importiere Bugs';
|
||||
$lang->execution->updateOrder = 'Sortierung';
|
||||
$lang->execution->tree = 'Baum';
|
||||
$lang->execution->treeTask = 'Aufgabe anzeigen';
|
||||
$lang->execution->treeStory = 'Story anzeigen';
|
||||
|
||||
@@ -195,8 +195,6 @@ $lang->execution->batchUnlinkStory = 'Batch Unlink Stories';
|
||||
$lang->execution->importTask = 'Transfer Task';
|
||||
$lang->execution->importPlanStories = 'Link Stories By Plan';
|
||||
$lang->execution->importBug = 'Import Bug';
|
||||
$lang->execution->updateOrder = "Rank {$lang->executionCommon}";
|
||||
$lang->execution->execUpdateOrder = "Rank execution";
|
||||
$lang->execution->tree = 'Tree';
|
||||
$lang->execution->treeTask = 'Show Task Only';
|
||||
$lang->execution->treeStory = 'Show Story Only';
|
||||
|
||||
@@ -189,7 +189,6 @@ $lang->execution->batchUnlinkStory = 'Dissocier Stories par lot';
|
||||
$lang->execution->importTask = 'Transfert Tâche';
|
||||
$lang->execution->importPlanStories = 'Lier Stories Par Plan';
|
||||
$lang->execution->importBug = 'Importer Bug';
|
||||
$lang->execution->updateOrder = "Rang {$lang->executionCommon}";
|
||||
$lang->execution->tree = 'Arboressence';
|
||||
$lang->execution->treeTask = 'Seulement les Tâches';
|
||||
$lang->execution->treeStory = 'Seulement les Stories';
|
||||
|
||||
@@ -190,7 +190,6 @@ $lang->execution->batchUnlinkStory = 'Hủy liên kết câu chuyện hàng lo
|
||||
$lang->execution->importTask = 'Chuyển thành nhiệm vụ';
|
||||
$lang->execution->importPlanStories = 'Liên kết câu chuyện theo kế hoạch';
|
||||
$lang->execution->importBug = 'Nhập Bug';
|
||||
$lang->execution->updateOrder = "Đánh giá {$lang->executionCommon}";
|
||||
$lang->execution->tree = 'Cây';
|
||||
$lang->execution->treeTask = 'Chỉ hiện nhiệm vụ';
|
||||
$lang->execution->treeStory = 'Chỉ hiện câu chuyện';
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
/* 字段列表。*/
|
||||
$lang->executionCommon = $lang->executionCommon;
|
||||
$lang->execution->common = $lang->executionCommon . '视图';
|
||||
$lang->execution->common = '执行';
|
||||
$lang->execution->allExecutions = '所有' . $lang->executionCommon;
|
||||
$lang->execution->id = $lang->executionCommon . '编号';
|
||||
$lang->execution->type = $lang->executionCommon . '类型';
|
||||
@@ -70,6 +70,7 @@ $lang->execution->undone = '未完成';
|
||||
$lang->execution->unclosed = '未关闭';
|
||||
$lang->execution->typeDesc = "运维{$lang->executionCommon}没有{$lang->SRCommon}、bug、版本、测试功能。";
|
||||
$lang->execution->mine = '我负责:';
|
||||
$lang->execution->involved = '我参与:';
|
||||
$lang->execution->other = '其他:';
|
||||
$lang->execution->deleted = '已删除';
|
||||
$lang->execution->delayed = '已延期';
|
||||
@@ -200,8 +201,6 @@ $lang->execution->batchUnlinkStory = "批量移除{$lang->SRCommon}";
|
||||
$lang->execution->importTask = '转入任务';
|
||||
$lang->execution->importPlanStories = "按计划关联{$lang->SRCommon}";
|
||||
$lang->execution->importBug = '导入Bug';
|
||||
$lang->execution->updateOrder = "{$lang->executionCommon}排序";
|
||||
$lang->execution->execUpdateOrder = "执行排序";
|
||||
$lang->execution->tree = '树状图';
|
||||
$lang->execution->treeTask = '只看任务';
|
||||
$lang->execution->treeStory = "只看{$lang->SRCommon}";
|
||||
|
||||
@@ -179,7 +179,6 @@ $lang->project->batchUnlinkStory = "批量移除{$lang->SRCommon}";
|
||||
$lang->project->importTask = '轉入任務';
|
||||
$lang->project->importPlanStories = "按計劃關聯{$lang->SRCommon}";
|
||||
$lang->project->importBug = '導入Bug';
|
||||
$lang->project->updateOrder = "{$lang->executionCommon}排序";
|
||||
$lang->project->tree = '樹狀圖';
|
||||
$lang->project->treeTask = '只看任務';
|
||||
$lang->project->treeStory = "只看{$lang->SRCommon}";
|
||||
|
||||
@@ -189,7 +189,7 @@ class executionModel extends model
|
||||
if($this->config->systemMode == 'classic')
|
||||
{
|
||||
$this->session->set('moreExecutionLink', $this->app->getURI(true));
|
||||
$output = "<div class='btn-group header-angle-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentExecutionName}'><span class='text'><i class='icon icon-sprint'></i> {$currentExecutionName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output = "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentExecutionName}'><span class='text'><i class='icon icon-sprint'></i> {$currentExecutionName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
|
||||
@@ -871,24 +871,6 @@ class executionModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get execution main menu action.
|
||||
*
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getMainAction($module, $method)
|
||||
{
|
||||
if(in_array($method, array('index', 'all', 'batchedit'))) return;
|
||||
|
||||
$link = html::a(helper::createLink('execution', 'all'), "<i class='icon icon-list'></i>", '', "style='border: none;'");
|
||||
$html = "<p style='padding-top:5px;'>" . $link . "</p>";
|
||||
|
||||
return common::hasPriv('execution', 'all') ? $html : '';
|
||||
}
|
||||
|
||||
/*
|
||||
* Get execution switcher.
|
||||
*
|
||||
@@ -912,7 +894,8 @@ class executionModel extends model
|
||||
}
|
||||
|
||||
$dropMenuLink = helper::createLink('execution', 'ajaxGetDropMenu', "objectID=$executionID&module=$currentModule&method=$currentMethod&extra=");
|
||||
$output = "<div class='btn-group header-angle-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentExecutionName}'><span class='text'>{$currentExecutionName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output = "<div class='btn-group header-btn'>" . html::a(helper::createLink('execution', 'all'), "<i class='icon icon-run'></i> {$this->lang->execution->common}", '', "class='btn'") . '</div>';
|
||||
$output .= "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentExecutionName}'><span class='text'>{$currentExecutionName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
|
||||
@@ -3576,7 +3559,7 @@ class executionModel extends model
|
||||
$productPairs = $this->getStageLinkProductPairs($stageIdList);
|
||||
|
||||
$recentExecutions = isset($this->config->execution->recentExecutions) ? explode(',', $this->config->execution->recentExecutions) : array();
|
||||
$allExecution = array('recent' => array(), 'mine' => array());
|
||||
$allExecution = array('recent' => array(), 'involved' => array());
|
||||
foreach($executions as $execution)
|
||||
{
|
||||
if($execution->type == 'stage') $execution->name = zget($projectPairs, $execution->project) . '/' . zget($productPairs, $execution->id) . '/' . $execution->name;
|
||||
@@ -3587,7 +3570,7 @@ class executionModel extends model
|
||||
$allExecution['recent'][$index] = $execution;
|
||||
continue;
|
||||
}
|
||||
$allExecution['mine'][] = $execution;
|
||||
$allExecution['involved'][] = $execution;
|
||||
}
|
||||
|
||||
ksort($allExecution['recent']);
|
||||
|
||||
@@ -48,15 +48,9 @@
|
||||
<?php if($from == 'execution'):?>
|
||||
<div id="sidebar" class="side-col">
|
||||
<div class="sidebar-toggle"><i class="icon icon-angle-left"></i></div>
|
||||
<div class="cell">
|
||||
<?php echo $projectTree;?>
|
||||
<div class="text-center">
|
||||
<?php common::printLink('project', 'projectTitle', '', $lang->project->moduleSetting, '', "class='btn btn-info btn-wide iframe'", true, true);?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell"><?php echo $projectTree;?></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php $canOrder = (common::hasPriv('execution', 'updateOrder') and strpos($orderBy, 'order') !== false)?>
|
||||
<?php $canBatchEdit = common::hasPriv('execution', 'batchEdit'); ?>
|
||||
<form class='main-table' id='executionsForm' method='post' action='<?php echo inLink('batchEdit');?>' data-ride='table'>
|
||||
<table class='table has-sort-head table-fixed' id='executionList'>
|
||||
@@ -80,9 +74,6 @@
|
||||
<th class='w-40px'><?php echo $lang->execution->totalLeft;?></th>
|
||||
<th class='w-60px'><?php echo $lang->execution->progress;?></th>
|
||||
<th class='w-100px'><?php echo $lang->execution->burn;?></th>
|
||||
<?php if($canOrder):?>
|
||||
<th class='w-60px sort-default'><?php common::printOrderLink('order', $orderBy, $vars, $lang->execution->orderAB);?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class='sortable' id='executionTableList'>
|
||||
@@ -121,9 +112,6 @@
|
||||
</div>
|
||||
</td>
|
||||
<td id='spark-<?php echo $execution->id?>' class='sparkline text-left no-padding' values='<?php echo join(',', $execution->burns);?>'></td>
|
||||
<?php if($canOrder):?>
|
||||
<td class='sort-handler'><i class="icon icon-move"></i></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php if(!empty($execution->children)):?>
|
||||
<?php $i = 0;?>
|
||||
@@ -162,9 +150,6 @@
|
||||
</div>
|
||||
</td>
|
||||
<td id='spark-<?php echo $child->id?>' class='sparkline text-left no-padding' values='<?php echo join(',', $child->burns);?>'></td>
|
||||
<?php if($canOrder):?>
|
||||
<td class='sort-handler'><i class="icon icon-move"></i></td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php $i ++;?>
|
||||
<?php endforeach;?>
|
||||
@@ -178,7 +163,6 @@
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar"><?php echo html::submitButton($lang->execution->batchEdit, '', 'btn');?></div>
|
||||
<?php endif;?>
|
||||
<?php if(!$canOrder and common::hasPriv('execution', 'updateOrder')) echo html::a(inlink('all', "status=$status&projectID=$projectID&from=$from&order=order_desc&productID=$productID&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"), $from == 'execution' ? $lang->execution->execUpdateOrder : $lang->execution->updateOrder, '', "class='btn'");?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -759,7 +759,8 @@ class fileModel extends model
|
||||
* @access public
|
||||
* @return resource
|
||||
*/
|
||||
public function imagecreatefrombmp($filename) {
|
||||
public function imagecreatefrombmp($filename)
|
||||
{
|
||||
$f = fopen($filename, "rb");
|
||||
|
||||
//read header
|
||||
@@ -782,7 +783,8 @@ class fileModel extends model
|
||||
$img = imagecreatetruecolor($header['width'], $header['height']);
|
||||
|
||||
//read pixels
|
||||
for ($y = $hei - 1; $y >= 0; $y--) {
|
||||
for($y = $hei - 1; $y >= 0; $y--)
|
||||
{
|
||||
$row = fread($f, $wid2);
|
||||
$pixels = str_split($row, 3);
|
||||
|
||||
|
||||
@@ -547,8 +547,11 @@ $lang->resource->execution->importplanstories = 'importPlanStories';
|
||||
$lang->resource->execution->importBug = 'importBug';
|
||||
$lang->resource->execution->story = 'story';
|
||||
$lang->resource->execution->build = 'build';
|
||||
$lang->resource->execution->qa = 'qa';
|
||||
$lang->resource->execution->testtask = 'testtaskAction';
|
||||
$lang->resource->execution->testcase = 'testcase';
|
||||
$lang->resource->execution->bug = 'bug';
|
||||
$lang->resource->execution->testreport = 'testreport';
|
||||
$lang->resource->execution->burn = 'burn';
|
||||
$lang->resource->execution->computeBurn = 'computeBurnAction';
|
||||
$lang->resource->execution->fixFirst = 'fixFirst';
|
||||
@@ -563,7 +566,7 @@ $lang->resource->execution->unlinkMember = 'unlinkMember';
|
||||
$lang->resource->execution->linkStory = 'linkStory';
|
||||
$lang->resource->execution->unlinkStory = 'unlinkStory';
|
||||
$lang->resource->execution->batchUnlinkStory = 'batchUnlinkStory';
|
||||
$lang->resource->execution->updateOrder = 'updateOrder';
|
||||
//$lang->resource->execution->updateOrder = 'updateOrder';
|
||||
$lang->resource->execution->kanban = 'kanbanAction';
|
||||
$lang->resource->execution->printKanban = 'printKanbanAction';
|
||||
$lang->resource->execution->tree = 'treeAction';
|
||||
@@ -600,36 +603,39 @@ $lang->execution->methodOrder[80] = 'importplanstories';
|
||||
$lang->execution->methodOrder[85] = 'importBug';
|
||||
$lang->execution->methodOrder[90] = 'story';
|
||||
$lang->execution->methodOrder[95] = 'build';
|
||||
$lang->execution->methodOrder[100] = 'testtask';
|
||||
$lang->execution->methodOrder[105] = 'bug';
|
||||
$lang->execution->methodOrder[110] = 'burn';
|
||||
$lang->execution->methodOrder[115] = 'computeBurn';
|
||||
$lang->execution->methodOrder[120] = 'fixFirst';
|
||||
$lang->execution->methodOrder[125] = 'burnData';
|
||||
$lang->execution->methodOrder[130] = 'team';
|
||||
$lang->execution->methodOrder[100] = 'qa';
|
||||
$lang->execution->methodOrder[105] = 'testcase';
|
||||
$lang->execution->methodOrder[110] = 'bug';
|
||||
$lang->execution->methodOrder[115] = 'testtask';
|
||||
$lang->execution->methodOrder[120] = 'testreport';
|
||||
$lang->execution->methodOrder[125] = 'burn';
|
||||
$lang->execution->methodOrder[130] = 'computeBurn';
|
||||
$lang->execution->methodOrder[135] = 'fixFirst';
|
||||
$lang->execution->methodOrder[140] = 'burnData';
|
||||
$lang->execution->methodOrder[145] = 'team';
|
||||
//$lang->execution->methodOrder[130] = 'doc';
|
||||
$lang->execution->methodOrder[135] = 'dynamic';
|
||||
$lang->execution->methodOrder[140] = 'manageProducts';
|
||||
$lang->execution->methodOrder[145] = 'manageMembers';
|
||||
$lang->execution->methodOrder[150] = 'unlinkMember';
|
||||
$lang->execution->methodOrder[155] = 'linkStory';
|
||||
$lang->execution->methodOrder[160] = 'unlinkStory';
|
||||
$lang->execution->methodOrder[165] = 'batchUnlinkStory';
|
||||
$lang->execution->methodOrder[170] = 'updateOrder';
|
||||
$lang->execution->methodOrder[175] = 'kanban';
|
||||
$lang->execution->methodOrder[180] = 'printKanban';
|
||||
$lang->execution->methodOrder[185] = 'kanbanHideCols';
|
||||
$lang->execution->methodOrder[190] = 'kanbanColsColor';
|
||||
$lang->execution->methodOrder[195] = 'tree';
|
||||
$lang->execution->methodOrder[200] = 'treeTask';
|
||||
$lang->execution->methodOrder[205] = 'treeStory';
|
||||
$lang->execution->methodOrder[210] = 'all';
|
||||
$lang->execution->methodOrder[215] = 'export';
|
||||
$lang->execution->methodOrder[220] = 'storyKanban';
|
||||
$lang->execution->methodOrder[225] = 'storySort';
|
||||
$lang->execution->methodOrder[230] = 'whitelist';
|
||||
$lang->execution->methodOrder[235] = 'addWhitelist';
|
||||
$lang->execution->methodOrder[240] = 'unbindWhitelist';
|
||||
$lang->execution->methodOrder[150] = 'dynamic';
|
||||
$lang->execution->methodOrder[155] = 'manageProducts';
|
||||
$lang->execution->methodOrder[160] = 'manageMembers';
|
||||
$lang->execution->methodOrder[165] = 'unlinkMember';
|
||||
$lang->execution->methodOrder[170] = 'linkStory';
|
||||
$lang->execution->methodOrder[175] = 'unlinkStory';
|
||||
$lang->execution->methodOrder[180] = 'batchUnlinkStory';
|
||||
$lang->execution->methodOrder[185] = 'updateOrder';
|
||||
$lang->execution->methodOrder[190] = 'kanban';
|
||||
$lang->execution->methodOrder[195] = 'printKanban';
|
||||
$lang->execution->methodOrder[200] = 'kanbanHideCols';
|
||||
$lang->execution->methodOrder[205] = 'kanbanColsColor';
|
||||
$lang->execution->methodOrder[210] = 'tree';
|
||||
$lang->execution->methodOrder[215] = 'treeTask';
|
||||
$lang->execution->methodOrder[220] = 'treeStory';
|
||||
$lang->execution->methodOrder[225] = 'all';
|
||||
$lang->execution->methodOrder[230] = 'export';
|
||||
$lang->execution->methodOrder[235] = 'storyKanban';
|
||||
$lang->execution->methodOrder[240] = 'storySort';
|
||||
$lang->execution->methodOrder[245] = 'whitelist';
|
||||
$lang->execution->methodOrder[250] = 'addWhitelist';
|
||||
$lang->execution->methodOrder[255] = 'unbindWhitelist';
|
||||
|
||||
/* Task. */
|
||||
$lang->resource->task = new stdclass();
|
||||
|
||||
@@ -8,12 +8,8 @@ $lang->index->app->open = 'Open';
|
||||
$lang->index->app->reload = 'Reload';
|
||||
$lang->index->app->close = 'Close';
|
||||
|
||||
$lang->index->upgradeVersion = 'New version of Zen Tao';
|
||||
$lang->index->currentVersion = 'Current Version';
|
||||
$lang->index->versionName = 'Version Name';
|
||||
$lang->index->releaseDate = 'Release Date';
|
||||
$lang->index->explain = 'Release Notes';
|
||||
$lang->index->actions = 'Operating';
|
||||
$lang->index->upgradeVersion = 'Upgradable version';
|
||||
$lang->index->upgradeNow = 'Upgrade now';
|
||||
$lang->index->upgrade = 'Upgrade';
|
||||
$lang->index->log = 'Log';
|
||||
$lang->index->detailed = 'Details';
|
||||
|
||||
@@ -8,12 +8,8 @@ $lang->index->app->open = 'Open';
|
||||
$lang->index->app->reload = 'Reload';
|
||||
$lang->index->app->close = 'Close';
|
||||
|
||||
$lang->index->upgradeVersion = 'New version of Zen Tao';
|
||||
$lang->index->currentVersion = 'Current Version';
|
||||
$lang->index->versionName = 'Version Name';
|
||||
$lang->index->releaseDate = 'Release Date';
|
||||
$lang->index->explain = 'Release Notes';
|
||||
$lang->index->actions = 'Operating';
|
||||
$lang->index->upgradeVersion = 'Upgradable version';
|
||||
$lang->index->upgradeNow = 'Upgrade now';
|
||||
$lang->index->upgrade = 'Upgrade';
|
||||
$lang->index->log = 'Log';
|
||||
$lang->index->detailed = 'Details';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
$lang->index->common = 'Accueil';
|
||||
$lang->index->index = 'Accueil';
|
||||
$lang->index->common = 'Home';
|
||||
$lang->index->index = 'Home';
|
||||
$lang->index->search = 'Please input';
|
||||
|
||||
$lang->index->app = new stdClass();
|
||||
@@ -8,12 +8,8 @@ $lang->index->app->open = 'Open';
|
||||
$lang->index->app->reload = 'Reload';
|
||||
$lang->index->app->close = 'Close';
|
||||
|
||||
$lang->index->upgradeVersion = 'New version of Zen Tao';
|
||||
$lang->index->currentVersion = 'Current Version';
|
||||
$lang->index->versionName = 'Version Name';
|
||||
$lang->index->releaseDate = 'Release Date';
|
||||
$lang->index->explain = 'Release Notes';
|
||||
$lang->index->actions = 'Operating';
|
||||
$lang->index->upgradeVersion = 'Upgradable version';
|
||||
$lang->index->upgradeNow = 'Upgrade now';
|
||||
$lang->index->upgrade = 'Upgrade';
|
||||
$lang->index->log = 'Log';
|
||||
$lang->index->detailed = 'Details';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
$lang->index->common = 'Trang chủ';
|
||||
$lang->index->index = 'Trang chủ';
|
||||
$lang->index->common = 'Home';
|
||||
$lang->index->index = 'Home';
|
||||
$lang->index->search = 'Please input';
|
||||
|
||||
$lang->index->app = new stdClass();
|
||||
@@ -8,12 +8,8 @@ $lang->index->app->open = 'Open';
|
||||
$lang->index->app->reload = 'Reload';
|
||||
$lang->index->app->close = 'Close';
|
||||
|
||||
$lang->index->upgradeVersion = 'New version of Zen Tao';
|
||||
$lang->index->currentVersion = 'Current Version';
|
||||
$lang->index->versionName = 'Version Name';
|
||||
$lang->index->releaseDate = 'Release Date';
|
||||
$lang->index->explain = 'Release Notes';
|
||||
$lang->index->actions = 'Operating';
|
||||
$lang->index->upgradeVersion = 'Upgradable version';
|
||||
$lang->index->upgradeNow = 'Upgrade now';
|
||||
$lang->index->upgrade = 'Upgrade';
|
||||
$lang->index->log = 'Log';
|
||||
$lang->index->detailed = 'Details';
|
||||
|
||||
@@ -9,7 +9,8 @@ $lang->index->app->reload = '刷新';
|
||||
$lang->index->app->close = '关闭';
|
||||
|
||||
$lang->index->upgradeVersion = '可升级版本';
|
||||
$lang->index->upgrade = '现在升级';
|
||||
$lang->index->upgradeNow = '现在升级';
|
||||
$lang->index->upgrade = '升级';
|
||||
$lang->index->log = '查看版本更新日志 >';
|
||||
$lang->index->detailed = '详情';
|
||||
$lang->index->website = '请访问官网';
|
||||
|
||||
@@ -8,13 +8,9 @@ $lang->index->app->open = '打開';
|
||||
$lang->index->app->reload = '刷新';
|
||||
$lang->index->app->close = '關閉';
|
||||
|
||||
$lang->index->upgradeVersion = '禪道新版本';
|
||||
$lang->index->currentVersion = '當前版本';
|
||||
$lang->index->versionName = '版本名稱';
|
||||
$lang->index->releaseDate = '發佈日期';
|
||||
$lang->index->explain = '更新說明';
|
||||
$lang->index->actions = '操作';
|
||||
$lang->index->upgradeVersion = '可升級版本';
|
||||
$lang->index->upgradeNow = '現在升級';
|
||||
$lang->index->upgrade = '升級';
|
||||
$lang->index->log = '日誌';
|
||||
$lang->index->log = '查看版本更新日誌 >';
|
||||
$lang->index->detailed = '詳情';
|
||||
$lang->index->website = '請訪問官網';
|
||||
|
||||
@@ -96,6 +96,7 @@ js::set('defaultOpen', $open);
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='version-content'>
|
||||
<?php $lastVersion = end($latestVersionList);?>
|
||||
<?php foreach($latestVersionList as $versionNumber => $version):?>
|
||||
<div class="version-list">
|
||||
<div>
|
||||
@@ -105,10 +106,12 @@ js::set('defaultOpen', $open);
|
||||
<div class="version-detail"><?php echo $version->explain;?></div>
|
||||
<div class="version-footer">
|
||||
<a href="<?php echo inLink('changeLog', 'version=' . $versionNumber);?>" class="btn btn-link iframe" data-width="800"><?php echo $lang->index->log;?></strong></a>
|
||||
<a href='<?php echo $version->link?>' class='btn btn-primary upgrade-now' style='color: white;' target='_blank'><?php echo $lang->index->upgrade;?></a>
|
||||
<a href='<?php echo $version->link?>' class='btn btn-primary upgrade-now' style='color: white;' target='_blank'><?php echo $lang->index->upgradeNow;?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($version->name != $lastVersion->name):?>
|
||||
<hr class='version-hr'>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
{
|
||||
$vars = "story={$story->id}";
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'fork');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'glasses');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'search');
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list');
|
||||
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap');
|
||||
@@ -134,7 +134,7 @@
|
||||
{
|
||||
$vars = "story={$child->id}";
|
||||
common::printIcon('story', 'change', $vars, $child, 'list', 'fork');
|
||||
common::printIcon('story', 'review', $vars, $child, 'list', 'glasses');
|
||||
common::printIcon('story', 'review', $vars, $child, 'list', 'search');
|
||||
common::printIcon('story', 'close', $vars, $child, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $child, 'list');
|
||||
common::printIcon('story', 'createCase', "productID=$child->product&branch=$child->branch&module=0&from=¶m=0&$vars", $child, 'list', 'sitemap');
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
{
|
||||
$vars = "story={$story->id}";
|
||||
common::printIcon('story', 'change', $vars, $story, 'list', 'alter');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'glasses');
|
||||
common::printIcon('story', 'review', $vars, $story, 'list', 'search');
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $story, 'list');
|
||||
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap');
|
||||
@@ -137,7 +137,7 @@
|
||||
{
|
||||
$vars = "story={$child->id}";
|
||||
common::printIcon('story', 'change', $vars, $child, 'list', 'fork');
|
||||
common::printIcon('story', 'review', $vars, $child, 'list', 'glasses');
|
||||
common::printIcon('story', 'review', $vars, $child, 'list', 'search');
|
||||
common::printIcon('story', 'close', $vars, $child, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars, $child, 'list');
|
||||
common::printIcon('story', 'createCase', "productID=$child->product&branch=$child->branch&module=0&from=¶m=0&$vars", $child, 'list', 'sitemap');
|
||||
|
||||
@@ -224,9 +224,7 @@ class personnel extends control
|
||||
public function setProgramMenu($programID = 0)
|
||||
{
|
||||
$this->loadModel('program');
|
||||
$this->lang->navGroup->program = 'program';
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->lang->program->mainMenuAction = $this->program->getMainAction();
|
||||
$this->program->setViewMenu($programID);
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
commonModel::setAppObjectID('program', $programID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +160,6 @@ class product extends control
|
||||
$this->session->set('storyList', $this->app->getURI(true));
|
||||
$this->session->set('productList', $this->app->getURI(true));
|
||||
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, "storyType=$storyType", $branch);
|
||||
$this->product->setMenu($this->products, $productID, $branch);
|
||||
}
|
||||
@@ -306,8 +305,6 @@ class product extends control
|
||||
*/
|
||||
public function create($programID = 0)
|
||||
{
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher();
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$productID = $this->product->create();
|
||||
@@ -325,11 +322,12 @@ class product extends control
|
||||
|
||||
if($programID)
|
||||
{
|
||||
$this->app->rawModule = 'program';
|
||||
$this->app->rawMethod = 'product';
|
||||
$this->lang->navGroup->program = 'program';
|
||||
$this->loadModel('program')->setViewMenu($programID);
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->lang->program->switcherMenu = $this->loadModel('program')->getSwitcher($programID, true);
|
||||
commonModel::setAppObjectID('program', $programID);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher();
|
||||
}
|
||||
|
||||
$this->loadModel('user');
|
||||
@@ -371,7 +369,6 @@ class product extends control
|
||||
{
|
||||
/* Set menu. */
|
||||
$this->app->loadLang('custom');
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
|
||||
/* Init vars. */
|
||||
@@ -467,11 +464,7 @@ class product extends control
|
||||
|
||||
if($programID)
|
||||
{
|
||||
$this->app->rawModule = 'program';
|
||||
$this->app->rawMethod = 'product';
|
||||
$this->lang->navGroup->program = 'program';
|
||||
$this->loadModel('program')->setViewMenu($programID);
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->lang->program->switcherMenu = $this->loadModel('program')->getSwitcher($programID, true);
|
||||
}
|
||||
|
||||
/* Get the relevant person in charge. */
|
||||
@@ -558,11 +551,7 @@ class product extends control
|
||||
}
|
||||
|
||||
/* Navigation remains under the program. */
|
||||
$this->app->rawModule = 'program';
|
||||
$this->app->rawMethod = 'product';
|
||||
$this->lang->navGroup->program = 'program';
|
||||
$this->loadModel('program')->setViewMenu($programID);
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->lang->program->switcherMenu = $this->loadModel('program')->getSwitcher($programID, true);
|
||||
|
||||
$this->loadModel('user');
|
||||
$poUsers = $this->user->getPairs('nodeleted|pofirst', $appendPoUsers);
|
||||
@@ -639,7 +628,6 @@ class product extends control
|
||||
|
||||
$moduleIndex = array_search('product', $this->lang->noMenuModule);
|
||||
if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]);
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
|
||||
$product->desc = $this->loadModel('file')->setImgSize($product->desc);
|
||||
@@ -697,7 +685,6 @@ class product extends control
|
||||
*/
|
||||
public function roadmap($productID, $branch = 0)
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch);
|
||||
$this->product->setMenu($this->products, $productID, $branch);
|
||||
|
||||
@@ -801,7 +788,6 @@ class product extends control
|
||||
$product = $this->product->getStatByID($productID);
|
||||
if(!$product) die(js::locate('product', 'all'));
|
||||
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
|
||||
$product->desc = $this->loadModel('file')->setImgSize($product->desc);
|
||||
@@ -929,7 +915,7 @@ class product extends control
|
||||
|
||||
$moduleGroup = zget($this->lang->navGroup, $module);
|
||||
$moduleGroup = in_array($moduleGroup, array('product', 'qa'))? $moduleGroup : 'project';
|
||||
$products = $moduleGroup == 'project' ? $this->product->getProducts($this->session->PRJ, 'all', 'program desc, line desc, ') : $this->product->getList(0, 'all', 0, 0, 'program desc, line desc, ');
|
||||
$products = $moduleGroup == 'project' ? $this->product->getProducts($this->session->PRJ) : $this->product->getList();
|
||||
|
||||
$this->view->link = $this->product->getProductLink($module, $method, $extra);
|
||||
$this->view->productID = $productID;
|
||||
@@ -1103,7 +1089,6 @@ class product extends control
|
||||
*/
|
||||
public function whitelist($productID = 0, $module = 'product', $objectType = 'product', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', 0);
|
||||
$this->product->setMenu($this->products, $productID, 0);
|
||||
$this->lang->modulePageNav = '';
|
||||
@@ -1122,7 +1107,6 @@ class product extends control
|
||||
*/
|
||||
public function addWhitelist($productID = 0, $deptID = 0, $branch = '')
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch);
|
||||
$this->product->setMenu($this->products, $productID, $branch);
|
||||
$moduleIndex = array_search('product', $this->lang->noMenuModule);
|
||||
|
||||
@@ -29,7 +29,6 @@ class productModel extends model
|
||||
*/
|
||||
public function setMenu($products, $productID, $branch = 0, $module = 0, $moduleType = '', $extra = '')
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$product = $this->getByID($productID);
|
||||
if($product)
|
||||
{
|
||||
@@ -258,7 +257,7 @@ class productModel extends model
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getList($programID = 0, $status = 'all', $limit = 0, $line = 0, $orderBy = '')
|
||||
public function getList($programID = 0, $status = 'all', $limit = 0, $line = 0)
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_PRODUCT)
|
||||
->where('deleted')->eq(0)
|
||||
@@ -274,7 +273,7 @@ class productModel extends model
|
||||
->orWhere('createdBy')->eq($this->app->user->account)
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->orderBy($orderBy . '`order` desc')
|
||||
->orderBy('program_asc, line_desc, order_asc')
|
||||
->beginIF($limit > 0)->limit($limit)->fi()
|
||||
->fetchAll('id');
|
||||
}
|
||||
@@ -472,8 +471,8 @@ class productModel extends model
|
||||
$fromModule = $this->lang->navGroup->qa == 'qa' ? 'qa' : '';
|
||||
$dropMenuLink = helper::createLink('product', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra&from=$fromModule");
|
||||
|
||||
$output = "<div class='btn-group'>" . html::a(helper::createLink('product', 'all'), "<i class='icon icon-product'></i> {$this->lang->productCommon}", '', "class='btn btn-link'") . '</div>';
|
||||
$output .= "<div class='btn-group header-angle-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProductName}'><i class='icon icon-chevron-right'></i><span class='text'>{$currentProductName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output = $this->app->openApp == 'product' ? "<div class='btn-group header-btn'>" . html::a(helper::createLink('product', 'all'), "<i class='icon icon-product'></i> {$this->lang->productCommon}", '', "class='btn'") . '</div>' : '';
|
||||
$output .= "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProductName}'><span class='text'>{$currentProductName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
|
||||
@@ -484,7 +483,7 @@ class productModel extends model
|
||||
$branchName = isset($branches[$branch]) ? $branches[$branch] : $branches[0];
|
||||
$dropMenuLink = helper::createLink('branch', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra");
|
||||
|
||||
$output .= "<div class='btn-group header-angle-btn'><button id='currentBranch' data-toggle='dropdown' type='button' class='btn'><span class='text'>{$branchName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= "<div class='btn-group header-btn'><button id='currentBranch' data-toggle='dropdown' type='button' class='btn'><span class='text'>{$branchName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
}
|
||||
@@ -1330,7 +1329,7 @@ class productModel extends model
|
||||
$productKeys = array_keys($products);
|
||||
$products = $this->dao->select('*')->from(TABLE_PRODUCT)
|
||||
->where('id')->in($productKeys)
|
||||
->orderBy($orderBy)
|
||||
->orderBy('program_asc, line_desc, ' . $orderBy)
|
||||
->page($pager)
|
||||
->fetchAll('id');
|
||||
|
||||
|
||||
@@ -71,6 +71,8 @@ $isProjectStory = $this->app->rawModule == 'projectstory';
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php
|
||||
$this->moduleName = $this->app->rawModule;
|
||||
$this->methodName = $this->app->rawMethod;
|
||||
foreach(customModel::getFeatureMenu($this->moduleName, $this->methodName) as $menuItem)
|
||||
{
|
||||
if(isset($menuItem->hidden)) continue;
|
||||
|
||||
@@ -22,9 +22,7 @@ class productplan extends control
|
||||
*/
|
||||
public function commonAction($productID, $branch = 0)
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', $branch);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', $branch);
|
||||
|
||||
$this->loadModel('product');
|
||||
$this->app->loadConfig('execution');
|
||||
|
||||
@@ -102,7 +102,7 @@ class program extends control
|
||||
if(empty($program) || $program->type != 'program') die(js::error($this->lang->notFound) . js::locate('back'));
|
||||
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->program->setViewMenu($programID);
|
||||
commonModel::setAppObjectID('program', $programID);
|
||||
|
||||
/* Load pager and get tasks. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
@@ -396,7 +396,7 @@ class program extends control
|
||||
$this->app->session->set('projectList', $this->app->getURI(true));
|
||||
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->program->setViewMenu($programID);
|
||||
commonModel::setAppObjectID('program', $programID);
|
||||
|
||||
$this->loadModel('datatable');
|
||||
|
||||
@@ -437,7 +437,7 @@ class program extends control
|
||||
public function stakeholder($programID = 0, $orderBy = 't1.id_desc', $recTotal = 0, $recPerPage = 15, $pageID = 1)
|
||||
{
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->program->setViewMenu($programID);
|
||||
commonModel::setAppObjectID('program', $programID);
|
||||
|
||||
/* Load pager and get tasks. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
@@ -473,7 +473,6 @@ class program extends control
|
||||
|
||||
$this->loadModel('user');
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->program->setViewMenu($programID);
|
||||
|
||||
$this->loadModel('dept');
|
||||
$deptUsers = $dept === '' ? array() : $this->dept->getDeptUserPairs($dept);
|
||||
|
||||
@@ -199,29 +199,6 @@ class programModel extends model
|
||||
->fetchAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set view menu.
|
||||
*
|
||||
* @param int $programID
|
||||
* @access private
|
||||
* @return void
|
||||
*/
|
||||
public function setViewMenu($programID = 0)
|
||||
{
|
||||
foreach($this->lang->program->viewMenu as $label => $menu)
|
||||
{
|
||||
$this->lang->program->viewMenu->{$label}['link'] = is_array($menu) ? sprintf($menu['link'], $programID) : sprintf($menu, $programID);
|
||||
}
|
||||
|
||||
foreach($this->lang->personnel->menu as $label => $menu)
|
||||
{
|
||||
$menu['link'] = is_array($menu) ? sprintf($menu['link'], $programID) : sprintf($menu, $programID);
|
||||
$this->lang->personnel->menu->$label = $menu;
|
||||
}
|
||||
|
||||
$this->lang->program->menu = $this->lang->program->viewMenu;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a program.
|
||||
*
|
||||
@@ -416,8 +393,8 @@ class programModel extends model
|
||||
}
|
||||
|
||||
$dropMenuLink = helper::createLink('program', 'ajaxGetDropMenu', "objectID=$programID&module=$currentModule&method=$currentMethod");
|
||||
$output = "<div class='btn-group'>" . html::a(helper::createLink('program', 'browse'), "<i class='icon icon-program'></i> {$this->lang->program->common}", '', "class='btn btn-link'") . '</div>';
|
||||
$output .= "<div class='btn-group header-angle-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProgramName}'><i class='icon icon-chevron-right'></i><span class='text'>{$currentProgramName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output = "<div class='btn-group header-btn'>" . html::a(helper::createLink('program', 'browse'), "<i class='icon icon-program'></i> {$this->lang->program->common}", '', "class='btn'") . '</div>';
|
||||
$output .= "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProgramName}'><span class='text'>{$currentProgramName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>'; $output .= "</div></div>";
|
||||
|
||||
return $output;
|
||||
@@ -452,7 +429,7 @@ class programModel extends model
|
||||
|
||||
while($program = $stmt->fetch())
|
||||
{
|
||||
$link = $from == 'program' ? helper::createLink('program', 'pgmproduct', "programID=$program->id") : helper::createLink('product', 'all', "programID=$program->id" . $vars);
|
||||
$link = $from == 'program' ? helper::createLink('program', 'product', "programID=$program->id") : helper::createLink('product', 'all', "programID=$program->id" . $vars);
|
||||
$linkHtml = html::a($link, html::icon($this->lang->icons[$program->type], 'icon icon-sm text-muted') . ' ' . $program->name, '', "id='program$program->id' class='text-ellipsis' title=$program->name");
|
||||
|
||||
if(isset($programMenu[$program->id]) and !empty($programMenu[$program->id]))
|
||||
|
||||
@@ -9,12 +9,12 @@ $programsPinYin = common::convert2Pinyin($programNames);
|
||||
<div class="table-col col-left">
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
echo $this->program->getPGMTreeMenu();
|
||||
echo $this->program->getTreeMenu();
|
||||
?>
|
||||
</div>
|
||||
<div class="col-footer">
|
||||
<div class='pull-right'>
|
||||
<?php echo html::checkbox('showClosed', array('1' => $lang->program->PGMShowClosed), '', $this->cookie->showClosed ? 'checked=checked' : '');?>
|
||||
<?php echo html::checkbox('showClosed', array('1' => $lang->program->showClosed), '', $this->cookie->showClosed ? 'checked=checked' : '');?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -125,6 +125,7 @@ class project extends control
|
||||
foreach($projects as $project)
|
||||
{
|
||||
if($project->parent and $project->parent != $programID) continue;
|
||||
$project->parent = $this->program->getTopByID($project->parent);
|
||||
$orderedProjects[] = $project;
|
||||
unset($projects[$project->id]);
|
||||
}
|
||||
@@ -292,6 +293,12 @@ class project extends control
|
||||
}
|
||||
}
|
||||
|
||||
if($programID)
|
||||
{
|
||||
$this->lang->program->switcherMenu = $this->loadModel('program')->getSwitcher($programID, true);
|
||||
commonModel::setAppObjectID('program', $programID);
|
||||
}
|
||||
|
||||
$this->lang->noMenuModule[] = 'project';
|
||||
|
||||
$name = '';
|
||||
@@ -1157,7 +1164,6 @@ class project extends control
|
||||
$this->app->rawMethod = 'programproject';
|
||||
$this->lang->navGroup->project = 'project';
|
||||
$this->lang->project->switcherMenu = $this->loadModel('program')->getSwitcher($programID, true);
|
||||
$this->program->setViewMenu($programID);
|
||||
}
|
||||
|
||||
echo $this->fetch('personnel', 'whitelist', "objectID=$projectID&module=$module&browseType=$objectType&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID&projectID=$projectID&from=$from");
|
||||
|
||||
+33
-22
@@ -142,6 +142,7 @@ class projectModel extends model
|
||||
*/
|
||||
public function getSwitcher($projectID, $currentModule, $currentMethod)
|
||||
{
|
||||
if($currentModule == 'project' and $currentMethod == 'browse') return;
|
||||
$this->session->set('moreProjectLink', $this->app->getURI(true));
|
||||
|
||||
$currentProjectName = $this->lang->project->common;
|
||||
@@ -152,29 +153,14 @@ class projectModel extends model
|
||||
}
|
||||
|
||||
$dropMenuLink = helper::createLink('project', 'ajaxGetDropMenu', "objectID=$projectID&module=$currentModule&method=$currentMethod");
|
||||
$output = "<div class='btn-group'>" . html::a(helper::createLink('project', 'browse'), "<i class='icon icon-project'></i> {$this->lang->project->common}", '', "class='btn btn-link'") . '</div>';
|
||||
$output .= "<div class='btn-group header-angle-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProjectName}'><i class='icon icon-chevron-right'></i><span class='text'>{$currentProjectName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output = "<div class='btn-group header-btn'>" . html::a(helper::createLink('project', 'browse'), "<i class='icon icon-project'></i> {$this->lang->project->common}", '', "class='btn'") . '</div>';
|
||||
$output .= "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProjectName}'><span class='text'>{$currentProjectName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "</div></div>";
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get project main menu action.
|
||||
*
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getMainAction($module, $method)
|
||||
{
|
||||
$link = html::a(helper::createLink('project', 'browse'), "<i class='icon icon-list'></i>", '', "style='border: none;'");
|
||||
$html = "<p style='padding-top:5px;'>" . $link . "</p>";
|
||||
return common::hasPriv('project', 'browse') ? $html : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a project by id.
|
||||
*
|
||||
@@ -296,12 +282,14 @@ class projectModel extends model
|
||||
->groupBy('project')
|
||||
->fetchPairs();
|
||||
|
||||
$this->loadModel('product');
|
||||
foreach($projectIdList as $projectID)
|
||||
{
|
||||
$productIdList = $this->loadModel('product')->getProductIDByProject($projectID, false);
|
||||
$allStories[$projectID] = $this->product->getTotalStoriesByProduct($productIdList, 'story');
|
||||
$doneStories[$projectID] = $this->product->getTotalStoriesByProduct($productIdList, 'story', 'closed');
|
||||
$leftStories[$projectID] = $this->product->getTotalStoriesByProduct($productIdList, 'story', 'active');
|
||||
$productIdList = $this->product->getProductIDByProject($projectID, false);
|
||||
|
||||
$allStories[$projectID] = $this->getTotalStoriesByProject($projectID, $productIdList, 'story');
|
||||
$doneStories[$projectID] = $this->getTotalStoriesByProject($projectID, $productIdList, 'story', 'closed');
|
||||
$leftStories[$projectID] = $this->getTotalStoriesByProject($projectID, $productIdList, 'story', 'active');
|
||||
}
|
||||
|
||||
$leftBugs = $this->getTotalBugByProject($projectIdList, 'active');
|
||||
@@ -325,6 +313,29 @@ class projectModel extends model
|
||||
return $projects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of stories associated with the project.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @param array $productIdList
|
||||
* @param string $type story|requirement
|
||||
* @param string $status all|closed|active
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getTotalStoriesByProject($projectID = 0, $productIdList, $type = 'story', $status = 'all')
|
||||
{
|
||||
return $this->dao->select('count(t2.id) as stories')->from(TABLE_PROJECTSTORY)->alias('t1')
|
||||
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story=t2.id')
|
||||
->where('t1.project')->eq($projectID)
|
||||
->andWhere('t2.type')->eq($type)
|
||||
->andWhere('t2.product')->in($productIdList)
|
||||
->beginIF($status != 'all')->andWhere('t2.status')->eq($status)->fi()
|
||||
->beginIF($status == 'closed')->andWhere('t2.closedReason')->eq('done')->fi()
|
||||
->andWhere('deleted')->eq('0')
|
||||
->fetch('stories');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get project workhour info.
|
||||
*
|
||||
@@ -551,7 +562,7 @@ class projectModel extends model
|
||||
|
||||
/* Set search param. */
|
||||
if($type == 'execution') $this->config->build->search['module'] = 'executionBuild';
|
||||
if($type == 'execution') $this->config->build->search['module'] = 'executionBuild';
|
||||
if($type == 'project') $this->config->build->search['module'] = 'projectBuild';
|
||||
$this->config->build->search['actionURL'] = $actionURL;
|
||||
$this->config->build->search['queryID'] = $queryID;
|
||||
$this->config->build->search['params']['product']['values'] = $products;
|
||||
|
||||
@@ -41,7 +41,6 @@ class projectrelease extends control
|
||||
*/
|
||||
public function commonAction($productID = 0, $branch = 0)
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
|
||||
/* Get product and product list by project. */
|
||||
|
||||
@@ -46,8 +46,6 @@ class projectStory extends control
|
||||
{
|
||||
$this->session->set('storyList', $this->app->getURI(true));
|
||||
|
||||
$this->lang->menugroup->product = 'projectstory';
|
||||
|
||||
$this->lang->story->title = str_replace($this->lang->SRCommon, $this->lang->SRCommon, $this->lang->story->title);
|
||||
$this->lang->story->createRequirement = str_replace($this->lang->SRCommon, $this->lang->SRCommon, $this->lang->story->createRequirement);
|
||||
$this->lang->story->createStory = str_replace($this->lang->SRCommon, $this->lang->SRCommon, $this->lang->story->createStory);
|
||||
|
||||
@@ -10,14 +10,9 @@ $lang->projectstory->importplanstories = 'Linked by plan' . $lang->SRCommon;
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
|
||||
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
|
||||
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
|
||||
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
|
||||
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
|
||||
@@ -10,14 +10,7 @@ $lang->projectstory->importplanstories = 'Linked by plan' . $lang->SRCommon;
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
|
||||
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
|
||||
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
|
||||
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
@@ -10,14 +10,7 @@ $lang->projectstory->importplanstories = 'Linked by plan' . $lang->SRCommon;
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
|
||||
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
|
||||
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
|
||||
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
@@ -10,14 +10,7 @@ $lang->projectstory->importplanstories = 'Linked by plan' . $lang->SRCommon;
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
|
||||
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
|
||||
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
|
||||
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
@@ -10,14 +10,8 @@ $lang->projectstory->importplanstories = '按计划关联' . $lang->SRCommon;
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
|
||||
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
|
||||
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
|
||||
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
|
||||
@@ -8,14 +8,7 @@ $lang->projectstory->unlinkStory = '移除' . $lang->SRCommon;
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
|
||||
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
|
||||
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
|
||||
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
@@ -21,9 +21,7 @@ class release extends control
|
||||
*/
|
||||
public function commonAction($productID, $branch = 0)
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', $branch);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, '', $branch);
|
||||
|
||||
$this->loadModel('product');
|
||||
$product = $this->product->getById($productID);
|
||||
|
||||
@@ -15,7 +15,8 @@ function scmChanged(scm) {
|
||||
|
||||
$('.tips-git').removeClass('hidden');
|
||||
$('.tips-svn').addClass('hidden');
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.account-fields').removeClass('hidden');
|
||||
|
||||
|
||||
@@ -15,7 +15,8 @@ function scmChanged(scm) {
|
||||
|
||||
$('.tips-git').removeClass('hidden');
|
||||
$('.tips-svn').addClass('hidden');
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.account-fields').removeClass('hidden');
|
||||
|
||||
|
||||
@@ -72,7 +72,6 @@ class stakeholder extends control
|
||||
$this->app->rawMethod = 'stakeholder';
|
||||
$this->lang->navGroup->program = 'program';
|
||||
$this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true);
|
||||
$this->program->setViewMenu($programID);
|
||||
|
||||
$this->view->members = $this->loadModel('project')->getTeamMemberPairs($programID);
|
||||
}
|
||||
|
||||
@@ -49,9 +49,7 @@ class story extends control
|
||||
public function create($productID = 0, $branch = 0, $moduleID = 0, $storyID = 0, $executionID = 0, $bugID = 0, $planID = 0, $todoID = 0, $extra = '', $type = 'story')
|
||||
{
|
||||
$this->story->replaceURLang($type);
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
|
||||
if($executionID)
|
||||
{
|
||||
@@ -337,9 +335,7 @@ class story extends control
|
||||
*/
|
||||
public function batchCreate($productID = 0, $branch = 0, $moduleID = 0, $storyID = 0, $executionID = 0, $plan = 0, $type = 'story')
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
|
||||
if($executionID)
|
||||
{
|
||||
@@ -520,9 +516,7 @@ class story extends control
|
||||
$moduleOptionMenu = $this->tree->getOptionMenu($product->id, $viewType = 'story', 0, $story->branch);
|
||||
|
||||
/* Set menu. */
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($product->id);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($product->id);
|
||||
$this->product->setMenu($products, $product->id, $story->branch);
|
||||
|
||||
$this->story->replaceURLang($story->type);
|
||||
@@ -600,9 +594,7 @@ class story extends control
|
||||
*/
|
||||
public function batchEdit($productID = 0, $executionID = 0, $branch = 0, $storyType = 'story')
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->story->replaceURLang($storyType);
|
||||
|
||||
/* Load model. */
|
||||
@@ -865,10 +857,8 @@ class story extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->product->setMenu($this->product->getPairs(), $product->id, $story->branch);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($product->id);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($product->id);
|
||||
|
||||
if($this->app->rawModule == 'projectstory')
|
||||
{
|
||||
@@ -951,10 +941,7 @@ class story extends control
|
||||
*/
|
||||
public function review($storyID, $from = 'product')
|
||||
{
|
||||
$this->product;
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($this->session->product);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($this->session->product);
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -1393,11 +1380,9 @@ class story extends control
|
||||
/* Set menu. The projectstory module does not execute. */
|
||||
if($this->app->rawModule == 'story')
|
||||
{
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$products = $this->product->getPairs();
|
||||
$productID = $this->product->saveState($productID, $products);
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, '', $branch);
|
||||
$this->product->setMenu($products, $productID, $branch);
|
||||
}
|
||||
|
||||
@@ -1788,8 +1773,7 @@ class story extends control
|
||||
|
||||
$this->story->replaceURLang($storyType);
|
||||
$this->products = $this->product->getPairs();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, $storyType, $branchID);
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID, $storyType, $branchID);
|
||||
$this->product->setMenu($this->products, $productID, $branchID);
|
||||
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->story->reportChart;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
.side-col .cell {padding: 0px;}
|
||||
.side-col #legendProjectAndTask .list-unstyled {padding: 10px; border-top: 0px; margin: 0px;}
|
||||
.col-4 .cell .tab-content .text-top {padding-top: 1px;}
|
||||
#legendStories ul li {padding: 10px 0 0 12px; line-height: 20px;}
|
||||
.main-actions .btn-toolbar .btn {padding-right: 6px; padding-left: 6px;}
|
||||
|
||||
@@ -2359,11 +2359,6 @@ class storyModel extends model
|
||||
|
||||
$unclosedStatus = $this->lang->story->statusList;
|
||||
unset($unclosedStatus['closed']);
|
||||
if($execution->type == 'project')
|
||||
{
|
||||
$statusFeatureList = $this->lang->projectstory->featureBarList['status'];
|
||||
$otherFeatureList = $this->lang->projectstory->featureBarList['other'];
|
||||
}
|
||||
|
||||
$stories = $this->dao->select('distinct t1.*, t2.*,t3.branch as productBranch,t4.type as productType,t2.version as version')->from(TABLE_PROJECTSTORY)->alias('t1')
|
||||
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
|
||||
@@ -2375,10 +2370,8 @@ class storyModel extends model
|
||||
->beginIF($execution->type == 'project')
|
||||
->beginIF(!empty($productID))->andWhere('t1.product')->eq($productID)
|
||||
->beginIF($type == 'bybranch')->andWhere('t2.branch')->eq($branch)->fi()
|
||||
->beginIF(isset($statusFeatureList) and in_array($type, array_keys($statusFeatureList)))->andWhere('t2.status')->eq(substr($type, 0, -5))->fi()
|
||||
->beginIF(isset($otherFeatureList) and in_array($type, array_keys($otherFeatureList)))->andWhere('t2.' . substr($type, 0, -2))->eq($this->app->user->account)->fi()
|
||||
->beginIF(strpos('changed|closed', $type) !== false)->andWhere('t2.status')->eq($type)->fi()
|
||||
->beginIF($type == 'unclosed')->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
|
||||
->beginIF($type == 'willclose')->andWhere('t2.stage')->in('developed,released')->andWhere('t2.status')->ne('closed')->fi()
|
||||
->fi()
|
||||
->beginIF($execution->type != 'project')
|
||||
->beginIF(!empty($productParam))->andWhere('t1.product')->eq($productParam)->fi()
|
||||
@@ -3483,7 +3476,7 @@ class storyModel extends model
|
||||
}
|
||||
|
||||
common::printIcon('story', 'change', $vars . "&from=$story->from", $story, 'list', 'alter', '', '', false, "data-group=$story->from");
|
||||
common::printIcon('story', 'review', $vars . "&from=$story->from", $story, 'list', 'glasses', '', '', false, "data-group=$story->from");
|
||||
common::printIcon('story', 'review', $vars . "&from=$story->from", $story, 'list', 'search', '', '', false, "data-group=$story->from");
|
||||
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('story', 'edit', $vars . "&from=$story->from", $story, 'list', '', '', '', false, "data-group=$story->from");
|
||||
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap');
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
common::printIcon('story', 'change', "storyID=$child->id", $child, 'list', 'alter');
|
||||
common::printIcon('story', 'review', "storyID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('story', 'review', "storyID=$child->id", $child, 'list', 'search', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('story', 'assignTo', "storyID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('story', 'close', "storyID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
|
||||
common::printIcon('story', 'activate', "storyID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
|
||||
@@ -189,7 +189,7 @@
|
||||
<?php if(!$story->deleted):?>
|
||||
<?php
|
||||
common::printIcon('story', 'change', "storyID=$story->id", $story, 'button', 'alter', '', 'showinonlybody');
|
||||
common::printIcon('story', 'review', "storyID=$story->id", $story, 'button', '', '', 'showinonlybody');
|
||||
common::printIcon('story', 'review', "storyID=$story->id", $story, 'button', 'search', '', 'showinonlybody');
|
||||
if($story->status == 'active' and $story->stage == 'wait' and $story->parent <= 0 and !isonlybody())
|
||||
{
|
||||
$divideLang = $lang->story->subdivide;
|
||||
@@ -456,7 +456,7 @@
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<?php if(!empty($fromBug)):?>
|
||||
<tr class='text-top'>
|
||||
<tr>
|
||||
<th class='thWidth'><?php echo $lang->story->legendFromBug;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
@@ -466,7 +466,7 @@
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class='text-top thWidth'><?php echo $lang->story->legendBugs;?></th>
|
||||
<th class='thWidth'><?php echo $lang->story->legendBugs;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
@@ -479,7 +479,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='text-top'><?php echo $lang->story->legendCases;?></th>
|
||||
<th><?php echo $lang->story->legendCases;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
@@ -492,7 +492,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='text-top thWidth'><?php echo $lang->story->legendLinkStories;?></th>
|
||||
<th class='thWidth'><?php echo $lang->story->legendLinkStories;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
@@ -506,7 +506,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class='text-top'><?php echo $lang->story->legendChildStories;?></th>
|
||||
<th><?php echo $lang->story->legendChildStories;?></th>
|
||||
<td class='pd-0'>
|
||||
<ul class='list-unstyled'>
|
||||
<?php
|
||||
|
||||
@@ -143,7 +143,11 @@ class testtaskModel extends model
|
||||
common::setMenuVars($this->lang->testtask->menu, $key, $replace);
|
||||
}
|
||||
|
||||
$this->lang->testtask->menu->testcase['subModule'] = 'testtask';
|
||||
if($this->lang->navGroup->testcase == 'project' && $this->app->rawMethod == 'browseunits')
|
||||
{
|
||||
$lang->projectQa->menu->testcase['subModule'] = 'testtask';
|
||||
}
|
||||
|
||||
if($this->lang->navGroup->testtask == 'qa')
|
||||
{
|
||||
foreach($this->lang->qa->subMenu->testcase as $key => $menu)
|
||||
|
||||
@@ -69,9 +69,7 @@ class tree extends control
|
||||
/* Set menu.*/
|
||||
$moduleIndex = array_search('tree', $this->lang->noMenuModule);
|
||||
if($moduleIndex !== false) unset($this->lang->noMenuModule[$moduleIndex]);
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($rootID, 'story');
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($rootID, 'story');
|
||||
|
||||
$products = $this->product->getPairs();
|
||||
|
||||
@@ -193,11 +191,9 @@ class tree extends control
|
||||
{
|
||||
$productID = $lib->product;
|
||||
$this->lang->noMenuModule[] = 'tree';
|
||||
unset($this->lang->product->viewMenu->set['subModule']);
|
||||
unset($this->lang->product->menu->set['subModule']);
|
||||
$this->lang->navGroup->tree = 'product';
|
||||
$this->lang->product->menu = $this->lang->product->viewMenu;
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, 'story');
|
||||
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
|
||||
$this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID, 'story');
|
||||
|
||||
$products = $this->product->getPairs();
|
||||
$this->product->saveState($productID, $products);
|
||||
|
||||
@@ -208,13 +208,19 @@ $(function()
|
||||
var offset = $e.offset();
|
||||
var winWidth = $(window).width();
|
||||
var placement = 'top';
|
||||
if (offset.left > (winWidth*2/3)) {
|
||||
if(offset.left > (winWidth*2/3))
|
||||
{
|
||||
placement = 'left';
|
||||
} else if (offset.left < (winWidth/3) && (offset.left + $e.outerWidth()) < (winWidth*2/3)) {
|
||||
}
|
||||
else if(offset.left < (winWidth/3) && (offset.left + $e.outerWidth()) < (winWidth*2/3))
|
||||
{
|
||||
placement = 'right';
|
||||
} else if (offset.top < 50) {
|
||||
}
|
||||
else if (offset.top < 50)
|
||||
{
|
||||
placement = 'bottom';
|
||||
}
|
||||
|
||||
options = $.extend(
|
||||
{
|
||||
trigger: 'manual',
|
||||
@@ -334,7 +340,8 @@ $(function()
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
finishTask();
|
||||
}
|
||||
|
||||
+2
-2
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user