From 7772cb6d63f066acda0620718e03fa1db1ac10ae Mon Sep 17 00:00:00 2001 From: Yagami <976204163@qq.com> Date: Wed, 21 Oct 2020 09:14:24 +0800 Subject: [PATCH] * Add lang and priv. --- module/common/lang/en.php | 2 +- module/common/lang/fr.php | 256 ++++++++++++++----- module/common/lang/vi.php | 256 ++++++++++++++----- module/common/lang/zh-cn.php | 4 +- module/group/control.php | 7 +- module/group/js/manageview.js | 6 + module/group/lang/de.php | 1 + module/group/lang/en.php | 1 + module/group/lang/fr.php | 1 + module/group/lang/vi.php | 1 + module/group/lang/zh-cn.php | 1 + module/group/view/manageview.html.php | 13 + module/program/control.php | 4 +- module/program/model.php | 34 ++- module/program/view/pgmbrowsebylist.html.php | 4 +- module/stakeholder/control.php | 2 +- module/user/model.php | 93 ++----- 17 files changed, 457 insertions(+), 229 deletions(-) diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 9d9b4a04ee..af143623b3 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -159,7 +159,7 @@ $lang->product->viewMenu = new stdclass(); $lang->product->viewMenu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "Story|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->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; $lang->product->viewMenu->branch = '@branch@|branch|manage|productID=%s'; $lang->product->viewMenu->module = 'Module|tree|browse|productID=%s&view=story'; diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index dcda885692..058364b7a3 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -122,20 +122,56 @@ $lang->common->common = 'Module Commun'; /* Main menu. */ $lang->mainNav = new stdclass(); $lang->mainNav->my = ' My|my|index|'; -$lang->mainNav->program = ' Program|program|browse|'; +$lang->mainNav->program = ' Program|program|browse|'; +$lang->mainNav->product = ' Product|product|index|'; +$lang->mainNav->project = ' Project|program|prjbrowse|'; $lang->mainNav->system = ' System|custom|estimate|'; $lang->mainNav->admin = ' Admin|admin|index|'; $lang->reporting = new stdclass(); $lang->dividerMenu = ',admin,'; +/* Program set menu. */ +$lang->program = new stdclass(); +$lang->program->menu = new stdclass(); +$lang->program->menu->index = 'Home|program|pgmindex|'; +$lang->program->menu->browse = array('link' => 'Program|program|pgmbrowse|', 'alias' => 'pgmcreate,pgmedit,pgmgroup,pgmmanagepriv,pgmmanageview,pgmmanagemembers'); + +$lang->program->viewMenu = new stdclass(); +$lang->program->viewMenu->view = array('link' => 'View|program|pgmview|program=%s'); +$lang->program->viewMenu->product = array('link' => 'Product|program|pgmproduct|program=%s'); +$lang->program->viewMenu->project = array('link' => "Project|program|pgmproject|program=%s"); +$lang->program->viewMenu->personnel = array('link' => "Member|personnel|accessible|program=%s"); +$lang->program->viewMenu->stakeholder = array('link' => "Stakeholder|program|pgmstakeholder|program=%s", 'alias' => 'createstakeholder'); + +$lang->personnel = new stdClass(); +$lang->personnel->menu = new stdClass(); +$lang->personnel->menu->accessible = array('link' => "Accessible|personnel|accessible|program=%s"); +$lang->personnel->menu->putinto = array('link' => "Investment|personnel|putinto|program=%s"); + /* Scrum menu. */ -$lang->menu = new stdclass(); -$lang->menu->program = 'Home|program|index'; -$lang->menu->product = $lang->productCommon . '|product|index|locate=no'; -$lang->menu->project = 'Iteration|project|index|locate=no'; -$lang->menu->doc = 'Doc|doc|index|'; -$lang->menu->qa = 'Qa|qa|index'; +$lang->product = new stdclass(); +$lang->product->menu = new stdclass(); +$lang->product->menu->home = 'Home|product|index|'; +$lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); + +$lang->product->viewMenu = new stdclass(); +$lang->product->viewMenu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->product->viewMenu->story = array('link' => "Story|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->branch = '@branch@|branch|manage|productID=%s'; +$lang->product->viewMenu->module = 'Module|tree|browse|productID=%s&view=story'; +$lang->product->viewMenu->view = array('link' => '概况|product|view|productID=%s', 'alias' => 'edit'); + +$lang->release = new stdclass(); +$lang->branch = new stdclass(); +$lang->productplan = new stdclass(); + +$lang->release->menu = $lang->product->viewMenu; +$lang->branch->menu = $lang->product->menu; +$lang->productplan->menu = $lang->product->menu; /* System menu. */ $lang->system = new stdclass(); @@ -221,7 +257,7 @@ $lang->my = new stdclass(); $lang->my->menu = new stdclass(); $lang->my->menu->index = 'Accueil|my|index'; -$lang->my->menu->todo = 'Todo|my|todo|'; +$lang->my->menu->calendar = 'Todo|my|todo|'; $lang->my->menu->program = array('link' => 'Program|my|program|'); $lang->my->menu->task = array('link' => 'Tâche|my|task|', 'subModule' => 'task'); $lang->my->menu->bug = array('link' => 'Bug|my|bug|', 'subModule' => 'bug'); @@ -245,19 +281,19 @@ $lang->todo = new stdclass(); $lang->todo->menu = $lang->my->menu; /* Product menu settings. */ -$lang->product = new stdclass(); -$lang->product->menu = new stdclass(); +$lang->scrumproduct = new stdclass(); +$lang->scrumproduct->menu = new stdclass(); -$lang->product->menu->story = array('link' => 'Story|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 = "{$lang->projectCommon}|product|project|status=all&productID=%s"; -$lang->product->menu->dynamic = 'Historique|product|dynamic|productID=%s'; -$lang->product->menu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->menu->branch = '@branch@|branch|manage|productID=%s'; -$lang->product->menu->module = 'Module|tree|browse|productID=%s&view=story'; -$lang->product->menu->view = array('link' => "Vue d'ensemble|product|view|productID=%s", 'alias' => 'edit'); +$lang->scrumproduct->menu->story = array('link' => 'Story|product|browse|productID=%s', 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->scrumproduct->menu->plan = array('link' => 'Plan|productplan|browse|productID=%s', 'subModule' => 'productplan'); +$lang->scrumproduct->menu->release = array('link' => 'Release|release|browse|productID=%s', 'subModule' => 'release'); +$lang->scrumproduct->menu->roadmap = 'Roadmap|product|roadmap|productID=%s'; +$lang->scrumproduct->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s"; +$lang->scrumproduct->menu->dynamic = 'Dynamics|product|dynamic|productID=%s'; +$lang->scrumproduct->menu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); +$lang->scrumproduct->menu->branch = '@branch@|branch|manage|productID=%s'; +$lang->scrumproduct->menu->module = 'Module|tree|browse|productID=%s&view=story'; +$lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|productID=%s', 'alias' => 'edit'); if(!empty($config->URAndSR)) { @@ -267,15 +303,9 @@ if(!empty($config->URAndSR)) $lang->product->dividerMenu = ',plan,project,doc,'; -$lang->productplan = new stdclass(); -$lang->release = new stdclass(); -$lang->branch = new stdclass(); -$lang->story = new stdclass(); +$lang->story = new stdclass(); -$lang->branch->menu = $lang->product->menu; -$lang->story->menu = $lang->product->menu; -$lang->productplan->menu = $lang->product->menu; -$lang->release->menu = $lang->product->menu; +$lang->story->menu = $lang->product->menu; /* Project menu settings. */ $lang->project = new stdclass(); @@ -545,47 +575,48 @@ $lang->navGroup->my = 'my'; $lang->navGroup->todo = 'my'; $lang->navGroup->effort = 'my'; -$lang->navGroup->product = 'program'; -$lang->navGroup->story = 'program'; -$lang->navGroup->branch = 'program'; -$lang->navGroup->productplan = 'program'; -$lang->navGroup->release = 'program'; -$lang->navGroup->tree = 'program'; -$lang->navGroup->project = 'program'; -$lang->navGroup->task = 'program'; -$lang->navGroup->qa = 'program'; -$lang->navGroup->bug = 'program'; -$lang->navGroup->doc = 'program'; -$lang->navGroup->testcase = 'program'; -$lang->navGroup->testtask = 'program'; -$lang->navGroup->testreport = 'program'; -$lang->navGroup->testsuite = 'program'; -$lang->navGroup->caselib = 'program'; -$lang->navGroup->feedback = 'program'; -$lang->navGroup->deploy = 'program'; -$lang->navGroup->stakeholder = 'program'; +$lang->navGroup->personnel = 'program'; -$lang->navGroup->programplan = 'program'; -$lang->navGroup->workestimation = 'program'; -$lang->navGroup->budget = 'program'; -$lang->navGroup->review = 'program'; -$lang->navGroup->reviewissue = 'program'; -$lang->navGroup->weekly = 'program'; -$lang->navGroup->milestone = 'program'; -$lang->navGroup->pssp = 'program'; -$lang->navGroup->design = 'program'; -$lang->navGroup->repo = 'program'; -$lang->navGroup->issue = 'program'; -$lang->navGroup->risk = 'program'; -$lang->navGroup->auditplan = 'program'; -$lang->navGroup->cm = 'program'; -$lang->navGroup->nc = 'program'; -$lang->navGroup->job = 'program'; -$lang->navGroup->jenkins = 'program'; -$lang->navGroup->compile = 'program'; -$lang->navGroup->build = 'program'; +$lang->navGroup->productplan = 'product'; +$lang->navGroup->release = 'product'; +$lang->navGroup->branch = 'product'; -$lang->navGroup->durationestimation = 'program'; +$lang->navGroup->story = 'project'; +$lang->navGroup->tree = 'project'; +$lang->navGroup->task = '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'; +$lang->navGroup->testsuite = 'project'; +$lang->navGroup->caselib = 'project'; +$lang->navGroup->feedback = 'project'; +$lang->navGroup->deploy = 'project'; +$lang->navGroup->stakeholder = 'project'; + +$lang->navGroup->programplan = 'project'; +$lang->navGroup->workestimation = 'project'; +$lang->navGroup->budget = 'project'; +$lang->navGroup->review = 'project'; +$lang->navGroup->reviewissue = 'project'; +$lang->navGroup->weekly = 'project'; +$lang->navGroup->milestone = 'project'; +$lang->navGroup->pssp = 'project'; +$lang->navGroup->design = 'project'; +$lang->navGroup->repo = 'project'; +$lang->navGroup->issue = 'project'; +$lang->navGroup->risk = 'project'; +$lang->navGroup->auditplan = 'project'; +$lang->navGroup->cm = 'project'; +$lang->navGroup->nc = 'project'; +$lang->navGroup->job = 'project'; +$lang->navGroup->jenkins = 'project'; +$lang->navGroup->compile = 'project'; +$lang->navGroup->build = 'project'; + +$lang->navGroup->durationestimation = 'project'; $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; @@ -810,4 +841,95 @@ $lang->icons['unlock'] = 'unlock-alt'; $lang->icons['confirmStoryChange'] = 'search'; $lang->icons['score'] = 'tint'; +/* Scrum menu. */ +$lang->menu = new stdclass(); +$lang->menu->scrum = new stdclass(); +$lang->menu->scrum->program = 'Index|program|index|'; +$lang->menu->scrum->product = $lang->productCommon . '|product|index|locate=no'; +$lang->menu->scrum->project = "$lang->projectCommon|project|index|locate=no"; +$lang->menu->scrum->doc = 'Doc|doc|index|'; +$lang->menu->scrum->qa = 'QA|qa|index'; + +/* Waterfall menu. */ +$lang->menu->waterfall = new stdclass(); +$lang->menu->waterfall->programindex = array('link' => 'Index|program|index|program={PROGRAM}'); +$lang->menu->waterfall->programplan = array('link' => 'Plan|programplan|browse|program={PROGRAM}', 'subModule' => 'programplan'); +$lang->menu->waterfall->project = array('link' => $lang->projectCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,'); +$lang->menu->waterfall->weekly = array('link' => 'Weekly|weekly|index|program={PROGRAM}', 'subModule' => ',milestone,'); +$lang->menu->waterfall->doc = array('link' => 'Doc|doc|index|program={PROGRAM}'); +$lang->menu->waterfall->product = array('link' => 'Story|product|browse|product={PRODUCT}', 'subModule' => ',story,'); +$lang->menu->waterfall->design = 'Design|design|browse|product={PRODUCT}'; +$lang->menu->waterfall->ci = 'Code|repo|browse|'; +$lang->menu->waterfall->qa = array('link' => 'QA|bug|browse|product={PRODUCT}', 'subModule' => ',testcase,testtask,testsuite,testreport,caselib,'); +$lang->menu->waterfall->release = array('link' => 'Release|release|browse|product={PRODUCT}', 'subModule' => 'release'); +$lang->menu->waterfall->issue = 'Issue|issue|browse|'; +$lang->menu->waterfall->risk = 'Risk|risk|browse|'; +$lang->menu->waterfall->list = array('link' => 'More|workestimation|index|program={PROGRAM}', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'stakeholder,workestimation,durationestimation,budget,pssp,stakeholder'); + +$lang->waterfall = new stdclass(); +$lang->waterfall->subMenu = new stdclass(); +$lang->waterfall->subMenu->list = new stdclass(); +$lang->waterfall->subMenu->list->workestimation = array('link' => 'Workestimation|workestimation|index|program=%s', 'subModule' => 'durationestimation,budget'); +$lang->waterfall->subMenu->list->stakeholder = array('link' => 'Stakeholder|stakeholder|browse|', 'subModule' => 'stakeholder'); +$lang->waterfall->subMenu->list->program = 'Project|program|PRJEdit|'; + +$lang->waterfallproduct = new stdclass(); +$lang->workestimation = new stdclass(); +$lang->budget = new stdclass(); +$lang->programplan = new stdclass(); +$lang->review = new stdclass(); +$lang->weekly = new stdclass(); +$lang->milestone = new stdclass(); +$lang->design = new stdclass(); +$lang->auditplan = new stdclass(); +$lang->cm = new stdclass(); +$lang->nc = new stdclass(); +$lang->pssp = new stdclass(); +$lang->issue = new stdclass(); +$lang->risk = new stdclass(); +$lang->stakeholder = new stdclass(); +$lang->durationestimation = new stdclass(); + +$lang->workestimation->menu = new stdclass(); +$lang->budget->menu = new stdclass(); +$lang->programplan->menu = new stdclass(); +$lang->review->menu = new stdclass(); +$lang->weekly->menu = new stdclass(); +$lang->milestone->menu = new stdclass(); +$lang->design->menu = new stdclass(); +$lang->auditplan->menu = new stdclass(); +$lang->cm->menu = new stdclass(); +$lang->pssp->menu = new stdclass(); +$lang->issue->menu = new stdclass(); +$lang->risk->menu = new stdclass(); +$lang->stakeholder->menu = new stdclass(); +$lang->waterfallproduct->menu = new stdclass(); +$lang->durationestimation->menu = new stdclass(); + +$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate'); +$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|'); + +$lang->workestimation->menu->index = 'Workload|workestimation|index|program={PROGRAM}'; +$lang->workestimation->menu->duration = array('link' => 'Duration|durationestimation|index|program={PROGRAM}', 'subModule' => 'durationestimation'); +$lang->workestimation->menu->budget = array('link' => 'Budget|budget|summary|', 'subModule' => 'budget'); + +$lang->durationestimation->menu = $lang->workestimation->menu; +$lang->budget->menu = $lang->workestimation->menu; + +$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=gantt'); +$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=lists', 'alias' => 'create'); + +$lang->waterfallproduct->menu->plan = array('link' => "{$lang->planCommon}|productplan|browse|productID={PRODUCT}", 'subModule' => 'productplan'); +$lang->waterfallproduct->menu->story = 'Story|product|browse|product={PRODUCT}'; +$lang->waterfallproduct->menu->track = 'Track|story|track|product={PRODUCT}'; + +if($config->URAndSR) +{ + $lang->waterfallproduct->menu->requirement = array('link' => "{$urCommon}|product|browse|productID={PRODUCT}&branch=&browseType=unclosed¶m=0&storyType=requirement"); + $lang->waterfallproduct->menu->story = array('link' => "{$srCommon}|product|browse|productID={PRODUCT}"); +} + +$lang->nc->menu = $lang->auditplan->menu; +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'holiday', 'custom', 'auditcl', 'subject', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); + include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php index 93a40ae3e7..330479a148 100644 --- a/module/common/lang/vi.php +++ b/module/common/lang/vi.php @@ -122,20 +122,56 @@ $lang->common->common = 'Module chung'; /* Main menu. */ $lang->mainNav = new stdclass(); $lang->mainNav->my = ' My|my|index|'; -$lang->mainNav->program = ' Program|program|browse|'; +$lang->mainNav->program = ' Program|program|browse|'; +$lang->mainNav->product = ' Product|product|index|'; +$lang->mainNav->project = ' Project|program|prjbrowse|'; $lang->mainNav->system = ' System|custom|estimate|'; $lang->mainNav->admin = ' Admin|admin|index|'; $lang->reporting = new stdclass(); $lang->dividerMenu = ',admin,'; +/* Program set menu. */ +$lang->program = new stdclass(); +$lang->program->menu = new stdclass(); +$lang->program->menu->index = 'Home|program|pgmindex|'; +$lang->program->menu->browse = array('link' => 'Program|program|pgmbrowse|', 'alias' => 'pgmcreate,pgmedit,pgmgroup,pgmmanagepriv,pgmmanageview,pgmmanagemembers'); + +$lang->program->viewMenu = new stdclass(); +$lang->program->viewMenu->view = array('link' => 'View|program|pgmview|program=%s'); +$lang->program->viewMenu->product = array('link' => 'Product|program|pgmproduct|program=%s'); +$lang->program->viewMenu->project = array('link' => "Project|program|pgmproject|program=%s"); +$lang->program->viewMenu->personnel = array('link' => "Member|personnel|accessible|program=%s"); +$lang->program->viewMenu->stakeholder = array('link' => "Stakeholder|program|pgmstakeholder|program=%s", 'alias' => 'createstakeholder'); + +$lang->personnel = new stdClass(); +$lang->personnel->menu = new stdClass(); +$lang->personnel->menu->accessible = array('link' => "Accessible|personnel|accessible|program=%s"); +$lang->personnel->menu->putinto = array('link' => "Investment|personnel|putinto|program=%s"); + /* Scrum menu. */ -$lang->menu = new stdclass(); -$lang->menu->program = 'Home|program|index'; -$lang->menu->product = $lang->productCommon . '|product|index|locate=no'; -$lang->menu->project = 'Iteration|project|index|locate=no'; -$lang->menu->doc = 'Doc|doc|index|'; -$lang->menu->qa = 'Qa|qa|index'; +$lang->product = new stdclass(); +$lang->product->menu = new stdclass(); +$lang->product->menu->home = 'Home|product|index|'; +$lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); + +$lang->product->viewMenu = new stdclass(); +$lang->product->viewMenu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->product->viewMenu->story = array('link' => "Story|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->branch = '@branch@|branch|manage|productID=%s'; +$lang->product->viewMenu->module = 'Module|tree|browse|productID=%s&view=story'; +$lang->product->viewMenu->view = array('link' => '概况|product|view|productID=%s', 'alias' => 'edit'); + +$lang->release = new stdclass(); +$lang->branch = new stdclass(); +$lang->productplan = new stdclass(); + +$lang->release->menu = $lang->product->viewMenu; +$lang->branch->menu = $lang->product->menu; +$lang->productplan->menu = $lang->product->menu; /* System menu. */ $lang->system = new stdclass(); @@ -245,21 +281,21 @@ $lang->todo = new stdclass(); $lang->todo->menu = $lang->my->menu; /* Product menu settings. */ -$lang->product = new stdclass(); -$lang->product->menu = new stdclass(); +$lang->scrumproduct = new stdclass(); +$lang->scrumproduct->menu = new stdclass(); -$lang->product->menu->story = array('link' => 'Câu chuyện|product|browse|productID=%s', 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->menu->plan = array('link' => 'Kế hoạch|productplan|browse|productID=%s', 'subModule' => 'productplan'); -$lang->product->menu->release = array('link' => 'Phát hành|release|browse|productID=%s', 'subModule' => 'release'); -$lang->product->menu->roadmap = 'Lộ trình|product|roadmap|productID=%s'; -$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s"; -$lang->product->menu->dynamic = 'Lịch sử|product|dynamic|productID=%s'; -$lang->product->menu->doc = array('link' => 'Tài liệu|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->menu->branch = '@branch@|branch|manage|productID=%s'; -$lang->product->menu->module = 'Module|tree|browse|productID=%s&view=story'; -$lang->product->menu->view = array('link' => 'Tổng quan|product|view|productID=%s', 'alias' => 'edit'); +$lang->scrumproduct->menu->story = array('link' => 'Story|product|browse|productID=%s', 'alias' => 'batchedit', 'subModule' => 'story'); +$lang->scrumproduct->menu->plan = array('link' => 'Plan|productplan|browse|productID=%s', 'subModule' => 'productplan'); +$lang->scrumproduct->menu->release = array('link' => 'Release|release|browse|productID=%s', 'subModule' => 'release'); +$lang->scrumproduct->menu->roadmap = 'Roadmap|product|roadmap|productID=%s'; +$lang->scrumproduct->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s"; +$lang->scrumproduct->menu->dynamic = 'Dynamics|product|dynamic|productID=%s'; +$lang->scrumproduct->menu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); +$lang->scrumproduct->menu->branch = '@branch@|branch|manage|productID=%s'; +$lang->scrumproduct->menu->module = 'Module|tree|browse|productID=%s&view=story'; +$lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|productID=%s', 'alias' => 'edit'); -if(!empty($config->URAndSR)) +if($config->URAndSR) { $lang->product->menu->requirement = array('link' => "{$urCommon}|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->menu->story = array('link' => "{$srCommon}|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); @@ -267,15 +303,9 @@ if(!empty($config->URAndSR)) $lang->product->dividerMenu = ',plan,project,doc,'; -$lang->productplan = new stdclass(); -$lang->release = new stdclass(); -$lang->branch = new stdclass(); -$lang->story = new stdclass(); +$lang->story = new stdclass(); -$lang->branch->menu = $lang->product->menu; -$lang->story->menu = $lang->product->menu; -$lang->productplan->menu = $lang->product->menu; -$lang->release->menu = $lang->product->menu; +$lang->story->menu = $lang->product->menu; /* Project menu settings. */ $lang->project = new stdclass(); @@ -545,47 +575,48 @@ $lang->navGroup->my = 'my'; $lang->navGroup->todo = 'my'; $lang->navGroup->effort = 'my'; -$lang->navGroup->product = 'program'; -$lang->navGroup->story = 'program'; -$lang->navGroup->branch = 'program'; -$lang->navGroup->productplan = 'program'; -$lang->navGroup->release = 'program'; -$lang->navGroup->tree = 'program'; -$lang->navGroup->project = 'program'; -$lang->navGroup->task = 'program'; -$lang->navGroup->qa = 'program'; -$lang->navGroup->bug = 'program'; -$lang->navGroup->doc = 'program'; -$lang->navGroup->testcase = 'program'; -$lang->navGroup->testtask = 'program'; -$lang->navGroup->testreport = 'program'; -$lang->navGroup->testsuite = 'program'; -$lang->navGroup->caselib = 'program'; -$lang->navGroup->feedback = 'program'; -$lang->navGroup->deploy = 'program'; -$lang->navGroup->stakeholder = 'program'; +$lang->navGroup->personnel = 'program'; -$lang->navGroup->programplan = 'program'; -$lang->navGroup->workestimation = 'program'; -$lang->navGroup->budget = 'program'; -$lang->navGroup->review = 'program'; -$lang->navGroup->reviewissue = 'program'; -$lang->navGroup->weekly = 'program'; -$lang->navGroup->milestone = 'program'; -$lang->navGroup->pssp = 'program'; -$lang->navGroup->design = 'program'; -$lang->navGroup->repo = 'program'; -$lang->navGroup->issue = 'program'; -$lang->navGroup->risk = 'program'; -$lang->navGroup->auditplan = 'program'; -$lang->navGroup->cm = 'program'; -$lang->navGroup->nc = 'program'; -$lang->navGroup->job = 'program'; -$lang->navGroup->jenkins = 'program'; -$lang->navGroup->compile = 'program'; -$lang->navGroup->build = 'program'; +$lang->navGroup->productplan = 'product'; +$lang->navGroup->release = 'product'; +$lang->navGroup->branch = 'product'; -$lang->navGroup->durationestimation = 'program'; +$lang->navGroup->story = 'project'; +$lang->navGroup->tree = 'project'; +$lang->navGroup->task = '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'; +$lang->navGroup->testsuite = 'project'; +$lang->navGroup->caselib = 'project'; +$lang->navGroup->feedback = 'project'; +$lang->navGroup->deploy = 'project'; +$lang->navGroup->stakeholder = 'project'; + +$lang->navGroup->programplan = 'project'; +$lang->navGroup->workestimation = 'project'; +$lang->navGroup->budget = 'project'; +$lang->navGroup->review = 'project'; +$lang->navGroup->reviewissue = 'project'; +$lang->navGroup->weekly = 'project'; +$lang->navGroup->milestone = 'project'; +$lang->navGroup->pssp = 'project'; +$lang->navGroup->design = 'project'; +$lang->navGroup->repo = 'project'; +$lang->navGroup->issue = 'project'; +$lang->navGroup->risk = 'project'; +$lang->navGroup->auditplan = 'project'; +$lang->navGroup->cm = 'project'; +$lang->navGroup->nc = 'project'; +$lang->navGroup->job = 'project'; +$lang->navGroup->jenkins = 'project'; +$lang->navGroup->compile = 'project'; +$lang->navGroup->build = 'project'; + +$lang->navGroup->durationestimation = 'project'; $lang->navGroup->stage = 'system'; $lang->navGroup->measurement = 'system'; @@ -810,4 +841,95 @@ $lang->icons['unlock'] = 'unlock-alt'; $lang->icons['confirmStoryChange'] = 'search'; $lang->icons['score'] = 'tint'; +/* Scrum menu. */ +$lang->menu = new stdclass(); +$lang->menu->scrum = new stdclass(); +$lang->menu->scrum->program = 'Index|program|index|'; +$lang->menu->scrum->product = $lang->productCommon . '|product|index|locate=no'; +$lang->menu->scrum->project = "$lang->projectCommon|project|index|locate=no"; +$lang->menu->scrum->doc = 'Doc|doc|index|'; +$lang->menu->scrum->qa = 'QA|qa|index'; + +/* Waterfall menu. */ +$lang->menu->waterfall = new stdclass(); +$lang->menu->waterfall->programindex = array('link' => 'Index|program|index|program={PROGRAM}'); +$lang->menu->waterfall->programplan = array('link' => 'Plan|programplan|browse|program={PROGRAM}', 'subModule' => 'programplan'); +$lang->menu->waterfall->project = array('link' => $lang->projectCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,'); +$lang->menu->waterfall->weekly = array('link' => 'Weekly|weekly|index|program={PROGRAM}', 'subModule' => ',milestone,'); +$lang->menu->waterfall->doc = array('link' => 'Doc|doc|index|program={PROGRAM}'); +$lang->menu->waterfall->product = array('link' => 'Story|product|browse|product={PRODUCT}', 'subModule' => ',story,'); +$lang->menu->waterfall->design = 'Design|design|browse|product={PRODUCT}'; +$lang->menu->waterfall->ci = 'Code|repo|browse|'; +$lang->menu->waterfall->qa = array('link' => 'QA|bug|browse|product={PRODUCT}', 'subModule' => ',testcase,testtask,testsuite,testreport,caselib,'); +$lang->menu->waterfall->release = array('link' => 'Release|release|browse|product={PRODUCT}', 'subModule' => 'release'); +$lang->menu->waterfall->issue = 'Issue|issue|browse|'; +$lang->menu->waterfall->risk = 'Risk|risk|browse|'; +$lang->menu->waterfall->list = array('link' => 'More|workestimation|index|program={PROGRAM}', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'stakeholder,workestimation,durationestimation,budget,pssp,stakeholder'); + +$lang->waterfall = new stdclass(); +$lang->waterfall->subMenu = new stdclass(); +$lang->waterfall->subMenu->list = new stdclass(); +$lang->waterfall->subMenu->list->workestimation = array('link' => 'Workestimation|workestimation|index|program=%s', 'subModule' => 'durationestimation,budget'); +$lang->waterfall->subMenu->list->stakeholder = array('link' => 'Stakeholder|stakeholder|browse|', 'subModule' => 'stakeholder'); +$lang->waterfall->subMenu->list->program = 'Project|program|PRJEdit|'; + +$lang->waterfallproduct = new stdclass(); +$lang->workestimation = new stdclass(); +$lang->budget = new stdclass(); +$lang->programplan = new stdclass(); +$lang->review = new stdclass(); +$lang->weekly = new stdclass(); +$lang->milestone = new stdclass(); +$lang->design = new stdclass(); +$lang->auditplan = new stdclass(); +$lang->cm = new stdclass(); +$lang->nc = new stdclass(); +$lang->pssp = new stdclass(); +$lang->issue = new stdclass(); +$lang->risk = new stdclass(); +$lang->stakeholder = new stdclass(); +$lang->durationestimation = new stdclass(); + +$lang->workestimation->menu = new stdclass(); +$lang->budget->menu = new stdclass(); +$lang->programplan->menu = new stdclass(); +$lang->review->menu = new stdclass(); +$lang->weekly->menu = new stdclass(); +$lang->milestone->menu = new stdclass(); +$lang->design->menu = new stdclass(); +$lang->auditplan->menu = new stdclass(); +$lang->cm->menu = new stdclass(); +$lang->pssp->menu = new stdclass(); +$lang->issue->menu = new stdclass(); +$lang->risk->menu = new stdclass(); +$lang->stakeholder->menu = new stdclass(); +$lang->waterfallproduct->menu = new stdclass(); +$lang->durationestimation->menu = new stdclass(); + +$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate'); +$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|'); + +$lang->workestimation->menu->index = 'Workload|workestimation|index|program={PROGRAM}'; +$lang->workestimation->menu->duration = array('link' => 'Duration|durationestimation|index|program={PROGRAM}', 'subModule' => 'durationestimation'); +$lang->workestimation->menu->budget = array('link' => 'Budget|budget|summary|', 'subModule' => 'budget'); + +$lang->durationestimation->menu = $lang->workestimation->menu; +$lang->budget->menu = $lang->workestimation->menu; + +$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=gantt'); +$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=lists', 'alias' => 'create'); + +$lang->waterfallproduct->menu->plan = array('link' => "{$lang->planCommon}|productplan|browse|productID={PRODUCT}", 'subModule' => 'productplan'); +$lang->waterfallproduct->menu->story = 'Story|product|browse|product={PRODUCT}'; +$lang->waterfallproduct->menu->track = 'Track|story|track|product={PRODUCT}'; + +if($config->URAndSR) +{ + $lang->waterfallproduct->menu->requirement = array('link' => "{$urCommon}|product|browse|productID={PRODUCT}&branch=&browseType=unclosed¶m=0&storyType=requirement"); + $lang->waterfallproduct->menu->story = array('link' => "{$srCommon}|product|browse|productID={PRODUCT}"); +} + +$lang->nc->menu = $lang->auditplan->menu; +$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'holiday', 'custom', 'auditcl', 'subject', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); + include (dirname(__FILE__) . '/menuOrder.php'); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index ba1b50feac..9cb3ddf7a5 100755 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -122,9 +122,9 @@ $lang->common->common = '公有模块'; /* 主导航菜单。*/ $lang->mainNav = new stdclass(); $lang->mainNav->my = ' 地盘|my|index|'; -$lang->mainNav->program = ' 项目集|program|pgmindex|'; +$lang->mainNav->program = ' 项目集|program|pgmindex|'; $lang->mainNav->product = ' 产品|product|index|'; -$lang->mainNav->project = ' 项目|program|prjbrowse|'; +$lang->mainNav->project = ' 项目|program|prjbrowse|'; $lang->mainNav->system = ' 组织|custom|estimate|'; $lang->mainNav->admin = ' 后台|admin|index|'; diff --git a/module/group/control.php b/module/group/control.php index e3425a3a97..99980eeffb 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -139,9 +139,10 @@ class group extends control $this->view->position[] = $group->name; $this->view->position[] = $this->lang->group->manageView; - $this->view->group = $group; - $this->view->projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('type')->eq('project')->orderBy('order_desc')->fetchPairs('id', 'name'); - $this->view->products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->orderBy('order_desc')->fetchPairs('id', 'name'); + $this->view->group = $group; + $this->view->programs = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('type')->eq('program')->orderBy('order_desc')->fetchPairs('id', 'name'); + $this->view->projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('type')->eq('project')->orderBy('order_desc')->fetchPairs('id', 'name'); + $this->view->products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->orderBy('order_desc')->fetchPairs('id', 'name'); $menugroup = array(); foreach($this->lang->menugroup as $moduleName => $groupName) $menugroup[$groupName][$moduleName] = $moduleName; diff --git a/module/group/js/manageview.js b/module/group/js/manageview.js index 4ef177020b..144ecd81b2 100644 --- a/module/group/js/manageview.js +++ b/module/group/js/manageview.js @@ -1,3 +1,8 @@ +function toggleProgram() +{ + $('#programBox').toggle($('#program').prop("checked")); +} + function toggleProduct() { $('#productBox').toggle($('#product').prop("checked")); @@ -30,6 +35,7 @@ $(function() $('.group-item input:checkbox[name^="allchecker"]').prop('checked', allChecked); var id = $(this).attr('id'); + if(id == 'program') toggleProgram(); if(id == 'product') toggleProduct(); if(id == 'project') toggleProject(); if($('#' + id + 'ActionBox').length == 1) $('#' + id + 'ActionBox').toggle($(this).prop("checked")); diff --git a/module/group/lang/de.php b/module/group/lang/de.php index 0916b8ff24..a3632539ee 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -26,6 +26,7 @@ $lang->group->confirmDelete = 'Möchten Sie die Gruppe löschen?'; $lang->group->successSaved = 'Gespeichert!'; $lang->group->errorNotSaved = 'Fehlgeschlagen. Bitte aktion und Gruppe wählen.'; $lang->group->viewList = 'Anzeige ist zulässig.'; +$lang->group->programList = 'Access Program'; $lang->group->productList = 'Produkte sind zugänglich.'; $lang->group->projectList = 'Projekte sind zugänglich.'; $lang->group->dynamic = 'Access Dynamics'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index fd9b2185d2..a1d72c3bea 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -26,6 +26,7 @@ $lang->group->confirmDelete = 'Do you want to delete this user group?'; $lang->group->successSaved = 'Saved.'; $lang->group->errorNotSaved = 'Failed. Please select actions and groups.'; $lang->group->viewList = 'Access Sight'; +$lang->group->programList = 'Access Program'; $lang->group->productList = 'Access Product'; $lang->group->projectList = 'Access Project'; $lang->group->dynamic = 'Access Dynamics'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index 0284d6ce5a..29537b9e0b 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -26,6 +26,7 @@ $lang->group->confirmDelete = "Voulez-vous supprimer ce groupe d'utilisateu $lang->group->successSaved = 'Sauvé.'; $lang->group->errorNotSaved = 'Echec. Veuillez sélectionner actions et groupes.'; $lang->group->viewList = 'Accès Consultation'; +$lang->group->programList = 'Accè Programs'; $lang->group->productList = 'Accès ' . $lang->productCommon . 's'; $lang->group->projectList = 'Accès ' . $lang->projectCommon . 's'; $lang->group->dynamic = 'Accès Historique'; diff --git a/module/group/lang/vi.php b/module/group/lang/vi.php index 63d5097039..24567e3907 100644 --- a/module/group/lang/vi.php +++ b/module/group/lang/vi.php @@ -26,6 +26,7 @@ $lang->group->confirmDelete = 'Bạn có muốn xóa người dùng này gr $lang->group->successSaved = 'Đã lưu.'; $lang->group->errorNotSaved = 'Thất bại. Vui lòng select actions and groups.'; $lang->group->viewList = 'Truy cập Sight'; +$lang->group->programList = 'Truy cập Program'; $lang->group->productList = 'Truy cập Product'; $lang->group->projectList = 'Truy cập Project'; $lang->group->dynamic = 'Truy cập Dynamics'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index 9a0120ef4f..50a621be09 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -26,6 +26,7 @@ $lang->group->confirmDelete = '您确定删除该用户分组吗?'; $lang->group->successSaved = '成功保存'; $lang->group->errorNotSaved = '没有保存,请确认选择了权限数据。'; $lang->group->viewList = '可访问视图'; +$lang->group->programList = '可访问项目集'; $lang->group->productList = '可访问' . $lang->productCommon; $lang->group->projectList = '可访问项目'; $lang->group->dynamic = '可查看动态'; diff --git a/module/group/view/manageview.html.php b/module/group/view/manageview.html.php index 9b538f5636..b5d32a103e 100644 --- a/module/group/view/manageview.html.php +++ b/module/group/view/manageview.html.php @@ -47,6 +47,19 @@ + + group->programList?> + + +
+ acl['programs']) ? join(',', $group->acl['programs']) : '', "class='form-control chosen' multiple")?> + group->noticeVisit?> +
+ + group->noneProgram;?> + + + group->productList?> diff --git a/module/program/control.php b/module/program/control.php index eefbd95450..0ae6b07ec2 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -478,12 +478,12 @@ class program extends control $this->view->programID = $programID; $this->view->program = $this->program->getPGMByID($programID); - $this->view->users = $this->loadModel('user')->getPairs('nodeleted'); + $this->view->users = $this->loadModel('user')->getPairs('nodeleted|noclosed'); $this->view->deptUsers = $deptUsers; $this->view->dept = $dept; $this->view->depts = array('' => '') + $this->dept->getOptionMenu(); $this->view->stakeholders = $this->program->getStakeholders($programID, 't1.id_desc'); - $this->view->parentStakeholders = $this->program->getStakeholdersByList($parentIdList); + $this->view->parentStakeholders = $this->program->getStakeholdersByPGMList($parentIdList); $this->display(); } diff --git a/module/program/model.php b/module/program/model.php index b4314fee92..6ae4d06859 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -454,7 +454,7 @@ class programModel extends model ->where('deleted')->eq('0') ->beginIF($from == 'program') ->andWhere('type')->in('program,project') - ->andWhere('id')->in($this->app->user->view->programs . $this->app->user->view->projects) + ->andWhere('id')->in($this->app->user->view->programs . ',' . $this->app->user->view->projects) ->fi() ->beginIF($from == 'product') ->andWhere('type')->eq('program') @@ -467,7 +467,7 @@ class programModel extends model while($program = $stmt->fetch()) { $link = $from == 'program' ? helper::createLink('program', 'pgmview', "programID=$program->id") : helper::createLink('product', 'all', "programID=$program->id" . $vars); - $linkHtml = html::a($link, " " . $program->name, '', "id='program$program->id' class='text-ellipsis' title=$program->name"); + $linkHtml = html::a($link, " " . $program->name, '', "id='program$program->id' class='text-ellipsis' title=$program->name"); if(isset($programMenu[$program->id]) and !empty($programMenu[$program->id])) { @@ -535,7 +535,7 @@ class programModel extends model */ public function getStakeholders($programID = 0, $orderBy, $pager = null) { - return $this->dao->select('t2.*, t1.id')->from(TABLE_STAKEHOLDER)->alias('t1') + return $this->dao->select('t2.account,t2.realname,t2.role,t2.qq,t2.mobile,t2.phone,t2.weixin,t2.email,t1.id')->from(TABLE_STAKEHOLDER)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.user=t2.account') ->where('t1.objectID')->eq($programID) ->andWhere('t1.objectType')->eq('program') @@ -552,7 +552,7 @@ class programModel extends model * @access public * @return void */ - public function getStakeholdersByList($programIdList = 0) + public function getStakeholdersByPGMList($programIdList = 0) { return $this->dao->select('distinct user as account')->from(TABLE_STAKEHOLDER) ->where('objectID')->in($programIdList) @@ -589,13 +589,22 @@ class programModel extends model $this->dao->insert(TABLE_STAKEHOLDER)->data($stakeholder)->exec(); } - /* Only changed account update userview. */ + /* If any account changed, update his view. */ $oldAccounts = array_keys($oldJoin); $changedAccounts = array_diff($accounts, $oldAccounts); $changedAccounts = array_merge($changedAccounts, array_diff($oldAccounts, $accounts)); $changedAccounts = array_unique($changedAccounts); $this->loadModel('user')->updateUserView($programID, 'program', $changedAccounts); + + /* Update children user view. */ + $childPgmList = $this->dao->select('id')->from(TABLE_PROJECT)->where('path')->like("%,$programID,%")->andWhere('type')->eq('program')->fetchPairs(); + $childPRJList = $this->dao->select('id')->from(TABLE_PROJECT)->where('path')->like("%,$programID,%")->andWhere('type')->eq('project')->fetchPairs(); + $childProducts = $this->dao->select('id')->from(TABLE_PRODUCT)->where('program')->eq($programID)->fetchPairs(); + + if(!empty($childPGMList)) $this->user->updateUserView($childPGMList, 'program', $changedAccounts); + if(!empty($childPRJList)) $this->user->updateUserView($childPRJList, 'project', $changedAccounts); + if(!empty($childProducts)) $this->user->updateUserView($childProducts, 'product', $changedAccounts); } /** @@ -957,6 +966,7 @@ class programModel extends model ->where('type')->in('project,program') ->andWhere('status')->ne('closed') ->andWhere('deleted')->eq('0') + ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->programs . ',' . $this->app->user->view->projects)->fi() ->beginIF($projectID > 0)->andWhere('path')->like($path . '%')->fi() ->orderBy('grade desc, `order`') ->get(); @@ -1037,7 +1047,7 @@ class programModel extends model public function createPRJManageLink($project) { $link = $project->type == 'program' ? helper::createLink('program', 'PRJbrowse', "programID={$project->id}") : helper::createLink('program', 'index', "projectID={$project->id}", '', '', $project->id); - $icon = $project->type == 'program' ? ' ' : ' '; + $icon = $project->type == 'program' ? ' ' : ' '; return html::a($link, $icon . $project->name, '_self', "id=project{$project->id} title='{$project->name}' class='text-ellipsis'"); } @@ -1125,18 +1135,6 @@ class programModel extends model $this->dao->insert(TABLE_USERGROUP)->data($groupPriv)->exec(); } - /* Init groups. */ - $groups = $this->dao->select('name, `desc`')->from(TABLE_GROUP) - ->where('PRJ')->eq(0) - ->andWhere('role')->in('dev,qa,pm,po,others') - ->fetchAll(); - - foreach($groups as $group) - { - $group->PRJ = $projectID; - $this->dao->insert(TABLE_GROUP)->data($group)->exec(); - } - return $projectID; } } diff --git a/module/program/view/pgmbrowsebylist.html.php b/module/program/view/pgmbrowsebylist.html.php index f831e5b24d..d7cf5e6eef 100644 --- a/module/program/view/pgmbrowsebylist.html.php +++ b/module/program/view/pgmbrowsebylist.html.php @@ -52,9 +52,9 @@ type == 'program'):?> - createLink('program', 'pgmview', "programID=$program->id"), " " . $program->name);?> + createLink('program', 'pgmview', "programID=$program->id"), " " . $program->name);?> - createLink('program', 'index', "programID=$program->id", '', '', $program->id), " " . $program->name);?> + createLink('program', 'index', "programID=$program->id", '', '', $program->id), " " . $program->name);?> project->statusList, $program->status, '');?> diff --git a/module/stakeholder/control.php b/module/stakeholder/control.php index a8d9d9bf8a..86bd53b4f3 100644 --- a/module/stakeholder/control.php +++ b/module/stakeholder/control.php @@ -90,7 +90,7 @@ class stakeholder extends control $this->view->position[] = $this->lang->stakeholder->batchCreate; $this->view->project = $this->loadModel('program')->getPGMByID($this->session->PRJ); - $this->view->users = $this->user->getPairs('all|nodeleted'); + $this->view->users = $this->user->getPairs('all|nodeleted|noclosed'); $this->view->deptUsers = $deptUsers; $this->view->dept = $dept; $this->view->projectID = $this->session->PRJ; diff --git a/module/user/model.php b/module/user/model.php index 7a9de601ca..83f9f8d815 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -864,6 +864,7 @@ class userModel extends model continue; } + /* Merge acls. */ if(!empty($acl['programs'])) $acls['programs'] = !empty($acls['programs']) ? array_merge($acls['programs'], $acl['programs']) : $acl['programs']; if(!empty($acl['projects'])) $acls['projects'] = !empty($acls['projects']) ? array_merge($acls['projects'], $acl['projects']) : $acl['projects']; if(!empty($acl['products'])) $acls['products'] = !empty($acls['products']) ? array_merge($acls['products'], $acl['products']) : $acl['products']; @@ -878,7 +879,7 @@ class userModel extends model if($sprintAllow) $acls['sprints'] = array(); if($viewAllow) $acls['views'] = array(); if($actionAllow) unset($acls['actions']); - + $sql = $this->dao->select('module, method')->from(TABLE_GROUP)->alias('t1') ->leftJoin(TABLE_USERGROUP)->alias('t2')->on('t1.id = t2.group') ->leftJoin(TABLE_GROUPPRIV)->alias('t3')->on('t2.group = t3.group') @@ -1652,21 +1653,21 @@ class userModel extends model $parentStakeholderGroup = $this->stakeholder->getParentStakeholderGroup($programIdList); /* Get auth users. */ - $authUsers = array(); - if(!empty($users)) $authUsers = $users; + $authedUsers = array(); + if(!empty($users)) $authedUsers = $users; if(empty($users)) { foreach($programs as $program) { $stakeholders = zget($stakeholderGroup, $program->id, array()); if($program->acl == 'program') $stakeholders += zget($parentStakeholderGroup, $program->id, array()); - $authUsers += $this->getProgramAuthUsers($program, $stakeholders); + $authedUsers += $this->getProgramAuthedUsers($program, $stakeholders); } } /* Get all programs user view. */ - $stmt = $this->dao->select("account,programs")->from(TABLE_USERVIEW)->where('account')->in($authUsers); - if(empty($users) and $authUsers) + $stmt = $this->dao->select("account,programs")->from(TABLE_USERVIEW)->where('account')->in($authedUsers); + if(empty($users) and $authedUsers) { foreach($programs as $programID => $program) $stmt->orWhere("CONCAT(',', programs, ',')")->like("%,{$programID},%"); } @@ -1719,8 +1720,8 @@ class userModel extends model $parentStakeholderGroup = $this->stakeholder->getParentStakeholderGroup($projectIdList); /* Get auth users. */ - $authUsers = array(); - if(!empty($users)) $authUsers = $users; + $authedUsers = array(); + if(!empty($users)) $authedUsers = $users; if(empty($users)) { foreach($projects as $project) @@ -1729,13 +1730,13 @@ class userModel extends model $teams = zget($teamGroups, $project->id, array()); if($project->acl == 'program') $stakeholders += zget($parentStakeholderGroup, $project->id, array()); - $authUsers += $this->getProjectAuthUsers($project, $stakeholders, $teams); + $authedUsers += $this->getProjectAuthedUsers($project, $stakeholders, $teams); } } /* Get all programs user view. */ - $stmt = $this->dao->select("account,projects")->from(TABLE_USERVIEW)->where('account')->in($authUsers); - if(empty($users) and $authUsers) + $stmt = $this->dao->select("account,projects")->from(TABLE_USERVIEW)->where('account')->in($authedUsers); + if(empty($users) and $authedUsers) { foreach($projects as $projectID => $project) $stmt->orWhere("CONCAT(',', projects, ',')")->like("%,{$projectID},%"); } @@ -1856,8 +1857,8 @@ class userModel extends model $stakeholderGroup = $this->loadModel('stakeholder')->getStakeholderGroup($projectIdList); /* Get auth users. */ - $authUsers = array(); - if(!empty($users)) $authUsers = $users; + $authedUsers = array(); + if(!empty($users)) $authedUsers = $users; if(empty($users)) { foreach($sprints as $sprint) @@ -1865,13 +1866,13 @@ class userModel extends model $stakeholders = zget($stakeholderGroup, $sprint->project, array()); $teams = zget($teamGroups, $sprint->id, array()); - $authUsers += $this->getSprintAuthUsers($sprint, $stakeholders, $teams); + $authedUsers += $this->getSprintAuthedUsers($sprint, $stakeholders, $teams); } } /* Get all programs user view. */ - $stmt = $this->dao->select("account,sprints")->from(TABLE_USERVIEW)->where('account')->in($authUsers); - if(empty($users) and $authUsers) + $stmt = $this->dao->select("account,sprints")->from(TABLE_USERVIEW)->where('account')->in($authedUsers); + if(empty($users) and $authedUsers) { foreach($sprints as $sprintID => $sprint) $stmt->orWhere("CONCAT(',', sprints, ',')")->like("%,{$sprintID},%"); } @@ -1937,10 +1938,10 @@ class userModel extends model if($project->type == 'project' && $project->parent != 0 && $project->acl == 'program') { $path = trim($project->path, ",$project->id,"); - $programs = $this->dao->select('id,openedBy,PM,PO,QD,RD')->from(TABLE_PROJECT)->where('id')->in($path)->fetchAll(); + $programs = $this->dao->select('openedBy,PM')->from(TABLE_PROJECT)->where('id')->in($path)->fetchAll(); foreach($programs as $program) { - if($program->PO == $account OR $program->QD == $account OR $program->RD == $account OR $program->PM == $account) return true; + if($program->PM == $account || $program->openedBy == $account) return true; } } @@ -1995,7 +1996,7 @@ class userModel extends model } /** - * Get project auth users. + * Get project authed users. * * @param object $project * @param array $stakeholders @@ -2003,7 +2004,7 @@ class userModel extends model * @access public * @return array */ - public function getProjectAuthUsers($project, $stakeholders, $teams) + public function getProjectAuthedUsers($project, $stakeholders, $teams) { $users = array(); @@ -2022,15 +2023,11 @@ class userModel extends model if($project->type == 'project' && $project->parent != 0 && $project->acl == 'program') { $path = trim($project->path, ",$project->id,"); - $programs = $this->dao->select('id,openedBy,PM,PO,QD,RD')->from(TABLE_PROJECT)->where('id')->in($path)->fetchAll(); + $programs = $this->dao->select('openedBy,PM')->from(TABLE_PROJECT)->where('id')->in($path)->fetchAll(); foreach($programs as $program) { $users[$program->openedBy] = $program->openedBy; $users[$program->PM] = $program->PM; - $users[$program->PO] = $program->PO; - $users[$program->QD] = $program->QD; - $users[$program->RD] = $program->RD; - } } @@ -2038,14 +2035,14 @@ class userModel extends model } /** - * Get program auth users. + * Get program authed users. * * @param object $program * @param array $stakeholders * @access public * @return array */ - public function getProgramAuthUsers($program, $stakeholders) + public function getProgramAuthedUsers($program, $stakeholders) { $users = array(); @@ -2060,7 +2057,7 @@ class userModel extends model } /** - * Get sprint auth users. + * Get sprint authed users. * * @param object $sprint * @param array $stakeholders @@ -2068,9 +2065,9 @@ class userModel extends model * @access public * @return array */ - public function getSprintAuthUsers($sprint, $stakeholders, $teams) + public function getSprintAuthedUsers($sprint, $stakeholders, $teams) { - return $this->getProjectAuthUsers($sprint, $stakeholders, $teams); + return $this->getProjectAuthedUsers($sprint, $stakeholders, $teams); } /** @@ -2110,42 +2107,6 @@ class userModel extends model return $users; } - /** - * Get project white list users. - * - * @param object $project - * @param array $groupUsers - * @param array $teams - * @access public - * @return array - */ - public function getProjectWhiteListUsers($project, $groupUsers, $teams) - { - $users = array(); - - foreach(explode(',', trim($this->app->company->admins, ',')) as $admin) $users[$admin] = $admin; - - $users[$project->PO] = $project->PO; - $users[$project->QD] = $project->QD; - $users[$project->RD] = $project->RD; - $users[$project->PM] = $project->PM; - $users[$project->openedBy] = $project->openedBy; - if(isset($project->feedback)) $users[$project->feedback] = $project->feedback; - - $users += $teams; - - if($project->acl == 'custom') - { - foreach(explode(',', $project->whitelist) as $whitelist) - { - if(empty($whitelist)) continue; - $users += zget($groupUsers, $whitelist, array()); - } - } - - return $users; - } - /** * Judge an action is clickable or not. *