Merge branch '15.0.beta3' of http://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3

This commit is contained in:
holan20180123
2021-03-17 13:15:49 +08:00
71 changed files with 408 additions and 598 deletions
-1
View File
@@ -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`;
-5
View File
@@ -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');
+1
View File
@@ -12,6 +12,7 @@
*/
helper::import(dirname(dirname(__FILE__)) . '/base/front/front.class.php');
/**
* html类,生成html标签。
* The html class, to build html tags.
+1 -1
View File
@@ -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>
+4 -4
View File
@@ -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);
}
/**
+1 -1
View File
@@ -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
View File
@@ -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&param=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';
+6
View File
@@ -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';
+30 -64
View File
@@ -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&param=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&param=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
View File
@@ -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
+6 -7
View File
@@ -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'>
+3 -1
View File
@@ -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
View File
@@ -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();
+3 -1
View File
@@ -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');
}
+4 -4
View File
@@ -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;
}
-1
View File
@@ -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';
-2
View File
@@ -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';
-1
View File
@@ -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';
-1
View File
@@ -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';
+2 -3
View File
@@ -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}";
-1
View File
@@ -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}";
+5 -22
View File
@@ -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']);
+1 -17
View File
@@ -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;?>
+4 -2
View File
@@ -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);
+36 -30
View File
@@ -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();
+2 -6
View File
@@ -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';
+2 -6
View File
@@ -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';
+4 -8
View File
@@ -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';
+4 -8
View File
@@ -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';
+2 -1
View File
@@ -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 = '请访问官网';
+3 -7
View File
@@ -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 = '請訪問官網';
+4 -1
View File
@@ -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;?>
+2 -2
View File
@@ -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=&param=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=&param=0&$vars", $child, 'list', 'sitemap');
+2 -2
View File
@@ -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=&param=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=&param=0&$vars", $child, 'list', 'sitemap');
+2 -4
View File
@@ -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);
}
}
+9 -25
View File
@@ -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);
+6 -7
View File
@@ -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');
+2
View File
@@ -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;
+1 -3
View File
@@ -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');
+3 -4
View File
@@ -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);
+3 -26
View File
@@ -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]))
+2 -2
View File
@@ -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>
+7 -1
View File
@@ -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
View File
@@ -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;
-1
View File
@@ -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. */
-2
View File
@@ -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);
+6 -11
View File
@@ -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;
+4 -11
View File
@@ -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;
+4 -11
View File
@@ -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;
+4 -11
View File
@@ -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;
+5 -11
View File
@@ -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;
+4 -11
View File
@@ -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;
+1 -3
View File
@@ -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);
+2 -1
View File
@@ -15,7 +15,8 @@ function scmChanged(scm) {
$('.tips-git').removeClass('hidden');
$('.tips-svn').addClass('hidden');
} else
}
else
{
$('.account-fields').removeClass('hidden');
+2 -1
View File
@@ -15,7 +15,8 @@ function scmChanged(scm) {
$('.tips-git').removeClass('hidden');
$('.tips-svn').addClass('hidden');
} else
}
else
{
$('.account-fields').removeClass('hidden');
-1
View File
@@ -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);
}
+8 -24
View File
@@ -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
View File
@@ -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;}
+2 -9
View File
@@ -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=&param=0&$vars", $story, 'list', 'sitemap');
+7 -7
View File
@@ -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
+5 -1
View File
@@ -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)
+3 -7
View File
@@ -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);
+11 -4
View File
@@ -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
View File
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