diff --git a/db/update15.0.sql b/db/update15.0.sql index de28ba87a9..1d293bb9f4 100644 --- a/db/update15.0.sql +++ b/db/update15.0.sql @@ -47,7 +47,6 @@ ALTER TABLE `zt_testreport` ADD `project` mediumint(8) unsigned NOT NULL AFTER ` ALTER TABLE `zt_testsuite` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; ALTER TABLE `zt_build` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; ALTER TABLE `zt_release` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_expect` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; ALTER TABLE `zt_product` ADD `bind` enum('0','1') NOT NULL DEFAULT '0' AFTER `code`; ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`; diff --git a/module/block/view/executionoverviewblock.html.php b/module/block/view/executionoverviewblock.html.php index cf7d136cda..3dec05c370 100644 --- a/module/block/view/executionoverviewblock.html.php +++ b/module/block/view/executionoverviewblock.html.php @@ -16,7 +16,7 @@
-
execution->allProject;?>
+
execution->allExecutions;?>
execution->viewAll;?>
diff --git a/module/bug/control.php b/module/bug/control.php index 6e6348c587..3aeee1878a 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -607,8 +607,8 @@ class bug extends control /* Judge bug exits or not. */ $bug = $this->bug->getById($bugID, true); if(!$bug) die(js::error($this->lang->notFound) . js::locate('back')); - $this->session->PRJ = $bug->project; - $this->view->products = $this->products = $this->product->getProductPairsByProject($this->session->PRJ); + if($bug->project) $this->session->PRJ = $bug->project; + $this->view->products = $this->products = $this->product->getProductPairsByProject($this->session->PRJ); $this->bug->checkBugExecutionPriv($bug); diff --git a/module/common/lang/de.php b/module/common/lang/de.php index 9accc59c8f..b09ed81c3b 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -172,6 +172,8 @@ else $lang->project->menu->browse = array('link' => "$lang->executionCommon|project|browse|"); } +$lang->project->dividerMenu = ',execution,programplan,doc,dynamic,'; + $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"); diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 6fa36ce027..e2b5c18b00 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -222,9 +222,10 @@ $lang->productplan->menu = $lang->product->menu; /* System menu. */ $lang->system = new stdclass(); $lang->system->menu = new stdclass(); -$lang->system->menu->company = array('link' => 'User|company|browse|', 'subModule' => ',user,dept,group,', 'alias' => ',dynamic,view,'); -$lang->system->menu->team = array('link' => 'Team|my|team|'); +$lang->system->menu->team = array('link' => 'Team|my|team|', 'subModule' => 'user'); $lang->system->menu->calendar = array('link' => 'Calendar|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo'); +$lang->system->menu->dynamic = 'Dynamic|company|dynamic|'; +$lang->system->menu->view = array('link' => 'Company|company|view'); $lang->measurement = new stdclass(); $lang->measurement->menu = new stdclass(); @@ -520,6 +521,7 @@ $lang->company->menu->browseGroup = array('link' => 'Group|group|browse', 'subMo $lang->admin = new stdclass(); $lang->admin->menu = new stdclass(); $lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany'); +$lang->admin->menu->company = array('link' => 'User|company|browse|', 'subModule' => ',user,dept,group,'); $lang->admin->menu->model = array('link' => 'Model|custom|browsestoryconcept|', 'subModule' => 'holiday'); $lang->admin->menu->custom = array('link' => 'Custom|custom|index', 'subModule' => 'custom'); $lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension'); @@ -531,6 +533,10 @@ $lang->subject = new stdclass(); $lang->subject->menu = new stdclass(); $lang->subject->menu->storyConcept = array('link' => 'Story Concpet|custom|browsestoryconcept|'); +$lang->dept->menu = $lang->company->menu; +$lang->group->menu = $lang->company->menu; +$lang->user->menu = $lang->company->menu; + $lang->admin->subMenu = new stdclass(); $lang->admin->subMenu->message = new stdclass(); $lang->admin->subMenu->message->mail = array('link' => 'Mail|mail|index', 'subModule' => 'mail'); @@ -612,7 +618,6 @@ $lang->menugroup->job = 'ci'; /* Nav group.*/ $lang->navGroup = new stdclass(); $lang->navGroup->my = 'my'; -$lang->navGroup->todo = 'my'; $lang->navGroup->effort = 'my'; $lang->navGroup->score = 'my'; @@ -663,6 +668,8 @@ $lang->navGroup->build = 'execution'; $lang->navGroup->sqlbuilder = 'system'; $lang->navGroup->auditcl = 'system'; $lang->navGroup->cmcl = 'system'; +$lang->navGroup->todo = 'system'; +$lang->navGroup->ldap = 'system'; $lang->navGroup->process = 'system'; $lang->navGroup->activity = 'system'; $lang->navGroup->zoutput = 'system'; @@ -681,17 +688,18 @@ $lang->navGroup->lieu = 'attend'; $lang->navGroup->admin = 'admin'; $lang->navGroup->company = 'admin'; $lang->navGroup->dept = 'admin'; -$lang->navGroup->ldap = 'admin'; +$lang->navGroup->user = 'admin'; $lang->navGroup->group = 'admin'; +$lang->navGroup->dept = 'admin'; $lang->navGroup->webhook = 'admin'; $lang->navGroup->sms = 'admin'; $lang->navGroup->message = 'admin'; -$lang->navGroup->user = 'admin'; $lang->navGroup->custom = 'admin'; $lang->navGroup->cron = 'admin'; $lang->navGroup->backup = 'admin'; $lang->navGroup->mail = 'admin'; $lang->navGroup->dev = 'admin'; +$lang->navGroup->entry = 'admin'; $lang->navGroup->extension = 'admin'; $lang->navGroup->action = 'admin'; $lang->navGroup->search = 'admin'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index 968d41c9aa..3da57a8cd3 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -172,6 +172,8 @@ else $lang->project->menu->browse = array('link' => "$lang->executionCommon|project|browse|"); } +$lang->project->dividerMenu = ',execution,programplan,doc,dynamic,'; + $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"); diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index c5ae0b2f4b..b46eb228e6 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -154,10 +154,11 @@ $lang->system->menuOrder[15] = 'calendar'; /* admin menu order. */ $lang->admin->menuOrder[5] = 'index'; -$lang->admin->menuOrder[10] = 'model'; -$lang->admin->menuOrder[15] = 'custom'; -$lang->admin->menuOrder[20] = 'message'; -$lang->admin->menuOrder[25] = 'extension'; +$lang->admin->menuOrder[10] = 'company'; +$lang->admin->menuOrder[15] = 'model'; +$lang->admin->menuOrder[20] = 'custom'; +$lang->admin->menuOrder[25] = 'message'; +$lang->admin->menuOrder[30] = 'extension'; $lang->admin->menuOrder[35] = 'dev'; $lang->admin->menuOrder[40] = 'system'; diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php index 7008e03aae..8dc60db6fc 100644 --- a/module/common/lang/vi.php +++ b/module/common/lang/vi.php @@ -172,6 +172,8 @@ else $lang->project->menu->browse = array('link' => "$lang->executionCommon|project|browse|"); } +$lang->project->dividerMenu = ',execution,programplan,doc,dynamic,'; + $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"); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 90c548368e..77bc272332 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -149,7 +149,7 @@ $lang->mainNav->qa = ' 测试|qa|index|'; $lang->mainNav->repo = ' 代码|repo|browse|'; $lang->mainNav->doc = ' 文档|doc|index|'; $lang->mainNav->report = " 统计|report|productSummary|"; -$lang->mainNav->system = ' 组织|company|browse|'; +$lang->mainNav->system = ' 组织|my|team|'; $lang->mainNav->admin = ' 后台|admin|index|'; if($config->systemMode == 'new') $lang->mainNav->program = " 项目集|$programModule|$programMethod|"; @@ -172,7 +172,7 @@ else $lang->project->menu->browse = array('link' => "$lang->executionCommon|project|browse|"); } -$lang->project->dividerMenu = ',execution,programplan,doc,other,'; +$lang->project->dividerMenu = ',execution,programplan,doc,dynamic,'; $lang->program->viewMenu = new stdclass(); $lang->program->viewMenu->product = array('link' => '产品|program|product|program=%s', 'alias' => 'view'); @@ -222,9 +222,10 @@ $lang->productplan->menu = $lang->product->menu; /* System menu. */ $lang->system = new stdclass(); $lang->system->menu = new stdclass(); -$lang->system->menu->company = array('link' => '人员|company|browse|', 'subModule' => ',user,dept,group,', 'alias' => ',dynamic,view,'); -$lang->system->menu->team = array('link' => '团队|my|team|'); +$lang->system->menu->team = array('link' => '团队|my|team|', 'subModule' => 'user'); $lang->system->menu->calendar = array('link' => '日程|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo'); +$lang->system->menu->dynamic = '动态|company|dynamic|'; +$lang->system->menu->view = array('link' => '公司|company|view'); $lang->measurement = new stdclass(); $lang->measurement->menu = new stdclass(); @@ -518,13 +519,12 @@ $lang->company->menu = new stdclass(); $lang->company->menu->browseUser = array('link' => '用户|company|browse', 'subModule' => ',user,'); $lang->company->menu->dept = array('link' => '部门|dept|browse', 'subModule' => 'dept'); $lang->company->menu->browseGroup = array('link' => '权限|group|browse', 'subModule' => 'group'); -$lang->company->menu->dynamic = '动态|company|dynamic|'; -$lang->company->menu->view = array('link' => '公司|company|view'); /* 后台管理菜单设置。*/ $lang->admin = new stdclass(); $lang->admin->menu = new stdclass(); $lang->admin->menu->index = array('link' => '首页|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany'); +$lang->admin->menu->company = array('link' => '人员|company|browse|', 'subModule' => ',user,dept,group,'); $lang->admin->menu->model = array('link' => '模型|custom|browsestoryconcept|', 'subModule' => 'holiday'); $lang->admin->menu->custom = array('link' => '自定义|custom|index', 'subModule' => 'custom'); $lang->admin->menu->extension = array('link' => '插件|extension|browse', 'subModule' => 'extension'); @@ -536,9 +536,9 @@ $lang->subject = new stdclass(); $lang->subject->menu = new stdclass(); $lang->subject->menu->storyConcept = array('link' => '需求概念|custom|browsestoryconcept|'); -$lang->dept->menu = $lang->company->menu; -$lang->group->menu = $lang->company->menu; -$lang->user->menu = $lang->company->menu; +$lang->dept->menu = $lang->company->menu; +$lang->group->menu = $lang->company->menu; +$lang->user->menu = $lang->company->menu; $lang->admin->subMenu = new stdclass(); $lang->admin->subMenu->message = new stdclass(); @@ -621,7 +621,6 @@ $lang->menugroup->job = 'ci'; /* Nav group.*/ $lang->navGroup = new stdclass(); $lang->navGroup->my = 'my'; -$lang->navGroup->todo = 'my'; $lang->navGroup->effort = 'my'; $lang->navGroup->score = 'my'; @@ -669,13 +668,10 @@ $lang->navGroup->execution = 'execution'; $lang->navGroup->task = 'execution'; $lang->navGroup->build = 'execution'; -$lang->navGroup->company = 'system'; $lang->navGroup->sqlbuilder = 'system'; $lang->navGroup->auditcl = 'system'; $lang->navGroup->cmcl = 'system'; -$lang->navGroup->user = 'system'; -$lang->navGroup->group = 'system'; -$lang->navGroup->dept = 'system'; +$lang->navGroup->todo = 'system'; $lang->navGroup->ldap = 'system'; $lang->navGroup->process = 'system'; $lang->navGroup->activity = 'system'; @@ -693,6 +689,11 @@ $lang->navGroup->overtime = 'attend'; $lang->navGroup->lieu = 'attend'; $lang->navGroup->admin = 'admin'; +$lang->navGroup->company = 'admin'; +$lang->navGroup->dept = 'admin'; +$lang->navGroup->user = 'admin'; +$lang->navGroup->group = 'admin'; +$lang->navGroup->dept = 'admin'; $lang->navGroup->webhook = 'admin'; $lang->navGroup->sms = 'admin'; $lang->navGroup->message = 'admin'; @@ -897,7 +898,7 @@ $lang->icons['score'] = 'tint'; $lang->menu = new stdclass(); $lang->menu->scrum = new stdclass(); $lang->menu->scrum->index = '仪表盘|project|index|project={PROJECT}'; -$lang->menu->scrum->execution = "$lang->executionCommon|execution|all|status=all&executionID=0&from=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->qa = '测试|qa|index'; @@ -905,7 +906,6 @@ $lang->menu->scrum->ci = '代码|repo|browse'; $lang->menu->scrum->projectbuild = array('link' => '版本|projectbuild|browse|project={PROJECT}'); $lang->menu->scrum->projectrelease = array('link' => '发布|projectrelease|browse|project={PROJECT}'); $lang->menu->scrum->dynamic = array('link' => '动态|project|dynamic|project={PROJECT}'); -$lang->menu->scrum->other = array('link' => '其他|project|other', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'issue,risk,stakeholder'); $lang->menu->scrum->projectsetting = array('link' => '设置|project|view|project={PROJECT}', 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist'); $lang->scrum = new stdclass(); diff --git a/module/company/control.php b/module/company/control.php index b1ab021140..28b9e5eead 100644 --- a/module/company/control.php +++ b/module/company/control.php @@ -147,6 +147,9 @@ class company extends control */ public function view() { + $this->lang->navGroup->company = 'system'; + $this->lang->noMenuModule[] = 'company'; + $this->company->setMenu(); $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->company->view; $this->view->position[] = $this->lang->company->view; @@ -167,6 +170,9 @@ class company extends control */ public function dynamic($browseType = 'today', $param = '', $recTotal = 0, $date = '', $direction = 'next') { + $this->lang->navGroup->company = 'system'; + $this->lang->noMenuModule[] = 'company'; + $this->company->setMenu(); $this->app->loadLang('user'); $this->app->loadLang('execution'); diff --git a/module/company/css/browse.css b/module/company/css/browse.css index 8b467bb46b..712cfcb024 100644 --- a/module/company/css/browse.css +++ b/module/company/css/browse.css @@ -1,5 +1,4 @@ #titlebar {display: none;} -form {position: relative;} #querybox {float: none !important; width: auto;} #moreOrLite {right: 10px !important;} diff --git a/module/custom/view/browsestoryconcept.html.php b/module/custom/view/browsestoryconcept.html.php index 1d21b92205..b3f840a7a9 100644 --- a/module/custom/view/browsestoryconcept.html.php +++ b/module/custom/view/browsestoryconcept.html.php @@ -46,7 +46,7 @@ custom->URSR ? "disabled=disabled" : '';?> createLink('custom', 'editStoryConcept', "id=$key", '', true), "", '', "class='btn iframe' title={$lang->edit}");?> - createLink('custom', 'deleteStoryConcept', "id=$key"), "", 'hiddenwin', "class='btn' $disabled title={$lang->delete} data-group='system'");?> + createLink('custom', 'deleteStoryConcept', "id=$key"), "", 'hiddenwin', "class='btn' $disabled title={$lang->delete} data-group='admin'");?> diff --git a/module/execution/control.php b/module/execution/control.php index 12a8187cb8..b9f9df6838 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -1914,7 +1914,7 @@ class execution extends control /* Get execution's product. */ $productID = 0; - $productPairs = $this->loadModel('product')->getProductPairsByExecution($executionID); + $productPairs = $this->loadModel('product')->getProductPairsByProject($executionID); if($productPairs) $productID = key($productPairs); $this->view->title = $this->lang->execution->storyKanban; @@ -2569,7 +2569,7 @@ class execution extends control * All execution. * * @param string $status - * @param int $executionID + * @param int $projectID * @param string $orderBy * @param int $productID * @param int $recTotal @@ -2578,26 +2578,14 @@ class execution extends control * @access public * @return void */ - public function all($status = 'all', $executionID = 0, $from = 'execution', $orderBy = 'id_desc', $productID = 0, $recTotal = 0, $recPerPage = 10, $pageID = 1) + public function all($status = 'all', $projectID = 0, $from = 'execution', $orderBy = 'id_desc', $productID = 0, $recTotal = 0, $recPerPage = 10, $pageID = 1) { $this->app->loadLang('my'); $this->app->loadLang('product'); $this->app->loadLang('programplan'); - if($from == 'execution') - { - if($this->executions) - { - $execution = $this->commonAction($executionID); - $executionID = $execution->id; - } - $this->session->set('executionList', $this->app->getURI(true)); - $projectID = 0; - } - elseif($from == 'project') - { - $this->lang->navGroup->execution = 'project'; - $projectID = $this->session->PRJ; - } + + if($from == 'execution') $this->session->set('executionList', $this->app->getURI(true)); + if($from == 'project') $this->lang->navGroup->execution = 'project'; /* Load pager and get tasks. */ $this->app->loadClass('pager', $static = true); @@ -2607,13 +2595,15 @@ class execution extends control $this->view->position[] = $this->lang->execution->allExecutions; $this->view->executionStats = $this->project->getStats($projectID, $status, $productID, 0, 30, $orderBy, $pager); - $this->view->products = array(0 => $this->lang->product->select) + $this->loadModel('product')->getProductPairsByProject($this->session->PRJ); $this->view->productID = $productID; - $this->view->executionID = $executionID; + $this->view->projectID = $projectID; + $this->view->projects = $this->project->getPairsByModel(); $this->view->pager = $pager; $this->view->orderBy = $orderBy; $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->status = $status; + $this->view->from = $from; + $this->view->projectTree = $this->project->getTreeMenu(0, array('projectmodel', 'createManageLink'), 0, 'list'); $this->display(); } diff --git a/module/execution/model.php b/module/execution/model.php index 8c8fae3e6b..6a2783adb0 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -313,6 +313,7 @@ class executionModel extends model $execution = $this->getByID($executionID); $this->session->set('project', $execution->project); } + /** * Create a execution. * @@ -345,7 +346,7 @@ class executionModel extends model ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('lastEditedDate', helper::now()) ->setDefault('team', substr($this->post->name,0, 30)) - ->setIF($this->config->systemMode == 'new', 'execution', $this->session->PRJ) + ->setIF($this->config->systemMode == 'new', 'project', $this->session->PRJ) ->setIF($this->config->systemMode == 'new', 'parent', $this->session->PRJ) ->setIF($this->post->acl == 'open', 'whitelist', '') ->join('whitelist', ',') @@ -1136,7 +1137,7 @@ class executionModel extends model ->andWhere('t2.deleted')->eq(0) ->fetchPairs(); - $products = $this->loadModel('product')->getProductPairsByExecution($projectID); + $products = $this->loadModel('product')->getProductPairsByProject($projectID); foreach($executions as $id => $execution) { @@ -2309,7 +2310,7 @@ class executionModel extends model if($executionType == 'execution') { $childSprints = $this->dao->select('id')->from(TABLE_EXECUTION)->where('project')->eq($execution->id)->andWhere('type')->in('stage,sprint')->andWhere('deleted')->eq('0')->fetchPairs(); - $linkedProducts = $this->loadModel('product')->getProductPairsByExecution($execution->id); + $linkedProducts = $this->loadModel('product')->getProductPairsByProject($execution->id); $this->loadModel('user')->updateUserView(array($executionID), 'execution', $changedAccounts); if(!empty($childSprints)) $this->user->updateUserView($childSprints, 'sprint', $changedAccounts); @@ -2355,7 +2356,7 @@ class executionModel extends model $changedAccounts = array_unique($changedAccounts); $this->loadModel('user')->updateUserView($executionID, $executionType, $changedAccounts); - $linkedProducts = $this->loadModel('product')->getProductPairsByExecution($executionID); + $linkedProducts = $this->loadModel('product')->getProductPairsByProject($executionID); if(!empty($linkedProducts)) $this->user->updateUserView(array_keys($linkedProducts), 'product', $changedAccounts); } @@ -2386,7 +2387,7 @@ class executionModel extends model { $this->dao->delete()->from(TABLE_TEAM)->where('root')->eq($sprint->execution)->andWhere('type')->eq('execution')->andWhere('account')->eq($account)->exec(); $this->loadModel('user')->updateUserView($sprint->execution, 'execution', array($account)); - $linkedProducts = $this->loadModel('product')->getProductPairsByExecution($sprint->execution); + $linkedProducts = $this->loadModel('product')->getProductPairsByProject($sprint->execution); if(!empty($linkedProducts)) $this->user->updateUserView(array_keys($linkedProducts), 'product', array($account)); } } diff --git a/module/execution/view/all.html.php b/module/execution/view/all.html.php index b42ac2b3c9..17c9c5e10a 100644 --- a/module/execution/view/all.html.php +++ b/module/execution/view/all.html.php @@ -25,25 +25,41 @@ @-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;}} -
+
+ + + -
' data-ride='table'> + ' data-ride='table'> - recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?> + recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";?> - +
@@ -168,7 +184,7 @@
execution->batchEdit, '', 'btn');?>
- recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"), $lang->execution->updateOrder, '', "class='btn'");?> + recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}"), $lang->execution->updateOrder, '', "class='btn'");?> show('right', 'pagerjs');?> diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 2acc1d244f..26fab016e3 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -1062,7 +1062,6 @@ $lang->mail->methodOrder[65] = 'ztCloud'; $lang->resource->custom = new stdclass(); $lang->resource->custom->index = 'index'; $lang->resource->custom->set = 'set'; -$lang->resource->custom->project = 'project'; $lang->resource->custom->product = 'product'; $lang->resource->custom->restore = 'restore'; $lang->resource->custom->flow = 'flow'; @@ -1076,17 +1075,16 @@ $lang->resource->custom->deleteStoryConcept = 'deleteStoryConcept'; $lang->custom->methodOrder[5] = 'index'; $lang->custom->methodOrder[10] = 'set'; -$lang->custom->methodOrder[15] = 'project'; -$lang->custom->methodOrder[20] = 'product'; -$lang->custom->methodOrder[25] = 'restore'; -$lang->custom->methodOrder[30] = 'flow'; -$lang->custom->methodOrder[35] = 'working'; -$lang->custom->methodOrder[40] = 'setPublic'; -$lang->custom->methodOrder[45] = 'timezone'; -$lang->custom->methodOrder[55] = 'setStoryContcept'; -$lang->custom->methodOrder[60] = 'editStoryContcept'; -$lang->custom->methodOrder[65] = 'browseStoryContcept'; -$lang->custom->methodOrder[70] = 'deleteStoryContcept'; +$lang->custom->methodOrder[15] = 'product'; +$lang->custom->methodOrder[20] = 'restore'; +$lang->custom->methodOrder[25] = 'flow'; +$lang->custom->methodOrder[30] = 'working'; +$lang->custom->methodOrder[35] = 'setPublic'; +$lang->custom->methodOrder[40] = 'timezone'; +$lang->custom->methodOrder[45] = 'setStoryContcept'; +$lang->custom->methodOrder[50] = 'editStoryContcept'; +$lang->custom->methodOrder[55] = 'browseStoryContcept'; +$lang->custom->methodOrder[60] = 'deleteStoryContcept'; $lang->resource->datatable = new stdclass(); $lang->resource->datatable->setGlobal = 'setGlobal'; diff --git a/module/index/js/index.js b/module/index/js/index.js index 2edf4b424a..289e23c30a 100644 --- a/module/index/js/index.js +++ b/module/index/js/index.js @@ -113,7 +113,12 @@ { if(methodLowerCase === 'create' && (link.params.programID || link.params.$1)) return 'program'; } - if(moduleName === 'my') if(methodLowerCase === 'team' || methodLowerCase == 'calendar') return 'system'; + if(moduleName === 'user') + { + if(['todo', 'task', 'story', 'bug', 'testtask', 'testcase', 'execution', 'dynamic', 'profile'].includes(methodLowerCase)) return 'system'; + } + if(moduleName === 'my') if(methodLowerCase === 'team' || methodLowerCase == 'calendar') return 'system'; + if(moduleName === 'company') if(methodLowerCase === 'dynamic' || methodLowerCase == 'view') return 'system'; if(moduleName === 'tree') { if(methodLowerCase === 'browse') @@ -131,9 +136,6 @@ } } - var myMethods = 'todocalendar|effortcalendar|todo|task|story|bug|testtask|testcase|execution|issue|risk|dynamic|profile'; - if(moduleName === 'user' && myMethods.indexOf(methodLowerCase) != -1) return 'my'; - code = window.navGroup[moduleName] || moduleName || urlOrModuleName; return appsMap[code] ? code : ''; } diff --git a/module/project/control.php b/module/project/control.php index dfdd8422ae..dee710b3e6 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -115,13 +115,29 @@ class project extends control */ public function ajaxGetDropMenu($projectID = 0, $module, $method) { - $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($this->app->user->view->projects)->andWhere('deleted')->eq(0)->orderBy('parent desc')->fetchAll(); + $programs = $this->dao->select('id, name')->from(TABLE_PROGRAM)->where('type')->eq('program')->andWhere('deleted')->eq(0)->orderBy('order_asc')->fetchPairs(); + $projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($this->app->user->view->projects)->andWhere('deleted')->eq(0)->orderBy('openedDate_desc')->fetchAll('id'); + + /* Sort project by program. */ + $orderedProjects = array(); + foreach($programs as $programID => $programName) + { + foreach($projects as $project) + { + if($project->parent == $programID) + { + $orderedProjects[] = $project; + unset($projects[$project->id]); + } + } + } + if(!empty($projects)) $orderedProjects += $projects; $this->view->projectID = $projectID; - $this->view->projects = $projects; + $this->view->projects = $orderedProjects; $this->view->module = $module; $this->view->method = $method; - $this->view->programs = $this->loadModel('program')->getPairs(true); + $this->view->programs = $programs; $this->display(); } @@ -355,10 +371,10 @@ class project extends control $this->loadModel('action'); $project = $this->project->getByID($projectID); - $projectID = $project->parent; + $programID = $project->parent; - /* Navigation stay in project when enter from project list. */ - $this->adjustNavigation($from, $projectID); + /* Navigation stay in program when enter from program list. */ + $this->adjustNavigation($from, $programID); if($_POST) { @@ -409,7 +425,7 @@ class project extends control $this->view->PMUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst', $project->PM); $this->view->users = $this->user->getPairs('noclosed|nodeleted'); $this->view->project = $project; - $this->view->projectList = $this->program->getParentPairs(); + $this->view->programList = $this->program->getParentPairs(); $this->view->projectID = $projectID; $this->view->allProducts = array('0' => '') + $allProducts; $this->view->productPlans = $productPlans; diff --git a/module/project/model.php b/module/project/model.php index b026b0c13e..fc751a9c99 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -618,7 +618,7 @@ class projectModel extends model } krsort($projectMenu); - $projectMenu = array_pop($projectMenu); + $projectMenu = implode('', $projectMenu); $lastMenu = "
    {$projectMenu}
\n"; return $lastMenu; @@ -635,6 +635,9 @@ class projectModel extends model { $link = $project->type == 'program' ? helper::createLink('project', 'browse', "projectID={$project->id}&status=all") : helper::createLink('project', 'index', "projectID={$project->id}", '', '', $project->id); $icon = $project->type == 'program' ? " " : " "; + + if($this->app->rawModule == 'execution') $link = helper::createLink('execution', 'all', "status=all&projectID={$project->id}"); + return html::a($link, $icon . $project->name, '_self', "id=project{$project->id} title='{$project->name}' class='text-ellipsis'"); } @@ -852,7 +855,7 @@ class projectModel extends model ->setIF($this->post->future, 'budget', 0) ->setIF($this->post->budget != 0, 'budget', round($this->post->budget, 2)) ->join('whitelist', ',') - ->stripTags($this->config->project->editor->prjedit['id'], $this->config->allowedTags) + ->stripTags($this->config->project->editor->edit['id'], $this->config->allowedTags) ->remove('products,branch,plans,delta,future') ->get(); @@ -892,7 +895,7 @@ class projectModel extends model return false; } - $project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->prjedit['id'], $this->post->uid); + $project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->edit['id'], $this->post->uid); $requiredFields = $this->config->project->edit->requiredFields; if($this->post->delta == 999) $requiredFields = trim(str_replace(',end,', ',', ",{$requiredFields},"), ','); @@ -909,7 +912,7 @@ class projectModel extends model ->checkIF($project->begin != '', 'begin', 'date') ->checkIF($project->end != '', 'end', 'date') ->checkIF($project->end != '', 'end', 'gt', $project->begin) - ->check('name', 'unique', "id!=$projectID and deleted='0'") + ->check('name', 'unique', "id != $projectID and deleted='0'") ->where('id')->eq($projectID) ->exec(); @@ -1192,6 +1195,7 @@ class projectModel extends model public function updateProductProgram($oldProgram, $newProgram, $products) { $this->loadModel('action'); + $this->loadModel('program'); /* Product belonging project set processing. */ $oldTopProgram = $this->program->getTopByID($oldProgram); $newTopProgram = $this->program->getTopByID($newProgram); diff --git a/module/project/view/ajaxgetdropmenu.html.php b/module/project/view/ajaxgetdropmenu.html.php index 867bcd8bd7..602746a989 100644 --- a/module/project/view/ajaxgetdropmenu.html.php +++ b/module/project/view/ajaxgetdropmenu.html.php @@ -21,7 +21,7 @@ $projectsPinYin = common::convert2Pinyin($projectNames); foreach($projects as $project) { $link = helper::createLink('project', 'index', "projectID=%s", '', '', $project->id); - $projectName = $project->parent ? zget($programs, $project->parent, '') . '/' . $project->name : $project->name; + $projectName = zget($programs, $project->parent, '') ? zget($programs, $project->parent) . '/' . $project->name : $project->name; if($project->status != 'done' and $project->status != 'closed' and $project->PM == $this->app->user->account) { $myProjectsHtml .= html::a(sprintf($link, $project->id), $projectName, '', "class='text-important' title='{$projectName}' data-key='" . zget($projectsPinYin, $projectName, '') . "'"); diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index 3a219deaa9..75879560f7 100644 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -33,7 +33,7 @@ - + diff --git a/module/project/view/projecttitle.html.php b/module/project/view/projecttitle.html.php new file mode 100644 index 0000000000..2bc8ae2eca --- /dev/null +++ b/module/project/view/projecttitle.html.php @@ -0,0 +1,32 @@ + + * @package project + * @version $Id: prjprojecttitle.html.php 4769 2013-05-05 07:24:21Z wwccss $ + * @link http://www.zentao.net + */ +?> + + +
program->parent;?>parent, "class='form-control chosen'");?>parent, "class='form-control chosen'");?>
+ + + + + + + + + +
project->moduleOpen;?>project->programTitle, $status);?>
+ + + diff --git a/module/stakeholder/view/batchcreate.html.php b/module/stakeholder/view/batchcreate.html.php index 8785bbe254..03d36c44a0 100644 --- a/module/stakeholder/view/batchcreate.html.php +++ b/module/stakeholder/view/batchcreate.html.php @@ -84,7 +84,7 @@
diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 356f724b9e..938cc23420 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -163,7 +163,7 @@ processStatus('story', $child);?> id", $child, 'list'); + 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', 'assignTo', "storyID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true); common::printIcon('story', 'close', "storyID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true); @@ -188,7 +188,7 @@
";?> deleted):?> id", $story, 'button', '', '', 'showinonlybody'); + common::printIcon('story', 'change', "storyID=$story->id", $story, 'button', 'alter', '', 'showinonlybody'); common::printIcon('story', 'review', "storyID=$story->id", $story, 'button', '', '', 'showinonlybody'); if($story->status == 'active' and $story->stage == 'wait' and $story->parent <= 0 and !isonlybody()) {