This commit is contained in:
vimrus
2021-03-02 11:19:57 +08:00
93 changed files with 271 additions and 2375 deletions
-3
View File
@@ -186,8 +186,6 @@ define('TABLE_REPOHISTORY', '`' . $config->db->prefix . 'repohistory`');
define('TABLE_REPOFILES', '`' . $config->db->prefix . 'repofiles`');
define('TABLE_REPOBRANCH', '`' . $config->db->prefix . 'repobranch`');
if(!defined('TABLE_LANG')) define('TABLE_LANG', '`' . $config->db->prefix . 'lang`');
if(!defined('TABLE_DESIGN')) define('TABLE_DESIGN', '`' . $config->db->prefix . 'design`');
if(!defined('TABLE_DESIGNSPEC')) define('TABLE_DESIGNSPEC', '`' . $config->db->prefix . 'designspec`');
if(!defined('TABLE_PROJECTSPEC')) define('TABLE_PROJECTSPEC', '`' . $config->db->prefix . 'projectspec`');
if(!defined('TABLE_SEARCHINDEX')) define('TABLE_SEARCHINDEX', $config->db->prefix . 'searchindex');
@@ -218,7 +216,6 @@ $config->objectTables['module'] = TABLE_MODULE;
$config->objectTables['caselib'] = TABLE_TESTSUITE;
$config->objectTables['entry'] = TABLE_ENTRY;
$config->objectTables['webhook'] = TABLE_WEBHOOK;
$config->objectTables['design'] = TABLE_DESIGN;
$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER;
$config->objectTables['job'] = TABLE_JOB;
-34
View File
@@ -86,40 +86,6 @@ CREATE TABLE IF NOT EXISTS `zt_expect` (
`deleted` enum('0','1') NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_design`;
CREATE TABLE IF NOT EXISTS `zt_design` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`PRJ` varchar(255) NOT NULL,
`product` varchar(255) NOT NULL,
`commit` text NOT NULL,
`commitedBy` varchar(30) NOT NULL,
`project` mediumint(9) NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL,
`status` varchar(30) NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`assignedTo` varchar(30) NOT NULL,
`assignedBy` varchar(30) NOT NULL,
`assignedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
`story` char(30) NOT NULL,
`desc` text NOT NULL,
`version` smallint(6) NOT NULL,
`type` char(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `zt_designspec` (
`design` mediumint(8) NOT NULL,
`version` smallint(6) NOT NULL,
`name` varchar(255) NOT NULL,
`desc` text NOT NULL,
`files` varchar(255) NOT NULL,
UNIQUE KEY `design` (`design`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectspec`;
CREATE TABLE IF NOT EXISTS `zt_projectspec` (
`project` mediumint(8) NOT NULL,
-33
View File
@@ -331,39 +331,6 @@ CREATE TABLE IF NOT EXISTS `zt_dept` (
KEY `parent` (`parent`),
KEY `path` (`path`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_design`;
CREATE TABLE IF NOT EXISTS `zt_design` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`PRJ` varchar(255) NOT NULL,
`product` varchar(255) NOT NULL,
`commit` text NOT NULL,
`commitedBy` varchar(30) NOT NULL,
`project` mediumint(9) NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL,
`status` varchar(30) NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`assignedTo` varchar(30) NOT NULL,
`assignedBy` varchar(30) NOT NULL,
`assignedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
`story` char(30) NOT NULL,
`desc` text NOT NULL,
`version` smallint(6) NOT NULL,
`type` char(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_designspec`;
CREATE TABLE IF NOT EXISTS `zt_designspec` (
`design` mediumint(8) NOT NULL,
`version` smallint(6) NOT NULL,
`name` varchar(255) NOT NULL,
`desc` text NOT NULL,
`files` varchar(255) NOT NULL,
UNIQUE KEY `design` (`design`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_doc`;
CREATE TABLE IF NOT EXISTS `zt_doc` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
+1 -1
View File
@@ -846,7 +846,7 @@ class baseRouter
session_start();
/* If request header has token, use it as session for authentication. */
$this->sessionID = $_SERVER['HTTP_TOKEN'] ? session_id($_SERVER['HTTP_TOKEN']) : session_id();
$this->sessionID = isset($_SERVER['HTTP_TOKEN']) ? session_id($_SERVER['HTTP_TOKEN']) : session_id();
if(isset($_GET[$this->config->sessionVar])) helper::restartSession($_GET[$this->config->sessionVar]);
+1 -1
View File
@@ -193,7 +193,7 @@ class router extends baseRouter
/* Record system mode. */
$config->systemMode = $mode;
if($config->systemMode == 'old') $this->config->executionCommonList = $this->config->projectCommonList;
if($config->systemMode == 'classic') $this->config->executionCommonList = $this->config->projectCommonList;
/* Record hour unit. */
$config->hourUnit = 'H';
+1 -1
View File
@@ -208,7 +208,7 @@ class actionModel extends model
*/
public function getList($objectType, $objectID)
{
if($this->config->systemMode == 'old' and $objectType == 'execution') $objectType = 'project';
if($this->config->systemMode == 'classic' and $objectType == 'execution') $objectType = 'project';
$commiters = $this->loadModel('user')->getCommiters();
$actions = $this->dao->select('*')->from(TABLE_ACTION)
->beginIF($objectType == 'project')
+3 -3
View File
@@ -234,7 +234,7 @@ class caselibModel extends model
$lib = fixer::input('post')
->stripTags($this->config->caselib->editor->create['id'], $this->config->allowedTags)
->setForce('type', 'library')
->setIF($this->config->systemMode == 'new', 'PRJ', $this->session->PRJ)
->setIF($this->config->systemMode == 'new' and $this->lang->navGroup->caselib != 'qa', 'PRJ', $this->session->PRJ)
->add('addedBy', $this->app->user->account)
->add('addedDate', helper::now())
->remove('uid')
@@ -278,7 +278,7 @@ class caselibModel extends model
{
$cases = $this->dao->select('*')->from(TABLE_CASE)
->where('lib')->eq((int)$libID)
->beginIF($this->lang->navGroup->caselib != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->caselib != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('product')->eq(0)
->beginIF($moduleIdList)->andWhere('module')->in($moduleIdList)->fi()
->beginIF($browseType == 'wait')->andWhere('status')->eq($browseType)->fi()
@@ -315,7 +315,7 @@ class caselibModel extends model
$cases = $this->dao->select('*')->from(TABLE_CASE)->where($caseQuery)
->beginIF($queryLibID != 'all')->andWhere('lib')->eq((int)$libID)->fi()
->beginIF($this->lang->navGroup->caselib != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->caselib != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('product')->eq(0)
->andWhere('deleted')->eq(0)
->orderBy($sort)->page($pager)->fetchAll();
+1 -13
View File
@@ -114,8 +114,6 @@ $lang->future = 'Warte';
$lang->year = 'Jahr';
$lang->workingHour = 'Stunde';
$lang->generalUR = 'UR/Epic';
$lang->generalSR = 'SR/Story';
$lang->sprintCommon = $lang->iterationCommon . '/Phase';
$lang->execution = new stdclass();
@@ -650,7 +648,6 @@ $lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
$lang->navGroup->milestone = 'project';
$lang->navGroup->pssp = 'project';
$lang->navGroup->design = 'project';
$lang->navGroup->auditplan = 'project';
$lang->navGroup->cm = 'project';
$lang->navGroup->nc = 'project';
@@ -946,7 +943,6 @@ $lang->waterfall->setMenu = $lang->scrum->setMenu;
$lang->waterfallproduct = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
$lang->auditplan = new stdclass();
$lang->cm = new stdclass();
$lang->nc = new stdclass();
@@ -956,7 +952,6 @@ $lang->projectstory = new stdclass();
$lang->review->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();
@@ -967,16 +962,9 @@ $lang->projectstory->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->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
$lang->design->menu->dbds = array('link' => 'DBDS|design|browse|productID={PRODUCT}&browseType=DBDS');
$lang->design->menu->ads = array('link' => 'ADS|design|browse|productID={PRODUCT}&browseType=ADS');
$lang->design->menu->bysearch = array('link' => '<a href="javascript:;" class="querybox-toggle"><i class="icon-search icon"></i> ' . $lang->searchAB . '</a>');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage');
if($config->systemMode == 'old')
if($config->systemMode == 'classic')
{
$lang->noMenuModule[] = 'project';
$lang->noMenuModule[] = 'task';
+1 -13
View File
@@ -114,8 +114,6 @@ $lang->future = 'Waiting';
$lang->year = 'Year';
$lang->workingHour = 'Hours';
$lang->generalUR = 'UR/Epic';
$lang->generalSR = 'SR/Story';
$lang->sprintCommon = $lang->iterationCommon . '/Phase';
$lang->execution = new stdclass();
@@ -650,7 +648,6 @@ $lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
$lang->navGroup->milestone = 'project';
$lang->navGroup->pssp = 'project';
$lang->navGroup->design = 'project';
$lang->navGroup->auditplan = 'project';
$lang->navGroup->cm = 'project';
$lang->navGroup->nc = 'project';
@@ -946,7 +943,6 @@ $lang->waterfall->setMenu = $lang->scrum->setMenu;
$lang->waterfallproduct = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
$lang->auditplan = new stdclass();
$lang->cm = new stdclass();
$lang->nc = new stdclass();
@@ -956,7 +952,6 @@ $lang->projectstory = new stdclass();
$lang->review->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();
@@ -967,16 +962,9 @@ $lang->projectstory->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->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
$lang->design->menu->dbds = array('link' => 'DBDS|design|browse|productID={PRODUCT}&browseType=DBDS');
$lang->design->menu->ads = array('link' => 'ADS|design|browse|productID={PRODUCT}&browseType=ADS');
$lang->design->menu->bysearch = array('link' => '<a href="javascript:;" class="querybox-toggle"><i class="icon-search icon"></i> ' . $lang->searchAB . '</a>');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage');
if($config->systemMode == 'old')
if($config->systemMode == 'classic')
{
$lang->noMenuModule[] = 'project';
$lang->noMenuModule[] = 'task';
+1 -13
View File
@@ -114,8 +114,6 @@ $lang->future = 'En Attente';
$lang->year = 'Année';
$lang->workingHour = 'Heures';
$lang->generalUR = 'UR/Epic';
$lang->generalSR = 'SR/Story';
$lang->sprintCommon = $lang->iterationCommon . '/Phase';
$lang->execution = new stdclass();
@@ -650,7 +648,6 @@ $lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
$lang->navGroup->milestone = 'project';
$lang->navGroup->pssp = 'project';
$lang->navGroup->design = 'project';
$lang->navGroup->auditplan = 'project';
$lang->navGroup->cm = 'project';
$lang->navGroup->nc = 'project';
@@ -946,7 +943,6 @@ $lang->waterfall->setMenu = $lang->scrum->setMenu;
$lang->waterfallproduct = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
$lang->auditplan = new stdclass();
$lang->cm = new stdclass();
$lang->nc = new stdclass();
@@ -956,7 +952,6 @@ $lang->projectstory = new stdclass();
$lang->review->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();
@@ -967,16 +962,9 @@ $lang->projectstory->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->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
$lang->design->menu->dbds = array('link' => 'DBDS|design|browse|productID={PRODUCT}&browseType=DBDS');
$lang->design->menu->ads = array('link' => 'ADS|design|browse|productID={PRODUCT}&browseType=ADS');
$lang->design->menu->bysearch = array('link' => '<a href="javascript:;" class="querybox-toggle"><i class="icon-search icon"></i> ' . $lang->searchAB . '</a>');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage');
if($config->systemMode == 'old')
if($config->systemMode == 'classic')
{
$lang->noMenuModule[] = 'project';
$lang->noMenuModule[] = 'task';
+18
View File
@@ -10,6 +10,24 @@ $lang->mainNav->menuOrder[60] = 'system';
$lang->mainNav->menuOrder[70] = 'admin';
if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program';
/* Waterfall menu order. */
$lang->waterfall->menuOrder[5] = 'programindex';
$lang->waterfall->menuOrder[10] = 'programplan';
$lang->waterfall->menuOrder[15] = 'project';
$lang->waterfall->menuOrder[20] = 'projectstory';
$lang->waterfall->menuOrder[25] = 'design';
$lang->waterfall->menuOrder[30] = 'ci';
$lang->waterfall->menuOrder[35] = 'track';
$lang->waterfall->menuOrder[38] = 'review';
$lang->waterfall->menuOrder[39] = 'cm';
$lang->waterfall->menuOrder[40] = 'qa';
$lang->waterfall->menuOrder[45] = 'doc';
$lang->waterfall->menuOrder[50] = 'projectbuild';
$lang->waterfall->menuOrder[55] = 'projectrelease';
$lang->waterfall->menuOrder[60] = 'weekly';
$lang->waterfall->menuOrder[65] = 'other';
$lang->waterfall->menuOrder[70] = 'projectsetting';
/* Sort of main menu. */
$lang->scrum->menuOrder[5] = 'programindex';
$lang->scrum->menuOrder[10] = 'project';
+1 -13
View File
@@ -114,8 +114,6 @@ $lang->future = 'Đang đợi';
$lang->year = 'Năm';
$lang->workingHour = 'giờ';
$lang->generalUR = 'UR/Epic';
$lang->generalSR = 'SR/Story';
$lang->sprintCommon = $lang->iterationCommon . '/Phase';
$lang->execution = new stdclass();
@@ -650,7 +648,6 @@ $lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
$lang->navGroup->milestone = 'project';
$lang->navGroup->pssp = 'project';
$lang->navGroup->design = 'project';
$lang->navGroup->auditplan = 'project';
$lang->navGroup->cm = 'project';
$lang->navGroup->nc = 'project';
@@ -945,7 +942,6 @@ $lang->waterfall->setMenu = $lang->scrum->setMenu;
$lang->waterfallproduct = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
$lang->auditplan = new stdclass();
$lang->cm = new stdclass();
$lang->nc = new stdclass();
@@ -955,7 +951,6 @@ $lang->projectstory = new stdclass();
$lang->review->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();
@@ -966,16 +961,9 @@ $lang->projectstory->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->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
$lang->design->menu->dbds = array('link' => 'DBDS|design|browse|productID={PRODUCT}&browseType=DBDS');
$lang->design->menu->ads = array('link' => 'ADS|design|browse|productID={PRODUCT}&browseType=ADS');
$lang->design->menu->bysearch = array('link' => '<a href="javascript:;" class="querybox-toggle"><i class="icon-search icon"></i> ' . $lang->searchAB . '</a>');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage');
if($config->systemMode == 'old')
if($config->systemMode == 'classic')
{
$lang->noMenuModule[] = 'project';
$lang->noMenuModule[] = 'task';
+1 -13
View File
@@ -114,8 +114,6 @@ $lang->future = '未来';
$lang->year = '年';
$lang->workingHour = '工时';
$lang->generalUR = '用需/史诗';
$lang->generalSR = '软需/故事';
$lang->sprintCommon = $lang->iterationCommon . '/阶段';
$lang->execution = new stdclass();
@@ -648,7 +646,6 @@ $lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
$lang->navGroup->milestone = 'project';
$lang->navGroup->pssp = 'project';
$lang->navGroup->design = 'project';
$lang->navGroup->auditplan = 'project';
$lang->navGroup->cm = 'project';
$lang->navGroup->nc = 'project';
@@ -944,7 +941,6 @@ $lang->waterfall->setMenu = $lang->scrum->setMenu;
$lang->waterfallproduct = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
$lang->auditplan = new stdclass();
$lang->cm = new stdclass();
$lang->nc = new stdclass();
@@ -954,7 +950,6 @@ $lang->projectstory = new stdclass();
$lang->review->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();
@@ -965,16 +960,9 @@ $lang->projectstory->menu = new stdclass();
$lang->stakeholder->menu->list = array('link' => '干系人列表|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
$lang->stakeholder->menu->issue = array('link' => '问题管理|stakeholder|issue|');
$lang->design->menu->all = array('link' => '所有|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => '概要设计|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => '详细设计|design|browse|productID={PRODUCT}&browseType=DDS');
$lang->design->menu->dbds = array('link' => '数据库设计|design|browse|productID={PRODUCT}&browseType=DBDS');
$lang->design->menu->ads = array('link' => '接口设计|design|browse|productID={PRODUCT}&browseType=ADS');
$lang->design->menu->bysearch = array('link' => '<a href="javascript:;" class="querybox-toggle"><i class="icon-search icon"></i> ' . $lang->searchAB . '</a>');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage');
if($config->systemMode == 'old')
if($config->systemMode == 'classic')
{
$lang->noMenuModule[] = 'project';
$lang->noMenuModule[] = 'task';
-2
View File
@@ -114,8 +114,6 @@ $lang->future = '未來';
$lang->year = '年';
$lang->workingHour = '工時';
$lang->generalUR = '用需/史詩';
$lang->generalSR = '軟需/故事';
$lang->sprintCommon = '迭代/階段';
$lang->execution = new stdclass();
+1 -1
View File
@@ -1169,7 +1169,7 @@ EOD;
if(strtolower($module) == 'story' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create');
if(strtolower($module) == 'bug' and strtolower($method) == 'tostory') ($module = 'story') and ($method = 'create');
if(strtolower($module) == 'bug' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create');
if($config->systemMode == 'old' and strtolower($module) == 'program' and strpos($method, 'PRJ') === 0) ($module = 'project') and ($method = substr(strtolower($method), 3));
if($config->systemMode == 'classic' and strtolower($module) == 'program' and strpos($method, 'PRJ') === 0) ($module = 'project') and ($method = substr(strtolower($method), 3));
if(!commonModel::hasPriv($module, $method, $object)) return false;
$link = helper::createLink($module, $method, $vars, '', $onlyBody, $programID);
+1 -1
View File
@@ -24,7 +24,7 @@ $isQa = $rawModule == 'qa';
<?php if($this->config->systemMode == 'new'):?>
<?php if($isProgram) echo isset($lang->program->switcherMenu) ? $lang->program->switcherMenu : '';?>
<?php if($isProject) echo $this->loadModel('program')->getPRJSwitcher($this->session->PRJ, $app->rawModule, $app->rawMethod);?>
<?php elseif($this->config->systemMode == 'old'):?>
<?php elseif($this->config->systemMode == 'classic'):?>
<?php if($isProject) echo isset($lang->project->switcherMenu) ? $lang->project->switcherMenu : '';;?>
<?php endif;?>
</div>
+1 -1
View File
@@ -553,7 +553,7 @@ class custom extends control
if($mode == 'new') die(js::locate($this->createLink('upgrade', 'mergeTips'), 'parent'));
}
$mode = zget($this->config->global, 'mode', 'old');
$mode = zget($this->config->global, 'mode', 'classic');
if($mode == 'new')
{
if(isset($this->config->global->upgradeStep) and $this->config->global->upgradeStep == 'mergeProgram') $this->locate($this->createLink('upgrade', 'mergeProgram'));
+1 -1
View File
@@ -12,7 +12,7 @@
{
common::printLink('custom', $sysObject, "", "<span class='text'>{$lang->custom->$sysObject}</span>", '', "class='btn btn-link' id='{$sysObject}Tab'");
}
if((isset($config->systemMode) and $config->systemMode == 'old') || (isset($config->global->upgradeStep) and $config->global->upgradeStep == 'mergeProgram'))
if((isset($config->systemMode) and $config->systemMode == 'classic') || (isset($config->global->upgradeStep) and $config->global->upgradeStep == 'mergeProgram'))
{
common::printLink('custom', 'mode', "", "<span class='text'>{$lang->custom->mode}</span>", '', "class='btn btn-link' id='modeTab'");
}
-1
View File
@@ -1,5 +1,4 @@
<?php
$config->datatable->moduleAlias['product-browse'] = 'story';
$config->datatable->moduleAlias['projectstory-story'] = 'story';
$config->datatable->moduleAlias['project-task'] = 'task';
$config->datatable->moduleAlias['testtask-cases'] = 'testcase';
-32
View File
@@ -1,32 +0,0 @@
<?php
$config->design = new stdclass();
$config->design->editor = new stdclass();
$config->design->editor->create = array('id' => 'desc', 'tools' => 'simpleTools');
$config->design->editor->edit = array('id' => 'desc', 'tools' => 'simpleTools');
$config->design->editor->assignto = array('id' => 'comment', 'tools' => 'simpleTools');
$config->design->create = new stdclass();
$config->design->edit = new stdclass();
$config->design->create->requiredFields = 'name,type';
$config->design->edit->requiredFields = 'name,type';
$config->design->affectedFixedNum = 7;
global $lang;
$config->design->search['module'] = 'design';
$config->design->search['fields']['id'] = $lang->design->id;
$config->design->search['fields']['type'] = $lang->design->type;
$config->design->search['fields']['name'] = $lang->design->name;
$config->design->search['fields']['commit'] = $lang->design->submission;
$config->design->search['fields']['createdBy'] = $lang->design->createdBy;
$config->design->search['fields']['createdDate'] = $lang->design->createdDate;
$config->design->search['fields']['assignedTo'] = $lang->design->assignedTo;
$config->design->search['fields']['story'] = $lang->design->story;
$config->design->search['params']['type'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->design->typeList);
$config->design->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => '');
$config->design->search['params']['commit'] = array('operator' => 'include', 'control' => 'input', 'values' => '');
$config->design->search['params']['createdBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
$config->design->search['params']['createdDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
$config->design->search['params']['assignedTo'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
$config->design->search['params']['story'] = array('operator' => '=', 'control' => 'select', 'values' => '');
-433
View File
@@ -1,433 +0,0 @@
<?php
/**
* The control file of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: control.php 5107 2020-09-02 09:46:12Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
class design extends control
{
public $products = array();
/**
* Construct function, load module auto.
*
* @param string $moduleName
* @param string $methodName
* @access public
* @return void
*/
public function __construct($moduleName = '', $methodName = '')
{
parent::__construct($moduleName, $methodName);
$products = array();
$this->loadModel('product');
$this->loadModel('task');
$this->view->products = $this->products = $this->product->getProductPairsByProject($this->session->PRJ);
}
/**
* Browse designs.
*
* @param int $productID
* @param string $type all|bySearch|HLDS|DDS|DBDS|ADS
* @param string $param
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function browse($productID = 0, $type = 'all', $param = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
/* Save session for design list and process product id. */
$this->session->set('designList', $this->app->getURI(true));
$productKeys = array_keys($this->products);
if(!in_array($productID, $productKeys)) $productID = key($this->products);
$this->design->setProductMenu($productID);
/* Build the search form. */
$queryID = ($type == 'bySearch') ? (int)$param : 0;
$actionURL = $this->createLink('design', 'browse', "productID=$productID&type=bySearch&queryID=myQueryID");
$this->design->buildSearchForm($queryID, $actionURL);
/* Print top and right actions. */
$this->lang->TRActions = '<div class="btn-group dropdown-hover">';
$this->lang->TRActions .= "<button type='button' class='btn btn-primary'>";
$this->lang->TRActions .= "<i class='icon-plus'></i> {$this->lang->design->create} <span class='caret'></span>";
$this->lang->TRActions .= '</button>';
$this->lang->TRActions .= "<ul class='dropdown-menu pull-right' id='createActionMenu'>";
if(common::hasPriv('design', 'create')) $this->lang->TRActions .= '<li>' . html::a($this->createLink('design', 'create', "productID=$productID"), $this->lang->design->create, '', "class='btn btn-link'") . '</li>';
if(common::hasPriv('design', 'batchCreate')) $this->lang->TRActions .= '<li>' . html::a($this->createLink('design', 'batchCreate', "productID=$productID"), $this->lang->design->batchCreate, '', "class='btn btn-link'") . '</li>';
$this->lang->TRActions .= '</ul>';
$this->lang->TRActions .= '</div>';
/* Init pager and get designs. */
$this->app->loadClass('pager', $static = true);
$pager = pager::init(0, $recPerPage, $pageID);
$designs = $this->design->getList($this->session->PRJ, $productID, $type, $queryID, $orderBy, $pager);
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->browse;
$this->view->position[] = $this->lang->design->browse;
$this->view->designs = $designs;
$this->view->type = $type;
$this->view->param = $param;
$this->view->orderBy = $orderBy;
$this->view->productID = $productID;
$this->view->pager = $pager;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->display();
}
/**
* Create a design.
*
* @param int $productID
* @access public
* @return void
*/
public function create($productID = 0)
{
if($_POST)
{
$designID = $this->design->create();
if(dao::isError())
{
$response['result'] = 'fail';
$response['message'] = dao::getError();
$this->send($response);
}
$this->loadModel('action')->create('design', $designID, 'created');
$response['result'] = 'success';
$response['message'] = $this->lang->saveSuccess;
$response['locate'] = $this->createLink('design', 'browse', "productID={$this->post->product}");
$this->send($response);
}
array_push($this->lang->noMenuModule, 'design');
$this->design->setProductMenu($productID);
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->create;
$this->view->position[] = $this->lang->design->create;
$this->view->users = $this->loadModel('user')->getPairs('noclosed');
$this->view->stories = $this->loadModel('story')->getProductStoryPairs($productID);
$this->view->productID = $productID;
$this->view->project = $this->loadModel('program')->getPRJByID($this->session->PRJ);
$this->display();
}
/**
* Batch create designs.
*
* @param int $productID
* @access public
* @return void
*/
public function batchCreate($productID = 0)
{
if($_POST)
{
$this->design->batchCreate($productID);
if(dao::isError())
{
$response['result'] = 'fail';
$response['message'] = dao::getError();
$this->send($response);
}
$response['result'] = 'success';
$response['message'] = $this->lang->saveSuccess;
$response['locate'] = inlink('browse', "productID=$productID");
$this->send($response);
}
$this->design->setProductMenu($productID);
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->batchCreate;
$this->view->position[] = $this->lang->design->batchCreate;
$this->view->stories = $this->loadModel('story')->getProductStoryPairs($productID);
$this->view->users = $this->loadModel('user')->getPairs('noclosed');
$this->display();
}
/**
* View a design.
*
* @param int $designID
* @access public
* @return void
*/
public function view($designID = 0)
{
$design = $this->design->getById($designID);
$this->design->setProductMenu($design->product);
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->view;
$this->view->position[] = $this->lang->design->view;
$this->view->design = $design;
$this->view->stories = $this->loadModel('story')->getProductStoryPairs($design->product);
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('design', $design->id);
$this->display();
}
/**
* Edit a design.
*
* @param int $designID
* @access public
* @return void
*/
public function edit($designID = 0)
{
$design = $this->design->getByID($designID);
$design = $this->design->getAffectedScope($design);
$this->design->setProductMenu($design->product);
if($_POST)
{
$changes = $this->design->update($designID);
if(dao::isError())
{
$response['result'] = 'fail';
$response['message'] = dao::getError();
$this->send($response);
}
if(!empty($changes))
{
$actionID = $this->loadModel('action')->create('design', $designID, 'changed');
$this->action->logHistory($actionID, $changes);
}
$response['result'] = 'success';
$response['message'] = $this->lang->saveSuccess;
$response['locate'] = $this->createLink('design', 'view', "id=$design->id");
$this->send($response);
}
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->edit;
$this->view->position[] = $this->lang->design->edit;
$this->view->design = $design;
$this->view->project = $this->loadModel('program')->getPRJByID($this->session->PRJ);
$this->view->stories = $this->loadModel('story')->getProductStoryPairs($design->product);
$this->display();
}
/**
* Design link commits.
*
* @param int $designID
* @param int $repoID
* @param string $begin
* @param string $end
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function linkCommit($designID = 0, $repoID = 0, $begin = '', $end = '', $recTotal = 0, $recPerPage = 50, $pageID = 1)
{
$design = $this->design->getById($designID);
$this->design->setProductMenu($design->product);
/* Get project and date. */
$project = $this->loadModel('program')->getPRJByID($this->session->PRJ);
$begin = $begin ? date('Y-m-d', strtotime($begin)) : $project->begin;
$end = $end ? date('Y-m-d', strtotime($end)) : helper::today();
/* Get the repository information through the repoID. */
$repos = $this->loadModel('repo')->getRepoPairs($this->session->PRJ);
$repoID = $repoID ? $repoID : key($repos);
if(empty($repoID)) die(js::locate(helper::createLink('repo', 'create')));
$repo = $this->loadModel('repo')->getRepoByID($repoID);
$revisions = $this->repo->getCommits($repo, '', 'HEAD', '', '', $begin, $end);
if($_POST)
{
$this->design->linkCommit($designID, $repoID);
$result['result'] = 'success';
$result['message'] = $this->lang->saveSuccess;
$result['locate'] = 'parent';
$this->send($result);
}
/* Linked submission. */
$linkedRevisions = array();
$relations = $this->loadModel('common')->getRelations('design', $designID, 'commit');
foreach($relations as $relation) $linkedRevisions[$relation->BID] = $relation->BID;
foreach($revisions as $id => $commit)
{
if(isset($linkedRevisions[$commit->id])) unset($revisions[$id]);
}
/* Init pager. */
$this->app->loadClass('pager', $static = true);
$recTotal = count($revisions);
$pager = new pager($recTotal, $recPerPage, $pageID);
$revisions = array_chunk($revisions, $pager->recPerPage);
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->linkCommit;
$this->view->position[] = $this->lang->design->linkCommit;
$this->view->repos = $repos;
$this->view->repoID = $repoID;
$this->view->repo = $repo;
$this->view->revisions = empty($revisions) ? $revisions : $revisions[$pageID - 1];
$this->view->designID = $designID;
$this->view->begin = $begin;
$this->view->end = $end;
$this->view->design = $this->design->getByID($designID);
$this->view->pager = $pager;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->display();
}
/**
* Design unlink commits.
*
* @param int $designID
* @param int $commitID
* @param string $confirm
* @access public
* @return void
*/
public function unlinkCommit($designID = 0, $commitID = 0, $confirm = 'no')
{
if($confirm == 'no')
{
die(js::confirm($this->lang->design->confirmUnlink, inlink('unlinkCommit', "designID=$designID&commitID=$commitID&confirm=yes")));
}
else
{
$this->design->unlinkCommit($designID, $commitID);
die(js::reload('parent'));
}
}
/**
* View a design's commit.
*
* @param int $designID
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function viewCommit($designID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
/* Init pager. */
$this->app->loadClass('pager', $static = true);
$pager = pager::init(0, $recPerPage, $pageID);
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->submission;
$this->view->position[] = $this->lang->design->submission;
$this->view->design = $this->design->getCommit($designID, $pager);
$this->view->pager = $pager;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->display();
}
/**
* A version of the repository.
*
* @param int $repoID
* @access public
* @return void
*/
public function revision($repoID = 0)
{
$repo = $this->dao->select('*')->from(TABLE_REPOHISTORY)->where('id')->eq($repoID)->fetch();
$repoURL = $this->createLink('repo', 'revision', "repoID=$repo->repo&revistion=$repo->revision");
header("location:" . $repoURL);
}
/**
* Delete a design.
*
* @param int $designID
* @param string $confirm
* @access public
* @return void
*/
public function delete($designID = 0, $confirm = 'no')
{
if($confirm == 'no')
{
die(js::confirm($this->lang->design->confirmDelete, inlink('delete', "designID=$designID&confirm=yes")));
}
else
{
$this->design->delete(TABLE_DESIGN, $designID);
$this->dao->delete()->from(TABLE_RELATION)->where('Atype')->eq('design')->andWhere('AID')->eq($designID)->andWhere('Btype')->eq('commit')->andwhere('relation')->eq('completedin')->exec();
$this->dao->delete()->from(TABLE_RELATION)->where('Atype')->eq('commit')->andWhere('BID')->eq($designID)->andWhere('Btype')->eq('design')->andwhere('relation')->eq('completedfrom')->exec();
die(js::locate($this->session->designList, 'parent'));
}
}
/**
* Update assign of design.
*
* @param int $designID
* @access public
* @return void
*/
public function assignTo($designID = 0)
{
if($_POST)
{
$changes = $this->design->assign($designID);
if(dao::isError()) die(js::error(dao::getError()));
$this->loadModel('action');
if(!empty($changes))
{
$actionID = $this->action->create('design', $designID, 'Assigned', $this->post->comment, $this->post->assignedTo);
$this->action->logHistory($actionID, $changes);
}
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
die(js::locate($this->createLink('design', 'browse'), 'parent'));
}
$this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->assignedTo;
$this->view->position[] = $this->lang->design->assignedTo;
$this->view->design = $this->design->getById($designID);
$this->view->users = $this->loadModel('user')->getPairs();
$this->display();
}
}
-3
View File
@@ -1,3 +0,0 @@
#featurebar {display:inline-block;}
#querybox #searchform {border-bottom: 1px solid #ddd; margin-bottom: 20px;}
#designTable td {white-space:nowrap; text-overflow:ellipsis; overflow: hidden}
-1
View File
@@ -1 +0,0 @@
.tabs .tab-pane .table{border: 1px solid #ddd; border-top: none}
-8
View File
@@ -1,8 +0,0 @@
#mainContent {min-height: 350px;}
.searchBox{min-height: 45px;}
.searchBox .srearch-date{float: left; width: 20%}
.searchBox h4{float:left;display: inline-block}
.searchBox span{float:left;line-height:30px}
#logForm .table thead th{background: #efefef}
#begin{margin-right:5px}
#end{margin-left:5px}
-5
View File
@@ -1,5 +0,0 @@
$(function()
{
$('#subNavbar .nav li').removeClass('active');
$('#subNavbar .nav li[data-id=' + type + ']').addClass('active');
})
-16
View File
@@ -1,16 +0,0 @@
$(document).on('click', '.ajaxPager', function()
{
$('#logBox').load($(this).attr('href'));
return false;
})
$('#product').change(function()
{
productID = $(this).val();
var link = createLink('story', 'ajaxGetProductStories', 'productID=' + productID);
$.post(link, function(data)
{
$('#story').replaceWith(data);
$('#story_chosen').remove();
$('#story').chosen();
})
})
-28
View File
@@ -1,28 +0,0 @@
$('#begin, #end, #repo').change(function()
{
var begin = $('#begin').val();
var end = $('#end').val();
var repo = $('#repo').val();
if(begin.indexOf('-') != -1)
{
var beginarray = begin.split("-");
var begin = '';
for(i = 0; i < beginarray.length; i++) begin = begin + beginarray[i];
}
if(end.indexOf('-') != -1)
{
var endarray = end.split("-");
var end = '';
for(i = 0 ; i < endarray.length ; i++) end = end + endarray[i];
}
if(begin > end)
{
alert(errorDate);
location.href = createLink('design', 'linkCommit', "designID=" + designID + '&repoID=' + repo);
die;
}
location.href = createLink('design', 'linkCommit', "designID=" + designID + '&repoID=' + repo + '&begin=' + begin + '&end=' + end);
})
-78
View File
@@ -1,78 +0,0 @@
<?php
/**
* The English file of design module.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: en.php 4729 2020-09-01 07:53:55Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
/* 字段列表. */
$lang->design->id = 'ID';
$lang->design->name = 'Name';
$lang->design->story = 'Story';
$lang->design->type = 'Type';
$lang->design->ditto = 'Ditto';
$lang->design->submission = 'Commit';
$lang->design->version = 'Revision';
$lang->design->assignedTo = 'AssignedTo';
$lang->design->actions = 'Actions';
$lang->design->byQuery = 'Search';
$lang->design->products = 'Linked Product';
$lang->design->story = 'Linked Story';
$lang->design->file = 'File';
$lang->design->desc = 'Description';
$lang->design->range = 'Impact';
$lang->design->product = 'Linked Product';
$lang->design->basicInfo = 'Basic Information';
$lang->design->commitBy = 'Commit By';
$lang->design->commitDate = 'Committed Date';
$lang->design->affectedStory = "{$lang->SRCommon}";
$lang->design->affectedTasks = 'Task';
$lang->design->reviewObject = 'Review Object';
$lang->design->createdBy = 'CreatedBy';
$lang->design->createdDate = 'CreatedDate';
$lang->design->basicInfo = 'Basic Information';
$lang->design->noAssigned = 'Unassigned';
$lang->design->comment = 'Comment';
/* 动作列表. */
$lang->design->common = 'Design';
$lang->design->create = 'Create Design';
$lang->design->batchCreate = 'Batch Create';
$lang->design->edit = 'Edit';
$lang->design->delete = 'Delete';
$lang->design->view = 'View';
$lang->design->browse = 'List';
$lang->design->viewCommit = 'View Commit';
$lang->design->linkCommit = 'Link Commit';
$lang->design->unlinkCommit = 'Unlink Commit';
$lang->design->submit = 'Submit Review';
$lang->design->assignTo = 'Assign';
$lang->design->revision = 'Linked Code';
/* 字段取值. */
$lang->design->typeList = array();
$lang->design->typeList[''] = '';
$lang->design->typeList['HLDS'] = 'High-Level';
$lang->design->typeList['DDS'] = 'Detailed';
$lang->design->typeList['DBDS'] = 'Database';
$lang->design->typeList['ADS'] = 'API';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = 'All';
$lang->design->rangeList['assign'] = 'Selected';
$lang->design->featureBar['all'] = 'All';
$lang->design->featureBar += $lang->design->typeList;
/* 提示信息. */
$lang->design->errorSelection = 'No record selected!';
$lang->design->noDesign = 'No record.';
$lang->design->noCommit = 'No record commited.';
$lang->design->confirmDelete = 'Do you want to delete this design?';
$lang->design->confirmUnlink = 'Are you sure you want to remove this submission?';
$lang->design->errorDate = 'The start date can not be greater than the end date.';
$lang->design->deleted = 'Deleted';
-78
View File
@@ -1,78 +0,0 @@
<?php
/**
* The English file of design module.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: en.php 4729 2020-09-01 07:53:55Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
/* 字段列表. */
$lang->design->id = 'ID';
$lang->design->name = 'Name';
$lang->design->story = 'Story';
$lang->design->type = 'Type';
$lang->design->ditto = 'Ditto';
$lang->design->submission = 'Commit';
$lang->design->version = 'Revision';
$lang->design->assignedTo = 'AssignedTo';
$lang->design->actions = 'Actions';
$lang->design->byQuery = 'Search';
$lang->design->products = 'Linked Product';
$lang->design->story = 'Linked Story';
$lang->design->file = 'File';
$lang->design->desc = 'Description';
$lang->design->range = 'Impact';
$lang->design->product = 'Linked Product';
$lang->design->basicInfo = 'Basic Information';
$lang->design->commitBy = 'Commit By';
$lang->design->commitDate = 'Committed Date';
$lang->design->affectedStory = "{$lang->SRCommon}";
$lang->design->affectedTasks = 'Task';
$lang->design->reviewObject = 'Review Object';
$lang->design->createdBy = 'CreatedBy';
$lang->design->createdDate = 'CreatedDate';
$lang->design->basicInfo = 'Basic Information';
$lang->design->noAssigned = 'Unassigned';
$lang->design->comment = 'Comment';
/* 动作列表. */
$lang->design->common = 'Design';
$lang->design->create = 'Create Design';
$lang->design->batchCreate = 'Batch Create';
$lang->design->edit = 'Edit';
$lang->design->delete = 'Delete';
$lang->design->view = 'View';
$lang->design->browse = 'List';
$lang->design->viewCommit = 'View Commit';
$lang->design->linkCommit = 'Link Commit';
$lang->design->unlinkCommit = 'Unlink Commit';
$lang->design->submit = 'Submit Review';
$lang->design->assignTo = 'Assign';
$lang->design->revision = 'Linked Code';
/* 字段取值. */
$lang->design->typeList = array();
$lang->design->typeList[''] = '';
$lang->design->typeList['HLDS'] = 'High-Level';
$lang->design->typeList['DDS'] = 'Detailed';
$lang->design->typeList['DBDS'] = 'Database';
$lang->design->typeList['ADS'] = 'API';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = 'All';
$lang->design->rangeList['assign'] = 'Selected';
$lang->design->featureBar['all'] = 'All';
$lang->design->featureBar += $lang->design->typeList;
/* 提示信息. */
$lang->design->errorSelection = 'No record selected!';
$lang->design->noDesign = 'No record.';
$lang->design->noCommit = 'No record commited.';
$lang->design->confirmDelete = 'Do you want to delete this design?';
$lang->design->confirmUnlink = 'Are you sure you want to remove this submission?';
$lang->design->errorDate = 'The start date can not be greater than the end date.';
$lang->design->deleted = 'Deleted';
-78
View File
@@ -1,78 +0,0 @@
<?php
/**
* The English file of design module.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: en.php 4729 2020-09-01 07:53:55Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
/* 字段列表. */
$lang->design->id = 'ID';
$lang->design->name = 'Name';
$lang->design->story = 'Story';
$lang->design->type = 'Type';
$lang->design->ditto = 'Ditto';
$lang->design->submission = 'Commit';
$lang->design->version = 'Revision';
$lang->design->assignedTo = 'AssignedTo';
$lang->design->actions = 'Actions';
$lang->design->byQuery = 'Search';
$lang->design->products = 'Linked Product';
$lang->design->story = 'Linked Story';
$lang->design->file = 'File';
$lang->design->desc = 'Description';
$lang->design->range = 'Impact';
$lang->design->product = 'Linked Product';
$lang->design->basicInfo = 'Basic Information';
$lang->design->commitBy = 'Commit By';
$lang->design->commitDate = 'Committed Date';
$lang->design->affectedStory = "{$lang->SRCommon}";
$lang->design->affectedTasks = 'Task';
$lang->design->reviewObject = 'Review Object';
$lang->design->createdBy = 'CreatedBy';
$lang->design->createdDate = 'CreatedDate';
$lang->design->basicInfo = 'Basic Information';
$lang->design->noAssigned = 'Unassigned';
$lang->design->comment = 'Comment';
/* 动作列表. */
$lang->design->common = 'Design';
$lang->design->create = 'Create Design';
$lang->design->batchCreate = 'Batch Create';
$lang->design->edit = 'Edit';
$lang->design->delete = 'Delete';
$lang->design->view = 'View';
$lang->design->browse = 'List';
$lang->design->viewCommit = 'View Commit';
$lang->design->linkCommit = 'Link Commit';
$lang->design->unlinkCommit = 'Unlink Commit';
$lang->design->submit = 'Submit Review';
$lang->design->assignTo = 'Assign';
$lang->design->revision = 'Linked Code';
/* 字段取值. */
$lang->design->typeList = array();
$lang->design->typeList[''] = '';
$lang->design->typeList['HLDS'] = 'High-Level';
$lang->design->typeList['DDS'] = 'Detailed';
$lang->design->typeList['DBDS'] = 'Database';
$lang->design->typeList['ADS'] = 'API';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = 'All';
$lang->design->rangeList['assign'] = 'Selected';
$lang->design->featureBar['all'] = 'All';
$lang->design->featureBar += $lang->design->typeList;
/* 提示信息. */
$lang->design->errorSelection = 'No record selected!';
$lang->design->noDesign = 'No record.';
$lang->design->noCommit = 'No record commited.';
$lang->design->confirmDelete = 'Do you want to delete this design?';
$lang->design->confirmUnlink = 'Are you sure you want to remove this submission?';
$lang->design->errorDate = 'The start date can not be greater than the end date.';
$lang->design->deleted = 'Deleted';
-78
View File
@@ -1,78 +0,0 @@
<?php
/**
* The English file of design module.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: en.php 4729 2020-09-01 07:53:55Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
/* 字段列表. */
$lang->design->id = 'ID';
$lang->design->name = 'Name';
$lang->design->story = 'Story';
$lang->design->type = 'Type';
$lang->design->ditto = 'Ditto';
$lang->design->submission = 'Commit';
$lang->design->version = 'Revision';
$lang->design->assignedTo = 'AssignedTo';
$lang->design->actions = 'Actions';
$lang->design->byQuery = 'Search';
$lang->design->products = 'Linked Product';
$lang->design->story = 'Linked Story';
$lang->design->file = 'File';
$lang->design->desc = 'Description';
$lang->design->range = 'Impact';
$lang->design->product = 'Linked Product';
$lang->design->basicInfo = 'Basic Information';
$lang->design->commitBy = 'Commit By';
$lang->design->commitDate = 'Committed Date';
$lang->design->affectedStory = "{$lang->SRCommon}";
$lang->design->affectedTasks = 'Task';
$lang->design->reviewObject = 'Review Object';
$lang->design->createdBy = 'CreatedBy';
$lang->design->createdDate = 'CreatedDate';
$lang->design->basicInfo = 'Basic Information';
$lang->design->noAssigned = 'Unassigned';
$lang->design->comment = 'Comment';
/* 动作列表. */
$lang->design->common = 'Design';
$lang->design->create = 'Create Design';
$lang->design->batchCreate = 'Batch Create';
$lang->design->edit = 'Edit';
$lang->design->delete = 'Delete';
$lang->design->view = 'View';
$lang->design->browse = 'List';
$lang->design->viewCommit = 'View Commit';
$lang->design->linkCommit = 'Link Commit';
$lang->design->unlinkCommit = 'Unlink Commit';
$lang->design->submit = 'Submit Review';
$lang->design->assignTo = 'Assign';
$lang->design->revision = 'Linked Code';
/* 字段取值. */
$lang->design->typeList = array();
$lang->design->typeList[''] = '';
$lang->design->typeList['HLDS'] = 'High-Level';
$lang->design->typeList['DDS'] = 'Detailed';
$lang->design->typeList['DBDS'] = 'Database';
$lang->design->typeList['ADS'] = 'API';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = 'All';
$lang->design->rangeList['assign'] = 'Selected';
$lang->design->featureBar['all'] = 'All';
$lang->design->featureBar += $lang->design->typeList;
/* 提示信息. */
$lang->design->errorSelection = 'No record selected!';
$lang->design->noDesign = 'No record.';
$lang->design->noCommit = 'No record commited.';
$lang->design->confirmDelete = 'Do you want to delete this design?';
$lang->design->confirmUnlink = 'Are you sure you want to remove this submission?';
$lang->design->errorDate = 'The start date can not be greater than the end date.';
$lang->design->deleted = 'Deleted';
-78
View File
@@ -1,78 +0,0 @@
<?php
/**
* The zh-cn file of design module.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: zh-cn.php 4729 2020-09-01 07:53:55Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
/* 字段列表. */
$lang->design->id = '编号';
$lang->design->name = '设计名称';
$lang->design->story = '需求';
$lang->design->type = '设计类型';
$lang->design->ditto = '同上';
$lang->design->submission = '相关提交';
$lang->design->version = '版本号';
$lang->design->assignedTo = '指派给';
$lang->design->actions = '操作';
$lang->design->byQuery = '搜索';
$lang->design->products = '所属产品';
$lang->design->story = '相关需求';
$lang->design->file = '附件';
$lang->design->desc = '设计描述';
$lang->design->range = '影响范围';
$lang->design->product = '所属产品';
$lang->design->basicInfo = '基础信息';
$lang->design->commitBy = '由谁提交';
$lang->design->commitDate = '提交时间';
$lang->design->affectedStory = "影响{$lang->SRCommon}";
$lang->design->affectedTasks = '影响任务';
$lang->design->reviewObject = '评审对象';
$lang->design->createdBy = '由谁创建';
$lang->design->createdDate = '创建时间';
$lang->design->basicInfo = '基本信息';
$lang->design->noAssigned = '未指派';
$lang->design->comment = '注释';
/* 动作列表. */
$lang->design->common = '设计';
$lang->design->create = '创建设计';
$lang->design->batchCreate = '批量创建';
$lang->design->edit = '变更';
$lang->design->delete = '删除';
$lang->design->view = '设计概况';
$lang->design->browse = '浏览列表';
$lang->design->viewCommit = '查看提交';
$lang->design->linkCommit = '关联提交';
$lang->design->unlinkCommit = '取消关联';
$lang->design->submit = '提交评审';
$lang->design->assignTo = '指派';
$lang->design->revision = '查看关联代码';
/* 字段取值. */
$lang->design->typeList = array();
$lang->design->typeList[''] = '';
$lang->design->typeList['HLDS'] = '概要设计';
$lang->design->typeList['DDS'] = '详细设计';
$lang->design->typeList['DBDS'] = '数据库设计';
$lang->design->typeList['ADS'] = '接口设计';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = '全部记录';
$lang->design->rangeList['assign'] = '选中记录';
$lang->design->featureBar['all'] = '所有';
$lang->design->featureBar += $lang->design->typeList;
/* 提示信息. */
$lang->design->errorSelection = '还没有选中记录!';
$lang->design->noDesign = '暂时没有记录';
$lang->design->noCommit = '暂时没有提交记录';
$lang->design->confirmDelete = '您确定要删除这个设计吗?';
$lang->design->confirmUnlink = '您确定要移除这个提交吗?';
$lang->design->errorDate = '开始日期不能大于结束日期';
$lang->design->deleted = '已删除';
-78
View File
@@ -1,78 +0,0 @@
<?php
/**
* The zh-tw file of design module.
*
* @copyright Copyright 2009-2020 青島易軟天創網絡科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: zh-tw.php 4729 2020-09-01 07:53:55Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
/* 欄位列表. */
$lang->design->id = '編號';
$lang->design->name = '設計名稱';
$lang->design->story = '需求';
$lang->design->type = '設計類型';
$lang->design->ditto = '同上';
$lang->design->submission = '相關提交';
$lang->design->version = '版本號';
$lang->design->assignedTo = '指派給';
$lang->design->actions = '操作';
$lang->design->byQuery = '搜索';
$lang->design->products = '所屬產品';
$lang->design->story = '相關需求';
$lang->design->file = '附件';
$lang->design->desc = '設計描述';
$lang->design->range = '影響範圍';
$lang->design->product = '所屬產品';
$lang->design->basicInfo = '基礎信息';
$lang->design->commitBy = '由誰提交';
$lang->design->commitDate = '提交時間';
$lang->design->affectedStory = "影響{$lang->SRCommon}";
$lang->design->affectedTasks = '影響任務';
$lang->design->reviewObject = '評審對象';
$lang->design->createdBy = '由誰創建';
$lang->design->createdDate = '創建時間';
$lang->design->basicInfo = '基本信息';
$lang->design->noAssigned = '未指派';
$lang->design->comment = '註釋';
/* 動作列表. */
$lang->design->common = '設計';
$lang->design->create = '創建設計';
$lang->design->batchCreate = '批量創建';
$lang->design->edit = '變更';
$lang->design->delete = '刪除';
$lang->design->view = '設計概況';
$lang->design->browse = '瀏覽列表';
$lang->design->viewCommit = '查看提交';
$lang->design->linkCommit = '關聯提交';
$lang->design->unlinkCommit = '取消關聯';
$lang->design->submit = '提交評審';
$lang->design->assignTo = '指派';
$lang->design->revision = '查看關聯代碼';
/* 欄位取值. */
$lang->design->typeList = array();
$lang->design->typeList[''] = '';
$lang->design->typeList['HLDS'] = '概要設計';
$lang->design->typeList['DDS'] = '詳細設計';
$lang->design->typeList['DBDS'] = '資料庫設計';
$lang->design->typeList['ADS'] = '介面設計';
$lang->design->rangeList = array();
$lang->design->rangeList['all'] = '全部記錄';
$lang->design->rangeList['assign'] = '選中記錄';
$lang->design->featureBar['all'] = '所有';
$lang->design->featureBar += $lang->design->typeList;
/* 提示信息. */
$lang->design->errorSelection = '還沒有選中記錄!';
$lang->design->noDesign = '暫時沒有記錄';
$lang->design->noCommit = '暫時沒有提交記錄';
$lang->design->confirmDelete = '您確定要刪除這個設計嗎?';
$lang->design->confirmUnlink = '您確定要移除這個提交嗎?';
$lang->design->errorDate = '開始日期不能大於結束日期';
$lang->design->deleted = '已刪除';
-445
View File
@@ -1,445 +0,0 @@
<?php
/**
* The model file of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: model.php 5107 2020-09-02 09:46:12Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php
class designModel extends model
{
/**
* Create a design.
*
* @access public
* @return int|bool
*/
public function create()
{
$design = fixer::input('post')
->stripTags('desc', $this->config->allowedTags)
->add('createdBy', $this->app->user->account)
->add('createdDate', helper::now())
->add('PRJ', $this->session->PRJ)
->add('version', 1)
->remove('files,labels')
->get();
$design = $this->loadModel('file')->processImgURL($design, 'desc', $this->post->uid);
$this->dao->insert(TABLE_DESIGN)->data($design)
->autoCheck()
->batchCheck($this->config->design->create->requiredFields, 'notempty')
->exec();
if(!dao::isError())
{
$designID = $this->dao->lastInsertID();
$this->file->updateObjectID($this->post->uid, $designID, 'design');
$files = $this->file->saveUpload('design', $designID);
$spec = new stdclass();
$spec->design = $designID;
$spec->version = 1;
$spec->name = $design->name;
$spec->desc = $design->desc;
$spec->files = empty($files) ? '' : implode(',', array_keys($files));
$this->dao->insert(TABLE_DESIGNSPEC)->data($spec)->exec();
return $designID;
}
return false;
}
/**
* Batch create designs.
*
* @param int $productID
* @access public
* @return bool
*/
public function batchCreate($productID = 0)
{
$data = fixer::input('post')->get();
$this->loadModel('action');
foreach($data->name as $i => $name)
{
if(!trim($name)) continue;
$design = new stdclass();
$design->story = isset($data->story[$i]) ? $data->story[$i] : '';
$design->type = $data->type[$i];
$design->name = $name;
$design->product = $productID;
$design->PRJ = $this->session->PRJ;
$design->createdBy = $this->app->user->account;
$design->createdDate = helper::now();
$this->dao->insert(TABLE_DESIGN)->data($design)->autoCheck()->batchCheck($this->config->design->create->requiredFields, 'notempty')->exec();
$designID = $this->dao->lastInsertID();
$this->action->create('design', $designID, 'Opened');
}
return true;
}
/**
* Update a design.
*
* @param int $designID
* @access public
* @return bool
*/
public function update($designID = 0)
{
$oldDesign = $this->getByID($designID);
$design = fixer::input('post')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::now())
->stripTags($this->config->design->editor->edit['id'], $this->config->allowedTags)
->remove('file,files,labels,children,toList')
->get();
$design = $this->loadModel('file')->processImgURL($design, 'desc', $this->post->uid);
$this->dao->update(TABLE_DESIGN)->data($design)->autoCheck()->batchCheck('name,type', 'notempty')->where('id')->eq($designID)->exec();
if(!dao::isError())
{
$this->file->updateObjectID($this->post->uid, $designID, 'design');
$files = $this->file->saveUpload('design', $designID);
$designChanged = ($oldDesign->name != $design->name || $oldDesign->desc != $design->desc || !empty($files));
if($designChanged)
{
$design = $this->getByID($designID);
$version = $design->version + 1;
$spec = new stdclass();
$spec->design = $designID;
$spec->version = $version;
$spec->name = $design->name;
$spec->desc = $design->desc;
$spec->files = empty($files) ? '' : implode(',', array_keys($files));
$this->dao->insert(TABLE_DESIGNSPEC)->data($spec)->exec();
$this->dao->update(TABLE_DESIGN)->set('version')->eq($version)->where('id')->eq($designID)->exec();
}
return common::createChanges($oldDesign, $design);
}
return false;
}
/**
* Assign a design.
*
* @param int $designID
* @access public
* @return array|bool
*/
public function assign($designID = 0)
{
$oldDesign = $this->getByID($designID);
$design = fixer::input('post')
->add('editedBy', $this->app->user->account)
->add('editedDate', helper::today())
->setDefault('assignedDate', helper::today())
->stripTags($this->config->design->editor->assignto['id'], $this->config->allowedTags)
->remove('uid,comment,files,label')
->get();
$this->dao->update(TABLE_DESIGN)->data($design)->autoCheck()->where('id')->eq((int)$designID)->exec();
if(!dao::isError()) return common::createChanges($oldDesign, $design);
return false;
}
/**
* LinkCommit a design.
*
* @param int $designID
* @param int $repoID
* @access public
* @return void
*/
public function linkCommit($designID = 0, $repoID = 0)
{
$revisions = $_POST['revision'];
foreach($revisions as $revision)
{
$data = new stdclass();
$data->PRJ = $this->session->PRJ;
$data->product = $this->session->product;
$data->AType = 'design';
$data->AID = $designID;
$data->BType = 'commit';
$data->BID = $revision;
$data->relation = 'completedin';
$data->extra = $repoID;
$this->dao->replace(TABLE_RELATION)->data($data)->autoCheck()->exec();
$data->AType = 'commit';
$data->AID = $revision;
$data->BType = 'design';
$data->BID = $designID;
$data->relation = 'completedfrom';
$this->dao->replace(TABLE_RELATION)->data($data)->autoCheck()->exec();
}
$oldCommit = $this->dao->findByID($designID)->from(TABLE_DESIGN)->fetch('commit');
$revisions = join(',', $revisions);
$commit = $oldCommit ? $oldCommit . ',' . $revisions : $revisions;
$design = new stdclass();
$design->commit = $commit;
$design->commitedBy = $this->app->user->account;
$this->dao->update(TABLE_DESIGN)->data($design)->autoCheck()->where('id')->eq($designID)->exec();
}
/**
* Unlink commit.
*
* @param int $designID
* @param int $commitID
* @access public
* @return void
*/
public function unlinkCommit($designID = 0, $commitID = 0)
{
/* Delete data in the zt_relation.*/
$this->dao->delete()->from(TABLE_RELATION)->where('AType')->eq('design')->andwhere('AID')->eq($designID)->andwhere('BType')->eq('commit')->andwhere('relation')->eq('completedin')->andWhere('BID')->eq($commitID)->exec();
$this->dao->delete()->from(TABLE_RELATION)->where('AType')->eq('commit')->andwhere('BID')->eq($designID)->andwhere('BType')->eq('design')->andwhere('relation')->eq('completedfrom')->andWhere('AID')->eq($commitID)->exec();
/* Commit after unlinking. */
$commit = $this->dao->select('BID')->from(TABLE_RELATION)->where('AType')->eq('design')->andWhere('AID')->eq($designID)->andWhere('BType')->eq('commit')->andwhere('relation')->eq('completedin')->fetchAll('BID');
$commit = implode(",", array_keys($commit));
$this->dao->update(TABLE_DESIGN)->set('commit')->eq($commit)->where('id')->eq($designID)->exec();
}
/**
* Get a design by id.
*
* @param int $designID
* @access public
* @return object
*/
public function getByID($designID = 0)
{
$design = $this->dao->select('*')->from(TABLE_DESIGN)->where('id')->eq($designID)->fetch();
$design->files = $this->loadModel('file')->getByObject('design', $designID);
$design->productName = $this->dao->findByID($design->product)->from(TABLE_PRODUCT)->fetch('name');
$design->commit = '';
$relations = $this->loadModel('common')->getRelations('design', $designID, 'commit');
foreach($relations as $relation) $design->commit .= html::a(helper::createLink('design', 'revision', "repoID=$relation->BID"), "#$relation->BID", '_blank');
return $this->loadModel('file')->replaceImgURL($design, 'desc');
}
/**
* Get design pairs.
*
* @param int $productID
* @param string $type all|HLDS|DDS|DBDS|ADS
* @access public
* @return object
*/
public function getPairs($productID = 0, $type = 'all')
{
$designs = $this->dao->select('id, name')->from(TABLE_DESIGN)
->where('product')->eq($productID)
->andWhere('deleted')->eq(0)
->andWhere('type')->eq($type)
->fetchPairs();
foreach($designs as $id => $name) $designs[$id] = $id . ':' . $name;
return $designs;
}
/**
* Get affected scope.
*
* @param int $design
* @access public
* @return object
*/
public function getAffectedScope($design = 0)
{
/* Get affected tasks. */
$design->tasks = $this->dao->select('*')->from(TABLE_TASK)
->where('deleted')->eq(0)
->andWhere('status')->ne('closed')
->andWhere('design')->eq($design->id)
->orderBy('id desc')->fetchAll();
return $design;
}
/**
* Get design list.
*
* @param int $productID
* @param int $projectID
* @param string $type all|bySearch|HLDS|DDS|DBDS|ADS
* @param int $param
* @param string $orderBy
* @param int $pager
* @access public
* @return array
*/
public function getList($projectID = 0, $productID = 0, $type = 'all', $param = 0, $orderBy = 'id_desc', $pager = null)
{
if($type == 'bySearch')
{
$designs = $this->getBySearch($projectID, $productID, $param, $orderBy, $pager);
}
else
{
$designs = $this->dao->select('*')->from(TABLE_DESIGN)
->where('deleted')->eq(0)
->beginIF($projectID)->andWhere('PRJ')->eq($projectID)->fi()
->beginIF($type != 'all')->andWhere('type')->in($type)->fi()
->andWhere('product')->eq($productID)
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
}
return $designs;
}
/**
* Get commit.
*
* @param int $designID
* @param int $pager
* @access public
* @return object
*/
public function getCommit($designID = 0, $pager = null)
{
$design = $this->dao->select('*')->from(TABLE_DESIGN)->where('id')->eq($designID)->fetch();
$design->commit = $this->dao->select('*')->from(TABLE_REPOHISTORY)->where('id')->in($design->commit)->page($pager)->fetchAll('id');
return $design;
}
/**
* Get designs by search.
*
* @param int $projectID
* @param int $productID
* @param int $queryID
* @param string $orderBy
* @param int $pager
* @access public
* @return object
*/
public function getBySearch($projectID = 0, $productID = 0, $queryID = 0, $orderBy = 'id_desc', $pager = null)
{
if($queryID)
{
$query = $this->loadModel('search')->getQuery($queryID);
if($query)
{
$this->session->set('designQuery', $query->sql);
$this->session->set('designForm', $query->form);
}
else
{
$this->session->set('designQuery', ' 1 = 1');
}
}
else
{
if($this->session->designQuery == false) $this->session->set('designQuery', ' 1 = 1');
}
$designQuery = $this->session->designQuery;
$designs = $this->dao->select('*')->from(TABLE_DESIGN)
->where($designQuery)
->andWhere('deleted')->eq('0')
->andWhere('PRJ')->eq($projectID)
->andWhere('product')->eq($productID)
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
return $designs;
}
/**
* Set product menu.
*
* @param int $productID
* @access public
* @return void
*/
public function setProductMenu($productID = 0)
{
$products = $this->loadModel('product')->getPairs();
$productID = in_array($productID, array_keys($products)) ? $productID : key($products);
$productID = $this->loadModel('product')->saveState($productID, $products);
$this->loadModel('product')->setMenu($products, $productID);
}
/**
* Build search form.
*
* @param int $queryID
* @param string $actionURL
* @access public
* @return void
*/
public function buildSearchForm($queryID = 0, $actionURL = '')
{
$this->config->design->search['actionURL'] = $actionURL;
$this->config->design->search['queryID'] = $queryID;
$this->loadModel('search')->setSearchParams($this->config->design->search);
}
/**
* Print assignedTo html.
*
* @param object $design
* @param array $users
* @access public
* @return string
*/
public function printAssignedHtml($design = '', $users = '')
{
$btnTextClass = '';
$assignedToText = zget($users, $design->assignedTo);
if(empty($design->assignedTo))
{
$btnTextClass = 'text-primary';
$assignedToText = $this->lang->design->noAssigned;
}
if($design->assignedTo == $this->app->user->account) $btnTextClass = 'text-red';
$btnClass = $design->assignedTo == 'closed' ? ' disabled' : '';
$btnClass = "iframe btn btn-icon-left btn-sm {$btnClass}";
$assignToLink = helper::createLink('design', 'assignTo', "designID=$design->id", '', true);
$assignToHtml = html::a($assignToLink, "<i class='icon icon-hand-right'></i> <span title='" . zget($users, $design->assignedTo) . "' class='{$btnTextClass}'>{$assignedToText}</span>", '', "class='$btnClass'");
echo !common::hasPriv('design', 'assignTo', $design) ? "<span style='padding-left: 21px' class='{$btnTextClass}'>{$assignedToText}</span>" : $assignToHtml;
}
}
-40
View File
@@ -1,40 +0,0 @@
<?php
/**
* The assignTo of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: assignto.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include "../../common/view/header.html.php";?>
<?php include '../../common/view/kindeditor.html.php';?>
<div id='mainContent' class='main-content'>
<div class='main-header'>
<h2>
<span class='prefix label-id'><strong><?php echo $design->id;?></strong></span>
<?php echo "<span title='$design->name'>" . $design->name . '</span>';?>
</h2>
</div>
<form class='load-indicator main-form' method='post' target='hiddenwin'>
<table class='table table-form'>
<tbody>
<tr>
<th class='w-100px'><?php echo $lang->design->assignedTo;?></th>
<td><?php echo html::select('assignedTo', $users, $design->assignedTo, "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->comment;?></th>
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='form-control kindeditor' hidefocus='true'");?></td>
</tr>
<tr>
<td class='text-center form-actions' colspan='3'><?php echo html::submitButton(); ?></td> </tr>
</tbody>
</table>
</form>
</div>
<?php include "../../common/view/footer.html.php";?>
-44
View File
@@ -1,44 +0,0 @@
<?php
/**
* The batchCreate view of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: batchcreate.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id="mainContent" class="main-content fade">
<div class="main-header"><h2><?php echo $lang->design->batchCreate;?></h2></div>
<form class="load-indicator main-form form-ajax" method='post' enctype='multipart/form-data' id='dataform'>
<table class="table table-form">
<thead>
<tr>
<th class='w-50px'><?php echo $lang->design->id;?></th>
<th class='w-200px'><?php echo $lang->design->story;?></th>
<th class='w-200px required'><?php echo $lang->design->type;?></th>
<th class='required'><?php echo $lang->design->name;?></th>
</tr>
</thead>
<tbody>
<?php for($i = 1; $i <= 10; $i ++):?>
<tr>
<td><?php echo $i;?></td>
<td><?php echo html::select("story[$i]", $stories, '', "class='form-control chosen'");?></td>
<td><?php echo html::select("type[$i]", $lang->design->typeList, '', "class='form-control chosen'");?></td>
<td><?php echo html::input("name[$i]", '', "class='form-control'");?></td>
</tr>
<?php endfor;?>
<tr>
<td colspan='4' class='form-actions text-center'>
<?php echo html::submitButton() . html::backButton();?>
</td>
</tr>
</tbody>
</table>
</form>
</div>
<?php include '../../common/view/footer.html.php';?>
-64
View File
@@ -1,64 +0,0 @@
<?php
/**
* The browse view file of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: browse.html.php 5102 2020-09-03 10:59:54Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/sortable.html.php';?>
<?php js::set('type', strtolower($type));?>
<div class="cell<?php if($type == 'bySearch') echo ' show';?>" id="queryBox" data-module='design'></div>
<div id="mainContent" class="main-table">
<?php if(empty($designs)):?>
<div class="table-empty-tip">
<p><span class="text-muted"><?php echo $lang->design->noDesign;?></span></p>
</div>
<?php else:?>
<form id='designFrom' method='post' class="main-table">
<table class='table has-sort-head table-fixrd' id="designTable">
<?php $vars = "productID=$productID&type=$type&param=$param&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
<thead>
<tr>
<th class="text-left w-60px"> <?php common::printOrderLink('id', $orderBy, $vars, $lang->design->id);?></th>
<th class="text-left w-100px"> <?php common::printOrderLink('type', $orderBy, $vars, $lang->design->type);?></th>
<th class="text-left"> <?php common::printOrderLink('name', $orderBy, $vars, $lang->design->name);?></th>
<th class="text-left w-120px"> <?php common::printOrderLink('createdBy', $orderBy, $vars, $lang->design->createdBy);?></th>
<th class="text-left w-150px"> <?php common::printOrderLink('createdDate', $orderBy, $vars, $lang->design->createdDate);?></th>
<th class="c-assignedTo w-120px"><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->design->assignedTo);?></th>
<th class="text-center w-100px"> <?php echo $lang->design->actions;?></th>
</tr>
</thead>
<tbody>
<?php foreach($designs as $design):?>
<tr>
<td calss="c-id"> <?php printf('%03d', $design->id);?></td>
<td class="c-type"> <?php echo zget($lang->design->typeList, $design->type);?></td>
<td class="c-name" title="<?php echo $design->name;?>"><?php echo html::a($this->createLink('design', 'view', "id={$design->id}"), $design->name);?></td>
<td class="c-createdBy"> <?php echo zget($users, $design->createdBy);?></td>
<td class="c-createdDate"><?php echo substr($design->createdDate, 0, 11);?></td>
<td class="c-assignedTo"> <?php echo $this->design->printAssignedHtml($design, $users);?></td>
<td class='c-actions text-center'>
<?php
$vars = "design={$design->id}";
common::printIcon('design', 'edit', $vars, $design, 'list', 'fork', '', '', '', '', '', $design->PRJ);
common::printIcon('design', 'viewCommit', $vars, $design, 'list', 'list-alt', '', 'iframe showinonlybody', true);
common::printIcon('design', 'delete', $vars, $design, 'list', 'trash', 'hiddenwin', '', '', '', '', $design->PRJ);
?>
</td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<div class='table-footer table-statistic'>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
<?php endif;?>
</div>
<?php include '../../common/view/footer.html.php';?>
-62
View File
@@ -1,62 +0,0 @@
<?php
/**
* The create view of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: create.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/kindeditor.html.php';?>
<div id="mainContent" class="main-content fade">
<div class="center-block">
<div class="main-header">
<h2><?php echo $lang->design->create;?></h2>
</div>
<form class="load-indicator main-form form-ajax" method='post' enctype='multipart/form-data' id='dataform'>
<table class="table table-form">
<tbody>
<?php if($project->product == 'multiple'):?>
<tr>
<th class='w-120px'><?php echo $lang->design->product;?></th>
<td><?php echo html::select('product', $products, $productID, "class='form-control chosen'");?></td>
<td></td>
</tr>
<?php endif;?>
<?php if($project->product == 'single') echo html::hidden('product', $productID);?>
<tr>
<th class='w-120px'><?php echo $lang->design->story;?></th>
<td><?php echo html::select('story', empty($stories) ? '' : $stories, '', "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->type;?></th>
<td><?php echo html::select('type', $lang->design->typeList, '', "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->name;?></th>
<td><?php echo html::input('name', '', "class='form-control'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->desc;?></th>
<td colspan='2'><?php echo html::textarea('desc', '', "class='form-control'");?></td>
</tr>
<tr>
<th><?php echo $lang->design->file;?></th>
<td colspan='2'><?php echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');?></td>
</tr>
<tr>
<td colspan='3' class='text-center form-actions'><?php echo html::submitButton() . html::backButton();?></td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>
-99
View File
@@ -1,99 +0,0 @@
<?php
/**
* The edit view of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: edit.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/kindeditor.html.php';?>
<div id="mainContent" class="main-content fade">
<div class="center-block">
<div class="main-header">
<h2><?php echo $lang->design->edit;?></h2>
</div>
<form class="load-indicator main-form form-ajax" method='post' enctype='multipart/form-data' id='dataform'>
<table class="table table-form">
<tbody>
<?php if($project->product == 'multiple'):?>
<tr>
<th class='w-120px'><?php echo $lang->design->product;?></th>
<td><?php echo html::select('product', $products, $design->product, "class='form-control chosen'");?></td>
<td></td>
</tr>
<?php endif;?>
<tr>
<th class='w-120px'><?php echo $lang->design->story;?></th>
<td><?php echo html::select('story', empty($stories) ? '' : $stories, $design->story, "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->type;?></th>
<td><?php echo html::select('type', $lang->design->typeList, $design->type, "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->name;?></th>
<td><?php echo html::input('name', $design->name, "class='form-control'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->design->desc;?></th>
<td colspan='2'><?php echo html::textarea('desc', $design->desc, 'class="form-control"');?></td>
</tr>
<tr>
<th><?php echo $lang->design->file;?></th>
<td colspan='2'><?php echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');?></td>
</tr>
<tr>
<th><?php echo $lang->story->checkAffection;?></th>
<td colspan='2'>
<div class='tabs'>
<ul class='nav nav-tabs'>
<li class='active'><a data-toggle='tab' href='#affectedTasks'><?php echo $lang->design->affectedTasks;?><span class='label label-danger label-badge label-circle'><?php echo count($design->tasks);?></span></a></li>
</ul>
<div class='tab-content'>
<div class='tab-pane active' id='affectedTasks'>
<table class='table'>
<thead>
<tr class='text-center'>
<th class='c-id'> <?php echo $lang->task->id;?></th>
<th class='c-name'> <?php echo $lang->task->name;?></th>
<th class='w-100px'> <?php echo $lang->task->assignedTo;?></th>
<th class='c-status'><?php echo $lang->task->status;?></th>
<th class='w-100px'> <?php echo $lang->task->consumed;?></th>
<th class='w-90px'> <?php echo $lang->task->left;?></th>
</tr>
</thead>
<tbody>
<?php foreach($design->tasks as $task):?>
<tr class='text-center'>
<td><?php $task->id?></td>
<td class='text-left'><?php echo html::a($this->createLink('task', 'view', "taskID=$task->id"), $task->name, '_blank');?></td>;
<td><?php echo zget($users, $task->assignedTo);?></td>
<td><span class='status-task status-<?php echo $task->status;?>'><?php $this->processStatus('task', $task);?></span></td>
<td><?php echo $task->consumed;?></td>
<td><?php echo $task->left;?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
</div>
</div>
</div>
</td>
</tr>
<tr>
<td colspan='3' class='text-center form-actions'><?php echo html::submitButton() . html::backButton();?></td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>
-88
View File
@@ -1,88 +0,0 @@
<?php
/**
* The linkCommit view of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: linkcommit.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div class='main-content' id='mainContent'>
<div class='main-header'>
<h2>
<span class='label label-id'><?php echo $design->id;?></span>
<span title='<?php echo $design->name?>'><?php echo $design->name?></span>
<small><?php echo $lang->arrow . $lang->design->linkCommit;?></small>
</h2>
</div>
<?php if(empty($repoID)):?>
<div class="table-empty-tip">
<p><span class="text-muted"><?php echo $lang->design->noCommit;?></span></p>
</div>
<?php else:?>
<div class='searchBox'>
<table class="table">
<tr>
<td class="w-100px"><h4><?php echo $lang->repo->maintain . ': ';?></h4></td>
<td><?php echo html::select('repo', $repos, $repoID, "class='form-control chosen'");?></td>
<td>
<h4><?php echo $lang->design->commitDate . ':';?></h4>
<?php echo html::input('begin', $begin, "class='form-control form-date srearch-date'");?>
<span>~</span>
<?php echo html::input('end', $end, "class='form-control form-date srearch-date'");?>
</td>
</tr>
</table>
</div>
<form id='logForm' class='main-table form-ajax' data-ride='table' action=<?php echo inlink('linkCommit', "designID=$designID&repoID=$repoID");?> method='post'>
<table class='table'>
<thead>
<tr>
<th class='w-40px'></th>
<th class='w-80px'><?php echo $lang->repo->revisionA?></th>
<?php if(isset($repo->SCM) and $repo->SCM == 'Git'):?>
<th class='w-70px'><?php echo $lang->repo->commit?></th>
<?php endif;?>
<th class='w-120px'><?php echo $lang->repo->time?></th>
<th class='w-100px'><?php echo $lang->repo->committer?></th>
<th><?php echo $lang->repo->comment?></th>
</tr>
</thead>
<tbody>
<?php foreach($revisions as $log):?>
<tr>
<td>
<div class='checkbox-primary'>
<input type='checkbox' name='revision[]' value="<?php echo $log->id?>"/>
<label></label>
</div>
</td>
<td class='versions'><span class="revision"><?php echo html::a($this->repo->createLink('revision', "repoID=$repoID&revision={$log->revision}"), $repo->SCM == 'Git' ? substr($log->revision, 0, 10) : $log->revision);?></span></td>
<?php if($repo->SCM == 'Git'):?>
<td><?php echo $log->commit?></td>
<?php endif;?>
<td><?php echo substr($log->time, 0, 10);?></td>
<td><?php echo zget($users, $log->committer, $log->committer);?></td>
<?php $comment = htmlspecialchars($log->comment, ENT_QUOTES);?>
<td title='<?php echo $comment?>' class='comment'><?php echo $log->comment?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<div class='table-footer'>
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<div class="table-actions btn-toolbar">
<?php echo html::submitButton('', '', 'btn btn-primary')?>
</div>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
<?php endif;?>
</div>
<?php js::set('designID', $designID);?>
<?php js::set('errorDate', $lang->design->errorDate);?>
<?php include '../../common/view/footer.html.php';?>
-91
View File
@@ -1,91 +0,0 @@
<?php
/**
* The view of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: view.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-left">
<?php $browseLink = $app->session->designList != false ? $app->session->designList : $this->createLink('design', 'browse', "productID=$design->product");?>
<?php if(!isonlybody()) echo html::a($browseLink, '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-secondary'");?>
<div class="divider"></div>
<div class="page-title">
<span class="label label-id"><?php echo $design->id?></span>
<span class="text" title="<?php echo $design->name;?>"><?php echo $design->name;?></span>
<?php if($design->deleted):?>
<span class='label label-danger'><?php echo $lang->design->deleted;?></span>
<?php endif; ?>
</div>
</div>
</div>
<div id="mainContent" class="main-row">
<div class="main-col col-8">
<div class="cell">
<div class="detail">
<div class="detail-title"><?php echo $lang->design->desc;?></div>
<div class="detail-content article-content">
<?php echo $design->desc;?>
</div>
</div>
<?php echo $this->fetch('file', 'printFiles', array('files' => $design->files, 'fieldset' => 'true'));?>
</div>
<div class='cell'><?php include '../../common/view/action.html.php';?></div>
<div class='main-actions'>
<div class="btn-toolbar">
<?php common::printBack($this->session->designList);?>
<?php if(!isonlybody()) echo "<div class='divider'></div>";?>
<?php if(!$design->deleted):?>
<?php
common::printIcon('design', 'assignTo', "designID=$design->id", $design, 'button', '', '', 'iframe showinonlybody', true);
common::printIcon('design', 'linkCommit', "designID=$design->id", $design, 'button', 'link', '', 'iframe showinonlybody', true);
common::printIcon('design', 'edit', "designID=$design->id", $design, 'button', 'fork');
common::printIcon('design', 'delete', "designID=$design->id", $design, 'button', 'trash', 'hiddenwin');
?>
<?php endif;?>
</div>
</div>
</div>
<div class='side-col col-4'>
<div class='cell'>
<div class="detail">
<div class='detail-title'><?php echo $lang->design->basicInfo;?></div>
<div class='detail-content'>
<table class='table table-data'>
<tr>
<th><?php echo $lang->design->type;?></th>
<td><?php echo zget($lang->design->typeList, $design->type);?></td>
</tr>
<tr>
<th><?php echo $lang->design->product;?></th>
<td><?php echo $design->productName;?></td>
</tr>
<tr>
<th><?php echo $lang->design->story;?></th>
<td><?php echo $design->story ? html::a($this->createLink('story', 'view', "id=$design->story"), zget($stories, $design->story)) : '';?></td>
</tr>
<tr>
<th><?php echo $lang->design->submission;?></th>
<td><?php echo $design->commit;?></td>
</tr>
<tr>
<th><?php echo $lang->design->createdBy;?></th>
<td><?php echo zget($users, $design->createdBy);?></td>
</tr>
<tr>
<th><?php echo $lang->design->createdDate;?></th>
<td><?php echo substr($design->createdDate, 0, 11);?></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>
-63
View File
@@ -1,63 +0,0 @@
<?php
/**
* The viewCommit view of design module of ZenTaoPMS.
*
* @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Shujie Tian <tianshujie@easycorp.ltd>
* @package design
* @version $Id: viewcommit.html.php 4903 2020-09-02 09:32:59Z tianshujie@easycorp.ltd $
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.html.php';?>
<style>
#mainContent .pull-right{margin-bottom: 10px}
.table{border: 1px solid #ddd;}
</style>
<div id="mainContent">
<div class='main-header'>
<h2>
<span class='label label-id'><?php echo $design->id;?></span>
<span title='<?php echo $design->name?>'><?php echo $design->name?></span>
<small><?php echo $lang->arrow . $lang->design->submission;?></small>
</h2>
</div>
<div class='btn-toolbar pull-right'>
<?php common::printLink('design', 'linkCommit', "designID=$design->id", "<i class='icon icon-plus'></i>" . $lang->design->linkCommit, '_blank', "class='btn btn-primary'");?>
</div>
<?php if(empty($design->commit)):?>
<div class="table-empty-tip">
<p><span class="text-muted"><?php echo $lang->design->noCommit;?></span></p>
</div>
<?php else:?>
<table class='table'>
<thead>
<tr>
<th class="w-100px"><?php echo $lang->design->submission;?></th>
<th class='w-120px'><?php echo $lang->design->commitBy;?></th>
<th class='w-100px'><?php echo $lang->design->commitDate;?></th>
<th><?php echo $lang->design->comment;?></th>
<th class="text-center w-50px"> <?php echo $lang->design->actions;?></th>
</tr>
</thead>
<tbody>
<?php foreach($design->commit as $commit):?>
<tr>
<td title="<?php echo $commit->id;?>"><?php echo html::a(helper::createLink('design', 'revision', "repoID=$commit->id"), "#$commit->id", '_blank');?></td>
<td><?php echo zget($users, $commit->committer, $commit->committer);?></td>
<td><?php echo substr($commit->time, 0, 11);?></td>
<td title="<?php echo $commit->comment;?>"><?php echo $commit->comment;?></td>
<td class="c-actions text-center">
<?php common::printIcon('design', 'unlinkCommit', "designID=$design->id&commitID=$commit->id", $design, 'list', 'unlink', 'hiddenwin', 'iframe showinonlybody', true);?>
</td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<div class='table-footer table-statistic'>
<?php $pager->show('right', 'pagerjs');?>
</div>
<?php endif;?>
</div>
<?php include '../../common/view/footer.html.php';?>
+6 -6
View File
@@ -125,7 +125,7 @@ class doc extends control
$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 == 'old') $this->lang->noMenuModule[] = 'doc';
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
$this->project->setMenu($this->project->getExecutionsByProject($this->session->PRJ, 'all', 0, true), $lib->project);
$this->lang->set('menugroup.doc', 'project');
}
@@ -362,7 +362,7 @@ class doc extends control
$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 == 'old') $this->lang->noMenuModule[] = 'doc';
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
$this->project->setMenu($this->project->getExecutionsByProject($this->session->PRJ, 'all', 0, true), $lib->project);
$this->lang->set('menugroup.doc', 'project');
@@ -449,7 +449,7 @@ class doc extends control
$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 == 'old') $this->lang->noMenuModule[] = 'doc';
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
$this->project->setMenu($this->project->getExecutionsByProject($this->session->PRJ, 'all', 0, true), $objectID);
$this->lang->set('menugroup.doc', 'project');
}
@@ -515,7 +515,7 @@ class doc extends control
$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 == 'old') $this->lang->noMenuModule[] = 'doc';
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
$this->project->setMenu($this->project->getExecutionsByProject($this->session->PRJ, 'all', 0, true), $objectID);
$this->lang->set('menugroup.doc', 'project');
}
@@ -845,7 +845,7 @@ class doc extends control
$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 == 'old') $this->lang->noMenuModule[] = 'doc';
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
$this->project->setMenu($this->project->getExecutionsByProject($this->session->PRJ, 'all', 0, true), $objectID);
$this->lang->set('menugroup.doc', 'project');
}
@@ -945,7 +945,7 @@ class doc extends control
$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 == 'old') $this->lang->noMenuModule[] = 'doc';
if($this->config->systemMode == 'classic') $this->lang->noMenuModule[] = 'doc';
$this->project->setMenu($this->project->getExecutionsByProject($this->session->PRJ, 'all', 0, true), $objectID);
$this->lang->set('menugroup.doc', 'project');
}
+1 -1
View File
@@ -183,7 +183,7 @@ class group extends control
$group = $this->group->getById($groupID);
$groupPrivs = $this->group->getPrivs($groupID);
if($this->config->systemMode == 'old')
if($this->config->systemMode == 'classic')
{
if(isset($groupPrivs['program']['prjbrowse']))
{
+2 -29
View File
@@ -60,7 +60,6 @@ $lang->moduleOrder[190] = 'backup';
$lang->moduleOrder[195] = 'cron';
$lang->moduleOrder[200] = 'dev';
$lang->moduleOrder[205] = 'message';
$lang->moduleOrder[210] = 'design';
$lang->resource = new stdclass();
@@ -571,10 +570,10 @@ $lang->resource->project->storySort = 'storySort';
$lang->resource->project->whitelist = 'whitelist';
$lang->resource->project->addWhitelist = 'addWhitelist';
$lang->resource->project->unbindWhielist = 'unbindWhielist';
if($config->systemMode == 'old') $lang->resource->project->list = 'list';
if($config->systemMode == 'classic') $lang->resource->project->list = 'list';
$lang->project->methodOrder[0] = 'index';
if($config->systemMode == 'old') $lang->project->methodOrder[1] = 'list';
if($config->systemMode == 'classic') $lang->project->methodOrder[1] = 'list';
$lang->project->methodOrder[5] = 'view';
$lang->project->methodOrder[10] = 'browse';
$lang->project->methodOrder[15] = 'create';
@@ -624,32 +623,6 @@ $lang->project->methodOrder[230] = 'whitelist';
$lang->project->methodOrder[235] = 'addWhitelist';
$lang->project->methodOrder[240] = 'unbindWhielist';
/* Design. */
$lang->resource->design = new stdclass();
$lang->resource->design->browse = 'browse';
$lang->resource->design->view = 'view';
$lang->resource->design->create = 'create';
$lang->resource->design->batchCreate = 'batchCreate';
$lang->resource->design->edit = 'edit';
$lang->resource->design->assignTo = 'assignTo';
$lang->resource->design->delete = 'delete';
$lang->resource->design->linkCommit = 'linkCommit';
$lang->resource->design->viewCommit = 'viewCommit';
$lang->resource->design->unlinkCommit = 'unlinkCommit';
$lang->resource->design->revision = 'revision';
$lang->design->methodOrder[5] = 'browse';
$lang->design->methodOrder[10] = 'view';
$lang->design->methodOrder[15] = 'create';
$lang->design->methodOrder[20] = 'batchCreate';
$lang->design->methodOrder[25] = 'edit';
$lang->design->methodOrder[30] = 'assignTo';
$lang->design->methodOrder[35] = 'delete';
$lang->design->methodOrder[40] = 'linkCommit';
$lang->design->methodOrder[45] = 'viewCommit';
$lang->design->methodOrder[50] = 'unlinkCommit';
$lang->design->methodOrder[55] = 'revision';
/* Task. */
$lang->resource->task = new stdclass();
$lang->resource->task->create = 'create';
+1 -1
View File
@@ -332,7 +332,7 @@ class groupModel extends model
}
}
if($this->config->systemMode == 'old')
if($this->config->systemMode == 'classic')
{
$prjBrowse = $this->dao->select('module')->from(TABLE_GROUPPRIV)
->where('module')->eq('program')
+2 -2
View File
@@ -157,8 +157,8 @@ class personnel extends control
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => $this->getError()));
$locateLink = $this->session->whitelistBrowse ? $this->session->whitelistBrowse : $this->createLink($module, 'whitelist', "objectID=$objectID");
$openModule = $module == 'program' ? ($from == 'PRJ' || $from == 'my' ? '#open=project' : '#open=program') : '';
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink . $openModule));
$openGroup = $module == 'program' ? ($from == 'PRJ' || $from == 'my' ? '#open=project' : '#open=program') : '';
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink . $openGroup));
}
$this->loadModel('dept');
+4 -4
View File
@@ -12,17 +12,17 @@
?>
<?php include '../../common/view/header.html.php';?>
<div id="mainMenu" class="clearfix">
<?php $openModule = $module == 'program' ? ($from == 'PRJ' || $from == 'my' ? "data-group='project'" : "data-group='program'") : '';?>
<?php $openGroup = $module == 'program' ? ($from == 'PRJ' || $from == 'my' ? "data-group='project'" : "data-group='program'") : '';?>
<div class="btn-toolbar pull-left">
<?php if($module == 'program') echo html::a($goback, $lang->goback, '', 'class="btn btn-secondary"');?>
<?php $moduleMethod = $module == 'program' ? 'PRJWhitelist' : 'whitelist';?>
<?php $vars = $module == 'program' ? "objectID=$objectID&programID=$programID&module=$module&from=$from" : "objectID=$objectID";?>
<?php echo html::a($this->createLink($module, $moduleMethod, $vars), '<span class="text">' . $lang->personnel->whitelist . '</span>', '', "class='btn btn-link btn-active-text' $openModule");?>
<?php echo html::a($this->createLink($module, $moduleMethod, $vars), '<span class="text">' . $lang->personnel->whitelist . '</span>', '', "class='btn btn-link btn-active-text' $openGroup");?>
</div>
<div class="btn-toolbar pull-right">
<?php $moduleMethod = $module == 'program' ? 'PRJAddWhitelist' : 'addWhitelist';?>
<?php $vars = $module == 'program' ? "objectID=$objectID&deptID=0&programID=$programID&from=$from" : "objectID=$objectID";?>
<?php common::printLink($module, $moduleMethod, $vars, "<i class='icon icon-plus'></i>" . $lang->personnel->addWhitelist, '', "class='btn btn-primary' $openModule");?>
<?php common::printLink($module, $moduleMethod, $vars, "<i class='icon icon-plus'></i>" . $lang->personnel->addWhitelist, '', "class='btn btn-primary' $openGroup");?>
</div>
</div>
<div id='mainContent' class='main-row fade'>
@@ -61,7 +61,7 @@
<td class='c-actions'>
<?php
$deleteClass = common::hasPriv($module, 'unbindWhielist') ? 'btn' : 'btn disabled';
echo html::a($this->createLink($module, 'unbindWhielist', "id=$user->id&confirm=no"), '<i class="icon-unlink"></i>', 'hiddenwin', "title='{$lang->personnel->delete}' class='{$deleteClass}' $openModule");
echo html::a($this->createLink($module, 'unbindWhielist', "id=$user->id&confirm=no"), '<i class="icon-unlink"></i>', 'hiddenwin', "title='{$lang->personnel->delete}' class='{$deleteClass}' $openGroup");
?>
</td>
</tr>
+14 -14
View File
@@ -360,21 +360,21 @@ class product extends control
/* Init vars. */
$product = $this->product->getById($productID);
$notRemovePRJ = array();
$unmodifiableProjects = array();
$canChangePGM = true;
$singleLinkProjects = array();
$multipleLinkProjects = array();
$linkStoriesProjects = array();
/* Link the projects stories under this product. */
$notRemovePRJ = $this->dao->select('t1.*')->from(TABLE_PROJECTSTORY)->alias('t1')
$unmodifiableProjects = $this->dao->select('t1.*')->from(TABLE_PROJECTSTORY)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
->where('t1.product')->eq($productID)
->andWhere('t2.type')->eq('project')
->andWhere('t2.deleted')->eq('0')
->fetchPairs('project', 'product');
if(!empty($notRemovePRJ)) $canChangePGM = false;
if(!empty($unmodifiableProjects)) $canChangePGM = false;
/* Get the projects linked with this product. */
$projectPairs = $this->dao->select('t2.id,t2.name')->from(TABLE_PROJECTPRODUCT)->alias('t1')
@@ -403,7 +403,7 @@ class product extends control
}
else
{
if(isset($notRemovePRJ[$projectID])) $linkStoriesProjects[$projectID] = $projectName;
if(isset($unmodifiableProjects[$projectID])) $linkStoriesProjects[$projectID] = $projectName;
}
}
}
@@ -470,7 +470,7 @@ class product extends control
$lines = array();
if($product->program) $lines = array('') + $this->product->getLinePairs($product->program);
if($this->config->systemMode == 'old') $lines = array('') + $this->product->getLinePairs();
if($this->config->systemMode == 'classic') $lines = array('') + $this->product->getLinePairs();
$this->view->title = $this->lang->product->edit . $this->lang->colon . $product->name;
$this->view->position[] = html::a($this->createLink($this->moduleName, 'browse'), $product->name);
@@ -901,15 +901,15 @@ class product extends control
$moduleGroup = in_array($moduleGroup, array('product', 'qa'))? $moduleGroup : 'project';
$products = $moduleGroup == 'project' ? $this->product->getProductsByProject($this->session->PRJ) : $this->product->getList();
$this->view->link = $this->product->getProductLink($module, $method, $extra);
$this->view->productID = $productID;
$this->view->module = $module;
$this->view->method = $method;
$this->view->extra = $extra;
$this->view->products = $products;
$this->view->projectID = $moduleGroup == 'project' ? $this->session->PRJ : 0;
$this->view->programs = $this->loadModel('program')->getPGMOption();
$this->view->openModule = $moduleGroup;
$this->view->link = $this->product->getProductLink($module, $method, $extra);
$this->view->productID = $productID;
$this->view->module = $module;
$this->view->method = $method;
$this->view->extra = $extra;
$this->view->products = $products;
$this->view->projectID = $moduleGroup == 'project' ? $this->session->PRJ : 0;
$this->view->programs = $this->loadModel('program')->getPGMOption();
$this->view->openGroup = $moduleGroup;
$this->display();
}
+1
View File
@@ -72,6 +72,7 @@ $lang->product->accessDenied = "Sie haben keinen Zugriff auf {$lang->product
$lang->product->PGMChangeTip = "The projects linked with this {$lang->productCommon}: %s will be transferred to the modified program set together.";
$lang->product->notChangePGMTip = "The {$lang->SRCommon} of {$lang->productCommon} has been linked to the following projects, please cancel the link before proceeding";
$lang->product->confirmChangePGM = "The projects linked with this {$lang->productCommon}: %s is also linked with other products, whether to transfer projects to the modified program set.";
$lang->product->changePGMError = "The {$lang->SRCommon} of this {$lang->productCommon} has been linked to the project, please unlink it before proceeding";
$lang->product->id = 'ID';
$lang->product->program = "Program";
+1
View File
@@ -72,6 +72,7 @@ $lang->product->accessDenied = "You have no access to the {$lang->productCom
$lang->product->PGMChangeTip = "The projects linked with this {$lang->productCommon}: %s will be transferred to the modified program set together.";
$lang->product->notChangePGMTip = "The {$lang->SRCommon} of {$lang->productCommon} has been linked to the following projects, please cancel the link before proceeding";
$lang->product->confirmChangePGM = "The projects linked with this {$lang->productCommon}: %s is also linked with other products, whether to transfer projects to the modified program set.";
$lang->product->changePGMError = "The {$lang->SRCommon} of this {$lang->productCommon} has been linked to the project, please unlink it before proceeding";
$lang->product->id = 'ID';
$lang->product->program = "Program";
+1
View File
@@ -72,6 +72,7 @@ $lang->product->accessDenied = "Vous n'avez pas accès au {$lang->productCom
$lang->product->PGMChangeTip = "The projects linked with this {$lang->productCommon}: %s will be transferred to the modified program set together.";
$lang->product->notChangePGMTip = "The {$lang->SRCommon} of {$lang->productCommon} has been linked to the following projects, please cancel the link before proceeding";
$lang->product->confirmChangePGM = "The projects linked with this {$lang->productCommon}: %s is also linked with other products, whether to transfer projects to the modified program set.";
$lang->product->changePGMError = "The {$lang->SRCommon} of this {$lang->productCommon} has been linked to the project, please unlink it before proceeding";
$lang->product->id = 'ID';
$lang->product->program = "Program";
+1
View File
@@ -72,6 +72,7 @@ $lang->product->accessDenied = "Bạn không có quyền truy cập tới {
$lang->product->PGMChangeTip = "The projects linked with this {$lang->productCommon}: %s will be transferred to the modified program set together.";
$lang->product->notChangePGMTip = "The {$lang->SRCommon} of {$lang->productCommon} has been linked to the following projects, please cancel the link before proceeding";
$lang->product->confirmChangePGM = "The projects linked with this {$lang->productCommon}: %s is also linked with other products, whether to transfer projects to the modified program set.";
$lang->product->changePGMError = "The {$lang->SRCommon} of this {$lang->productCommon} has been linked to the project, please unlink it before proceeding";
$lang->product->id = 'ID';
$lang->product->program = "Program";
+1
View File
@@ -72,6 +72,7 @@ $lang->product->accessDenied = "您无权访问该{$lang->productCommon}";
$lang->product->PGMChangeTip = "如下项目只关联了该{$lang->productCommon}, 将直接转移至新项目集下。";
$lang->product->notChangePGMTip = "该{$lang->productCommon}的{$lang->SRCommon}已经关联到如下项目,请取消关联后再操作";
$lang->product->confirmChangePGM = "如下项目既关联了该{$lang->productCommon}又关联了其他{$lang->productCommon},请确认是否继续关联该{$lang->productCommon},勾选后将取消与其他{$lang->productCommon}的关联关系,同时转移至新项目集下。";
$lang->product->changePGMError = "该{$lang->productCommon}的{$lang->SRCommon}已经关联到项目,请取消关联后再操作";
$lang->product->id = '编号';
$lang->product->program = "所属项目集";
+17
View File
@@ -556,6 +556,7 @@ class productModel extends model
{
$productID = (int)$productID;
$oldProduct = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch();
$product = fixer::input('post')
->setIF($this->post->acl == 'open', 'whitelist', '')
->setDefault('line', 0)
@@ -564,6 +565,22 @@ class productModel extends model
->remove('uid,changeProjects')
->get();
if($product->program != $oldProduct->program)
{
/* Link the projects stories under this product. */
$unmodifiableProjects = $this->dao->select('t1.*')->from(TABLE_PROJECTSTORY)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
->where('t1.product')->eq($productID)
->andWhere('t2.type')->eq('project')
->andWhere('t2.deleted')->eq('0')
->fetchPairs('project', 'product');
if(!empty($unmodifiableProjects))
{
dao::$errors[] = $this->lang->product->changePGMError;
return false;
}
}
$product = $this->loadModel('file')->processImgURL($product, $this->config->product->editor->edit['id'], $this->post->uid);
$this->dao->update(TABLE_PRODUCT)->data($product)->autoCheck()
->batchCheck($this->config->product->edit->requiredFields, 'notempty')
+3 -3
View File
@@ -27,19 +27,19 @@ foreach($products as $product)
{
$objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id;
$linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $product->id);
$myProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "class='text-important' title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openModule'");
$myProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "class='text-important' title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openGroup'");
}
else if($product->status == 'normal' and !($product->PO == $this->app->user->account))
{
$objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id;
$linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $product->id);
$normalProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openModule'");
$normalProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openGroup'");
}
else if($product->status == 'closed')
{
$objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id;
$linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $objectID);
$closedProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' class='closed' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openModule'");
$closedProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' class='closed' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openGroup'");
}
}
?>
+10 -6
View File
@@ -13,7 +13,7 @@
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/kindeditor.html.php';?>
<div id='mainContent' class="main-row" <?php if(isonlybody()) echo 'style="padding-top: 0px;"';?>>
<div class="col-12 main-col">
<div class="col-8 main-col">
<div class="row">
<div class="col-sm-12">
<div class="cell">
@@ -141,11 +141,6 @@
<?php $this->printExtendFields($product, 'div', "position=right&inForm=0&inCell=1");?>
</div>
</div>
<div class="col-sm-12">
<?php $blockHistory = true;?>
<?php $actionFormLink = $this->createLink('action', 'comment', "objectType=product&objectID=$product->id");?>
<?php include '../../common/view/action.html.php';?>
</div>
</div>
<div class='main-actions'>
<div class="btn-toolbar">
@@ -172,6 +167,15 @@
</div>
</div>
</div>
<div class="col-4 side-col">
<div class="row">
<div class="col-sm-12">
<?php $blockHistory = true;?>
<?php $actionFormLink = $this->createLink('action', 'comment', "objectType=product&objectID=$product->id");?>
<?php include '../../common/view/action.html.php';?>
</div>
</div>
</div>
</div>
<div id="mainActions" class='main-actions'>
<nav class="container"></nav>
+3 -3
View File
@@ -763,12 +763,12 @@ class program extends control
*/
public function index($projectID = 0)
{
$project = $this->program->getPRJByID($projectID);
if(empty($project) || $project->type != 'project') die(js::error($this->lang->notFound) . js::locate('back'));
$this->lang->navGroup->program = 'project';
$projectID = $this->program->savePRJState($projectID, $this->program->getPRJPairs());
$project = $this->program->getPRJByID($projectID);
if(empty($project) || $project->type != 'project') die(js::error($this->lang->notFound) . js::locate('back'));
if(!$projectID) $this->locate($this->createLink('program', 'PRJbrowse'));
setCookie("lastPRJ", $projectID, $this->config->cookieLife, $this->config->webRoot, '', false, true);
+7 -6
View File
@@ -926,7 +926,8 @@ class programModel extends model
->beginIF($this->config->systemMode == 'new')->andWhere('type')->eq('project')->fi()
->beginIF($browseType != 'all')->andWhere('status')->eq($browseType)->fi()
->beginIF($path)->andWhere('path')->like($path . '%')->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
->beginIF(!$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('id')->in($this->app->user->view->projects)->fi()
->beginIF(!$this->app->user->admin and $this->config->systemMode == 'classic')->andWhere('id')->in($this->app->user->view->sprints)->fi()
->beginIF($this->cookie->PRJMine or $PRJMine)
->andWhere('openedBy', true)->eq($this->app->user->account)
->orWhere('PM')->eq($this->app->user->account)
@@ -1958,9 +1959,9 @@ class programModel extends model
echo "</div>";
}
$from = $project->from == 'PRJ' ? 'PRJ' : 'pgmproject';
$openModule = $project->from == 'PRJ' ? 'project' : 'program';
common::printIcon('program', 'PRJEdit', "projectID=$project->id&from=$from", $project, 'list', 'edit', '', '', '', "data-group=$openModule", '', $project->id);
$from = $project->from == 'PRJ' ? 'PRJ' : 'pgmproject';
$openGroup = $project->from == 'PRJ' ? 'project' : 'program';
common::printIcon('program', 'PRJEdit', "projectID=$project->id&from=$from", $project, 'list', 'edit', '', '', '', "data-group=$openGroup", '', $project->id);
common::printIcon('program', 'PRJManageMembers', "projectID=$project->id", $project, 'list', 'group', '', '', '', '', $this->lang->project->team, $project->id);
if($this->config->systemMode == 'new') common::printIcon('program', 'PRJGroup', "projectID=$project->id&programID=$programID", $project, 'list', 'lock', '', '', '', '', '', $project->id);
@@ -1969,8 +1970,8 @@ class programModel extends model
echo "<div class='btn-group'>";
echo "<button type='button' class='btn dropdown-toggle' data-toggle='context-dropdown' title='{$this->lang->more}'><i class='icon-more-alt'></i></button>";
echo "<ul class='dropdown-menu pull-right text-center' role='menu'>";
common::printIcon('program', 'PRJManageProducts', "projectID=$project->id&programID=$programID&from=$from", $project, 'list', 'link', '', 'btn-action', '', "data-group=$openModule", $this->lang->project->manageProducts, $project->id);
if($this->config->systemMode == 'new') common::printIcon('program', 'PRJWhitelist', "projectID=$project->id&programID=$programID&module=program&from=$from", $project, 'list', 'shield-check', '', 'btn-action', '', "data-group=$openModule", '', $project->id);
common::printIcon('program', 'PRJManageProducts', "projectID=$project->id&programID=$programID&from=$from", $project, 'list', 'link', '', 'btn-action', '', "data-group=$openGroup", $this->lang->project->manageProducts, $project->id);
if($this->config->systemMode == 'new') common::printIcon('program', 'PRJWhitelist', "projectID=$project->id&programID=$programID&module=program&from=$from", $project, 'list', 'shield-check', '', 'btn-action', '', "data-group=$openGroup", '', $project->id);
if(common::hasPriv('program','PRJDelete')) echo html::a(inLink("PRJDelete", "projectID=$project->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn btn-action' title='{$this->lang->program->PRJDelete}'");
echo "</ul>";
echo "</div>";
+4 -4
View File
@@ -178,23 +178,23 @@
<th><?php echo $lang->project->begin;?></th>
<td><?php echo $project->begin;?></td>
<th><?php echo $lang->project->totalEstimate;?></th>
<td><em><?php echo (float)$workhour->totalEstimate;?></em></td>
<td><em><?php echo (float)$workhour->totalEstimate . $lang->project->workHour;?></em></td>
</tr>
<tr>
<th><?php echo $lang->project->end;?></th>
<td><?php echo $project->end;?></td>
<th><?php echo $lang->project->totalConsumed;?></th>
<td><em><?php echo (float)$workhour->totalConsumed;?></em></td>
<td><em><?php echo (float)$workhour->totalConsumed . $lang->project->workHour;?></em></td>
</tr>
<tr>
<th><?php echo $lang->project->totalDays;?></th>
<td><?php echo $project->days;?></td>
<th><?php echo $lang->project->totalLeft;?></th>
<td><em><?php echo (float)$workhour->totalLeft;?></em></td>
<td><em><?php echo (float)$workhour->totalLeft . $lang->project->workHour;?></em></td>
</tr>
<tr>
<th><?php echo $lang->project->totalHours;?></th>
<td><em><?php echo (float)$workhour->totalHours;?></em></td>
<td><em><?php echo (float)$workhour->totalHours . $lang->project->workHour;?></em></td>
</tr>
</tbody>
</table>
+1 -1
View File
@@ -42,7 +42,7 @@ class project extends control
$this->projects = $this->project->getExecutionPairs($this->session->PRJ, 'all', 'nocode');
if(!$this->projects and $this->methodName != 'index' and $this->methodName != 'create' and $this->app->getViewType() != 'mhtml') $this->locate($this->createLink('project', 'create'));
}
$this->objectType = $this->config->systemMode == 'old' ? 'project' : 'exection';
$this->objectType = $this->config->systemMode == 'classic' ? 'project' : 'exection';
}
/**
+2 -2
View File
@@ -203,7 +203,7 @@ class projectModel extends model
$currentProjectName = '';
if(isset($currentProject->name)) $currentProjectName = $currentProject->name;
if($this->config->systemMode == 'old')
if($this->config->systemMode == 'classic')
{
$this->session->set('moreProjectLink', $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='{$currentProjectName}'><span class='text'><i class='icon icon-sprint'></i> {$currentProjectName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
@@ -880,7 +880,7 @@ class projectModel extends model
{
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProjectPairs();
$mode .= $this->cookie->projectMode;
$mode .= $this->cookie->projectMode;
$orderBy = $this->config->project->orderBy;
if($projectID)
{
+1 -1
View File
@@ -43,7 +43,7 @@
<?php endforeach;?>
</div>
</div>
<?php if($this->config->systemMode == 'old' or $project->grade == 1):?>
<?php if($this->config->systemMode == 'classic' or $project->grade == 1):?>
<div class='detail'>
<div class='detail-title'><?php echo $lang->project->unlinkedProducts;?></div>
<div class='detail-content row'>
-1
View File
@@ -2,7 +2,6 @@
$lang->projectstory->common = 'Anforderungen an Projekte';
$lang->projectstory->index = 'Fordern Sie Homepage';
$lang->projectstory->view = 'Story Detail';
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Matrix der Verfolgung';
$lang->projectstory->linkStory = 'Linked' . $lang->SRCommon;
$lang->projectstory->unlinkStory = 'Unlinked' . $lang->SRCommon;
-1
View File
@@ -2,7 +2,6 @@
$lang->projectstory->common = 'Project Requirements';
$lang->projectstory->index = 'Request Home';
$lang->projectstory->view = 'Story Detail';
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Tracking Matrix';
$lang->projectstory->linkStory = 'Linked' . $lang->SRCommon;
$lang->projectstory->unlinkStory = 'Unlinked' . $lang->SRCommon;
-1
View File
@@ -2,7 +2,6 @@
$lang->projectstory->common = 'Exigences du projet';
$lang->projectstory->index = 'Exigences Accueil';
$lang->projectstory->view = 'Story Detail';
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Matrice de suivi';
$lang->projectstory->linkStory = 'Linked' . $lang->SRCommon;
$lang->projectstory->unlinkStory = 'Unlinked' . $lang->SRCommon;
-1
View File
@@ -2,7 +2,6 @@
$lang->projectstory->common = 'Yêu cầu dự án';
$lang->projectstory->index = 'Yêu cầu trang nhà';
$lang->projectstory->view = 'Story Detail';
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Theo dõi ma trận';
$lang->projectstory->linkStory = 'Linked' . $lang->SRCommon;
$lang->projectstory->unlinkStory = 'Unlinked' . $lang->SRCommon;
-1
View File
@@ -2,7 +2,6 @@
$lang->projectstory->common = '项目需求';
$lang->projectstory->index = '需求主页';
$lang->projectstory->view = '需求详情';
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = '矩阵';
$lang->projectstory->linkStory = '关联' . $lang->SRCommon;
$lang->projectstory->unlinkStory = '移除' . $lang->SRCommon;
-1
View File
@@ -2,7 +2,6 @@
$lang->projectstory->common = '項目需求';
$lang->projectstory->index = '需求主頁';
$lang->projectstory->view = '需求詳情';
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = '矩陣';
$lang->projectstory->linkStory = '關聯' . $lang->SRCommon;
$lang->projectstory->unlinkStory = '移除' . $lang->SRCommon;
+4
View File
@@ -71,12 +71,16 @@ class report extends control
/**
* Product information report.
*
* @params string $conditions
* @access public
* @return void
*/
public function productSummary($conditions = '')
{
$this->app->loadLang('story');
$this->app->loadLang('product');
$this->app->loadLang('productplan');
$this->view->title = $this->lang->report->productSummary;
$this->view->position[] = $this->lang->report->productSummary;
$this->view->products = $this->report->getProducts($conditions);
+2
View File
@@ -4,6 +4,8 @@
.date{width:80px;}
ul li{list-style:none;}
.side-col {padding-right: 20px; width: 15%;}
#sidebar>.cell {width: 100%;}
#productList p{margin:2px 0;}
.table-bordered, .outer.with-side .main, .outer.with-side > form > .table, .outer.with-side > .table{border: none}
+25 -15
View File
@@ -1,19 +1,29 @@
<div class='panel'>
<div class='panel-heading'>
<div class='panel-title'><?php echo $lang->report->list;?></div>
<div class="sidebar-toggle">
<i class="icon icon-angle-left"></i>
</div>
<div class="cell">
<div class='panel'>
<div class='panel-heading'>
<div class='panel-title'><?php echo $lang->report->list;?></div>
</div>
<div class='panel-body'>
<div class='list-group'>
<?php
ksort($lang->reportList->$submenu->lists);
foreach($lang->reportList->$submenu->lists as $list)
{
$list .= '|';
list($label, $module, $method, $params) = explode('|', $list);
$class = $label == $title ? 'selected' : '';
if(common::hasPriv($module, $method)) echo html::a($this->createLink($module, $method, $params), '<i class="icon icon-file-text"></i> ' . $label, '', "class='$class' title='$label'");
}
?>
</div>
</div>
</div>
<div class='panel-body'>
<div class='list-group'>
<?php
ksort($lang->reportList->$submenu->lists);
foreach($lang->reportList->$submenu->lists as $list)
{
$list .= '|';
list($label, $module, $method, $params) = explode('|', $list);
$class = $label == $title ? 'selected' : '';
if(common::hasPriv($module, $method)) echo html::a($this->createLink($module, $method, $params), '<i class="icon icon-file-text"></i> ' . $label, '', "class='$class' title='$label'");
}
?>
<div class='panel panel-body' style='padding: 10px 6px'>
<div class='text proversion'>
<strong class='text-danger small text-latin'>PRO</strong> &nbsp;<span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion;?></span>
</div>
</div>
</div>
+1 -6
View File
@@ -1,12 +1,7 @@
<?php include '../../common/view/header.html.php';?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
<div class='panel panel-body' style='padding: 10px 6px'>
<div class='text proversion'>
<strong class='text-danger small text-latin'>PRO</strong> &nbsp;<span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
</div>
</div>
</div>
<div class='main-col'>
<?php if(empty($assigns)):?>
+1 -6
View File
@@ -1,13 +1,8 @@
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/datepicker.html.php';?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
<div class='panel panel-body' style='padding: 10px 6px'>
<div class='text proversion'>
<strong class='text-danger small text-latin'>PRO</strong> &nbsp;<span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
</div>
</div>
</div>
<div class='main-col'>
<div class='cell'>
+1 -6
View File
@@ -3,13 +3,8 @@
<style>#conditions .col-xs { width: 126px; }</style>
<?php endif;?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
<div class='panel panel-body' style='padding: 10px 6px'>
<div class='text proversion'>
<strong class='text-danger small text-latin'>PRO</strong> &nbsp;<span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion;?></span>
</div>
</div>
</div>
<div class='main-col'>
<?php if(empty($products)):?>
+1 -6
View File
@@ -3,13 +3,8 @@
<?php include '../../common/view/chart.html.php';?>
<?php $chartData = array('labels' => array(), 'data' => array());?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
<div class='panel panel-body' style='padding: 10px 6px'>
<div class='text proversion'>
<strong class='text-danger small text-latin'>PRO</strong> &nbsp;<span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
</div>
</div>
</div>
<div class='main-col'>
<div class='cell'>
+1 -6
View File
@@ -2,13 +2,8 @@
<?php include '../../common/view/datepicker.html.php';?>
<?php js::set('weekend', $config->project->weekend);?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
<div class='panel panel-body' style='padding: 10px 6px'>
<div class='text proversion'>
<strong class='text-danger small text-latin'>PRO</strong> &nbsp;<span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion; ?></span>
</div>
</div>
</div>
<div class='main-col'>
<div class='cell'>
+17 -14
View File
@@ -327,33 +327,36 @@ class story extends control
* @param int $branch
* @param int $moduleID
* @param int $storyID
* @param int $project
* @param int $projectID
* @param int $plan
* @param string $type requirement|story
* @access public
* @return void
*/
public function batchCreate($productID = 0, $branch = 0, $moduleID = 0, $storyID = 0, $project = 0, $plan = 0, $type = 'story')
public function batchCreate($productID = 0, $branch = 0, $moduleID = 0, $storyID = 0, $projectID = 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();
if($project)
if($projectID)
{
$prj = $this->dao->findById((int)$project)->from(TABLE_PROJECT)->fetch();
if($prj->type == 'project')
$projects = $this->loadModel('project')->getExecutionPairs();
$this->project->setMenu($projects, $projectID);
$project = $this->dao->findById((int)$projectID)->from(TABLE_PROJECT)->fetch();
if($project->type == 'project')
{
$this->app->rawModule = 'projectstory';
$this->lang->navGroup->story = 'project';
$this->lang->product->menu = $this->lang->menu->{$prj->model};
$this->lang->product->menu = $this->lang->menu->{$project->model};
}
else
{
$this->app->rawModule = 'project';
$this->lang->navGroup->story = 'project';
}
$this->view->project = $prj;
$this->view->project = $project;
}
/* Clear title when switching products and set the session for the current product. */
@@ -378,12 +381,12 @@ class story extends control
foreach($mails as $mail) $stories[] = $mail->storyID;
/* Project or execution linked stories. */
if($project)
if($projectID)
{
$products = array();
foreach($mails as $story) $products[$story->storyID] = $productID;
$this->loadModel('project')->linkStory($project, $stories, $products);
if($project != $this->session->PRJ) $this->loadModel('project')->linkStory($this->session->PRJ, $stories, $products);
$this->loadModel('project')->linkStory($projectID, $stories, $products);
if($projectID != $this->session->PRJ) $this->loadModel('project')->linkStory($this->session->PRJ, $stories, $products);
}
/* If storyID not equal zero, subdivide this story to child stories and close it. */
@@ -399,11 +402,11 @@ class story extends control
{
die(js::locate(inlink('view', "storyID=$storyID"), 'parent'));
}
elseif($project)
elseif($projectID)
{
setcookie('storyModuleParam', 0, 0, $this->config->webRoot, '', false, false);
$moduleName = $prj->type == 'project' ? 'projectstory' : 'project';
$param = $prj->type == 'project' ? "productID=$productID" : "projectID=$project&orderBy=id_desc&browseType=unclosed";
$moduleName = $project->type == 'project' ? 'projectstory' : 'project';
$param = $project->type == 'project' ? "productID=$productID" : "projectID=$projectID&orderBy=id_desc&browseType=unclosed";
$link = $this->createLink($moduleName, 'story', $param);
die(js::locate($link, 'parent'));
}
@@ -494,7 +497,7 @@ class story extends control
$this->view->branch = $branch;
$this->view->branches = $this->loadModel('branch')->getPairs($productID);
/* When the user is product owner or add story in project or not set review, the default is not to review. */
$this->view->needReview = ($this->app->user->account == $product->PO || $project > 0 || $this->config->story->needReview == 0) ? 0 : 1;
$this->view->needReview = ($this->app->user->account == $product->PO || $projectID > 0 || $this->config->story->needReview == 0) ? 0 : 1;
$this->display();
}
+36 -26
View File
@@ -3279,12 +3279,12 @@ class storyModel extends model
$canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchChangeStage or $canBatchChangeBranch or $canBatchChangeModule or $canBatchChangePlan or $canBatchAssignTo or $canBatchUnlinkStory);
$module = $this->app->rawModule == 'projectstory' ? 'projectstory' : 'story';
$canView = common::hasPriv($module, 'view');
$openModule = $this->app->rawModule == 'projectstory' ? 'project' : 'product';
$storyLink = helper::createLink($module, 'view', "storyID=$story->id");
$account = $this->app->user->account;
$id = $col->id;
$module = $this->app->rawModule == 'projectstory' ? 'projectstory' : 'story';
$canView = common::hasPriv($module, 'view');
$openGroup = $this->app->rawModule == 'projectstory' ? 'project' : 'product';
$storyLink = helper::createLink($module, 'view', "storyID=$story->id");
$account = $this->app->user->account;
$id = $col->id;
if($col->show)
{
$class = "c-{$id}";
@@ -3347,7 +3347,7 @@ class storyModel extends model
case 'id':
if($canBatchAction)
{
echo html::checkbox('storyIdList', array($story->id => '')) . html::a($storyLink, sprintf('%03d', $story->id), '', "data-group='$openModule'");
echo html::checkbox('storyIdList', array($story->id => '')) . html::a($storyLink, sprintf('%03d', $story->id), '', "data-group='$openGroup'");
}
else
{
@@ -3365,7 +3365,7 @@ class storyModel extends model
if($story->branch and isset($branches[$story->branch])) echo "<span class='label label-outline label-badge'>{$branches[$story->branch]}</span> ";
if($story->module and isset($modulePairs[$story->module])) echo "<span class='label label-gray label-badge'>{$modulePairs[$story->module]}</span> ";
if($story->parent > 0) echo '<span class="label label-badge label-light" title="' . $this->lang->story->children . '">' . $this->lang->story->childrenAB . '</span> ';
echo $canView ? html::a($storyLink, $story->title, '', "style='color: $story->color' data-group='$openModule'") : "<span style='color: $story->color'>{$story->title}</span>";
echo $canView ? html::a($storyLink, $story->title, '', "style='color: $story->color' data-group='$openGroup'") : "<span style='color: $story->color'>{$story->title}</span>";
if(!empty($story->children)) echo '<a class="story-toggle" data-id="' . $story->id . '"><i class="icon icon-angle-double-right"></i></a>';
break;
case 'plan':
@@ -3649,12 +3649,15 @@ class storyModel extends model
$stories[$id]->cases = $this->loadModel('testcase')->getStoryCases($id);
$stories[$id]->bugs = $this->loadModel('bug')->getStoryBugs($id);
$stories[$id]->tasks = $this->loadModel('task')->getStoryTasks($id);
$stories[$id]->designs = $this->dao->select('id, name')->from(TABLE_DESIGN)->where('story')->eq($id)->fetchAll('id');
$stories[$id]->revisions = $this->dao->select('BID, extra')->from(TABLE_RELATION)
->where('AType')->eq('design')
->andWhere('BType')->eq('commit')
->andWhere('AID')->in(array_keys($stories[$id]->designs))
->fetchPairs();
if(isset($this->config->maxVersion))
{
$stories[$id]->designs = $this->dao->select('id, name')->from(TABLE_DESIGN)->where('story')->eq($id)->fetchAll('id');
$stories[$id]->revisions = $this->dao->select('BID, extra')->from(TABLE_RELATION)
->where('AType')->eq('design')
->andWhere('BType')->eq('commit')
->andWhere('AID')->in(array_keys($stories[$id]->designs))
->fetchPairs();
}
}
$requirement->track = $stories;
@@ -3680,12 +3683,15 @@ class storyModel extends model
$stories[$id]->cases = $this->loadModel('testcase')->getStoryCases($id);
$stories[$id]->bugs = $this->loadModel('bug')->getStoryBugs($id);
$stories[$id]->tasks = $this->loadModel('task')->getStoryTasks($id);
$stories[$id]->designs = $this->dao->select('id, name')->from(TABLE_DESIGN)->where('story')->eq($id)->fetchAll('id');
$stories[$id]->revisions = $this->dao->select('BID, extra')->from(TABLE_RELATION)
->where('AType')->eq('design')
->andWhere('BType')->eq('commit')
->andWhere('AID')->in(array_keys($stories[$id]->designs))
->fetchPairs();
if(isset($this->config->maxVersion))
{
$stories[$id]->designs = $this->dao->select('id, name')->from(TABLE_DESIGN)->where('story')->eq($id)->fetchAll('id');
$stories[$id]->revisions = $this->dao->select('BID, extra')->from(TABLE_RELATION)
->where('AType')->eq('design')
->andWhere('BType')->eq('commit')
->andWhere('AID')->in(array_keys($stories[$id]->designs))
->fetchPairs();
}
}
$requirements['noRequirement'] = $stories;
@@ -3711,12 +3717,16 @@ class storyModel extends model
foreach($stories as $id => $title)
{
$track[$id] = new stdclass();
$track[$id]->title = $title;
$track[$id]->case = $this->loadModel('testcase')->getStoryCases($id);
$track[$id]->bug = $this->loadModel('bug')->getStoryBugs($id);
$track[$id]->design = $this->dao->select('id, name')->from(TABLE_DESIGN)->where('story')->eq($id)->fetchAll('id');
$track[$id]->story = $this->getByID($id);
$track[$id]->revision = $this->dao->select('BID, extra')->from(TABLE_RELATION)->where('AType')->eq('design')->andWhere('BType')->eq('commit')->andWhere('AID')->in(array_keys($track[$id]->design))->fetchPairs();
$track[$id]->title = $title;
$track[$id]->case = $this->loadModel('testcase')->getStoryCases($id);
$track[$id]->bug = $this->loadModel('bug')->getStoryBugs($id);
$track[$id]->story = $this->getByID($id);
$track[$id]->task = $this->loadModel('task')->getStoryTasks($id);
if(isset($this->config->maxVersion))
{
$track[$id]->design = $this->dao->select('id, name')->from(TABLE_DESIGN)->where('story')->eq($id)->fetchAll('id');
$track[$id]->revision = $this->dao->select('BID, extra')->from(TABLE_RELATION)->where('AType')->eq('design')->andWhere('BType')->eq('commit')->andWhere('AID')->in(array_keys($track[$id]->design))->fetchPairs();
}
}
return $track;
+5 -1
View File
@@ -44,7 +44,9 @@
<th><?php echo $lang->story->design;?></th>
<?php endif;?>
<th><?php echo $lang->story->case;?></th>
<?php if(isset($config->maxVersion)):?>
<th><?php echo $lang->story->repoCommit;?></th>
<?php endif;?>
<th><?php echo $lang->story->bug;?></th>
</tr>
</thead>
@@ -81,6 +83,7 @@
<?php echo html::a($this->createLink('testcase', 'view', "caseID=$caseID", '', false, $case->PRJ), $case->title, '', "title='$case->title'") . '<br/>';?>
<?php endforeach;?>
</td>
<?php if(isset($config->maxVersion)):?>
<td>
<?php foreach($story->revisions as $revision => $repoID):?>
<?php
@@ -88,6 +91,7 @@
?>
<?php endforeach;?>
</td>
<?php endif;?>
<td>
<?php foreach($story->bugs as $bugID => $bug):?>
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bugID"), $bug->title, '', "title='$bug->title'") . '<br/>';?>
@@ -101,9 +105,9 @@
<td></td>
<td></td>
<td></td>
<td></td>
<?php if(isset($config->maxVersion)):?>
<td></td>
<td></td>
<?php endif;?>
<?php endif;?>
</tr>
+3 -3
View File
@@ -50,14 +50,14 @@
<?php if(common::canModify('product', $product)): ?>
<?php
$otherParam = '';
$openModule = 'product';
$openGroup = 'product';
if($this->app->rawModule == 'projectstory')
{
$otherParam = "storyID=&projectID={$this->session->PRJ}";
$openModule = 'project';
$openGroup = 'project';
}
?>
<?php common::printLink('story', 'create', "productID={$story->product}&branch={$story->branch}&moduleID={$story->module}&$otherParam", "<i class='icon icon-plus'></i>" . $lang->story->create, '', "class='btn btn-primary' data-group='$openModule'"); ?>
<?php common::printLink('story', 'create', "productID={$story->product}&branch={$story->branch}&moduleID={$story->module}&$otherParam", "<i class='icon icon-plus'></i>" . $lang->story->create, '', "class='btn btn-primary' data-group='$openGroup'"); ?>
<?php endif;?>
</div>
<?php endif;?>
+2 -2
View File
@@ -206,7 +206,7 @@ class task extends control
$this->view->title = $title;
$this->view->position = $position;
$this->view->project = $project;
$this->view->projects = $this->config->systemMode == 'old' ? $projects : $this->loadModel('project')->getExecutionsByProject($this->session->PRJ, 'all', 0, true);
$this->view->projects = $this->config->systemMode == 'classic' ? $projects : $this->loadModel('project')->getExecutionsByProject($this->session->PRJ, 'all', 0, true);
$this->view->task = $task;
$this->view->users = $users;
$this->view->stories = $stories;
@@ -392,7 +392,7 @@ class task extends control
$this->view->users = $this->loadModel('user')->getPairs('nodeleted', "{$this->view->task->openedBy},{$this->view->task->canceledBy},{$this->view->task->closedBy}");
$this->view->showAllModule = isset($this->config->project->task->allModule) ? $this->config->project->task->allModule : '';
$this->view->modules = $this->tree->getTaskOptionMenu($this->view->task->project, 0, 0, $this->view->showAllModule ? 'allModule' : '');
$this->view->projects = $this->config->systemMode == 'old' ? $this->project->getExecutionPairs() : $this->loadModel('project')->getExecutionsByProject($this->session->PRJ, 'all', 0, true);
$this->view->projects = $this->config->systemMode == 'classic' ? $this->project->getExecutionPairs() : $this->loadModel('project')->getExecutionsByProject($this->session->PRJ, 'all', 0, true);
$this->display();
}
+5 -5
View File
@@ -133,7 +133,7 @@ class testsuiteModel extends model
{
return $this->dao->select("*")->from(TABLE_TESTSUITE)
->where('product')->eq((int)$productID)
->beginIF($this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('deleted')->eq(0)
->andWhere("(`type` = 'public' OR (`type` = 'private' and addedBy = '{$this->app->user->account}'))")
->orderBy($orderBy)
@@ -242,7 +242,7 @@ class testsuiteModel extends model
$cases = $this->dao->select('t1.*,t2.version as caseVersion')->from(TABLE_CASE)->alias('t1')
->leftJoin(TABLE_SUITECASE)->alias('t2')->on('t1.id=t2.case')
->where('t2.suite')->eq($suiteID)
->andWhere('t1.PRJ')->eq($this->session->PRJ)
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->andWhere('t1.product')->eq($suite->product)
->andWhere('t1.product')->eq($suite->product)
->andWhere('t1.deleted')->eq(0)
@@ -286,7 +286,7 @@ class testsuiteModel extends model
$linkedCases = $this->getLinkedCases($suite->id, 'id_desc', null, $append = false);
$cases = $this->dao->select('*')->from(TABLE_CASE)->where($query)
->andWhere('id')->notIN(array_keys($linkedCases))
->beginIF($this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('deleted')->eq(0)
->orderBy('id desc')
->page($pager)
@@ -323,7 +323,7 @@ class testsuiteModel extends model
{
$importedCases = $this->dao->select('fromCaseID')->from(TABLE_CASE)
->where('product')->eq($productID)
->andWhere('PRJ')->eq($this->session->PRJ)
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('lib')->eq($libID)
->andWhere('fromCaseID')->ne('')
->andWhere('deleted')->eq(0)
@@ -357,7 +357,7 @@ class testsuiteModel extends model
return $this->dao->select('*')->from(TABLE_CASE)->where('deleted')->eq(0)
->beginIF($browseType != 'bysearch')->andWhere('lib')->eq($libID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($query)->fi()
->andWhere('PRJ')->eq($this->session->PRJ)
->begin($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('product')->eq(0)
->andWhere('id')->notIN($importedCases)
->orderBy($orderBy)
+6 -6
View File
@@ -60,12 +60,12 @@
<?php endif;?>
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></nobr>
</th>
<th class='c-pri w-50px'> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='w-100px'> <?php common::printOrderLink('module', $orderBy, $vars, $lang->testcase->module);?></th>
<th class='c-name'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->testcase->title);?></th>
<th class='w-90px'> <?php common::printOrderLink('type', $orderBy, $vars, $lang->testcase->type);?></th>
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='w-80px'> <?php common::printOrderLink('lastRunResult', $orderBy, $vars, $lang->testcase->lastRunResult);?></th>
<th class='c-pri w-50px'><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='w-100px'><?php common::printOrderLink('module', $orderBy, $vars, $lang->testcase->module);?></th>
<th class='c-name'><?php common::printOrderLink('title', $orderBy, $vars, $lang->testcase->title);?></th>
<th class='w-90px'><?php common::printOrderLink('type', $orderBy, $vars, $lang->testcase->type);?></th>
<th class='c-status'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='w-80px'><?php common::printOrderLink('lastRunResult', $orderBy, $vars, $lang->testcase->lastRunResult);?></th>
<th class='w-30px' title='<?php echo $lang->testcase->bugs?>'><?php echo $lang->testcase->bugsAB;?></th>
<th class='w-30px' title='<?php echo $lang->testcase->results?>'><?php echo $lang->testcase->resultsAB;?></th>
<th class='w-30px' title='<?php echo $lang->testcase->stepNumber?>'><?php echo $lang->testcase->stepNumberAB;?></th>
+4 -4
View File
@@ -1217,10 +1217,10 @@ class testtask extends control
}
/**
* Ajax get test tasks
*
* @param int $productID
* @param int $projectID
* Ajax get test tasks.
*
* @param int $productID
* @param int $projectID
* @access public
* @return void
*/
+12 -12
View File
@@ -203,7 +203,7 @@ class testtaskModel extends model
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t5')->on('t1.project = t5.project and t1.product = t5.product')
->where('t1.deleted')->eq(0)
->beginIF($this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->andWhere('t1.auto')->ne('unit')
->beginIF(!$this->app->user->admin)->andWhere('t3.id')->in("0,{$this->app->user->view->sprints}")->fi()
->beginIF($scopeAndStatus[0] == 'local')->andWhere('t1.product')->eq((int)$productID)->fi()
@@ -239,7 +239,7 @@ class testtaskModel extends model
->leftJoin(TABLE_BUILD)->alias('t4')->on('t1.build = t4.id')
->where('t1.deleted')->eq(0)
->andWhere('t1.product')->eq($productID)
->andWhere('t1.PRJ')->eq($this->session->PRJ)
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->andWhere('t1.auto')->eq('unit')
->beginIF($browseType != 'all' and $browseType != 'newest' and $beginAndEnd)
->andWhere('t1.end')->ge($beginAndEnd['begin'])
@@ -293,11 +293,11 @@ class testtaskModel extends model
}
/**
* Get testtask pairs
*
* @param int $productID
* @param int $projectID
* @param string $appendIdList
* Get testtask pairs.
*
* @param int $productID
* @param int $projectID
* @param string $appendIdList
* @param string $params noempty
* @access public
* @return array
@@ -455,7 +455,7 @@ class testtaskModel extends model
{
return $this->dao->select('*')->from(TABLE_CASE)->where($query)
->andWhere('id')->notIN($linkedCases)
->beginIF($this->lang->navGroup->testtask != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('status')->ne('wait')
->andWhere('type')->ne('unit')
->beginIF($task->branch)->andWhere('branch')->in("0,$task->branch")->fi()
@@ -484,7 +484,7 @@ class testtaskModel extends model
{
$cases = $this->dao->select('*')->from(TABLE_CASE)
->where($query)
->beginIF($this->lang->navGroup->testtask != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('product')->eq($productID)
->andWhere('status')->ne('wait')
->beginIF($linkedCases)->andWhere('id')->notIN($linkedCases)->fi()
@@ -517,7 +517,7 @@ class testtaskModel extends model
if($bugs)
{
$cases = $this->dao->select('*')->from(TABLE_CASE)->where($query)
->beginIF($this->lang->navGroup->testtask != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi()
->andWhere('product')->eq($productID)
->andWhere('status')->ne('wait')
->beginIF($linkedCases)->andWhere('id')->notIN($linkedCases)->fi()
@@ -550,7 +550,7 @@ class testtaskModel extends model
return $this->dao->select('t1.*,t2.version as version')->from(TABLE_CASE)->alias('t1')
->leftJoin(TABLE_SUITECASE)->alias('t2')->on('t1.id=t2.case')
->where($query)
->beginIF($this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->andWhere('t2.suite')->eq((int)$suite)
->andWhere('t1.product')->eq($productID)
->andWhere('status')->ne('wait')
@@ -585,7 +585,7 @@ class testtaskModel extends model
->where($query)
->andWhere('t1.id')->notin($linkedCases)
->andWhere('t2.task')->eq($testTask)
->beginIF($this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testtask != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi()
->andWhere('t1.status')->ne('wait')
->page($pager)
->fetchAll();
+4 -2
View File
@@ -16,9 +16,11 @@ class tree extends control
/**
* Module browse.
*
* @param int $rootID
* @param int $rootID
* @param string $viewType story|bug|case|doc
* @param int $currentModuleID
* @param int $currentModuleID
* @param int $branch
* @param string $from
* @access public
* @return void
*/
+3 -5
View File
@@ -63,15 +63,13 @@ function syncProductOrProject(obj, type)
$('#copyModule').bind('click', function(){syncModule(obj.value, viewType)});
}
function toggleCopy()
function toggleCopy(toggle)
{
var $copy = $('.table-row.copy');
if($copy.size() == 0) return false;
$copy.toggle();
$('.table-row.copy').toggle(toggle);
}
$(document).ready(function()
{
toggleCopy();
toggleCopy(false);
$('[data-id="edit"] a').modalTrigger({type: 'iframe', width: 500});
});
+1 -1
View File
@@ -104,7 +104,7 @@ li.tree-item-story > .tree-actions .tree-action[data-type=delete]{display:none;}
<td>
<div id='sonModule'>
<?php if($viewType == 'story' and $allProduct):?>
<div class='table-row row-module copy'>
<div class='table-row row-module copy' style='display: none;'>
<div class='table-col col-module'><?php echo html::select('allProduct', $allProduct, '', "class='form-control chosen' onchange=\"syncProductOrProject(this,'product')\"");?></div>
<div class='table-col col-shorts'><?php echo html::select('productModule', $productModules, '', "class='form-control chosen'");?></div>
<div class='table-col col-actions'>
+4 -4
View File
@@ -73,11 +73,11 @@ $lang->upgrade->mergeProgramDesc = <<<EOD
<p>可以选择这些迭代归属于某个新项目下。</p>
EOD;
$lang->upgrade->to15Mode['old'] = '保持老版本的习惯';
$lang->upgrade->to15Mode['new'] = '全新项目集管理模式';
$lang->upgrade->to15Mode['classic'] = '保持老版本的习惯';
$lang->upgrade->to15Mode['new'] = '全新项目集管理模式';
$lang->upgrade->selectedModeTips['old'] = '后续您还可以在后台-自定义里面切换为全新项目集管理的模式。';
$lang->upgrade->selectedModeTips['new'] = '切换为项目集管理模式需要对之前的数据进行归并处理,系统会引导您完成这个操作。';
$lang->upgrade->selectedModeTips['classic'] = '后续您还可以在后台-自定义里面切换为全新项目集管理的模式。';
$lang->upgrade->selectedModeTips['new'] = '切换为项目集管理模式需要对之前的数据进行归并处理,系统会引导您完成这个操作。';
$lang->upgrade->line = '产品线';
$lang->upgrade->program = '目标项目集和项目';
+2 -2
View File
@@ -18,8 +18,8 @@
<div class='panel-body'>
<div style='width:600px; margin: auto;'>
<?php echo $lang->upgrade->to15Desc;?>
<?php echo html::radio('mode', $lang->upgrade->to15Mode, 'old');?>
<div id='selectedModeTips' class='text-info'><?php echo $lang->upgrade->selectedModeTips['old'];?></div>
<?php echo html::radio('mode', $lang->upgrade->to15Mode, 'classic');?>
<div id='selectedModeTips' class='text-info'><?php echo $lang->upgrade->selectedModeTips['classic'];?></div>
</div>
</div>
<div class='panel-footer text-center'><?php echo html::submitButton();?></div>
+12 -12
View File
@@ -1,12 +1,12 @@
.main-header{margin-bottom: 10px;}
.row table{width: 94%; margin-left: 3%;}
.row th{width: 17%; line-height: 30px; padding-right: 20px; text-align: right; font-weight: 500;}
.row td{width: 33%; text-align: left; font-weight: 700;}
.main-actions{margin: 20px 0 20px 0; text-align: center;}
.user-title{margin: 10px 10px -10px 10px; font-size: 14px; font-weight: bold; padding-left: 10px;}
.avatar{display: inline-block; width: 50px; height: 50px; line-height: 50px;}
.user-name{margin-left: 15px; font-weight: bold;}
.user-name, .user-role{font-size: 16px; vertical-align: top; line-height: 50px;}
.line{border-top: 1px solid #eee; margin: 10px;}
#avatarUploadBtn{padding: 4px 12px; position: relative; left: 32px; bottom: 30px;}
#avatarForm{height: 10px}
.main-header {margin-bottom: 10px;}
.row table {width: 94%; margin-left: 3%;}
.row th {width: 17%; line-height: 30px; padding-right: 20px; text-align: right; font-weight: 500;}
.row td {width: 33%; text-align: left; font-weight: 700;}
.main-actions {margin: 20px 0 20px 0; text-align: center;}
.user-title {margin: 10px 10px -10px 10px; font-size: 14px; font-weight: bold; padding-left: 10px;}
.avatar {display: inline-block; width: 50px; height: 50px; line-height: 50px;}
.user-name {margin-left: 15px; font-weight: bold;}
.user-name, .user-role {font-size: 16px; vertical-align: top; line-height: 50px;}
.line {border-top: 1px solid #eee; margin: 10px;}
#avatarUploadBtn {padding: 4px 12px; position: relative; left: 32px; bottom: 30px;}
#avatarForm {height: 10px}
+3 -4
View File
@@ -1548,7 +1548,7 @@ class userModel extends model
if($allProducts === null) $allProducts = $this->dao->select('id,PO,QD,RD,createdBy,acl,whitelist,program,createdBy')->from(TABLE_PRODUCT)->where('acl')->ne('open')->fetchAll('id');
if($allProjects === null) $allProjects = $this->dao->select('id,PO,PM,QD,RD,acl,type,path,parent,openedBy')->from(TABLE_PROJECT)->where('acl')->ne('open')->andWhere('type')->eq('project')->fetchAll('id');
if($allPrograms === null) $allPrograms = $this->dao->select('id,PO,PM,QD,RD,acl,type,path,openedBy')->from(TABLE_PROJECT)->where('acl')->ne('open')->andWhere('type')->eq('program')->fetchAll('id');
if($allSprints === null) $allSprints = $this->dao->select('id,PO,PM,QD,RD,acl,project,path,parent,type,openedBy')->from(TABLE_PROJECT)->where('acl')->eq('private')->andWhere('type')->in('sprint,stage')->fetchAll('id');
if($allSprints === null) $allSprints = $this->dao->select('id,PO,PM,QD,RD,acl,project,path,parent,type,openedBy')->from(TABLE_PROJECT)->where('acl')->eq('private')->beginIF($this->config->systemMode == 'new')->andWhere('type')->in('sprint,stage')->fi()->fetchAll('id');
/* Get teams. */
if($teams === null)
@@ -1777,9 +1777,8 @@ class userModel extends model
/* Set opened sprints and stages into userview. */
$openedSprints = $this->dao->select('id')->from(TABLE_PROJECT)
->where('acl')->eq('open')
->andWhere('type')
->in('sprint,stage')
->andWhere('project')->in($userView->projects)
->beginIF($this->config->systemMode == 'new')->andWhere('type')->in('sprint,stage')->fi()
->beginIF($this->config->systemMode == 'new')->andWhere('project')->in($userView->projects)->fi()
->fetchAll('id');
$openedSprints = join(',', array_keys($openedSprints));