Merge branch '15.6' into sprint/167_wangyidong

This commit is contained in:
王怡栋
2021-10-18 08:44:13 +08:00
241 changed files with 3408 additions and 1224 deletions
+1 -1
View File
@@ -1 +1 @@
15.5
15.6
+4 -5
View File
@@ -124,22 +124,21 @@ class productIssueEntry extends entry
/* Get all users in issues so that we can get user detail later in batch. */
$accountList = array();
foreach($issue->assignedTo as $user) $accountList[] = $user;
foreach($issue->assignedTo as $account) $accountList[] = $account;
$accountList[] = $issue->openedBy;
$accountList = array_unique($accountList);
$profileList = $this->loadModel('user')->getUserDetailsForAPI($accountList);
/* Set the user detail to assignedTo and openedBy. */
foreach($issue->assignedTo as $key => $user)
foreach($issue->assignedTo as $key => $account)
{
/* $key can be 'closed' in some case, so here should be process it. */
if($key == 'closed')
if($account == 'closed')
{
$issue->assignedTo = array();
break;
}
$issue->assignedTo[$key] = $profileList[$user];
$issue->assignedTo[$key] = $profileList[$account];
}
$issue->openedBy = $profileList[$issue->openedBy];
+9 -7
View File
@@ -92,8 +92,12 @@ class productIssuesEntry extends entry
$taskTypeMap = array_flip($this->app->lang->task->typeList);
$bugTypeMap = array_flip($this->app->lang->bug->typeList);
$allValidLabels = array_merge(array_keys(array_merge($storyTypeMap, $taskTypeMap, $bugTypeMap)), array($this->app->lang->story->common, $this->app->lang->task->common, $this->app->lang->bug->common));
foreach($labels as $label)
{
/* Return empty result if label is not exists.*/
if(!in_array($label, $allValidLabels)) $this->send(200, array('page' => $page, 'total' => 0, 'limit' => $limit, 'issues' => array()));
if($label == $this->app->lang->story->common) $storyFilter[] = 'all';
if(isset($storyTypeMap[$label])) $storyFilter[] = $storyTypeMap[$label];
@@ -239,7 +243,6 @@ class productIssuesEntry extends entry
$r->assignedTo = array($task->assignedTo);
}
}
}
elseif($issue['type'] == 'story')
{
@@ -300,9 +303,9 @@ class productIssuesEntry extends entry
$userList = array();
foreach($result as $issue)
{
foreach($issue->assignedTo as $user)
foreach($issue->assignedTo as $account)
{
$userList[] = $user;
$userList[] = $account;
}
$userList[] = $issue->openedBy;
}
@@ -315,15 +318,14 @@ class productIssuesEntry extends entry
*/
foreach($result as $issue)
{
foreach($issue->assignedTo as $key => $user)
foreach($issue->assignedTo as $key => $account)
{
/* $key can be 'closed' in some case, so here should be process it. */
if($key == 'closed')
if($account == 'closed')
{
$issue->assignedTo = array();
break;
}
$issue->assignedTo[$key] = $userDetails[$user];
$issue->assignedTo[$key] = $userDetails[$account];
}
$issue->openedBy = $userDetails[$issue->openedBy];
}
+1 -1
View File
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
$config->version = '15.5'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->version = '15.6'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
$config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php.
+8 -8
View File
@@ -377,16 +377,16 @@ INSERT INTO `zt_module` (`id`, `root`, `branch`, `name`, `parent`, `path`, `grad
(13, 1, 0, '合作洽谈', 0, ',13,', 1, 60, 'bug', '', '', '', '0'),
(14, 1, 0, '关于我们', 0, ',14,', 1, 70, 'bug', '', '', '', '0'),
(15, 6, 0, '企业管理', 0, ',15,', 1, 0, 'line', '', '', '', '0');
INSERT INTO `zt_product` (`id`, `program`, `name`, `code`, `bind`, `line`, `type`, `status`, `subStatus`, `desc`, `PO`, `QD`, `RD`, `acl`, `whitelist`, `createdBy`, `createdDate`, `createdVersion`, `order`, `deleted`, `storyConcept`) VALUES
(1, 6, '公司企业网站建设', 'companyWebsite', '0', 0, 'normal', 'normal', '', '建立公司企业网站,可以更好对外展示。<br />', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 09:57:07', '', 5, '0', 0),
(2, 6, '企业内部工时管理系统', 'workhourManage', '0', 0, 'normal', 'normal', '', '', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 11:15:20', '5.2.1', 10, '0', 0);
INSERT INTO `zt_product` (`id`, `program`, `name`, `code`, `bind`, `line`, `type`, `status`, `subStatus`, `desc`, `PO`, `QD`, `RD`, `acl`, `whitelist`, `createdBy`, `createdDate`, `createdVersion`, `order`, `deleted`) VALUES
(1, 6, '公司企业网站建设', 'companyWebsite', '0', 0, 'normal', 'normal', '', '建立公司企业网站,可以更好对外展示。<br />', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 09:57:07', '', 5, '0'),
(2, 6, '企业内部工时管理系统', 'workhourManage', '0', 0, 'normal', 'normal', '', '', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 11:15:20', '5.2.1', 10, '0');
INSERT INTO `zt_productplan` (`id`, `product`, `branch`, `parent`, `title`, `desc`, `begin`, `end`, `order`, `deleted`) VALUES
(1, 1, 0, 0, '1.0版本', '开发出企业网站1.0版本。<br />', '2020-06-05', '2021-06-04', '', '0');
INSERT INTO `zt_project` (`id`, `project`, `model`, `type`, `product`, `lifetime`, `budget`, `budgetUnit`, `attribute`, `percent`, `milestone`, `output`, `auth`, `parent`, `path`, `grade`, `name`, `code`, `begin`, `end`, `realBegan`, `realEnd`, `days`, `status`, `subStatus`, `statge`, `pri`, `desc`, `version`, `parentVersion`, `planDuration`, `realDuration`, `openedBy`, `openedDate`, `openedVersion`, `lastEditedBy`, `lastEditedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`, `storyConcept`) VALUES
(1, 7, '', 'sprint', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,1,', 1, '企业网站第一期', 'coWeb1', '2020-06-05', '2021-12-04', '0000-00-00', '0000-00-00', 391, 'doing', '', '1', '1', '开发企业网站的基本雏形。<br />', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 5, '0', 0),
(2, 7, '', 'sprint', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,2,', 1, '企业网站第二期', 'coWebsite2', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 260, 'wait', '', '1', '1', '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 10, '0', 0),
(7, 0, 'scrum', 'project', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', 'extend', 6, ',6,7,', 2, '企业管理系统', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', 'admin', '2021-04-28 11:22:04', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'projectManager', '', '', '', 'open', ',tester3,admin', 35, '0', 0),
(6, 0, '', 'program', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 0, ',6,', 1, '企业管理', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '', '', '', 'open', '', 30, '0', 0);
INSERT INTO `zt_project` (`id`, `project`, `model`, `type`, `lifetime`, `budget`, `budgetUnit`, `attribute`, `percent`, `milestone`, `output`, `auth`, `parent`, `path`, `grade`, `name`, `code`, `begin`, `end`, `realBegan`, `realEnd`, `days`, `status`, `subStatus`, `pri`, `desc`, `version`, `parentVersion`, `planDuration`, `realDuration`, `openedBy`, `openedDate`, `openedVersion`, `lastEditedBy`, `lastEditedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES
(1, 7, '', 'sprint', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,1,', 1, '企业网站第一期', 'coWeb1', '2020-06-05', '2021-12-04', '0000-00-00', '0000-00-00', 391, 'doing', '', '1', '开发企业网站的基本雏形。<br />', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 5, '0'),
(2, 7, '', 'sprint', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,2,', 1, '企业网站第二期', 'coWebsite2', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 260, 'wait', '', '1', '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 10, '0'),
(7, 0, 'scrum', 'project', 'sprint', '0', 'CNY', '', 0, '0', '', 'extend', 6, ',6,7,', 2, '企业管理系统', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', 'admin', '2021-04-28 11:22:04', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'projectManager', '', '', '', 'open', ',tester3,admin', 35, '0'),
(6, 0, '', 'program', 'sprint', '0', 'CNY', '', 0, '0', '', '', 0, ',6,', 1, '企业管理', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '', '', '', 'open', '', 30, '0');
INSERT INTO `zt_projectcase` (`project`, `product`, `case`, `count`, `version`, `order`) VALUES
(1, 1, 2, 1, 1, 4),
(7, 1, 1, 1, 1, 5),
File diff suppressed because it is too large Load Diff
+2
View File
@@ -1,6 +1,8 @@
UPDATE `zt_action` SET `action` = 'reviewpassed' WHERE `action` = 'passreviewed';
UPDATE `zt_action` SET `action` = 'reviewrejected' WHERE `action` = 'reviewclosed';
UPDATE `zt_action` SET `action` = 'reviewclarified' WHERE `action` = 'clarifyreviewed';
DELETE FROM `zt_config` WHERE `key` = 'skipYoungBlueTheme' and `section` = 'global';
UPDATE `zt_config` SET `key` = 'skipYoungBlueTheme' WHERE `key` = 'skipThemeGuide' and `section` = 'global';
DELETE FROM `zt_score` WHERE `module` = 'tutorial' AND `method` = 'finish';
CREATE TABLE `zt_mr` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+3
View File
@@ -0,0 +1,3 @@
ALTER TABLE `zt_project` drop COLUMN `product`, drop COLUMN `statge`, drop COLUMN `storyConcept`;
ALTER TABLE `zt_product` drop COLUMN `storyConcept`;
UPDATE zt_todo SET assignedTo=account,assignedBy=account,assignedDate=`date` WHERE assignedTo='';
-4
View File
@@ -634,7 +634,6 @@ CREATE TABLE IF NOT EXISTS `zt_product` (
`PO` varchar(30) NOT NULL,
`QD` varchar(30) NOT NULL,
`RD` varchar(30) NOT NULL,
`storyConcept` smallint(5) NOT NULL,
`acl` enum('open','private','custom') NOT NULL default 'open',
`whitelist` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
@@ -668,7 +667,6 @@ CREATE TABLE IF NOT EXISTS `zt_project` (
`project` mediumint(8) NOT NULL DEFAULT 0,
`model` char(30) NOT NULL,
`type` char(30) NOT NULL DEFAULT 'sprint',
`product` char(30) NOT NULL DEFAULT 'single',
`lifetime` char(30) NOT NULL DEFAULT '',
`budget` varchar(30) NOT NULL DEFAULT '0',
`budgetUnit` char(30) NOT NULL DEFAULT 'CNY',
@@ -687,10 +685,8 @@ CREATE TABLE IF NOT EXISTS `zt_project` (
`realBegan` date NOT NULL,
`realEnd` date NOT NULL,
`days` smallint(5) unsigned NOT NULL,
`storyConcept` smallint(5) unsigned NOT NULL,
`status` varchar(10) NOT NULL,
`subStatus` varchar(30) NOT NULL DEFAULT '',
`statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1',
`pri` enum('1','2','3','4') NOT NULL DEFAULT '1',
`desc` text NOT NULL,
`version` smallint(6) NOT NULL,
+33
View File
@@ -1,3 +1,36 @@
2021-10-12 15.6
修复的BUG
15263 项目文档库自定义权限问题
15248 产品计划截至时间为当日时项目集看板不显示该计划
15229 删除项目集,产品列表显示有问题
15186 产品计划关联研发需求界面搜索功能按条件搜索不到
15167 新手教程的提Bug任务没有需要输入的内容
15143 手册中搜索的下一页链接不正确
15089 项目集看板中未过期计划和正常发布中无数字显示
15088 使用指令修改任务状态无效
15065 点击完bug所属产品后再点击其他模块报错
14983 后台-二次开发-数据库很多字段描述是空的
14970 禅道页面加载十几秒
14929 创建产品时不选择项目集,重新编辑时不能修改所属项目集
14862 执行-测试-用例 页面展示了未和执行和需求相关的用例
14851 新手教程创建项目集没有提示保存
14785 集成gitlab时,gitlab列表不显示数据
14748 产品提交需求界面创建计划多次点击保存会生成多条数据
14690 新手教程语言项显示问题
14679 等保三级扫描的pro10.1版本漏洞
14674 普通用户帮助手册页点击下拉无响应
14632 浏览器通知只在地盘-仪表盘页面显示,不能在任意禅道页面推送显示。
14629 升级后下载附件提示乱码
14607 搜索条件保存后修改条件再次搜索无效
14594 顶级项目添加执行不能复制当前项目团队成员
14528 从我近期参与的项目页返回后显示空白页
14523 视野维护中移除可访问项目集后,该项目集可访问人员中没同步移除相关用户
14487 无用php记录太多拉低禅道整体性能
14486 需求搜索数据错误
14018 项目集排序权限没有登记
13907 已延期的产品添加迭代,迭代时间只能选择过去时间
13815 项目设置权限不生效
2021-09-14 15.5
完成的需求
28102 在项目集中添加批量编辑项目功能
+2 -2
View File
@@ -88,11 +88,11 @@ class api extends router
}
else
{
$this->path = trim((strpos($_SERVER['REQUEST_URI'], '?') > 0 ? strstr($_SERVER['REQUEST_URI'], '?', true) : $_SERVER['REQUEST_URI']), '/');
$this->path = rtrim((strpos($_SERVER['REQUEST_URI'], '?') > 0 ? strstr($_SERVER['REQUEST_URI'], '?', true) : $_SERVER['REQUEST_URI']), '/');
}
$dir = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/');
if($dir != '') $this->path = substr($this->path, strlen($dir));
if($dir != '' and strpos($this->path, $dir) === 0) $this->path = substr($this->path, strlen($dir));
$subPos = strpos($this->path, '/', 1);
+1 -1
View File
@@ -581,7 +581,7 @@ class baseHelper
* @access public
* @return void
*/
static function cd($path = '')
static public function cd($path = '')
{
static $cwd = '';
if($path) $cwd = getcwd();
+1 -1
View File
@@ -898,7 +898,7 @@ class baseRouter
*/
public function setOpenApp()
{
if(isset($_COOKIE['tab']) and $_COOKIE['tab'])
if(isset($_COOKIE['tab']) and $_COOKIE['tab'] and preg_match('/^\w+$/', $_COOKIE['tab']))
{
$this->tab = $_COOKIE['tab'];
}
+3 -1
View File
@@ -341,7 +341,9 @@ class control extends baseControl
$message = array();
foreach($fields as $field)
{
if($field->buildin or !$field->show or !isset($layouts[$field->field])) continue;
if(!empty($field->buildin)) continue;
if(empty($field->show)) continue;
if(!isset($layouts[$field->field])) continue;
$fieldRules = explode(',', trim($field->rules, ','));
$fieldRules = array_unique($fieldRules);
+1 -1
View File
@@ -12,7 +12,7 @@
$lang->action->common = 'Log';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->executionCommon;
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Objekt Name';
+18 -13
View File
@@ -11,19 +11,24 @@
*/
global $config;
$lang->action->common = 'Log';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Object Name';
$lang->action->actor = 'User';
$lang->action->action = 'Action';
$lang->action->actionID = 'Action ID';
$lang->action->date = 'Date';
$lang->action->extra = 'Extra';
$lang->action->system = 'System';
$lang->action->common = 'Log';
$lang->action->id = 'ID';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Object Name';
$lang->action->actor = 'User';
$lang->action->action = 'Action';
$lang->action->actionID = 'Action ID';
$lang->action->date = 'Date';
$lang->action->extra = 'Extra';
$lang->action->system = 'System';
$lang->action->url = 'URL';
$lang->action->contentType = 'Content Type';
$lang->action->data = 'Data';
$lang->action->result = 'Result';
$lang->action->trash = 'Recycle';
$lang->action->undelete = 'Restore';
+2 -2
View File
@@ -11,8 +11,8 @@
*/
$lang->action->common = 'Log';
$lang->action->product = $lang->productCommon;
$lang->action->project = $lang->executionCommon;
$lang->action->execution = $lang->executionCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = "Type d'objet";
$lang->action->objectID = 'ID';
$lang->action->objectName = "Nom de l'object";
+1 -1
View File
@@ -12,7 +12,7 @@
$lang->action->common = 'Nhật ký';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->executionCommon;
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = 'Loại đối tượng';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Tên đối tượng';
+18 -13
View File
@@ -11,19 +11,24 @@
*/
global $config;
$lang->action->common = '系统日志';
$lang->action->product = $lang->productCommon;
$lang->action->project = '项目';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = '对象类型';
$lang->action->objectID = '对象ID';
$lang->action->objectName = '对象名称';
$lang->action->actor = '操作者';
$lang->action->action = '动作';
$lang->action->actionID = '记录ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系统';
$lang->action->common = '系统日志';
$lang->action->id = '编号';
$lang->action->product = $lang->productCommon;
$lang->action->project = '项目';
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = '对象类型';
$lang->action->objectID = '对象ID';
$lang->action->objectName = '对象名称';
$lang->action->actor = '操作者';
$lang->action->action = '动作';
$lang->action->actionID = '记录ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系统';
$lang->action->url = '网址';
$lang->action->contentType = '内容类型';
$lang->action->data = '数据';
$lang->action->result = '结果';
$lang->action->trash = '回收站';
$lang->action->undelete = '还原';
+18 -13
View File
@@ -11,19 +11,24 @@
*/
global $config;
$lang->action->common = '系統日誌';
$lang->action->product = $lang->productCommon;
$lang->action->project = '項目';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = '對象類型';
$lang->action->objectID = '對象ID';
$lang->action->objectName = '對象名稱';
$lang->action->actor = '操作者';
$lang->action->action = '動作';
$lang->action->actionID = '記錄ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系統';
$lang->action->common = '系統日誌';
$lang->action->id = '編號';
$lang->action->product = $lang->productCommon;
$lang->action->project = '項目';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = '對象類型';
$lang->action->objectID = '對象ID';
$lang->action->objectName = '對象名稱';
$lang->action->actor = '操作者';
$lang->action->action = '動作';
$lang->action->actionID = '記錄ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系統';
$lang->action->url = '網址';
$lang->action->contentType = '內容類型';
$lang->action->data = '數據';
$lang->action->result = '結果';
$lang->action->trash = '資源回收筒';
$lang->action->undelete = '還原';
+5 -5
View File
@@ -49,7 +49,7 @@ class actionModel extends model
$action->date = helper::now();
$action->extra = $extra;
if($objectType == 'story' and $actionType !== 'reviewed' and strpos(',reviewclosed,passreviewed,clarifyreviewed,', ",$actionType,") !== false) $action->actor = $this->lang->action->system;
if($objectType == 'story' and strpos(',reviewpassed,reviewrejected,reviewclarified,', ",$actionType,") !== false) $action->actor = $this->lang->action->system;
/* Use purifier to process comment. Fix bug #2683. */
$action->comment = fixer::stripDataTags($comment);
@@ -338,7 +338,7 @@ class actionModel extends model
elseif($actionName == 'moved')
{
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
if($name) $action->extra = common::hasPriv('project', 'task') ? html::a(helper::createLink('project', 'task', "projectID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
if($name) $action->extra = common::hasPriv('execution', 'task') ? html::a(helper::createLink('execution', 'task', "executionID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
}
elseif($actionName == 'frombug' and common::hasPriv('bug', 'view'))
{
@@ -774,7 +774,7 @@ class actionModel extends model
/* If is project, select its related. */
$executions = array();
if(is_numeric($projectID)) $executions = $this->loadModel('execution')->getPairs($projectID);
if(is_numeric($projectID) and $executionID == 'all') $executions = $this->loadModel('execution')->getPairs($projectID);
$this->loadModel('doc');
$libs = $this->doc->getLibs('includeDeleted') + array('' => '');
@@ -864,8 +864,8 @@ class actionModel extends model
}
if($this->session->actionQuery == false) $this->session->set('actionQuery', ' 1 = 1');
$allProducts = "`product` = 'all'";
$allProjects = "`project` = 'all'";
$allProducts = "`product` = 'all'";
$allProjects = "`project` = 'all'";
$allExecutions = "`execution` = 'all'";
$actionQuery = $this->session->actionQuery;
-4
View File
@@ -76,10 +76,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' von ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
$lang->block->params->value = 'Wert';
$lang->block->createBlock = 'InfoBlock erstellen';
$lang->block->editBlock = 'Bearbeiten';
$lang->block->ordersSaved = 'Sortierung gespeichert.';
+2 -4
View File
@@ -12,6 +12,8 @@
global $config;
$lang->block = new stdclass();
$lang->block->common = 'Block';
$lang->block->id = 'ID';
$lang->block->params = 'Params';
$lang->block->name = 'Name';
$lang->block->style = 'Style';
$lang->block->grid = 'Position';
@@ -76,10 +78,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' of ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
$lang->block->params->value = 'Value';
$lang->block->createBlock = 'Add Block';
$lang->block->editBlock = 'Edit Block';
$lang->block->ordersSaved = 'The order is saved.';
-4
View File
@@ -76,10 +76,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' di ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Nom';
$lang->block->params->value = 'Valeur';
$lang->block->createBlock = 'Ajouter Bloc';
$lang->block->editBlock = 'Editer Bloc';
$lang->block->ordersSaved = 'L´ordre a été sauvegardé.';
-4
View File
@@ -76,10 +76,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' thực ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Tên';
$lang->block->params->value = 'Giá trị';
$lang->block->createBlock = 'Thêm Block';
$lang->block->editBlock = 'Sửa Block';
$lang->block->ordersSaved = 'Thứ tự đã được lưu';
+2 -4
View File
@@ -12,6 +12,8 @@
global $config;
$lang->block = new stdclass();
$lang->block->common = '区块';
$lang->block->id = '编号';
$lang->block->params = '参数';
$lang->block->name = '区块名称';
$lang->block->style = '外观';
$lang->block->grid = '位置';
@@ -76,10 +78,6 @@ $lang->block->selectProduct = '选择产品';
$lang->block->of = '的';
$lang->block->remain = '剩余工时';
$lang->block->params = new stdclass();
$lang->block->params->name = '参数名称';
$lang->block->params->value = '参数值';
$lang->block->createBlock = '添加区块';
$lang->block->editBlock = '编辑区块';
$lang->block->ordersSaved = '排序已保存';
+3 -5
View File
@@ -12,6 +12,8 @@
global $config;
$lang->block = new stdclass();
$lang->block->common = '區塊';
$lang->block->id = '編號';
$lang->block->params = '參數';
$lang->block->name = '區塊名稱';
$lang->block->style = '外觀';
$lang->block->grid = '位置';
@@ -76,10 +78,6 @@ $lang->block->selectProduct = '選擇產品';
$lang->block->of = '的';
$lang->block->remain = '剩餘工時';
$lang->block->params = new stdclass();
$lang->block->params->name = '參數名稱';
$lang->block->params->value = '參數值';
$lang->block->createBlock = '添加區塊';
$lang->block->editBlock = '編輯區塊';
$lang->block->ordersSaved = '排序已保存';
@@ -538,7 +536,7 @@ $lang->block->typeList->testtask['done'] = '已測版本';
$lang->block->typeList->testtask['all'] = '全部';
$lang->block->modules['project']->moreLinkList = new stdclass();
$lang->block->modules['project']->moreLinkList->recentproject = 'project|browse|';
$lang->block->modules['project']->moreLinkList->recentproject = $config->systemMode == 'new' ? 'project|browse|' : 'execution|all|';
$lang->block->modules['project']->moreLinkList->statistic = 'project|browse|';
$lang->block->modules['project']->moreLinkList->project = 'project|browse|';
$lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|';
+1 -1
View File
@@ -17,7 +17,7 @@
.table .c-burn {width: 150px;}
</style>
<?php if(empty($executionStats)): ?>
<div class='empty-tip'><?php common::printLink('execution', 'create', '', "<i class='icon-plus'></i> " . $lang->execution->create, '', "class='btn btn-primary'")?></div>
<div class='empty-tip'><?php common::printLink('execution', 'create', '', "<i class='icon-plus'></i> " . $lang->execution->create, '', "class='btn btn-primary' data-app='execution'")?></div>
<?php else:?>
<div class="panel-body has-table scrollbar-hover">
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-projects tablesorter'>
@@ -17,7 +17,7 @@
#cards .project-infos > span {display: inline-block; line-height: 12px;}
#cards .project-infos > span > .icon {font-size: 12px; display: inline-block; position: relative; top: -1px}
#cards .project-infos > span + span {margin-left: 10px;}
#cards .project-detail {position: absolute; bottom: 16px; left: 16px; right: 16px; font-size: 12px;}
#cards .project-detail {position: absolute; bottom: 16px; left: 16px; right: 16px; font-size: 12px; padding-left: 10px;}
#cards .project-detail > p {margin-bottom: 8px;}
#cards .project-detail .progress {height: 4px;}
#cards .project-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
?>
<?php $this->app->loadLang('story');?>
<?php if(empty($stories)): ?>
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
<?php else:?>
+1 -1
View File
@@ -26,7 +26,7 @@ $config->bug->list->allFields = 'id, module, execution, story, task,
$config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution';
$config->bug->list->exportFields = 'id, product, branch, module, execution, story, task,
$config->bug->list->exportFields = 'id, product, branch, module, project, execution, story, task,
title, keywords, severity, pri, type, os, browser,
steps, status, deadline, activatedCount, confirmed, mailto,
openedBy, openedDate, openedBuild,
+6 -4
View File
@@ -574,12 +574,12 @@ class bug extends control
/* Set custom. */
foreach(explode(',', $this->config->bug->list->customCreateFields) as $field) $customFields[$field] = $this->lang->bug->$field;
$title = isset($this->products[$productID]) ? $this->products[$productID] . $this->lang->colon . $this->lang->bug->create : $this->lang->bug->create;
$this->view->title = $title;
$this->view->title = isset($this->products[$productID]) ? $this->products[$productID] . $this->lang->colon . $this->lang->bug->create : $this->lang->bug->create;
$this->view->customFields = $customFields;
$this->view->showFields = $this->config->bug->custom->createFields;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('bug', 'browse', "productID=$productID") : '';
$this->view->products = $products;
$this->view->productID = $productID;
$this->view->productName = isset($this->products[$productID]) ? $this->products[$productID] : '';
@@ -724,7 +724,7 @@ class bug extends control
/* Judge bug exits or not. */
$bugID = (int)$bugID;
$bug = $this->bug->getById($bugID, true);
if(!$bug) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$bug) die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
$this->session->set('storyList', '', 'product');
$this->session->set('projectList', $this->app->getURI(true) . "#app={$this->app->tab}", 'project');
@@ -1719,6 +1719,7 @@ class bug extends control
/* Get users, products and executions. */
$users = $this->loadModel('user')->getPairs('noletter');
$products = $this->loadModel('product')->getPairs();
$projects = $this->loadModel('project')->getPairsByProgram();
$executions = $this->loadModel('execution')->getPairs($this->projectID, 'all', 'all');
/* Get related objects id lists. */
@@ -1777,6 +1778,7 @@ class bug extends control
/* fill some field with useful value. */
$bug->product = !isset($products[$bug->product]) ? '' : $products[$bug->product] . "(#$bug->product)";
$bug->project = !isset($projects[$bug->project]) ? '' : $projects[$bug->project] . "(#$bug->project)";
$bug->execution = !isset($executions[$bug->execution]) ? '' : $executions[$bug->execution] . "(#$bug->execution)";
$bug->story = !isset($relatedStories[$bug->story]) ? '' : $relatedStories[$bug->story] . "(#$bug->story)";
$bug->task = !isset($relatedTasks[$bug->task]) ? '' : $relatedTasks[$bug->task] . "($bug->task)";
@@ -1802,7 +1804,7 @@ class bug extends control
if(isset($users[$bug->lastEditedBy])) $bug->lastEditedBy = $users[$bug->lastEditedBy];
if(isset($users[$bug->closedBy])) $bug->closedBy = $users[$bug->closedBy];
$bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES);
$bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES);
if($bug->linkBug)
{
+1
View File
@@ -44,3 +44,4 @@ html[lang='en'] #deadlineTd .input-group-addon {padding: 5px 18px;}
#typeBox .required:after {right: 1px;}
#osBox .required:after {right: 1px;}
#osBox {width: 190px;}
#projectBox .required:after {right: 1px;}
+7
View File
@@ -1,4 +1,11 @@
$(function()
{
if($('#bugList thead th.c-title').width() < 150) $('#bugList thead th.c-title').width(150);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+7
View File
@@ -30,6 +30,13 @@ $lang->bug->pri = 'Priority';
$lang->bug->type = 'Type';
$lang->bug->os = 'OS';
$lang->bug->browser = 'Browser';
$lang->bug->hardware = 'Hardware';
$lang->bug->result = 'Result';
$lang->bug->repo = 'Repo';
$lang->bug->lines = 'Lines';
$lang->bug->v1 = 'Version A';
$lang->bug->v2 = 'Version B';
$lang->bug->repoType = 'Repo Type';
$lang->bug->steps = 'Repro Steps';
$lang->bug->status = 'Status';
$lang->bug->statusAB = 'Status';
+7
View File
@@ -30,6 +30,13 @@ $lang->bug->pri = '优先级';
$lang->bug->type = 'Bug类型';
$lang->bug->os = '操作系统';
$lang->bug->browser = '浏览器';
$lang->bug->hardware = '硬件';
$lang->bug->result = '结果';
$lang->bug->repo = '所属版本库';
$lang->bug->lines = '代码行';
$lang->bug->v1 = '版本1';
$lang->bug->v2 = '版本2';
$lang->bug->repoType = '版本库类型';
$lang->bug->steps = '重现步骤';
$lang->bug->status = 'Bug状态';
$lang->bug->statusAB = '状态';
+7
View File
@@ -30,6 +30,13 @@ $lang->bug->pri = '優先順序';
$lang->bug->type = 'Bug類型';
$lang->bug->os = '操作系統';
$lang->bug->browser = '瀏覽器';
$lang->bug->hardware = '硬件';
$lang->bug->result = '結果';
$lang->bug->repo = '所屬版本庫';
$lang->bug->lines = '代碼行';
$lang->bug->v1 = '版本1';
$lang->bug->v2 = '版本2';
$lang->bug->repoType = '版本庫類型';
$lang->bug->steps = '重現步驟';
$lang->bug->status = 'Bug狀態';
$lang->bug->statusAB = '狀態';
+1 -1
View File
@@ -202,7 +202,7 @@ class bugModel extends model
foreach(explode(',', $this->config->bug->create->requiredFields) as $field)
{
$field = trim($field);
if($field and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field)));
if($field and isset($bug->$field) and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field)));
}
$bugs[$i] = $bug;
+2 -1
View File
@@ -328,7 +328,8 @@ js::set('moduleID', $moduleID);
<?php $browseLink = $this->session->bugList ? $this->session->bugList : $this->inlink('browse', "productID=$productID");?>
<?php echo html::submitButton();?>
<?php if($caseID) echo html::a($browseLink, $lang->goback, '', 'class="btn btn-wide"');?>
<?php if(!$caseID) echo html::backButton();?>
<?php if(!$caseID and $gobackLink) echo html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"');?>
<?php if(!$caseID and !$gobackLink) echo html::backButton();?>
<?php echo html::hidden('case', (int)$caseID) . html::hidden('caseVersion', (int)$version);?>
<?php echo html::hidden('result', (int)$runID) . html::hidden('testtask', empty($testtask) ? 0 : $testtask->id);?>
</td>
+4 -4
View File
@@ -46,7 +46,7 @@ class build extends control
if($this->app->tab == 'project')
{
$this->loadModel('project')->setMenu($projectID);
$executions = $this->execution->getPairs($projectID);
$executions = $this->execution->getPairs($projectID, 'all', 'stagefilter');
$executionID = empty($executionID) ? key($executions) : $executionID;
$this->session->set('project', $projectID);
}
@@ -136,7 +136,7 @@ class build extends control
$execution->name = '';
}
$executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project);
$executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project, 'stagefilter');
if(!isset($executions[$build->execution])) $executions[$build->execution] = $execution->name;
$productGroups = $this->execution->getProducts($build->execution);
@@ -188,7 +188,7 @@ class build extends control
if(!$build)
{
if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'fail', 'code' => 404, 'message' => '404 Not found'));
die(js::error($this->lang->notFound) . js::locate('back'));
die(js::error($this->lang->notFound) . js::locate($this->createLink('execution', 'all')));
}
$this->session->project = $build->project;
@@ -565,7 +565,7 @@ class build extends control
/* Set menu. */
$build = $this->build->getByID($buildID);
$product = $this->loadModel('product')->getByID($build->product);
$this->loadModel('execution')->setMenu($this->execution->getPairs($build->project), $build->execution);
$this->loadModel('execution')->setMenu($build->execution);
/* Load pager. */
$this->app->loadClass('pager', $static = true);
+2
View File
@@ -29,6 +29,7 @@ $lang->build->basicInfo = 'Basic Info';
$lang->build->id = 'ID';
$lang->build->product = $lang->productCommon;
$lang->build->project = 'Project';
$lang->build->branch = 'Platform/Branch';
$lang->build->execution = $lang->executionCommon;
$lang->build->name = 'Name';
@@ -37,6 +38,7 @@ $lang->build->builder = 'Builder';
$lang->build->scmPath = 'SCM Path';
$lang->build->filePath = 'File Path';
$lang->build->desc = 'Description';
$lang->build->mailto = 'Mailto';
$lang->build->files = 'Files';
$lang->build->last = 'Last Build';
$lang->build->packageType = 'Package Type';
+2
View File
@@ -29,6 +29,7 @@ $lang->build->basicInfo = '基本信息';
$lang->build->id = 'ID';
$lang->build->product = $lang->productCommon;
$lang->build->project = '所属项目';
$lang->build->branch = '平台/分支';
$lang->build->execution = '所属' . $lang->executionCommon;
$lang->build->name = '名称编号';
@@ -37,6 +38,7 @@ $lang->build->builder = '构建者';
$lang->build->scmPath = '源代码地址';
$lang->build->filePath = '下载地址';
$lang->build->desc = '描述';
$lang->build->mailto = 'Mailto';
$lang->build->files = '上传发行包';
$lang->build->last = '上个版本';
$lang->build->packageType = '包类型';
+2
View File
@@ -29,6 +29,7 @@ $lang->build->basicInfo = '基本信息';
$lang->build->id = 'ID';
$lang->build->product = $lang->productCommon;
$lang->build->project = '所屬項目';
$lang->build->branch = '平台/分支';
$lang->build->execution = '所屬' . $lang->executionCommon;
$lang->build->name = '名稱編號';
@@ -37,6 +38,7 @@ $lang->build->builder = '構建者';
$lang->build->scmPath = '原始碼地址';
$lang->build->filePath = '下載地址';
$lang->build->desc = '描述';
$lang->build->mailto = 'Mailto';
$lang->build->files = '上傳發行包';
$lang->build->last = '上個版本';
$lang->build->packageType = '包類型';
+1 -1
View File
@@ -377,7 +377,7 @@ class caselib extends control
{
$libID = (int)$libID;
$lib = $this->caselib->getById($libID, true);
if(!isset($lib->id)) die(js::error($this->lang->notFound) . js::locate('back'));
if(!isset($lib->id)) die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
/* Set lib menu. */
$libraries = $this->caselib->getLibraries();
+10
View File
@@ -20,3 +20,13 @@ function confirmBatchDelete(actionLink)
if(confirm(batchDelete)) setFormAction(actionLink);
return false;
}
$(function()
{
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+65 -26
View File
@@ -119,6 +119,8 @@ class commonModel extends model
$user->id = 0;
$user->account = 'guest';
$user->realname = 'guest';
$user->dept = 0;
$user->avatar = '';
$user->role = 'guest';
$user->admin = false;
$user->rights = $this->loadModel('user')->authorize('guest');
@@ -223,6 +225,7 @@ class commonModel extends model
$user = $this->app->user;
$user->rights = $this->loadModel('user')->authorize($user->account);
$user->groups = $this->user->getGroups($user->account);
$user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false;
$this->session->set('user', $user);
$this->app->user = $this->session->user;
if(commonModel::hasPriv($module, $method)) return true;
@@ -358,9 +361,21 @@ class commonModel extends model
$html .= "<i class='icon icon-plus-solid-circle text-secondary'></i>";
$html .= "</a><ul class='dropdown-menu pull-right create-list'>";
/* Initialize the default values. */
$showCreateList = $needPrintDivider = false;
$productID = isset($_SESSION['product']) ? $_SESSION['product'] : 0;
if(!$productID and $app->user->view->products) $productID = current(explode(',', $app->user->view->products));
/* Get default product id. */
$deletedProducts = $app->dbh->query("SELECT id FROM " . TABLE_PRODUCT . " WHERE `deleted` = '1'")->fetchAll();
$deletedProductIds = array();
foreach($deletedProducts as $product) $deletedProductIds[] = $product->id;
$productID = (isset($_SESSION['product']) and !in_array($_SESSION['product'], $deletedProductIds)) ? $_SESSION['product'] : 0;
if(!$productID and $app->user->view->products)
{
$viewProducts = explode(',', $app->user->view->products);
$viewProducts = array_diff($viewProducts, $deletedProductIds);
$productID = current($viewProducts);
}
/* Check whether the creation permission is available, and print create buttons. */
foreach($lang->createIcons as $objectType => $objectIcon)
@@ -392,13 +407,21 @@ class commonModel extends model
$attr = $objectType == 'doc' ? "class='iframe' data-width='650px'" : '';
$params = '';
if(strpos('bug|testcase|story', $objectType) !== false) $params = "productID=$productID";
if($objectType == 'doc')
{
$params = "objectType=&objectID=0&libID=0";
$createMethod = 'selectLibType';
}
if($objectType == 'bug') $params = "productID=$productID&branch=&extras=from=global";
if($objectType == 'story') $params = "productID=$productID&branch=0&moduleID=0&storyID=0&objectID=0&bugID=0&planID=0&todoID=0&extra=from=global";
if($objectType == 'task') $params = "executionID=0&storyID=0&moduleID=0&taskID=0&todoID=0&extra=from=global";
if($objectType == 'testcase') $params = "productID=$productID&branch=&moduleID=0&from=&param=0&storyID=0&extras=from=global";
if($objectType == 'execution') $params = "projectID=&executionID=0&copyExecutionID=0&planID=0&confirm=no&productID=0&extra=from=global";
if($objectType == 'project') $params = "model=scrum&programID=0&copyProjectID=0&extra=from=global";
if($objectType == 'product') $params = "programID=&extra=from=global";
if($objectType == 'program') $params = "parentProgramID=0&extra=from=global";
$html .= '<li>' . html::a(helper::createLink($objectType, $createMethod, $params, '', $isOnlyBody), "<i class='icon icon-$objectIcon'></i> " . $lang->createObjects[$objectType], '', $isOnlyBody ? $attr : '') . '</li>';
}
}
@@ -671,6 +694,23 @@ class commonModel extends model
}
}
/* Check whether other methods under the module have permissions. If yes, point to other methods. */
if($display == false and isset($lang->$currentModule->menu))
{
foreach($lang->$currentModule->menu as $menu)
{
$linkPart = explode('|', $menu['link']);
if(!isset($linkPart[2])) continue;
$method = $linkPart[2];
if(common::hasPriv($currentModule, $method))
{
$display = true;
$currentMethod = $method;
if(!isset($menu['target'])) break; // Try to jump to the method without opening a new window.
}
}
}
if(!$display) continue;
/* Assign vars. */
@@ -688,7 +728,7 @@ class commonModel extends model
}
/* Fix bug 14574. */
if(array_slice($items, -1)[0] == 'divider') array_pop($items);
if(end($items) == 'divider') array_pop($items);
return $items;
}
@@ -1277,7 +1317,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 == 'classic' and strtolower($module) == 'project') $method = substr(strtolower($method), 3);
if($config->systemMode == 'classic' and strtolower($module) == 'project') $module = 'execution';
if(!commonModel::hasPriv($module, $method, $object)) return false;
$link = helper::createLink($module, $method, $vars, '', $onlyBody, $programID);
@@ -1914,18 +1954,6 @@ EOD;
if(isset($this->app->user))
{
$this->app->user = $this->session->user;
$inProject = (isset($this->lang->navGroup->$module) && $this->lang->navGroup->$module == 'project');
if(!defined('IN_UPGRADE') and $inProject)
{
/* Check program priv. */
$viewProjects = trim($this->app->user->view->projects, ',');
$accessDenied = ($this->session->project and $viewProjects and strpos(",{$viewProjects},", ",{$this->session->project},") === false);
if($accessDenied and !$this->app->user->admin) $this->loadModel('project')->accessDenied();
$this->resetProgramPriv($module, $method);
if(!commonModel::hasPriv($module, $method)) $this->deny($module, $method, false);
}
if(!commonModel::hasPriv($module, $method)) $this->deny($module, $method);
}
else
@@ -1994,20 +2022,19 @@ EOD;
}
/**
* Reset program priv.
* Reset project priv.
*
* @param string $module
* @param string $method
* @static
* @param int $projectID
* @access public
* @return void
*/
public function resetProgramPriv($module, $method)
public function resetProjectPriv($projectID = 0)
{
/* Get user program priv. */
if(!$this->app->session->project) return;
if(empty($projectID) and $this->session->project) $projectID = $this->session->project;
if(empty($projectID)) return;
$program = $this->dao->findByID($this->app->session->project)->from(TABLE_PROJECT)->fetch();
$program = $this->dao->findByID($projectID)->from(TABLE_PROJECT)->fetch();
if(empty($program)) return;
$programRights = $this->dao->select('t3.module, t3.method')->from(TABLE_GROUP)->alias('t1')
@@ -2023,18 +2050,30 @@ EOD;
foreach($programRights as $programRight) $programRightGroup[$programRight->module][$programRight->method] = 1;
/* Reset priv by program privway. */
$this->app->user->rights = $this->loadModel('user')->authorize($this->app->user->account);
$rights = $this->app->user->rights['rights'];
$this->app->user = clone $_SESSION['user'];
if($program->auth == 'extend') $this->app->user->rights['rights'] = array_merge_recursive($programRightGroup, $rights);
if($program->auth == 'reset')
{
$recomputedRights = $this->loadModel('user')->authorize($this->app->user->account);
$recomputedRights = $recomputedRights['rights'];
/* If priv way is reset, unset common program priv, and cover by program priv. */
foreach($rights as $moduleKey => $methods)
{
if(in_array($moduleKey, $this->config->programPriv->waterfall)) unset($rights[$moduleKey]);
}
$this->app->user->rights['rights'] = array_merge($rights, $programRightGroup);
$recomputedRights = array_merge($rights, $programRightGroup);
/* Set base priv for project. */
$projectRights = zget($this->app->user->rights['rights'], 'project', array());
if(isset($projectRights['browse']) and !isset($recomputedRights['project']['browse'])) $recomputedRights['project']['browse'] = 1;
if(isset($projectRights['kanban']) and !isset($recomputedRights['project']['kanban'])) $recomputedRights['project']['kanban'] = 1;
if(isset($projectRights['index']) and !isset($recomputedRights['project']['index'])) $recomputedRights['project']['index'] = 1;
$this->app->user->rights['rights'] = $recomputedRights;
}
}
+1 -1
View File
@@ -47,7 +47,7 @@
#kanbanList .kanban-col[data-type="unclosedProduct"] .kanban-item:hover {box-shadow: none;}
#kanbanList .kanban-col[data-type="unclosedProduct"] .kanban-item > .title {white-space: normal;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title {display: flex; flex-direction: row; flex-wrap: nowrap; align-items: center; height: 38px;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: block; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: block; white-space: nowrap; text-overflow: clip; overflow: hidden;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title.has-icon > .text {margin-right: 5px; max-width: calc(100% - 20px);}
#kanbanList .no-flex .kanban-col[data-type="normalRelease"] .kanban-item > .title {display: block; height: 38px;}
#kanbanList .no-flex .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: inline-block;}
+1
View File
@@ -25,6 +25,7 @@
function submitForm(type)
{
$('.modal-body #insert').val(type == 'insert' ? 1 : 0);
$('#importNoticeModal .form-actions .btn').addClass('disabled');
$("button[data-target='#importNoticeModal']").closest('form').submit();
}
</script>
+25 -24
View File
@@ -163,10 +163,14 @@ class company extends control
* @param int $recTotal
* @param string $date
* @param string $direction next|pre
* @param int $userID
* @param int $productID
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
public function dynamic($browseType = 'today', $param = '', $recTotal = 0, $date = '', $direction = 'next')
public function dynamic($browseType = 'today', $param = '', $recTotal = 0, $date = '', $direction = 'next', $userID = '', $productID = 0, $projectID = 0, $executionID = 0)
{
$this->company->setMenu();
$this->app->loadLang('user');
@@ -202,20 +206,8 @@ class company extends control
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = $this->loadModel('common')->appendOrder($orderBy);
/* Set the user and type. */
$account = 'all';
$user = '';
if($browseType == 'account')
{
$user = $this->loadModel('user')->getById((int)$param, 'id');
if($user) $account = $user->account;
}
$product = $browseType == 'product' ? $param : 'all';
$project = $browseType == 'project' ? $param : 'all';
$execution = $browseType == 'execution' ? $param : 'all';
$period = in_array($browseType, array('account', 'product', 'project', 'execution')) ? 'all' : $browseType;
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$date = empty($date) ? '' : date('Y-m-d', $date);
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$date = empty($date) ? '' : date('Y-m-d', $date);
/* Get products' list.*/
$products = $this->loadModel('product')->getPairs('nocode');
@@ -224,15 +216,17 @@ class company extends control
/* Get projects' list.*/
$projects = $this->loadModel('project')->getPairsByProgram(0);
$projects = array($this->lang->company->project) + $projects;
$this->view->projects = $projects;
$this->view->projects = array($this->lang->company->project) + $projects;;
/* Get executions' list.*/
$executions = $this->loadModel('execution')->getPairs(0, 'all', 'nocode');
$executions = array($this->lang->company->execution) + $executions;
$executions = array($this->lang->execution->common) + $executions;
$this->view->executions = $executions;
/* Get users.*/
/* Set account and get users.*/
$user = $userID ? $this->loadModel('user')->getById($userID, 'id') : '';
$account = $user ? $user->account : 'all';
$userIdPairs = $this->loadModel('user')->getPairs('noclosed|nodeleted|noletter|useid');
$userIdPairs[''] = $this->lang->company->user;
$this->view->userIdPairs = $userIdPairs;
@@ -247,7 +241,10 @@ class company extends control
/* Get actions. */
if($browseType != 'bysearch')
{
$actions = $this->action->getDynamic($account, $period, $sort, $pager, $product, $project, $execution, $date, $direction);
if(!$productID) $productID = 'all';
if(!$projectID) $projectID = 'all';
if(!$executionID) $executionID = 'all';
$actions = $this->action->getDynamic($account, $browseType, $sort, $pager, $productID, $projectID, $executionID, $date, $direction);
}
else
{
@@ -257,10 +254,13 @@ class company extends control
/* Build search form. */
$executions[0] = '';
$products[0] = '';
$projects[0] = '';
ksort($executions);
ksort($products);
ksort($projects);
$executions['all'] = $this->lang->execution->allExecutions;
$products['all'] = $this->lang->product->allProduct;
$projects['all'] = $this->lang->project->all;
foreach($this->lang->action->search->label as $action => $name)
{
@@ -280,14 +280,15 @@ class company extends control
$this->view->browseType = $browseType;
$this->view->account = $account;
$this->view->accountPairs = $accountPairs;
$this->view->product = $product;
$this->view->project = $project;
$this->view->execution = $execution;
$this->view->productID = $productID;
$this->view->projectID = $projectID;
$this->view->executionID = $executionID;
$this->view->queryID = $queryID;
$this->view->orderBy = $orderBy;
$this->view->pager = $pager;
$this->view->user = $user;
$this->view->userID = $userID;
$this->view->param = $param;
$this->view->browseType = $browseType;
$this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $browseType);
$this->view->direction = $direction;
$this->display();
+8 -27
View File
@@ -1,30 +1,11 @@
function changeUser(account)
$('#account, #product, #project, #execution').change(function()
{
if(account == '')
{
link = createLink('company', 'dynamic', 'type=all');
}
else
{
link = createLink('company', 'dynamic', 'type=account&param=' + account);
}
location.href = link;
}
var userID = $('#account').val();
var productID = $('#product').val();
var projectID = systemMode == 'new' ? $('#project').val() : 0;
var executionID = $('#execution').val();
function changeProduct(product)
{
link = createLink('company', 'dynamic', 'type=product&param=' + product);
browseType = browseType == 'bysearch' ? 'all' : browseType;
link = createLink('company', 'dynamic', 'browseType=' + browseType + '&param=&recTotal=0&date=&direction=next&userID=' + userID + '&productID=' + productID + '&projectID=' + projectID + '&executionID=' + executionID);
location.href = link;
}
function changeProject(project)
{
link = createLink('company', 'dynamic', 'type=project&param=' + project);
location.href = link;
}
function changeExecution(execution)
{
link = createLink('company', 'dynamic', 'type=execution&param=' + execution);
location.href = link;
}
})
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Administratoren';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Benutzer';
$lang->company->guestOptions[0] = 'Verweigern';
+3 -1
View File
@@ -18,6 +18,7 @@ $lang->company->browse = "User List";
$lang->company->dynamic = "Dynamics";
$lang->company->orgView = 'View';
$lang->company->id = 'ID';
$lang->company->name = 'Company Name';
$lang->company->phone = 'Phone';
$lang->company->fax = 'Fax';
@@ -27,10 +28,11 @@ $lang->company->website = 'Website';
$lang->company->backyard = 'Intranet';
$lang->company->guest = 'Guest Login';
$lang->company->admins = 'Administrator';
$lang->company->deleted = 'Deleted';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'User';
$lang->company->guestOptions[0] = 'Deny';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Administrateur';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Utilisateurs';
$lang->company->guestOptions[0] = 'Refusée';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Quản trị viên';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Người dùng';
$lang->company->guestOptions[0] = 'Từ chối';
+3 -1
View File
@@ -18,6 +18,7 @@ $lang->company->browse = "用户列表";
$lang->company->dynamic = "组织动态";
$lang->company->orgView = '组织视图';
$lang->company->id = '编号';
$lang->company->name = '公司名称';
$lang->company->phone = '联系电话';
$lang->company->fax = '传真';
@@ -27,10 +28,11 @@ $lang->company->website = '官网';
$lang->company->backyard = '内网';
$lang->company->guest = '匿名登录';
$lang->company->admins = '管理员';
$lang->company->deleted = '已删除';
$lang->company->product = $lang->productCommon;
$lang->company->project = '项目';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = '执行';
$lang->company->user = '用户';
$lang->company->guestOptions[0] = '不允许';
+3 -1
View File
@@ -18,6 +18,7 @@ $lang->company->browse = "用戶列表";
$lang->company->dynamic = "組織動態";
$lang->company->orgView = '組織視圖';
$lang->company->id = '編號';
$lang->company->name = '公司名稱';
$lang->company->phone = '聯繫電話';
$lang->company->fax = '傳真';
@@ -27,10 +28,11 @@ $lang->company->website = '官網';
$lang->company->backyard = '內網';
$lang->company->guest = '匿名登錄';
$lang->company->admins = '管理員';
$lang->company->deleted = '已刪除';
$lang->company->product = $lang->productCommon;
$lang->company->project = '項目';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = '執行';
$lang->company->user = '用戶';
$lang->company->guestOptions[0] = '不允許';
+7 -5
View File
@@ -11,6 +11,8 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php js::set('browseType', $browseType);?>
<?php js::set('systemMode', $config->systemMode);?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-left">
<?php foreach($lang->action->periods as $period => $label):?>
@@ -22,15 +24,15 @@
$active = 'btn-active-text';
$label .= " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
}
echo html::a(inlink('dynamic', "browseType=$period"), $label, '', "class='btn btn-link $active' id='{$period}'")
echo html::a(inlink('dynamic', "browseType=$period&param=&recTotal=0&date=&direction=next&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID"), $label, '', "class='btn btn-link $active' id='{$period}'")
?>
<?php endforeach;?>
<div class="input-control space c-user"><?php echo html::select('account', $userIdPairs, $user ? $user->id : '', 'onchange=changeUser(this.value) class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-product"><?php echo html::select('product', $products, $product, 'onchange=changeProduct(this.value) class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-user"><?php echo html::select('account', $userIdPairs, $userID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-product"><?php echo html::select('product', $products, $productID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
<?php if($config->systemMode == 'new'):?>
<div class="input-control space c-project"><?php echo html::select('project', $projects, $project, 'onchange=changeProject(this.value) class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-project"><?php echo html::select('project', $projects, $projectID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
<?php endif;?>
<div class="input-control space c-execution"><?php echo html::select('execution', $executions, $execution, 'onchange=changeExecution(this.value) class="form-control chosen" data-max_drop_width="215"'); ?></div>
<div class="input-control space c-execution"><?php echo html::select('execution', $executions, $executionID, 'class="form-control chosen" data-max_drop_width="215"'); ?></div>
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->action->dynamic->search;?></a>
</div>
</div>
+17 -7
View File
@@ -3,13 +3,23 @@ $lang->compile->common = 'Compile';
$lang->compile->browse = 'History';
$lang->compile->logs = 'Log';
$lang->compile->id = 'ID';
$lang->compile->name = 'Name';
$lang->compile->buildType = 'Engine';
$lang->compile->status = 'Status';
$lang->compile->time = 'Time';
$lang->compile->result = 'Result';
$lang->compile->refresh = 'Refresh';
$lang->compile->id = 'ID';
$lang->compile->name = 'Name';
$lang->compile->buildType = 'Engine';
$lang->compile->status = 'Status';
$lang->compile->time = 'Time';
$lang->compile->result = 'Result';
$lang->compile->refresh = 'Refresh';
$lang->compile->job = 'Job';
$lang->compile->queue = 'Queue';
$lang->compile->atTime = 'Execution Time';
$lang->compile->testtask = 'Testtask';
$lang->compile->tag = 'Tag';
$lang->compile->times = 'Times';
$lang->compile->createdBy = 'Created By';
$lang->compile->createdDate = 'Created Date';
$lang->compile->updateDate = 'Update Date';
$lang->compile->deleted = 'Deleted';
$lang->compile->statusList['success'] = 'Done';
$lang->compile->statusList['failure'] = 'Failed';
+17 -7
View File
@@ -3,13 +3,23 @@ $lang->compile->common = '构建';
$lang->compile->browse = '构建历史';
$lang->compile->logs = '构建日志';
$lang->compile->id = 'ID';
$lang->compile->name = '构建名称';
$lang->compile->buildType = '构建引擎';
$lang->compile->status = '构建状态';
$lang->compile->time = '构建时间';
$lang->compile->result = '构建结果';
$lang->compile->refresh = '刷新';
$lang->compile->id = 'ID';
$lang->compile->name = '构建名称';
$lang->compile->buildType = '构建引擎';
$lang->compile->status = '构建状态';
$lang->compile->time = '构建时间';
$lang->compile->result = '构建结果';
$lang->compile->refresh = '刷新';
$lang->compile->job = '构建任务';
$lang->compile->queue = '队列';
$lang->compile->atTime = '执行时间';
$lang->compile->testtask = '测试单';
$lang->compile->tag = '标签';
$lang->compile->times = '次数';
$lang->compile->createdBy = '由谁创建';
$lang->compile->createdDate = '创建日期';
$lang->compile->updateDate = '编辑日期';
$lang->compile->deleted = '已删除';
$lang->compile->statusList['success'] = '成功';
$lang->compile->statusList['failure'] = '失败';
+17 -7
View File
@@ -3,13 +3,23 @@ $lang->compile->common = '構建';
$lang->compile->browse = '構建歷史';
$lang->compile->logs = '構建日誌';
$lang->compile->id = 'ID';
$lang->compile->name = '構建名稱';
$lang->compile->buildType = '構建引擎';
$lang->compile->status = '構建狀態';
$lang->compile->time = '構建時間';
$lang->compile->result = '構建結果';
$lang->compile->refresh = '刷新';
$lang->compile->id = 'ID';
$lang->compile->name = '構建名稱';
$lang->compile->buildType = '構建引擎';
$lang->compile->status = '構建狀態';
$lang->compile->time = '構建時間';
$lang->compile->result = '構建結果';
$lang->compile->refresh = '刷新';
$lang->compile->job = '構建任務';
$lang->compile->queue = '隊列';
$lang->compile->atTime = '執行時間';
$lang->compile->testtask = '測試單';
$lang->compile->tag = '標籤';
$lang->compile->times = '次數';
$lang->compile->createdBy = '由誰創建';
$lang->compile->createdDate = '創建日期';
$lang->compile->updateDate = '編輯日期';
$lang->compile->deleted = '已刪除';
$lang->compile->statusList['success'] = '成功';
$lang->compile->statusList['failure'] = '失敗';
+3 -2
View File
@@ -144,8 +144,9 @@ class compileModel extends model
$this->dao->update(TABLE_COMPILE)->set('tag')->eq($lastTag)->where('id')->eq($compile->id)->exec();
}
if($job->engine == 'gitlab') $compile = $this->loadModel('job')->execGitlabPipeline($job, $compileID);
if($job->engine == 'jenkins') $compile = $this->job->execJenkinsPipeline($job, $repo, $compile->id);
$this->loadModel('job');
if($job->engine == 'gitlab') $compile = $this->job->execGitlabPipeline($job, $compileID);
if($job->engine == 'jenkins') $compile = $this->job->execJenkinsPipeline($job, $repo, $compileID);
$this->dao->update(TABLE_COMPILE)->data($compile)->where('id')->eq($compileID)->exec();
$this->dao->update(TABLE_JOB)
+2
View File
@@ -1,5 +1,7 @@
<?php
$lang->cron->common = 'Cron';
$lang->cron->id = 'ID';
$lang->cron->buildin = 'Build In';
$lang->cron->index = 'Cron Home';
$lang->cron->list = 'Task';
$lang->cron->create = 'Add';
+2
View File
@@ -1,5 +1,7 @@
<?php
$lang->cron->common = '定时任务';
$lang->cron->id = '编号';
$lang->cron->buildin = '内置';
$lang->cron->index = '首页';
$lang->cron->list = '任务列表';
$lang->cron->create = '添加';
+2
View File
@@ -1,5 +1,7 @@
<?php
$lang->cron->common = '定時任務';
$lang->cron->id = '編號';
$lang->cron->buildin = '內置';
$lang->cron->index = '首頁';
$lang->cron->list = '任務列表';
$lang->cron->create = '添加';
+1 -1
View File
@@ -53,7 +53,7 @@ $config->custom->fieldList['task']['edit'] = 'pri,estimate,estStarted,
$config->custom->fieldList['task']['finish'] = 'comment';
$config->custom->fieldList['task']['activate'] = 'assignedTo,comment';
$config->custom->fieldList['build'] = 'scmPath,filePath,desc';
$config->custom->fieldList['bug']['create'] = 'module,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['create'] = 'module,project,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['edit'] = 'plan,assignedTo,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['resolve'] = 'resolvedBuild,resolvedDate,assignedTo,comment';
$config->custom->fieldList['testcase']['create'] = 'stage,story,pri,precondition,keywords';
+1
View File
@@ -2,6 +2,7 @@
global $config;
$lang->custom->common = 'Custom';
$lang->custom->id = 'ID';
$lang->custom->index = 'Home';
$lang->custom->set = 'Customize';
$lang->custom->restore = 'Reset';
+1
View File
@@ -2,6 +2,7 @@
global $config;
$lang->custom->common = '自定义';
$lang->custom->id = '编号';
$lang->custom->index = '首页';
$lang->custom->set = '自定义配置';
$lang->custom->restore = '恢复默认';
+1
View File
@@ -2,6 +2,7 @@
global $config;
$lang->custom->common = '自定義';
$lang->custom->id = '編號';
$lang->custom->index = '首頁';
$lang->custom->set = '自定義配置';
$lang->custom->restore = '恢復預設';
+3
View File
@@ -10,6 +10,9 @@
* @link http://www.zentao.net
*/
$lang->dept->common = 'Department';
$lang->dept->id = 'ID';
$lang->dept->path = 'Path';
$lang->dept->position = 'Position';
$lang->dept->manageChild = "Child Department";
$lang->dept->edit = "Edit Department";
$lang->dept->delete = "Delete Department";
+3
View File
@@ -10,6 +10,9 @@
* @link http://www.zentao.net
*/
$lang->dept->common = '部门结构';
$lang->dept->id = '编号';
$lang->dept->path = '路径';
$lang->dept->position = '职位';
$lang->dept->manageChild = "下级部门";
$lang->dept->edit = "编辑部门";
$lang->dept->delete = "删除部门";
+3
View File
@@ -10,6 +10,9 @@
* @link http://www.zentao.net
*/
$lang->dept->common = '部門結構';
$lang->dept->id = '編號';
$lang->dept->path = '路徑';
$lang->dept->position = '職位';
$lang->dept->manageChild = "下級部門";
$lang->dept->edit = "編輯部門";
$lang->dept->delete = "刪除部門";
+4
View File
@@ -104,6 +104,7 @@ $config->dev->tableMap['doclib'] = 'doc';
$config->dev->tableMap['grouppriv'] = 'group';
$config->dev->tableMap['usercontact'] = 'user-contacts';
$config->dev->tableMap['usergroup'] = 'user';
$config->dev->tableMap['userview'] = 'user';
$config->dev->tableMap['userquery'] = 'search';
$config->dev->tableMap['usertpl'] = 'user-tpl';
$config->dev->tableMap['history'] = 'action-history';
@@ -114,7 +115,10 @@ $config->dev->tableMap['suitecase'] = 'testcase';
$config->dev->tableMap['repofiles'] = 'repo';
$config->dev->tableMap['repohistory'] = 'repo';
$config->dev->tableMap['repobranch'] = 'repo';
$config->dev->tableMap['log'] = 'action';
$config->dev->tableMap['searchindex'] = 'search';
$config->dev->tableMap['searchdict'] = 'search';
$config->dev->tableMap['testtask'] = 'testreport';
$config->dev->postParams['story']['create']['product'] = 'int';
$config->dev->postParams['story']['create']['title'] = 'string';
+3 -2
View File
@@ -39,11 +39,12 @@ class devModel extends model
{
$module = substr($table, strpos($table, '_') + 1);
$aliasModule = $subLang = '';
$this->app->loadLang($module);
try
{
if(isset($this->config->dev->tableMap[$module])) $aliasModule = $this->config->dev->tableMap[$module];
if(strpos($aliasModule, '-') !== false) list($aliasModule, $subLang) = explode('-', $aliasModule);
if(empty($aliasModule) and strpos($module, 'im_') === false) $this->app->loadLang($aliasModule ? $aliasModule : $module);
if(!empty($aliasModule) and strpos($module, 'im_') === false) $this->app->loadLang($aliasModule);
}
catch(PDOException $e)
{
@@ -69,7 +70,7 @@ class devModel extends model
$type = str_replace(array('big', 'small', 'medium', 'tiny'), '', $type);
$field = array();
$field['name'] = isset($this->lang->$module->{$rawField->field}) ? $this->lang->$module->{$rawField->field} : '';
if(empty($field['name']) and $aliasModule) $field['name'] = isset($this->lang->$aliasModule->{$rawField->field}) ? $this->lang->$aliasModule->{$rawField->field} : '';
if((empty($field['name']) or !is_string($field['name'])) and $aliasModule) $field['name'] = isset($this->lang->$aliasModule->{$rawField->field}) ? $this->lang->$aliasModule->{$rawField->field} : '';
if($subLang) $field['name'] = isset($this->lang->$aliasModule->$subLang->{$rawField->field}) ? $this->lang->$aliasModule->$subLang->{$rawField->field} : $field['name'];
if(!is_string($field['name'])) $field['name'] = '';
$field['null'] = $rawField->null;
+2 -2
View File
@@ -475,7 +475,7 @@ class doc extends control
/* Get doc. */
$docID = (int)$docID;
$doc = $this->doc->getById($docID, $version, true);
if(!$doc) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$doc) die(js::error($this->lang->notFound) . js::locate($this->createLink('doc', 'index')));
/* The global search opens in the document library. */
if(!isonlybody())
@@ -914,7 +914,7 @@ class doc extends control
if($docID)
{
$doc = $this->doc->getById($docID, $version, true);
if(!$doc) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$doc) die(js::error($this->lang->notFound));
if($doc->keywords)
{
+1 -1
View File
@@ -6,7 +6,7 @@ $(function()
{
$('#content').html(draft);
editor = KindEditor.instances[0];
editor.html(draft);
editor.html('' + draft);
$('.kindeditor-ph').remove();
}
}, 100)
+6
View File
@@ -53,6 +53,12 @@ $lang->doc->searchResult = 'Search Result';
$lang->doc->mailto = 'Mailto';
$lang->doc->noModule = 'No document in this lib, please create it';
$lang->doc->noChapter = 'No chapters or articles in this book. Please add chapters and articles.';
$lang->doc->views = 'Views';
$lang->doc->draft = 'Draft';
$lang->doc->collector = 'Collector';
$lang->doc->main = 'Main Document Library';
$lang->doc->order = 'Order';
$lang->doc->doc = 'Document';
$lang->doc->moduleDoc = 'By Module';
$lang->doc->searchDoc = 'Search';
+6
View File
@@ -53,6 +53,12 @@ $lang->doc->searchResult = '搜索结果';
$lang->doc->mailto = '抄送给';
$lang->doc->noModule = '文档库下没有目录和文档,请维护目录或者创建文档';
$lang->doc->noChapter = '手册下没有章节和文章,请维护手册';
$lang->doc->views = '浏览次数';
$lang->doc->draft = '草稿';
$lang->doc->collector = '收藏者';
$lang->doc->main = '文档主库';
$lang->doc->order = '排序';
$lang->doc->doc = '文档';
$lang->doc->moduleDoc = '按模块浏览';
$lang->doc->searchDoc = '搜索';
+6
View File
@@ -53,6 +53,12 @@ $lang->doc->searchResult = '搜索結果';
$lang->doc->mailto = '抄送給';
$lang->doc->noModule = '文檔庫下沒有目錄和文檔,請維護目錄或者創建文檔';
$lang->doc->noChapter = '手冊下沒有章節和文章,請維護手冊';
$lang->doc->views = '瀏覽次數';
$lang->doc->draft = '草稿';
$lang->doc->collector = '收藏者';
$lang->doc->main = '文檔主庫';
$lang->doc->order = '排序';
$lang->doc->doc = '文檔';
$lang->doc->moduleDoc = '按模組瀏覽';
$lang->doc->searchDoc = '搜索';
+9
View File
@@ -148,6 +148,13 @@ class docModel extends model
}
if($lib->acl == 'private') $lib->users = $this->app->user->account;
if($lib->acl == 'custom')
{
$trimedUsers = ',' . trim($lib->users, ',') . ',';
if(strpos($trimedUsers, ',' . $this->app->user->account . ',') === false) $lib->users .= ',' . $this->app->user->account;
}
$lib->name = trim($lib->name); //Temporary treatment: Code for bug #15528.
$this->dao->insert(TABLE_DOCLIB)->data($lib)->autoCheck()
->batchCheck($this->config->doc->createlib->requiredFields, 'notempty')
->exec();
@@ -177,6 +184,8 @@ class docModel extends model
$libCreatedBy = $this->dao->select('*')->from(TABLE_ACTION)->where('objectType')->eq('doclib')->andWhere('objectID')->eq($libID)->andWhere('action')->eq('created')->fetch('actor');
$lib->users = $libCreatedBy ? $libCreatedBy : $this->app->user->account;
}
$lib->name = trim($lib->name); //Temporary treatment: Code for bug #15528.
$this->dao->update(TABLE_DOCLIB)->data($lib)->autoCheck()
->batchCheck($this->config->doc->editlib->requiredFields, 'notempty')
->where('id')->eq($libID)
+1 -1
View File
@@ -25,7 +25,7 @@
<?php echo $lib->type != 'book' ? $lang->doc->editLib : $lang->doc->editBook;?>
</h2>
</div>
<form method='post' class='form-ajax'>
<form method='post' target="hiddenwin">
<table class='table table-form'>
<?php if(!empty($lib->product)):?>
<tr>
+3
View File
@@ -26,6 +26,9 @@ $lang->entry->editedby = 'EditedBy';
$lang->entry->editedDate = 'EditedDate';
$lang->entry->date = 'Requesting Time';
$lang->entry->url = 'Requesting URL';
$lang->entry->calledTime = 'Called Time';
$lang->entry->editedBy = 'Edited By';
$lang->entry->deleted = 'Deleted';
$lang->entry->confirmDelete = 'Do you want to delete this entry?';
$lang->entry->help = 'Help';
+3
View File
@@ -26,6 +26,9 @@ $lang->entry->editedby = '最后编辑';
$lang->entry->editedDate = '编辑时间';
$lang->entry->date = '请求时间';
$lang->entry->url = '请求地址';
$lang->entry->calledTime = '调用时间';
$lang->entry->editedBy = '由谁编辑';
$lang->entry->deleted = '已删除';
$lang->entry->confirmDelete = '您确认要删除该应用吗?';
$lang->entry->help = '使用说明';
+3
View File
@@ -26,6 +26,9 @@ $lang->entry->editedby = '最後編輯';
$lang->entry->editedDate = '編輯時間';
$lang->entry->date = '請求時間';
$lang->entry->url = '請求地址';
$lang->entry->calledTime = '調用時間';
$lang->entry->editedBy = '由誰編輯';
$lang->entry->deleted = '已刪除';
$lang->entry->confirmDelete = '您確認要刪除該應用嗎?';
$lang->entry->help = '使用說明';
+11 -2
View File
@@ -140,6 +140,8 @@ class execution extends control
if(common::hasPriv('execution', 'create')) $this->lang->TRActions = html::a($this->createLink('execution', 'create'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->execution->create, '', "class='btn btn-primary'");
if(!isset($_SESSION['limitedExecutions'])) $this->execution->getLimitedExecution();
/* Set browse type. */
$browseType = strtolower($status);
@@ -1206,11 +1208,12 @@ class execution extends control
* @param int $planID
* @param string $confirm
* @param string $productID
* @param string $extra
*
* @access public
* @return void
*/
public function create($projectID = '', $executionID = '', $copyExecutionID = '', $planID = 0, $confirm = 'no', $productID = 0)
public function create($projectID = '', $executionID = '', $copyExecutionID = '', $planID = 0, $confirm = 'no', $productID = 0, $extra = '')
{
/* Set menu. */
if($this->app->tab == 'project')
@@ -1231,6 +1234,9 @@ class execution extends control
unset($this->lang->doc->menu->execution['subMenu']);
}
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$this->app->loadLang('program');
$this->app->loadLang('stage');
$this->app->loadLang('programplan');
@@ -1338,6 +1344,7 @@ class execution extends control
$this->view->title = (($this->app->tab == 'execution') and ($this->config->systemMode == 'new')) ? $this->lang->execution->createExec : $this->lang->execution->create;
$this->view->position[] = $this->view->title;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'all') : '';
$this->view->executions = array('' => '') + $this->execution->getList($projectID);
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->allProducts = array(0 => '') + $this->loadModel('product')->getProductPairsByProject($projectID, 'noclosed');
@@ -2982,6 +2989,9 @@ class execution extends control
$executionLang = $this->lang->execution;
$executionConfig = $this->config->execution;
$projectID = $from == 'project' ? $this->session->project : 0;
if($projectID) $this->project->setMenu($projectID);
/* Create field lists. */
$fields = $this->post->exportFields ? $this->post->exportFields : explode(',', $executionConfig->list->exportFields);
foreach($fields as $key => $fieldName)
@@ -2991,7 +3001,6 @@ class execution extends control
unset($fields[$key]);
}
$projectID = $from == 'project' ? $this->session->project : 0;
$executionStats = $this->project->getStats($projectID, $status == 'byproduct' ? 'all' : $status, $productID, 0, 30, 'id_asc');
$users = $this->loadModel('user')->getPairs('noletter');
foreach($executionStats as $i => $execution)
+30 -6
View File
@@ -52,15 +52,12 @@ $(function()
{
if(index == 0)
{
var maxWidth = $('.chosen-container .chosen-drop.chosen-auto-max-width.in').width() - 70;
$('#teams_chosen ul .label').remove();
$(this).after(' <label class="label">' + projectCommon + '</label>');
$(this).attr('style', 'display: inline-block; vertical-align: middle; max-width: ' + maxWidth + 'px');
var projectName = subString($(this).text(), 56);
$(this).text(projectName);
$(this).append(' <label class="label">' + projectCommon + '</label>');
}
else
{
$(this).html($(this).html().replace('&nbsp;&nbsp;&nbsp;', ''));
$(this).prepend('&nbsp;&nbsp;&nbsp;');
}
})
@@ -107,3 +104,30 @@ function refreshPage(projectID)
{
location.href = createLink('execution', 'create', 'projectID=' + projectID);
}
/**
* Cut a string of letters and characters with the same length.
*
* @param string $title
* @param int $stringLength
* @access public
* @return string
*/
function subString(title, stringLength)
{
if(title.replace(/[\u4e00-\u9fa5]/g, "**").length > stringLength)
{
var length = 0;
for(var i = 0; i < title.length; i ++)
{
length += title.charCodeAt(i) > 255 ? 2 : 1;
if(length > stringLength)
{
title = title.substring(0, i) + '...';
break;
}
}
}
return title;
}
+7
View File
@@ -14,6 +14,13 @@ $(function()
adjustTableFooter();
$('body').on('click', '#toggleFold', adjustTableFooter);
$('body').on('click', '.icon.icon-angle-double-right', adjustTableFooter);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
$('#module' + moduleID).closest('li').addClass('active');
+23 -23
View File
@@ -311,31 +311,31 @@ $lang->execution->linkPRJStoryTip = "(Link {$lang->SRCommon} comes from {$la
$lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been linked under the project, and can be directly linked with {$lang->SRCommon} of the product linked with the sprint/stage)";
/* 交互提示。*/
$lang->execution->confirmDelete = "Möchten Sie {$lang->executionCommon}[%s] löschen?";
$lang->execution->confirmUnlinkMember = "Möchten Sie den Benutzer vom {$lang->executionCommon} entfernen?";
$lang->execution->confirmUnlinkStory = "Möchten Sie die Story vom {$lang->executionCommon} entfernen?";
$lang->execution->confirmDelete = "Möchten Sie {$lang->executionCommon}[%s] löschen?";
$lang->execution->confirmUnlinkMember = "Möchten Sie den Benutzer vom {$lang->executionCommon} entfernen?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?;"
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
$lang->execution->tips = 'Hinweis';
$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie ";
$lang->execution->setTeam = 'Team setzen';
$lang->execution->linkStory = 'Storys verküpfen';
$lang->execution->createTask = 'Aufgaben erstellen';
$lang->execution->goback = "Zurückkehren";
$lang->execution->noweekend = 'Ohne Wochenende';
$lang->execution->withweekend = 'Mit Wochenende';
$lang->execution->interval = 'Intervale ';
$lang->execution->fixFirstWithLeft = 'Modify the left';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
$lang->execution->tips = 'Hinweis';
$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie ";
$lang->execution->setTeam = 'Team setzen';
$lang->execution->linkStory = 'Storys verküpfen';
$lang->execution->createTask = 'Aufgaben erstellen';
$lang->execution->goback = "Zurückkehren";
$lang->execution->noweekend = 'Ohne Wochenende';
$lang->execution->withweekend = 'Mit Wochenende';
$lang->execution->interval = 'Intervale ';
$lang->execution->fixFirstWithLeft = 'Modify the left';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* 统计。*/
$lang->execution->charts = new stdclass();
+31 -25
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
/* Fields. */
$lang->execution->allExecutions = 'All ' . $lang->executionCommon . 's';
$lang->execution->allExecutions = 'All ' . $lang->execution->common . 's';
$lang->execution->allExecutionAB = 'Execution List';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = $lang->executionCommon . 'Type';
@@ -102,6 +102,12 @@ $lang->execution->noTeam = 'No team members at the moment';
$lang->execution->or = ' or ';
$lang->execution->selectProject = 'Please select project';
/* Fields of zt_team. */
$lang->execution->root = 'Root';
$lang->execution->estimate = 'estimate';
$lang->execution->consumed = 'consumed';
$lang->execution->left = 'Left';
if($this->config->systemMode == 'new') $lang->execution->copyTeamTip = "select Project/{$lang->execution->common} to copy its members";
if($this->config->systemMode == 'classic') $lang->execution->copyTeamTip = "select Project/{$lang->executionCommon} to copy its members";
@@ -313,32 +319,32 @@ if($config->systemMode == 'classic') $lang->execution->copyTeamTitle = "Choose a
if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "Choose a {$lang->project->common} or {$lang->execution->common} Team to copy.";
/* Interactive prompts. */
$lang->execution->confirmDelete = "Do you want to delete the {$lang->executionCommon}[%s]?";
$lang->execution->confirmUnlinkMember = "Do you want to unlink this User from {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "Do you want to unlink this Story from {$lang->executionCommon}?";
$lang->execution->confirmSyncStories = "After modifying the project, synchronize the execution related {$lang->SRCommon} to the new project?";
$lang->execution->confirmDelete = "Do you want to delete the {$lang->executionCommon}[%s]?";
$lang->execution->confirmUnlinkMember = "Do you want to unlink this User from {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?";
$lang->execution->confirmSyncStories = "After modifying the project, synchronize the execution related {$lang->SRCommon} to the new project?";
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the execution?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the execution. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
$lang->execution->setTeam = 'Set Team';
$lang->execution->linkStory = 'Link Story';
$lang->execution->createTask = 'Create Task';
$lang->execution->goback = "Go Back";
$lang->execution->noweekend = 'Exclude Weekend';
$lang->execution->withweekend = 'Include Weekend';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Update hours left too';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the execution. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
$lang->execution->setTeam = 'Set Team';
$lang->execution->linkStory = 'Link Story';
$lang->execution->createTask = 'Create Task';
$lang->execution->goback = "Go Back";
$lang->execution->noweekend = 'Exclude Weekend';
$lang->execution->withweekend = 'Include Weekend';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Update hours left too';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* Statistics. */
$lang->execution->charts = new stdclass();
+24 -24
View File
@@ -10,7 +10,7 @@
* @link https://www.zentao.pm
*/
/* Fields. */
$lang->execution->allExecutions = 'Tous les ' . $lang->executionCommon . 's';
$lang->execution->allExecutions = 'Tous les ' . $lang->execution->common . 's';
$lang->execution->allExecutionAB = 'Execution List';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = $lang->executionCommon . 'Type';
@@ -311,31 +311,31 @@ $lang->execution->linkPRJStoryTip = "(Link {$lang->SRCommon} comes from {$la
$lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been linked under the project, and can be directly linked with {$lang->SRCommon} of the product linked with the sprint/stage)";
/* 交互提示。*/
$lang->execution->confirmDelete = "Voulez-vous réellement supprimer le {$lang->executionCommon}[%s] ?";
$lang->execution->confirmUnlinkMember = "Voulez-vous retirer cet utilisateur du {$lang->executionCommon} ?";
$lang->execution->confirmUnlinkStory = "Voulez-vous retirer cette Story du {$lang->executionCommon} ?";
$lang->execution->confirmDelete = "Voulez-vous réellement supprimer le {$lang->executionCommon}[%s] ?";
$lang->execution->confirmUnlinkMember = "Voulez-vous retirer cet utilisateur du {$lang->executionCommon} ?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?";
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un.";
$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez ";
$lang->execution->setTeam = "Composer l'Equipe";
$lang->execution->linkStory = 'Associer Story';
$lang->execution->createTask = 'Créer des Tâches';
$lang->execution->goback = "Revenir en arrière";
$lang->execution->noweekend = 'Exclure les Weekends';
$lang->execution->withweekend = 'Inclure les Weekends';
$lang->execution->interval = 'Intervalles';
$lang->execution->fixFirstWithLeft = 'Mettre à jour les heures également';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un.";
$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez ";
$lang->execution->setTeam = "Composer l'Equipe";
$lang->execution->linkStory = 'Associer Story';
$lang->execution->createTask = 'Créer des Tâches';
$lang->execution->goback = "Revenir en arrière";
$lang->execution->noweekend = 'Exclure les Weekends';
$lang->execution->withweekend = 'Inclure les Weekends';
$lang->execution->interval = 'Intervalles';
$lang->execution->fixFirstWithLeft = 'Mettre à jour les heures également';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* 统计。*/
$lang->execution->charts = new stdclass();
+24 -24
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
/* Fields. */
$lang->execution->allExecutions = 'Tất cả ' . $lang->executionCommon;
$lang->execution->allExecutions = 'Tất cả ' . $lang->execution->common;
$lang->execution->allExecutionAB = 'Execution List';
$lang->execution->id = 'ID '.$lang->executionCommon;
$lang->execution->type = 'Loại';
@@ -312,31 +312,31 @@ $lang->execution->linkPRJStoryTip = "(Link {$lang->SRCommon} comes from {$la
$lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been linked under the project, and can be directly linked with {$lang->SRCommon} of the product linked with the sprint/stage)";
/* Interactive prompts. */
$lang->execution->confirmDelete = "Bạn có muốn xóa {$lang->executionCommon}[%s] này?";
$lang->execution->confirmUnlinkMember = "Bạn có muốn hủy liên kết người dùng này từ {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "Bạn có muốn hủy liên kết câu chuyện này từ {$lang->executionCommon}?";
$lang->execution->confirmDelete = "Bạn có muốn xóa {$lang->executionCommon}[%s] này?";
$lang->execution->confirmUnlinkMember = "Bạn có muốn hủy liên kết người dùng này từ {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?;"
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Không có {$lang->productCommon} liên kết tới {$lang->executionCommon}. Bạn sẽ được chuyển tới trang {$lang->productCommon} để liên kết.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} không thể liên kết tới {$lang->productCommon} giống nhau 2 lần.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Truy cập của bạn tới {$lang->executionCommon} bị từ chối!";
$lang->execution->tips = 'Ghi chú';
$lang->execution->afterInfo = "{$lang->executionCommon} được tạo. Tiếp theo bạn có thể ";
$lang->execution->setTeam = 'Thiết lập đội nhóm';
$lang->execution->linkStory = 'Liên kết câu chuyện';
$lang->execution->createTask = 'Tạo nhiệm vụ';
$lang->execution->goback = "Trở lại";
$lang->execution->noweekend = 'Không gồm cuối tuần';
$lang->execution->withweekend = 'Bao gồm cuối tuần';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Cập nhật cả giờ còn lại';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Không có {$lang->productCommon} liên kết tới {$lang->executionCommon}. Bạn sẽ được chuyển tới trang {$lang->productCommon} để liên kết.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} không thể liên kết tới {$lang->productCommon} giống nhau 2 lần.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Truy cập của bạn tới {$lang->executionCommon} bị từ chối!";
$lang->execution->tips = 'Ghi chú';
$lang->execution->afterInfo = "{$lang->executionCommon} được tạo. Tiếp theo bạn có thể ";
$lang->execution->setTeam = 'Thiết lập đội nhóm';
$lang->execution->linkStory = 'Liên kết câu chuyện';
$lang->execution->createTask = 'Tạo nhiệm vụ';
$lang->execution->goback = "Trở lại";
$lang->execution->noweekend = 'Không gồm cuối tuần';
$lang->execution->withweekend = 'Bao gồm cuối tuần';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Cập nhật cả giờ còn lại';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* Statistics. */
$lang->execution->charts = new stdclass();
+31 -25
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
/* 字段列表。*/
$lang->execution->allExecutions = '所有' . $lang->executionCommon;
$lang->execution->allExecutions = '所有' . $lang->execution->common;
$lang->execution->allExecutionAB = "{$lang->execution->common}列表";
$lang->execution->id = $lang->executionCommon . '编号';
$lang->execution->type = $lang->executionCommon . '类型';
@@ -102,6 +102,12 @@ $lang->execution->noTeam = '暂时没有团队成员';
$lang->execution->or = '或';
$lang->execution->selectProject = '请选择项目';
/* Fields of zt_team. */
$lang->execution->root = '源ID';
$lang->execution->estimate = '预计';
$lang->execution->consumed = '消耗';
$lang->execution->left = '剩余';
if($this->config->systemMode == 'new') $lang->execution->copyTeamTip = "可以选择复制项目或{$lang->execution->common}团队的成员";
if($this->config->systemMode == 'classic') $lang->execution->copyTeamTip = "可以选择复制{$lang->executionCommon}团队的成员";
@@ -313,32 +319,32 @@ if($config->systemMode == 'classic') $lang->execution->copyTeamTitle = "选择
if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "选择一个{$lang->project->common}或{$lang->execution->common}团队来复制";
/* 交互提示。*/
$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?";
$lang->execution->confirmUnlinkMember = "您确定从该{$lang->executionCommon}中移除该用户吗?";
$lang->execution->confirmUnlinkStory = "您确定从该{$lang->executionCommon}中移除该{$lang->SRCommon}吗?";
$lang->execution->confirmSyncStories = "修改所属项目后,执行关联的{$lang->SRCommon}是否同步到新项目中?";
$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?";
$lang->execution->confirmUnlinkMember = "您确定从该{$lang->executionCommon}中移除该用户吗?";
$lang->execution->confirmUnlinkStory = "移除该{$lang->SRCommon}后,该{$lang->SRCommon}关联的用例将被移除,该{$lang->SRCommon}关联的任务将被取消,请确认。";
$lang->execution->confirmSyncStories = "修改所属项目后,执行关联的{$lang->SRCommon}是否同步到新项目中?";
$lang->execution->confirmUnlinkExecutionStory = "您确定从该项目中移除该{$lang->SRCommon}吗?";
$lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项目下{$lang->executionCommon}相关联,请从{$lang->executionCommon}中移除后再操作。";
$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。";
$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。";
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
$lang->execution->setTeam = '设置团队';
$lang->execution->linkStory = "关联{$lang->SRCommon}";
$lang->execution->createTask = '创建任务';
$lang->execution->goback = "返回任务列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '显示周末';
$lang->execution->interval = '间隔';
$lang->execution->fixFirstWithLeft = '修改剩余工时';
$lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项目下{$lang->executionCommon}相关联,请从{$lang->executionCommon}中移除后再操作。";
$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。";
$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。";
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
$lang->execution->setTeam = '设置团队';
$lang->execution->linkStory = "关联{$lang->SRCommon}";
$lang->execution->createTask = '创建任务';
$lang->execution->goback = "返回任务列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '显示周末';
$lang->execution->interval = '间隔';
$lang->execution->fixFirstWithLeft = '修改剩余工时';
$lang->execution->unfinishedExecution = "该{$lang->executionCommon}下还有";
$lang->execution->unfinishedTask = "[%s]个未完成的任务,";
$lang->execution->unresolvedBug = "[%s]个未解决的bug,";
$lang->execution->projectNotEmpty = '所属项目不能为空。';
$lang->execution->unfinishedTask = "[%s]个未完成的任务,";
$lang->execution->unresolvedBug = "[%s]个未解决的bug,";
$lang->execution->projectNotEmpty = '所属项目不能为空。';
/* 统计。*/
$lang->execution->charts = new stdclass();
+30 -24
View File
@@ -102,6 +102,12 @@ $lang->execution->noTeam = '暫時沒有團隊成員';
$lang->execution->or = '或';
$lang->execution->selectProject = '請選擇項目';
/* Fields of zt_team. */
$lang->execution->root = '源ID';
$lang->execution->estimate = '預計';
$lang->execution->consumed = '消耗';
$lang->execution->left = '剩餘';
if($this->config->systemMode == 'new') $lang->execution->copyTeamTip = "可以選擇複製項目或{$lang->execution->common}團隊的成員";
if($this->config->systemMode == 'classic') $lang->execution->copyTeamTip = "可以選擇複製{$lang->executionCommon}團隊的成員";
@@ -313,32 +319,32 @@ if($config->systemMode == 'classic') $lang->execution->copyTeamTitle = "選擇
if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "選擇一個{$lang->project->common}或{$lang->execution->common}團隊來複制";
/* 交互提示。*/
$lang->execution->confirmDelete = "您確定刪除{$lang->executionCommon}[%s]嗎?";
$lang->execution->confirmUnlinkMember = "您確定從該{$lang->executionCommon}中移除該用戶嗎?";
$lang->execution->confirmUnlinkStory = "您確定從該{$lang->executionCommon}中移除該{$lang->SRCommon}嗎?";
$lang->execution->confirmSyncStories = "修改所屬項目後,執行關聯的{$lang->SRCommon}是否同步到新項目中?";
$lang->execution->confirmDelete = "您確定刪除{$lang->executionCommon}[%s]嗎?";
$lang->execution->confirmUnlinkMember = "您確定從該{$lang->executionCommon}中移除該用戶嗎?";
$lang->execution->confirmUnlinkStory = "移除該{$lang->SRCommon}後,該{$lang->SRCommon}關聯的用例將被移除,該{$lang->SRCommon}關聯的任務將被取消,請確認。";
$lang->execution->confirmSyncStories = "修改所屬項目後,執行關聯的{$lang->SRCommon}是否同步到新項目中?";
$lang->execution->confirmUnlinkExecutionStory = "您確定從該項目中移除該{$lang->SRCommon}嗎?";
$lang->execution->notAllowedUnlinkStory = "該{$lang->SRCommon}已經與項目下{$lang->executionCommon}相關聯,請從{$lang->executionCommon}中移除後再操作。";
$lang->execution->notAllowRemoveProducts = "該{$lang->productCommon}中的{$lang->SRCommon}已與該{$lang->executionCommon}進行了關聯,請取消關聯後再操作。";
$lang->execution->errorNoLinkedProducts = "該{$lang->executionCommon}沒有關聯的{$lang->productCommon},系統將轉到{$lang->productCommon}關聯頁面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能關聯多個相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的開始時間不能小於所屬項目的開始時間%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止時間不能大於所屬項目的結束時間%s。";
$lang->execution->accessDenied = "您無權訪問該{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您現在可以進行以下操作:";
$lang->execution->setTeam = '設置團隊';
$lang->execution->linkStory = "關聯{$lang->SRCommon}";
$lang->execution->createTask = '創建任務';
$lang->execution->goback = "返回任務列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '顯示周末';
$lang->execution->interval = '間隔';
$lang->execution->fixFirstWithLeft = '修改剩餘工時';
$lang->execution->notAllowedUnlinkStory = "該{$lang->SRCommon}已經與項目下{$lang->executionCommon}相關聯,請從{$lang->executionCommon}中移除後再操作。";
$lang->execution->notAllowRemoveProducts = "該{$lang->productCommon}中的{$lang->SRCommon}已與該{$lang->executionCommon}進行了關聯,請取消關聯後再操作。";
$lang->execution->errorNoLinkedProducts = "該{$lang->executionCommon}沒有關聯的{$lang->productCommon},系統將轉到{$lang->productCommon}關聯頁面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能關聯多個相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的開始時間不能小於所屬項目的開始時間%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止時間不能大於所屬項目的結束時間%s。";
$lang->execution->accessDenied = "您無權訪問該{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您現在可以進行以下操作:";
$lang->execution->setTeam = '設置團隊';
$lang->execution->linkStory = "關聯{$lang->SRCommon}";
$lang->execution->createTask = '創建任務';
$lang->execution->goback = "返回任務列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '顯示周末';
$lang->execution->interval = '間隔';
$lang->execution->fixFirstWithLeft = '修改剩餘工時';
$lang->execution->unfinishedExecution = "該{$lang->executionCommon}下還有";
$lang->execution->unfinishedTask = "[%s]個未完成的任務,";
$lang->execution->unresolvedBug = "[%s]個未解決的bug,";
$lang->execution->projectNotEmpty = '所屬項目不能為空。';
$lang->execution->unfinishedTask = "[%s]個未完成的任務,";
$lang->execution->unresolvedBug = "[%s]個未解決的bug,";
$lang->execution->projectNotEmpty = '所屬項目不能為空。';
/* 統計。*/
$lang->execution->charts = new stdclass();
+29 -12
View File
@@ -49,7 +49,7 @@ class executionModel extends model
$loginLink = $this->config->requestType == 'GET' ? "?{$this->config->moduleVar}=user&{$this->config->methodVar}=login" : "user{$this->config->requestFix}login";
if(strpos($this->server->http_referer, $loginLink) !== false) die(js::locate(helper::createLink('execution', 'index')));
die(js::locate('back'));
die(js::locate(helper::createLink('execution', 'all')));
}
/**
@@ -239,24 +239,24 @@ class executionModel extends model
/* When the cookie and session do not exist, get it from the database. */
if(empty($executionID) and isset($this->config->execution->lastExecution) and isset($executions[$this->config->execution->lastExecution]))
{
$this->session->set('execution', $this->config->execution->lastExecution);
$this->session->set('execution', $this->config->execution->lastExecution, $this->app->tab);
$this->setProjectSession($this->session->execution);
return $this->session->execution;
}
if($executionID > 0) $this->session->set('execution', (int)$executionID, $this->app->tab);
if($executionID == 0 and $this->cookie->lastExecution)
{
/* Execution link is execution-task. */
$executionID = (int)$this->cookie->lastExecution;
$executionID = in_array($executionID, array_keys($executions)) ? $executionID : key($executions);
$this->session->set('execution', $executionID);
}
if($executionID == 0 and $this->session->execution == '') $this->session->set('execution', key($executions));
if(!isset($executions[$this->session->execution]))
if($executionID == 0 and $this->session->execution == '') $executionID = key($executions);
$this->session->set('execution', (int)$executionID, $this->app->tab);
if(!isset($executions[$executionID]))
{
$this->session->set('execution', key($executions));
if($executionID && strpos(",{$this->app->user->view->sprints},", ",{$this->session->execution},") === false) $this->accessDenied();
$this->session->set('execution', key($executions), $this->app->tab);
if($executionID && strpos(",{$this->app->user->view->sprints},", ",{$executionID},") === false) $this->accessDenied();
}
$this->setProjectSession($this->session->execution);
@@ -273,7 +273,7 @@ class executionModel extends model
public function setProjectSession($executionID)
{
$execution = $this->getByID($executionID);
if(!empty($execution)) $this->session->set('project', $execution->project);
if(!empty($execution)) $this->session->set('project', $execution->project, $this->app->tab);
}
/**
@@ -986,7 +986,7 @@ class executionModel extends model
*
* @param int $projectID
* @param string $type all|sprint|stage|kanban
* @param string $mode all|noclosed or empty
* @param string $mode all|noclosed|stagefilter or empty
* @access public
* @return array
*/
@@ -1024,6 +1024,7 @@ class executionModel extends model
foreach($executions as $execution)
{
if(strpos($mode, 'noclosed') !== false and ($execution->status == 'done' or $execution->status == 'closed')) continue;
if(strpos($mode, 'stagefilter') !== false and isset($executionModel) and $executionModel == 'waterfall' and in_array($execution->attribute, array('request', 'design', 'review'))) continue; // Some stages of waterfall not need.
$pairs[$execution->id] = $execution->name;
}
@@ -1179,6 +1180,8 @@ class executionModel extends model
*/
public function getByProject($projectID, $status = 'all', $limit = 0, $pairs = false)
{
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getExecutionPairs();
$project = $this->loadModel('project')->getByID($projectID);
$orderBy = (isset($project->model) and $project->model == 'waterfall') ? 'begin_asc,id_asc' : 'begin_desc,id_desc';
@@ -1233,10 +1236,24 @@ class executionModel extends model
$executions = $executionList;
}
$projects = array();
if(empty($projectID))
{
$projects = $this->dao->select('t1.id,t1.name')->from(TABLE_PROJECT)->alias('t1')
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.id=t2.project')
->where('t2.id')->in(array_keys($executions))
->fetchPairs('id', 'name');
}
if($pairs)
{
$executionPairs = array();
foreach($executions as $execution) $executionPairs[$execution->id] = $execution->name;
foreach($executions as $execution)
{
$executionPairs[$execution->id] = '';
if(isset($projects[$execution->project])) $executionPairs[$execution->id] .= $projects[$execution->project] . ' / ';
$executionPairs[$execution->id] .= $execution->name;
}
$executions = $executionPairs;
}
@@ -1416,7 +1433,7 @@ class executionModel extends model
/* Get all teams of all executions and group by executions, save it as static. */
$executions = $this->dao->select('root, limited')->from(TABLE_TEAM)
->where('type')->in('sprint,stage')
->where('type')->eq('execution')
->andWhere('account')->eq($this->app->user->account)
->andWhere('limited')->eq('yes')
->orderBy('root asc')
+1 -1
View File
@@ -176,7 +176,7 @@
<tr>
<td colspan='4' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</table>
+2 -2
View File
@@ -149,13 +149,13 @@ body {margin-bottom: 25px;}
<?php if($canBeChanged and (common::hasPriv('task', 'batchCreate', $checkObject) or common::hasPriv('task', 'create', $checkObject))):?>
<div class='btn-group dropdown'>
<?php
$actionLink = $this->createLink('task', 'create', "executionID=$executionID");
$actionLink = $this->createLink('task', 'create', "executionID=$executionID" . (isset($moduleID) ? "&storyID=0&moduleID=$moduleID" : ""));
echo html::a($actionLink, "<i class='icon icon-plus'></i> {$lang->task->create}", '', "class='btn btn-primary'");
?>
<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
<ul class='dropdown-menu pull-right'>
<li><?php echo html::a($actionLink, $lang->task->create);?></li>
<li><?php echo html::a($this->createLink('task', 'batchCreate', "executionID=$executionID"), $lang->task->batchCreate);?></li>
<li><?php echo html::a($this->createLink('task', 'batchCreate', "executionID=$executionID" . (isset($moduleID) ? "&storyID=0&moduleID=$moduleID" : "")), $lang->task->batchCreate);?></li>
</ul>
</div>
<?php endif;?>
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
$lang->extension->common = 'Extension';
$lang->extension->id = 'ID';
$lang->extension->browse = 'Extensions';
$lang->extension->install = 'Install Extension';
$lang->extension->installAuto = 'Auto Installation';
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
$lang->extension->common = '插件管理';
$lang->extension->id = '编号';
$lang->extension->browse = '浏览插件';
$lang->extension->install = '安装插件';
$lang->extension->installAuto = '自动安装';
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
$lang->extension->common = '插件管理';
$lang->extension->id = '編號';
$lang->extension->browse = '瀏覽插件';
$lang->extension->install = '安裝插件';
$lang->extension->installAuto = '自動安裝';
+2 -1
View File
@@ -114,6 +114,7 @@ class file extends control
{
if(session_id() != $this->app->sessionID) helper::restartSession($this->app->sessionID);
$file = $this->file->getById($fileID);
if(empty($file)) die("<html><head><meta charset='utf-8'></head><body>{$this->lang->file->fileNotFound}</body></html>");
/* Judge the mode, down or open. */
$mode = 'down';
@@ -154,7 +155,7 @@ class file extends control
}
else
{
die($this->lang->file->fileNotFound);
die("<html><head><meta charset='utf-8'></head><body>{$this->lang->file->fileNotFound}</body></html>");
}
}
+4
View File
@@ -11,6 +11,10 @@
*/
$lang->file = new stdclass();
$lang->file->common = 'File';
$lang->file->id = 'ID';
$lang->file->objectType = 'Object Type';
$lang->file->objectID = 'Object ID';
$lang->file->deleted = 'Deleted';
$lang->file->uploadImages = 'Batch Upload Images';
$lang->file->download = 'Download Files';
$lang->file->uploadDate = 'Uploaded';

Some files were not shown because too many files have changed in this diff Show More