Merge branch '15.6' into sprint/167_wangyidong
This commit is contained in:
@@ -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];
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
@@ -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='';
|
||||
@@ -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,
|
||||
|
||||
@@ -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 在项目集中添加批量编辑项目功能
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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'];
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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';
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '还原';
|
||||
|
||||
@@ -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 = '還原';
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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.';
|
||||
|
||||
@@ -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.';
|
||||
|
||||
@@ -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é.';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '排序已保存';
|
||||
|
||||
@@ -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|';
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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:?>
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '状态';
|
||||
|
||||
@@ -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 = '狀態';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '包类型';
|
||||
|
||||
@@ -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 = '包類型';
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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=¶m=0&storyID=0&extras=from=global";
|
||||
if($objectType == 'execution') $params = "projectID=&executionID=0©ExecutionID=0&planID=0&confirm=no&productID=0&extra=from=global";
|
||||
if($objectType == 'project') $params = "model=scrum&programID=0©ProjectID=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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
@@ -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¶m=' + 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¶m=' + product);
|
||||
browseType = browseType == 'bysearch' ? 'all' : browseType;
|
||||
link = createLink('company', 'dynamic', 'browseType=' + browseType + '¶m=&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¶m=' + project);
|
||||
location.href = link;
|
||||
}
|
||||
|
||||
function changeExecution(execution)
|
||||
{
|
||||
link = createLink('company', 'dynamic', 'type=execution¶m=' + execution);
|
||||
location.href = link;
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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] = '不允许';
|
||||
|
||||
@@ -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] = '不允許';
|
||||
|
||||
@@ -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¶m=&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>
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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,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'] = '失敗';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
$lang->cron->common = '定时任务';
|
||||
$lang->cron->id = '编号';
|
||||
$lang->cron->buildin = '内置';
|
||||
$lang->cron->index = '首页';
|
||||
$lang->cron->list = '任务列表';
|
||||
$lang->cron->create = '添加';
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
$lang->cron->common = '定時任務';
|
||||
$lang->cron->id = '編號';
|
||||
$lang->cron->buildin = '內置';
|
||||
$lang->cron->index = '首頁';
|
||||
$lang->cron->list = '任務列表';
|
||||
$lang->cron->create = '添加';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
global $config;
|
||||
|
||||
$lang->custom->common = '自定义';
|
||||
$lang->custom->id = '编号';
|
||||
$lang->custom->index = '首页';
|
||||
$lang->custom->set = '自定义配置';
|
||||
$lang->custom->restore = '恢复默认';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
global $config;
|
||||
|
||||
$lang->custom->common = '自定義';
|
||||
$lang->custom->id = '編號';
|
||||
$lang->custom->index = '首頁';
|
||||
$lang->custom->set = '自定義配置';
|
||||
$lang->custom->restore = '恢復預設';
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 = "删除部门";
|
||||
|
||||
@@ -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 = "刪除部門";
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ $(function()
|
||||
{
|
||||
$('#content').html(draft);
|
||||
editor = KindEditor.instances[0];
|
||||
editor.html(draft);
|
||||
editor.html('' + draft);
|
||||
$('.kindeditor-ph').remove();
|
||||
}
|
||||
}, 100)
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '搜索';
|
||||
|
||||
@@ -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 = '搜索';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '使用说明';
|
||||
|
||||
@@ -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 = '使用說明';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(' ', ''));
|
||||
$(this).prepend(' ');
|
||||
}
|
||||
})
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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')
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;?>
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->extension->common = '插件管理';
|
||||
$lang->extension->id = '编号';
|
||||
$lang->extension->browse = '浏览插件';
|
||||
$lang->extension->install = '安装插件';
|
||||
$lang->extension->installAuto = '自动安装';
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->extension->common = '插件管理';
|
||||
$lang->extension->id = '編號';
|
||||
$lang->extension->browse = '瀏覽插件';
|
||||
$lang->extension->install = '安裝插件';
|
||||
$lang->extension->installAuto = '自動安裝';
|
||||
|
||||
@@ -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>");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user