Merge branch 'zenops_46' into sprint/220
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* The host entry point of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yuchun Li <liyuchun@easycorp.ltd>
|
||||
* @package entries
|
||||
* @version 1
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class hostHeartbeatEntry extends baseEntry
|
||||
{
|
||||
/**
|
||||
* Listen host heartbeat.
|
||||
*
|
||||
* @param int|string $userID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function post()
|
||||
{
|
||||
/* Check authorize. */
|
||||
$header = getallheaders();
|
||||
$token = isset($header['Authorization']) ? substr($header['Authorization'], 7) : '';
|
||||
$secret = isset($this->requestBody->secret) ? $this->requestBody->secret : '';
|
||||
if(!$secret and !$token) return $this->sendError(401, 'Unauthorized');
|
||||
|
||||
/* Check param. */
|
||||
$status = $this->requestBody->status;
|
||||
$vms = $this->requestBody->Vms;
|
||||
$zap = $this->requestBody->port;
|
||||
$now = helper::now();
|
||||
if(!$status) return $this->sendError(400, 'Params error.');
|
||||
|
||||
$conditionField = $secret ? 'secret' : 'tokenSN';
|
||||
$conditionValue = $secret ? $secret : $token;
|
||||
$host = new stdclass();
|
||||
$host->status = $status;
|
||||
if($secret)
|
||||
{
|
||||
$host->tokenSN = md5($secret . $now);
|
||||
$host->tokenTime = date('Y-m-d H:i:s', time() + 7200);
|
||||
}
|
||||
|
||||
$this->dao = $this->loadModel('common')->dao;
|
||||
$id = $this->dao->select('id')->from(TABLE_ZAHOST)
|
||||
->beginIF($secret)->where('secret')->eq($secret)->fi()
|
||||
->beginIF(!$secret)->where('tokenSN')->eq($token)
|
||||
->andWhere('tokenTime')->gt($now)->fi()
|
||||
->fetch('id');
|
||||
if(!$id) return $this->sendError(400, 'Secret error.');
|
||||
|
||||
$this->dao->update(TABLE_ZAHOST)->data($host)->where($conditionField)->eq($conditionValue)->exec();
|
||||
$this->dao->update(TABLE_ZAHOST)
|
||||
->set('heartbeat')->eq($now)
|
||||
->set('zap')->eq($zap)
|
||||
->where('id')->eq($id)->exec();
|
||||
|
||||
if($vms)
|
||||
{
|
||||
foreach($vms as $vm)
|
||||
{
|
||||
if(!empty($vm->vncPortOnHost))
|
||||
{
|
||||
$this->dao->update(TABLE_ZAHOST)
|
||||
->set('vnc')->eq($vm->vncPortOnHost)
|
||||
->set('zap')->eq($vm->agentPortOnHost)
|
||||
->set('ztf')->eq($vm->ztfPortOnHost)
|
||||
->set('zd')->eq($vm->zdPortOnHost)
|
||||
->set('ssh')->eq($vm->sshPortOnHost)
|
||||
->set('status')->eq($vm->status)
|
||||
->where('mac')->eq($vm->macAddress)->exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$secret) return $this->sendSuccess(200, 'success');
|
||||
|
||||
$host->tokenTimeUnix = strtotime($host->tokenTime);
|
||||
unset($host->status);
|
||||
unset($host->tokenTime);
|
||||
return $this->send(200, $host);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* The host entry point of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Ke Zhao <zhaoke@easycorp.ltd>
|
||||
* @package entries
|
||||
* @version 1
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class hostSubmitEntry extends baseEntry
|
||||
{
|
||||
/**
|
||||
* Listen host task finish submit.
|
||||
*
|
||||
* @param int|string $userID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function post()
|
||||
{
|
||||
/* Check authorize. */
|
||||
$header = getallheaders();
|
||||
$token = isset($header['Authorization']) ? substr($header['Authorization'], 7) : '';
|
||||
if(!$token) return $this->sendError(401, 'Unauthorized');
|
||||
|
||||
$now = helper::now();
|
||||
|
||||
/* Check param. */
|
||||
$image = new stdclass();
|
||||
$task = $this->requestBody->task;
|
||||
$image->status = $this->requestBody->status;
|
||||
|
||||
$this->dao = $this->loadModel('common')->dao;
|
||||
$id = $this->dao->select('id')->from(TABLE_ZAHOST)
|
||||
->where('tokenSN')->eq($token)
|
||||
->andWhere('tokenTime')->gt($now)->fi()
|
||||
->fetch('id');
|
||||
|
||||
if(!$id) return $this->sendError(400, 'Secret error.');
|
||||
|
||||
$this->dao->update(TABLE_IMAGE)->data($image)->where("id")->eq($task)->exec();
|
||||
|
||||
return $this->sendSuccess(200, 'success');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
/**
|
||||
* The zanode entry point of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Yuchun Li <liyuchun@easycorp.ltd>
|
||||
* @package entries
|
||||
* @version 1
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class zanodeHeartbeatEntry extends baseEntry
|
||||
{
|
||||
/**
|
||||
* Listen vm heartbeat.
|
||||
*
|
||||
* @param int|string $userID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function post()
|
||||
{
|
||||
/* Check authorize. */
|
||||
$header = getallheaders();
|
||||
$token = isset($header['Authorization']) ? substr($header['Authorization'], 7) : '';
|
||||
$secret = isset($this->requestBody->secret) ? $this->requestBody->secret : '';
|
||||
if(!$secret and !$token) return $this->sendError(401, 'Unauthorized');
|
||||
|
||||
/* Check param. */
|
||||
$status = isset($this->requestBody->status) ? $this->requestBody->status : '';
|
||||
$mac = isset($this->requestBody->macAddress) ? $this->requestBody->macAddress : '';
|
||||
$now = helper::now();
|
||||
if(!$status || !$mac) return $this->sendError(400, 'Params error.');
|
||||
|
||||
$this->dao = $this->loadModel('common')->dao;
|
||||
$host = $this->dao->select('id,extranet')->from(TABLE_ZAHOST)
|
||||
->beginIF($secret)->where('secret')->eq($secret)->fi()
|
||||
->beginIF(!$secret)->where('tokenSN')->eq($token)
|
||||
->andWhere('tokenTime')->gt($now)->fi()
|
||||
->fetch();
|
||||
if(empty($host)) return $this->sendError(400, 'Secret error.');
|
||||
|
||||
$node = $this->dao->select('id,parent')->from(TABLE_ZAHOST)
|
||||
->where('mac')->eq($mac)
|
||||
->fetch();
|
||||
|
||||
if(empty($node) || ($node->parent != $host->id && $node->id != $host->id)) return $this->sendError(400, 'Secret error.');
|
||||
|
||||
$node->zap = $this->requestBody->agentPortOnHost;
|
||||
$node->status = $this->requestBody->status;
|
||||
|
||||
if($secret)
|
||||
{
|
||||
$node->tokenSN = md5($secret . $now);
|
||||
$node->tokenTime = date('Y-m-d H:i:s', time() + 7200);
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_ZAHOST)->data($node)->where('id')->eq($node->id)->exec();
|
||||
|
||||
if($secret)
|
||||
{
|
||||
//install services
|
||||
$node->ip = $host->extranet;
|
||||
$nodeStatus = $this->loadModel('zanode')->getServiceStatus($node);
|
||||
if($nodeStatus['ZTF'] != "ready")
|
||||
{
|
||||
$node->secret = $secret;
|
||||
$node->extranet = $host->extranet;
|
||||
$this->loadModel('zanode')->installService($node, "ZTF");
|
||||
}
|
||||
}
|
||||
|
||||
if(!$secret) return $this->sendSuccess(200, 'success');
|
||||
|
||||
$node->tokenTimeUnix = strtotime($node->tokenTime);
|
||||
|
||||
unset($node->status);
|
||||
unset($node->tokenTime);
|
||||
return $this->send(200, $node);
|
||||
}
|
||||
}
|
||||
@@ -161,6 +161,11 @@ $routes['/modules'] = 'modules';
|
||||
|
||||
$routes['/reports'] = 'reports';
|
||||
|
||||
$routes['/host/heartbeat'] = 'hostHeartbeat';
|
||||
$routes['/host/submitResult'] = 'hostSubmit';
|
||||
|
||||
$routes['/zanode/heartbeat'] = 'zanodeHeartbeat';
|
||||
|
||||
$routes['/z/folders'] = 'zfolders';
|
||||
$routes['/z/folders/:id'] = 'zfolder';
|
||||
$routes['/z/files/:id'] = 'zfile';
|
||||
|
||||
+55
-48
@@ -253,6 +253,11 @@ define('TABLE_TESTTASK', '`' . $config->db->prefix . 'testtask`');
|
||||
define('TABLE_TESTRUN', '`' . $config->db->prefix . 'testrun`');
|
||||
define('TABLE_TESTRESULT', '`' . $config->db->prefix . 'testresult`');
|
||||
define('TABLE_USERTPL', '`' . $config->db->prefix . 'usertpl`');
|
||||
define('TABLE_ZAHOST', '`' . $config->db->prefix . 'host`');
|
||||
define('TABLE_IMAGE', '`' . $config->db->prefix . 'image`');
|
||||
define('TABLE_AUTOMATION', '`' . $config->db->prefix . 'automation`');
|
||||
|
||||
if(!defined('TABLE_ASSET')) define('TABLE_ASSET', '`' . $config->db->prefix . 'asset`');
|
||||
|
||||
define('TABLE_PRODUCT', '`' . $config->db->prefix . 'product`');
|
||||
define('TABLE_BRANCH', '`' . $config->db->prefix . 'branch`');
|
||||
@@ -346,54 +351,56 @@ define('TABLE_CHART', '`' . $config->db->prefix . 'chart`');
|
||||
define('TABLE_DASHBOARD', '`' . $config->db->prefix . 'dashboard`');
|
||||
define('TABLE_DATASET', '`' . $config->db->prefix . 'dataset`');
|
||||
|
||||
$config->objectTables['product'] = TABLE_PRODUCT;
|
||||
$config->objectTables['productplan'] = TABLE_PRODUCTPLAN;
|
||||
$config->objectTables['story'] = TABLE_STORY;
|
||||
$config->objectTables['requirement'] = TABLE_STORY;
|
||||
$config->objectTables['release'] = TABLE_RELEASE;
|
||||
$config->objectTables['program'] = TABLE_PROJECT;
|
||||
$config->objectTables['project'] = TABLE_PROJECT;
|
||||
$config->objectTables['execution'] = TABLE_PROJECT;
|
||||
$config->objectTables['task'] = TABLE_TASK;
|
||||
$config->objectTables['build'] = TABLE_BUILD;
|
||||
$config->objectTables['bug'] = TABLE_BUG;
|
||||
$config->objectTables['case'] = TABLE_CASE;
|
||||
$config->objectTables['testcase'] = TABLE_CASE;
|
||||
$config->objectTables['testtask'] = TABLE_TESTTASK;
|
||||
$config->objectTables['testsuite'] = TABLE_TESTSUITE;
|
||||
$config->objectTables['testreport'] = TABLE_TESTREPORT;
|
||||
$config->objectTables['user'] = TABLE_USER;
|
||||
$config->objectTables['api'] = TABLE_API;
|
||||
$config->objectTables['doc'] = TABLE_DOC;
|
||||
$config->objectTables['doclib'] = TABLE_DOCLIB;
|
||||
$config->objectTables['todo'] = TABLE_TODO;
|
||||
$config->objectTables['custom'] = TABLE_LANG;
|
||||
$config->objectTables['branch'] = TABLE_BRANCH;
|
||||
$config->objectTables['module'] = TABLE_MODULE;
|
||||
$config->objectTables['caselib'] = TABLE_TESTSUITE;
|
||||
$config->objectTables['entry'] = TABLE_ENTRY;
|
||||
$config->objectTables['webhook'] = TABLE_WEBHOOK;
|
||||
$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER;
|
||||
$config->objectTables['job'] = TABLE_JOB;
|
||||
$config->objectTables['team'] = TABLE_TEAM;
|
||||
$config->objectTables['pipeline'] = TABLE_PIPELINE;
|
||||
$config->objectTables['mr'] = TABLE_MR;
|
||||
$config->objectTables['kanban'] = TABLE_KANBAN;
|
||||
$config->objectTables['kanbanspace'] = TABLE_KANBANSPACE;
|
||||
$config->objectTables['kanbanregion'] = TABLE_KANBANREGION;
|
||||
$config->objectTables['kanbancolumn'] = TABLE_KANBANCOLUMN;
|
||||
$config->objectTables['kanbanlane'] = TABLE_KANBANLANE;
|
||||
$config->objectTables['kanbanorder'] = TABLE_KANBANORDER;
|
||||
$config->objectTables['kanbangroup'] = TABLE_KANBANGROUP;
|
||||
$config->objectTables['kanbancard'] = TABLE_KANBANCARD;
|
||||
$config->objectTables['sonarqube'] = TABLE_PIPELINE;
|
||||
$config->objectTables['gitea'] = TABLE_PIPELINE;
|
||||
$config->objectTables['gogs'] = TABLE_PIPELINE;
|
||||
$config->objectTables['gitlab'] = TABLE_PIPELINE;
|
||||
$config->objectTables['jebkins'] = TABLE_PIPELINE;
|
||||
$config->objectTables['stage'] = TABLE_STAGE;
|
||||
$config->objectTables['apistruct'] = TABLE_APISTRUCT;
|
||||
$config->objectTables['repo'] = TABLE_REPO;
|
||||
$config->objectTables['product'] = TABLE_PRODUCT;
|
||||
$config->objectTables['productplan'] = TABLE_PRODUCTPLAN;
|
||||
$config->objectTables['story'] = TABLE_STORY;
|
||||
$config->objectTables['requirement'] = TABLE_STORY;
|
||||
$config->objectTables['release'] = TABLE_RELEASE;
|
||||
$config->objectTables['program'] = TABLE_PROJECT;
|
||||
$config->objectTables['project'] = TABLE_PROJECT;
|
||||
$config->objectTables['execution'] = TABLE_PROJECT;
|
||||
$config->objectTables['task'] = TABLE_TASK;
|
||||
$config->objectTables['build'] = TABLE_BUILD;
|
||||
$config->objectTables['bug'] = TABLE_BUG;
|
||||
$config->objectTables['case'] = TABLE_CASE;
|
||||
$config->objectTables['testcase'] = TABLE_CASE;
|
||||
$config->objectTables['testtask'] = TABLE_TESTTASK;
|
||||
$config->objectTables['testsuite'] = TABLE_TESTSUITE;
|
||||
$config->objectTables['testreport'] = TABLE_TESTREPORT;
|
||||
$config->objectTables['user'] = TABLE_USER;
|
||||
$config->objectTables['api'] = TABLE_API;
|
||||
$config->objectTables['doc'] = TABLE_DOC;
|
||||
$config->objectTables['doclib'] = TABLE_DOCLIB;
|
||||
$config->objectTables['todo'] = TABLE_TODO;
|
||||
$config->objectTables['custom'] = TABLE_LANG;
|
||||
$config->objectTables['branch'] = TABLE_BRANCH;
|
||||
$config->objectTables['module'] = TABLE_MODULE;
|
||||
$config->objectTables['caselib'] = TABLE_TESTSUITE;
|
||||
$config->objectTables['entry'] = TABLE_ENTRY;
|
||||
$config->objectTables['webhook'] = TABLE_WEBHOOK;
|
||||
$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER;
|
||||
$config->objectTables['job'] = TABLE_JOB;
|
||||
$config->objectTables['team'] = TABLE_TEAM;
|
||||
$config->objectTables['pipeline'] = TABLE_PIPELINE;
|
||||
$config->objectTables['mr'] = TABLE_MR;
|
||||
$config->objectTables['kanban'] = TABLE_KANBAN;
|
||||
$config->objectTables['kanbanspace'] = TABLE_KANBANSPACE;
|
||||
$config->objectTables['kanbanregion'] = TABLE_KANBANREGION;
|
||||
$config->objectTables['kanbancolumn'] = TABLE_KANBANCOLUMN;
|
||||
$config->objectTables['kanbanlane'] = TABLE_KANBANLANE;
|
||||
$config->objectTables['kanbanorder'] = TABLE_KANBANORDER;
|
||||
$config->objectTables['kanbangroup'] = TABLE_KANBANGROUP;
|
||||
$config->objectTables['kanbancard'] = TABLE_KANBANCARD;
|
||||
$config->objectTables['sonarqube'] = TABLE_PIPELINE;
|
||||
$config->objectTables['gitea'] = TABLE_PIPELINE;
|
||||
$config->objectTables['gogs'] = TABLE_PIPELINE;
|
||||
$config->objectTables['gitlab'] = TABLE_PIPELINE;
|
||||
$config->objectTables['jebkins'] = TABLE_PIPELINE;
|
||||
$config->objectTables['stage'] = TABLE_STAGE;
|
||||
$config->objectTables['apistruct'] = TABLE_APISTRUCT;
|
||||
$config->objectTables['repo'] = TABLE_REPO;
|
||||
$config->objectTables['zahost'] = TABLE_ZAHOST;
|
||||
$config->objectTables['automation'] = TABLE_AUTOMATION;
|
||||
|
||||
$config->newFeatures = array('introduction', 'tutorial', 'youngBlueTheme', 'visions');
|
||||
$config->disabledFeatures = '';
|
||||
|
||||
@@ -1 +1,15 @@
|
||||
ALTER TABLE `zt_host` ADD `type` varchar(30) NOT NULL DEFAULT 'normal' AFTER `admin`;
|
||||
ALTER TABLE `zt_host` ADD `secret` varchar(50) NOT NULL DEFAULT '' AFTER `type`;
|
||||
ALTER TABLE `zt_host` ADD `token` varchar(50) NOT NULL DEFAULT '' AFTER `secret`;
|
||||
ALTER TABLE `zt_host` ADD `expiredDate` datetime NOT NULL AFTER `token`;
|
||||
ALTER TABLE `zt_host` ADD `virtualSoftware` varchar(30) NOT NULL DEFAULT '' AFTER `expiredDate`;
|
||||
ALTER TABLE `zt_asset` ADD `registerDate` datetime NOT NULL AFTER `editedDate`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `type` varchar(30) NOT NULL DEFAULT 'normal' AFTER `hostID`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `imageName` varchar(50) NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `createdBy` varchar(30) NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `createdDate` datetime NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `editedBy` varchar(30) NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `editedDate` datetime NOT NULL;
|
||||
ALTER TABLE `zt_vm` ADD `osVersion` varchar(50) NOT NULL DEFAULT '' AFTER `osCategory`;
|
||||
|
||||
UPDATE `zt_workflowlabel` SET `label` = '全部' where `label` = '所有' AND `action` = 'browse';
|
||||
|
||||
@@ -1,3 +1,17 @@
|
||||
ALTER TABLE `zt_host` ADD `type` varchar(30) NOT NULL DEFAULT 'normal' AFTER `admin`;
|
||||
ALTER TABLE `zt_host` ADD `secret` varchar(50) NOT NULL DEFAULT '' AFTER `type`;
|
||||
ALTER TABLE `zt_host` ADD `token` varchar(50) NOT NULL DEFAULT '' AFTER `secret`;
|
||||
ALTER TABLE `zt_host` ADD `expiredDate` datetime NOT NULL AFTER `token`;
|
||||
ALTER TABLE `zt_host` ADD `virtualSoftware` varchar(30) NOT NULL DEFAULT '' AFTER `expiredDate`;
|
||||
ALTER TABLE `zt_asset` ADD `registerDate` datetime NOT NULL AFTER `editedDate`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `type` varchar(30) NOT NULL DEFAULT 'normal' AFTER `hostID`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `imageName` varchar(50) NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `createdBy` varchar(30) NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `createdDate` datetime NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `editedBy` varchar(30) NOT NULL;
|
||||
ALTER TABLE `zt_vmtemplate` ADD `editedDate` datetime NOT NULL;
|
||||
ALTER TABLE `zt_vm` ADD `osVersion` varchar(50) NOT NULL DEFAULT '' AFTER `osCategory`;
|
||||
ALTER TABLE `zt_vm` ADD `unit` enum('GB','TB') NOT NULL DEFAULT 'GB' AFTER `osDisk`;
|
||||
update zt_kanban
|
||||
set
|
||||
colWidth = if(colWidth < 200, 200, colWidth),
|
||||
|
||||
@@ -8,6 +8,109 @@ ALTER TABLE `zt_release` CHANGE `branch` `branch` varchar(255) NOT NULL;
|
||||
ALTER TABLE `zt_release` CHANGE `build` `build` varchar(255) NOT NULL;
|
||||
ALTER TABLE `zt_release` ADD `shadow` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `branch`;
|
||||
|
||||
ALTER TABLE `zt_host`
|
||||
DROP COLUMN `cabinet`,
|
||||
DROP COLUMN `cpuRate`,
|
||||
DROP COLUMN `diskType`,
|
||||
DROP COLUMN `unit`,
|
||||
DROP COLUMN `nic`,
|
||||
DROP COLUMN `webserver`,
|
||||
DROP COLUMN `database`,
|
||||
DROP COLUMN `language`,
|
||||
DROP COLUMN `instanceNum`,
|
||||
DROP COLUMN `pri`,
|
||||
DROP COLUMN `tags`,
|
||||
DROP COLUMN `bridgeID`,
|
||||
DROP COLUMN `cloudKey`,
|
||||
DROP COLUMN `cloudSecret`,
|
||||
DROP COLUMN `cloudRegion`,
|
||||
DROP COLUMN `cloudNamespace`,
|
||||
DROP COLUMN `cloudUser`,
|
||||
DROP COLUMN `cloudAccount`,
|
||||
DROP COLUMN `cloudPassword`,
|
||||
DROP COLUMN `couldVPC`,
|
||||
ADD COLUMN `name` varchar(255) NOT NULL DEFAULT '' AFTER `id`,
|
||||
MODIFY COLUMN `type` varchar(30) NOT NULL DEFAULT 'normal' AFTER `name`,
|
||||
MODIFY COLUMN `hostType` varchar(30) NOT NULL DEFAULT '' AFTER `type`,
|
||||
MODIFY COLUMN `mac` varchar(128) NOT NULL AFTER `hostType`,
|
||||
MODIFY COLUMN `memory` varchar(30) NOT NULL AFTER `mac`,
|
||||
MODIFY COLUMN `diskSize` varchar(30) NOT NULL AFTER `memory`,
|
||||
MODIFY COLUMN `status` varchar(50) NOT NULL AFTER `diskSize`,
|
||||
MODIFY COLUMN `secret` varchar(50) NOT NULL DEFAULT '' AFTER `status`,
|
||||
ADD COLUMN `desc` text NOT NULL AFTER `secret`,
|
||||
CHANGE COLUMN `token` `tokenSN` varchar(50) NOT NULL DEFAULT '' AFTER `desc`,
|
||||
CHANGE COLUMN `expiredDate` `tokenTime` datetime NOT NULL AFTER `tokenSN`,
|
||||
CHANGE COLUMN `virtualSoftware` `vsoft` varchar(30) NOT NULL DEFAULT '' AFTER `tokenTime`,
|
||||
CHANGE COLUMN `heartbeatTime` `heartbeat` datetime NOT NULL AFTER `vsoft`,
|
||||
CHANGE COLUMN `agentPort` `zap` varchar(10) NOT NULL AFTER `heartbeat`,
|
||||
MODIFY COLUMN `provider` varchar(255) NOT NULL DEFAULT '' AFTER `zap`,
|
||||
ADD COLUMN `vnc` int(11) NOT NULL AFTER `provider`,
|
||||
ADD COLUMN `ztf` int(11) NOT NULL AFTER `vnc`,
|
||||
ADD COLUMN `zd` int(11) NOT NULL AFTER `ztf`,
|
||||
ADD COLUMN `ssh` int(11) NOT NULL AFTER `zd`,
|
||||
ADD COLUMN `parent` int(11) unsigned NOT NULL DEFAULT '0' AFTER `vnc`,
|
||||
ADD COLUMN `image` int(11) unsigned NOT NULL DEFAULT '0' AFTER `parent`,
|
||||
ADD COLUMN `group` varchar(128) NOT NULL DEFAULT '' AFTER `osVersion`,
|
||||
ADD COLUMN `createdBy` varchar(30) NOT NULL,
|
||||
ADD COLUMN `createdDate` datetime NOT NULL,
|
||||
ADD COLUMN `editedBy` varchar(30) NOT NULL,
|
||||
ADD COLUMN `editedDate` datetime NOT NULL,
|
||||
ADD COLUMN `deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
CHANGE COLUMN `privateIP` `intranet` varchar(128) NOT NULL AFTER `cpuCores`,
|
||||
CHANGE COLUMN `publicIP` `extranet` varchar(128) NOT NULL AFTER `intranet`;
|
||||
|
||||
UPDATE zt_host h,
|
||||
zt_asset a
|
||||
SET h.`name` = a.`name`,
|
||||
h.`createdBy` = a.`createdBy`,
|
||||
h.`createdDate` = a.`createdDate`,
|
||||
h.`editedBy` = a.`editedBy`,
|
||||
h.`editedDate` = a.`editedDate`,
|
||||
h.`group` = a.`group`,
|
||||
h.`type` = a.`type`,
|
||||
h.`deleted` = a.`deleted`
|
||||
WHERE
|
||||
h.`assetID` = a.`id`;
|
||||
|
||||
ALTER TABLE `zt_host` DROP COLUMN `assetID`;
|
||||
|
||||
DROP TABLE IF EXISTS `zt_asset`;
|
||||
DROP TABLE IF EXISTS `zt_baseimagebrowser`;
|
||||
DROP TABLE IF EXISTS `zt_browser`;
|
||||
DROP TABLE IF EXISTS `zt_baseimage`;
|
||||
DROP TABLE IF EXISTS `zt_vmtemplate`;
|
||||
DROP TABLE IF EXISTS `zt_vm`;
|
||||
|
||||
CREATE TABLE `zt_image` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`host` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`name` varchar(64) NOT NULL DEFAULT '',
|
||||
`address` varchar(64) NOT NULL DEFAULT '',
|
||||
`path` varchar(64) NOT NULL DEFAULT '',
|
||||
`status` varchar(20) NOT NULL DEFAULT '',
|
||||
`osName` varchar(32) NOT NULL DEFAULT '',
|
||||
`from` varchar(10) NOT NULL DEFAULT 'zentao',
|
||||
`memory` float unsigned NOT NULL,
|
||||
`disk` float unsigned NOT NULL,
|
||||
`fileSize` float unsigned NOT NULL,
|
||||
`md5` varchar(64) NOT NULL,
|
||||
`desc` text NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `zt_automation` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`node` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`product` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`scriptPath` varchar(255) NOT NULL DEFAULT '',
|
||||
`shell` mediumtext NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE OR REPLACE VIEW `ztv_normalproduct` AS SELECT * FROM `zt_product` WHERE `shadow` = 0;
|
||||
|
||||
REPLACE INTO `zt_report` (`code`, `name`, `module`, `sql`, `vars`, `langs`, `params`, `step`, `desc`, `addedBy`, `addedDate`) VALUES
|
||||
@@ -43,3 +146,5 @@ ALTER TABLE `zt_build` ADD `builds` varchar(255) NOT NULL AFTER `execution`;
|
||||
|
||||
UPDATE `zt_block` SET block = 'scrumrisk' WHERE module = 'project' AND type = 'scrum' AND block = 'waterfallrisk';
|
||||
UPDATE `zt_block` SET block = 'scrumissue' WHERE module = 'project' AND type = 'scrum' AND block = 'waterfallissue';
|
||||
|
||||
ALTER TABLE `zt_repofiles` ADD `oldPath` varchar(255) DEFAULT '' AFTER `path`;
|
||||
|
||||
+69
-132
@@ -7250,65 +7250,81 @@ CREATE TABLE IF NOT EXISTS `zt_account` (
|
||||
key `status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_asset`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_asset` (
|
||||
-- DROP TABLE IF EXISTS `zt_host`;
|
||||
CREATE TABLE `zt_host` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`status` varchar(30) NOT NULL,
|
||||
`type` varchar(30) NOT NULL,
|
||||
`group` varchar(128) NOT NULL,
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`name` varchar(255) NOT NULL DEFAULT '',
|
||||
`type` varchar(30) NOT NULL DEFAULT 'normal',
|
||||
`hostType` varchar(30) NOT NULL DEFAULT '',
|
||||
`mac` varchar(128) NOT NULL,
|
||||
`memory` varchar(30) NOT NULL,
|
||||
`diskSize` varchar(30) NOT NULL,
|
||||
`status` varchar(50) NOT NULL,
|
||||
`secret` varchar(50) NOT NULL DEFAULT '',
|
||||
`desc` text NOT NULL,
|
||||
`tokenSN` varchar(50) NOT NULL DEFAULT '',
|
||||
`tokenTime` datetime NOT NULL,
|
||||
`vsoft` varchar(30) NOT NULL DEFAULT '',
|
||||
`heartbeat` datetime NOT NULL,
|
||||
`zap` varchar(10) NOT NULL,
|
||||
`provider` varchar(255) NOT NULL DEFAULT '',
|
||||
`vnc` int(11) NOT NULL,
|
||||
`ztf` int(11) NOT NULL,
|
||||
`zd` int(11) NOT NULL,
|
||||
`ssh` int(11) NOT NULL,
|
||||
`parent` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`image` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`assetID` mediumint(8) unsigned NOT NULL,
|
||||
`admin` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`serverRoom` mediumint(8) unsigned NOT NULL,
|
||||
`serverModel` varchar(256) NOT NULL,
|
||||
`hardwareType` varchar(64) NOT NULL,
|
||||
`cpuBrand` varchar(128) NOT NULL,
|
||||
`cpuModel` varchar(128) NOT NULL,
|
||||
`cpuNumber` varchar(16) NOT NULL,
|
||||
`cpuCores` varchar(30) NOT NULL,
|
||||
`intranet` varchar(128) NOT NULL,
|
||||
`extranet` varchar(128) NOT NULL,
|
||||
`osName` varchar(64) NOT NULL,
|
||||
`osVersion` varchar(64) NOT NULL,
|
||||
`group` varchar(128) NOT NULL DEFAULT '',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` char(30) NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_image`;
|
||||
CREATE TABLE `zt_image` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`host` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`name` varchar(64) NOT NULL DEFAULT '',
|
||||
`address` varchar(64) NOT NULL DEFAULT '',
|
||||
`path` varchar(64) NOT NULL DEFAULT '',
|
||||
`status` varchar(20) NOT NULL DEFAULT '',
|
||||
`osName` varchar(32) NOT NULL DEFAULT '',
|
||||
`from` varchar(10) NOT NULL DEFAULT 'zentao',
|
||||
`memory` float unsigned NOT NULL,
|
||||
`disk` float unsigned NOT NULL,
|
||||
`fileSize` float unsigned NOT NULL,
|
||||
`md5` varchar(64) NOT NULL,
|
||||
`desc` text NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_host`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_host` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`assetID` mediumint(8) UNSIGNED NOT NULL,
|
||||
`admin` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`serverRoom` mediumint(8) UNSIGNED NOT NULL,
|
||||
`cabinet` varchar(128) NOT NULL,
|
||||
`serverModel` varchar(256) NOT NULL,
|
||||
`hardwareType` varchar(64) NOT NULL,
|
||||
`hostType` enum('physical','virtual') NOT NULL,
|
||||
`cpuBrand` varchar(128) NOT NULL,
|
||||
`cpuModel` varchar(128) NOT NULL,
|
||||
`cpuNumber` varchar(16) NOT NULL,
|
||||
`cpuCores` varchar(30) NOT NULL,
|
||||
`cpuRate` varchar(30) NOT NULL,
|
||||
`memory` varchar(30) NOT NULL,
|
||||
`diskType` varchar(30) NOT NULL,
|
||||
`diskSize` varchar(30) NOT NULL,
|
||||
`unit` enum('GB','TB') NOT NULL DEFAULT 'GB',
|
||||
`privateIP` varchar(128) NOT NULL,
|
||||
`publicIP` varchar(128) NOT NULL,
|
||||
`nic` varchar(128) NOT NULL,
|
||||
`mac` varchar(128) NOT NULL,
|
||||
`osName` varchar(64) NOT NULL,
|
||||
`osVersion` varchar(64) NOT NULL,
|
||||
`webserver` varchar(128) NOT NULL,
|
||||
`database` varchar(128) NOT NULL,
|
||||
`language` varchar(16) NOT NULL,
|
||||
`status` varchar(50) NOT NULL,
|
||||
`agentPort` varchar(10) NOT NULL,
|
||||
`instanceNum` tinyint(0) NOT NULL DEFAULT 0,
|
||||
`pri` smallint(5) unsigned NOT NULL DEFAULT 0,
|
||||
`heartbeatTime` datetime NOT NULL,
|
||||
`tags` varchar(50) NOT NULL DEFAULT '',
|
||||
`provider` varchar(255) NOT NULL DEFAULT '',
|
||||
`bridgeID` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudKey` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudSecret` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudRegion` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudNamespace` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudUser` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudAccount` varchar(255) NOT NULL DEFAULT '',
|
||||
`cloudPassword` varchar(255) NOT NULL DEFAULT '',
|
||||
`couldVPC` varchar(255) NOT NULL DEFAULT '',
|
||||
-- DROP TABLE IF EXISTS `zt_automation`;
|
||||
CREATE TABLE `zt_automation` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`node` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`product` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`scriptPath` varchar(255) NOT NULL DEFAULT '',
|
||||
`shell` mediumtext NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
@@ -7555,86 +7571,6 @@ CREATE TABLE IF NOT EXISTS `zt_deployscope` (
|
||||
`remove` text NOT NULL,
|
||||
`add` text NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_vm`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_vm` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`hostID` int(10) unsigned NOT NULL DEFAULT 0,
|
||||
`name` varchar(255) NOT NULL DEFAULT '',
|
||||
`osCategory` varchar(50) NOT NULL DEFAULT '',
|
||||
`osType` varchar(50) NOT NULL DEFAULT '',
|
||||
`osArch` varchar(50) NOT NULL DEFAULT '',
|
||||
`osLang` varchar(50) NOT NULL DEFAULT '',
|
||||
`osCpu` tinyint(2) NOT NULL DEFAULT 0,
|
||||
`osMemory` smallint(6) NOT NULL DEFAULT 0,
|
||||
`osDisk` smallint(6) NOT NULL DEFAULT 0,
|
||||
`status` varchar(50) NOT NULL DEFAULT '',
|
||||
`destroyAt` datetime NULL,
|
||||
`macAddress` varchar(255) NOT NULL DEFAULT '',
|
||||
`workspace` varchar(255) NOT NULL DEFAULT '',
|
||||
`templateID` int(10) unsigned NOT NULL DEFAULT 0,
|
||||
`baseImageID` int(10) unsigned NOT NULL DEFAULT 0,
|
||||
`baseImagePath` varchar(255) NOT NULL DEFAULT '',
|
||||
`desc` varchar(255) NOT NULL DEFAULT '',
|
||||
`heatbeat` datetime NULL,
|
||||
`vncPort` int(10) NOT NULL DEFAULT 0,
|
||||
`instance` varchar(255) NOT NULL DEFAULT '',
|
||||
`eip` varchar(255) NOT NULL DEFAULT '',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`public` varchar(50) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_baseimage`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_baseimage` (
|
||||
`id` SMALLINT(7) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL DEFAULT '',
|
||||
`path` varchar(255) NOT NULL DEFAULT '',
|
||||
`osType` varchar(50) NOT NULL DEFAULT '',
|
||||
`os` varchar(50) NOT NULL DEFAULT '',
|
||||
`osCategory` varchar(50) NOT NULL DEFAULT '',
|
||||
`osArch` varchar(50) NOT NULL DEFAULT '',
|
||||
`osLang` varchar(50) NOT NULL DEFAULT '',
|
||||
`suggestCore` tinyint(1) unsigned NOT NULL DEFAULT 0,
|
||||
`suggestMemory` mediumint(6) unsigned NOT NULL DEFAULT 0,
|
||||
`suggestVolume` mediumint(6) unsigned NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_vmtemplate`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_vmtemplate` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`hostID` int(10) unsigned NOT NULL DEFAULT 0,
|
||||
`templateName` varchar(255) NOT NULL DEFAULT '',
|
||||
`osType` varchar(50) NOT NULL DEFAULT '',
|
||||
`osCategory` varchar(50) NOT NULL DEFAULT '',
|
||||
`osVersion` varchar(50) NOT NULL DEFAULT '',
|
||||
`osLang` varchar(50) NOT NULL,
|
||||
`cpuCoreNum` smallint(4) NOT NULL DEFAULT 0,
|
||||
`memorySize` int NOT NULL DEFAULT 0,
|
||||
`diskSize` int NOT NULL DEFAULT 0,
|
||||
`osArch` varchar(50) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_browser`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_browser` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL DEFAULT '',
|
||||
`type` varchar(255) NOT NULL DEFAULT '',
|
||||
`version` varchar(255) NOT NULL DEFAULT '',
|
||||
`lang` varchar(255) NOT NULL DEFAULT '',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_baseimagebrowser`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_baseimagebrowser` (
|
||||
`vmBackingID` int(10) NOT NULL,
|
||||
`browserID` int(10) NOT NULL,
|
||||
PRIMARY KEY (`vmBackingID`, `browserID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_traincourse`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_traincourse` (
|
||||
@@ -9642,6 +9578,7 @@ CREATE TABLE IF NOT EXISTS `zt_assetlib` (
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
`registerDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB CHARSET=utf8;
|
||||
|
||||
@@ -734,10 +734,13 @@ class baseRouter
|
||||
$account = $sql->quote($account);
|
||||
$vision = $this->dbh->query("SELECT * FROM " . TABLE_CONFIG . " WHERE owner = $account AND `key` = 'vision' LIMIT 1")->fetch();
|
||||
if($vision) $vision = $vision->value;
|
||||
if(empty($vision))
|
||||
|
||||
$user = $this->dbh->query("SELECT * FROM " . TABLE_USER . " WHERE account = $account AND deleted = '0' LIMIT 1")->fetch();
|
||||
if(!empty($user->visions))
|
||||
{
|
||||
$user = $this->dbh->query("SELECT * FROM " . TABLE_USER . " WHERE account = $account AND deleted = '0' LIMIT 1")->fetch();
|
||||
if(!empty($user->visions)) list($vision) = explode(',', $user->visions);
|
||||
$userVisions = explode(',', $user->visions);
|
||||
if(!in_array($vision, $userVisions)) $vision = '';
|
||||
if(empty($vision)) list($vision) = $userVisions;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1249,7 +1249,7 @@ EOT;
|
||||
}
|
||||
|
||||
/* Fix value is '0123' error. */
|
||||
if(is_numeric($value) and !preg_match('/^0[1-9]/', $value))
|
||||
if(is_numeric($value) and !preg_match('/^0[0-9]+/', $value))
|
||||
{
|
||||
$js .= "{$prefix}{$key} = {$value};";
|
||||
}
|
||||
|
||||
+55
-4
@@ -213,6 +213,8 @@ class Gitea
|
||||
if(!scm::checkRevision($fromRevision)) return array();
|
||||
if(!scm::checkRevision($toRevision)) return array();
|
||||
|
||||
execCmd(escapeCmd("$this->client pull"));
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$count = $count == 0 ? '' : "-n $count";
|
||||
/* compatible with svn. */
|
||||
@@ -278,6 +280,9 @@ class Gitea
|
||||
$blame['lines'] = 1;
|
||||
$blame['content'] = strpos($matches[6], ' ') === false ? $matches[6] : substr($matches[6], 1);
|
||||
|
||||
$log = $this->log('', '', '', 1);
|
||||
$blame['message'] = $log[0]->comment;
|
||||
|
||||
$revision = $matches[1];
|
||||
$revLine = $matches[5];
|
||||
$blames[$revLine] = $blame;
|
||||
@@ -611,6 +616,7 @@ class Gitea
|
||||
$parsedFile = new stdclass();
|
||||
$parsedFile->revision = $hash;
|
||||
$parsedFile->path = '/' . trim($path);
|
||||
$parsedFile->oldPath = isset($file[2]) ? '/' . trim($file[2]) : '';
|
||||
$parsedFile->type = 'file';
|
||||
$parsedFile->action = $action;
|
||||
$logs['files'][$hash][] = $parsedFile;
|
||||
@@ -683,12 +689,14 @@ class Gitea
|
||||
}
|
||||
elseif(strpos($line, "\t") !== false)
|
||||
{
|
||||
list($action, $entry) = explode("\t", $line);
|
||||
$lineList = explode("\t", $line);
|
||||
list($action, $entry) = $lineList;
|
||||
$entry = '/' . trim($entry);
|
||||
$pathInfo = array();
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$changes[$entry] = $pathInfo;
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$pathInfo['oldPath'] = isset($lineList[2]) ? '/' . trim($lineList[2]) : '';
|
||||
$changes[$entry] = $pathInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,4 +725,47 @@ class Gitea
|
||||
$api = $app->control->loadModel('gitea')->getApiRoot($this->repo->serviceHost);
|
||||
return sprintf($api, "/repos/{$this->repo->serviceProject}/archive/{$branch}.zip");
|
||||
}
|
||||
|
||||
/**
|
||||
* List all files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @param array $lists
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getAllFiles($path, $revision = 'HEAD', &$lists = array())
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$sub = '';
|
||||
chdir($this->root);
|
||||
if(!empty($path)) $sub = ":$path";
|
||||
if(!empty($this->branch))$revision = $this->branch;
|
||||
$cmd = escapeCmd("$this->client ls-tree -l $revision$sub");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
|
||||
$infos = array();
|
||||
foreach($list as $entry)
|
||||
{
|
||||
list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry);
|
||||
|
||||
/* Get commit info. */
|
||||
$pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR);
|
||||
$info->kind = $kind == 'tree' ? 'dir' : 'file';
|
||||
if($kind == 'tree')
|
||||
{
|
||||
$this->getAllFiles($pathName, $revision, $lists);
|
||||
}
|
||||
else
|
||||
{
|
||||
$lists[] = rtrim($pathName, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
return $lists;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -257,6 +257,7 @@ class gitlab
|
||||
$param = new stdclass;
|
||||
$param->ref = ($revision and $revision != 'HEAD') ? $revision : $this->branch;
|
||||
$results = $this->fetch($api, $param);
|
||||
if(isset($results->message)) return array();
|
||||
|
||||
$blames = array();
|
||||
$revLine = 0;
|
||||
@@ -268,7 +269,8 @@ class gitlab
|
||||
$line = array();
|
||||
$line['revision'] = $blame->commit->id;
|
||||
$line['committer'] = $blame->commit->committer_name;
|
||||
$line['time'] = $blame->commit->committer_name;
|
||||
$line['message'] = $blame->commit->message;
|
||||
$line['time'] = date('Y-m-d H:i:s', strtotime($blame->commit->committed_date));
|
||||
$line['line'] = $lineNumber;
|
||||
$line['lines'] = count($blame->lines);
|
||||
$line['content'] = array_shift($blame->lines);
|
||||
@@ -342,7 +344,7 @@ class gitlab
|
||||
if(!scm::checkRevision($revision)) return false;
|
||||
if($revision == 'HEAD' and $this->branch) $revision = $this->branch;
|
||||
$file = $this->files($entry, $revision);
|
||||
return base64_decode($file->content);
|
||||
return isset($file->content) ? base64_decode($file->content) : '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -688,7 +690,7 @@ class gitlab
|
||||
/**
|
||||
* Get files by commit.
|
||||
*
|
||||
* @param string $commit
|
||||
* @param string $commit
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -717,8 +719,9 @@ class gitlab
|
||||
$file->revision = $revision;
|
||||
$file->path = '/' . $row->new_path;
|
||||
$file->type = 'file';
|
||||
$file->oldPath = '/' . $row->old_path;
|
||||
|
||||
$file->action = 'M';
|
||||
$file->action = 'M';
|
||||
if($row->new_file) $file->action = 'A';
|
||||
if($row->renamed_file) $file->action = 'R';
|
||||
if($row->deleted_file) $file->action = 'D';
|
||||
@@ -827,8 +830,9 @@ class gitlab
|
||||
foreach($commit->diffs as $diff)
|
||||
{
|
||||
$parsedLog->change[$diff->path] = array();
|
||||
$parsedLog->change[$diff->path]['action'] = $diff->action;
|
||||
$parsedLog->change[$diff->path]['kind'] = $diff->type;
|
||||
$parsedLog->change[$diff->path]['action'] = $diff->action;
|
||||
$parsedLog->change[$diff->path]['kind'] = $diff->type;
|
||||
$parsedLog->change[$diff->path]['oldPath'] = $diff->oldPath;
|
||||
}
|
||||
$parsedLogs[] = $parsedLog;
|
||||
}
|
||||
@@ -853,4 +857,44 @@ class gitlab
|
||||
|
||||
return "{$this->root}archive.{$ext}" . '?' . http_build_query($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* List all files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @param array $lists
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getAllFiles($path = '', $revision = 'HEAD', &$lists = array())
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
$api = "tree";
|
||||
|
||||
$param = new stdclass();
|
||||
$param->path = ltrim($path, '/');
|
||||
$param->ref = $revision;
|
||||
$param->recursive = 0;
|
||||
if(!empty($this->branch)) $param->ref = $this->branch;
|
||||
|
||||
$list = $this->fetch($api, $param, true);
|
||||
if(empty($list)) return array();
|
||||
|
||||
$infos = array();
|
||||
foreach($list as $file)
|
||||
{
|
||||
if(!isset($file->type)) continue;
|
||||
|
||||
if($file->type == 'blob')
|
||||
{
|
||||
$lists[] = $file->path;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->getAllFiles($file->path, $revision, $lists);
|
||||
}
|
||||
}
|
||||
return $lists;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,9 @@ class GitRepo
|
||||
if($branch)
|
||||
{
|
||||
$branches = $this->branch();
|
||||
if(isset($branches[$branch])) $branch = "origin/$branch";
|
||||
$cmd = escapeCmd("$this->client branch -r");
|
||||
execCmd($cmd . ' 2>&1', 'string', $result);
|
||||
if(isset($branches[$branch]) and !empty($result)) $branch = "origin/$branch";
|
||||
}
|
||||
$this->branch = $branch;
|
||||
$this->repo = $repo;
|
||||
@@ -199,6 +201,8 @@ class GitRepo
|
||||
if(!scm::checkRevision($fromRevision)) return array();
|
||||
if(!scm::checkRevision($toRevision)) return array();
|
||||
|
||||
execCmd(escapeCmd("$this->client pull"));
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$count = $count == 0 ? '' : "-n $count";
|
||||
/* compatible with svn. */
|
||||
@@ -264,6 +268,9 @@ class GitRepo
|
||||
$blame['lines'] = 1;
|
||||
$blame['content'] = strpos($matches[6], ' ') === false ? $matches[6] : substr($matches[6], 1);
|
||||
|
||||
$log = $this->log('', '', '', 1);
|
||||
$blame['message'] = $log[0]->comment;
|
||||
|
||||
$revision = $matches[1];
|
||||
$revLine = $matches[5];
|
||||
$blames[$revLine] = $blame;
|
||||
@@ -594,9 +601,10 @@ class GitRepo
|
||||
$parsedFile = new stdclass();
|
||||
$parsedFile->revision = $hash;
|
||||
$parsedFile->path = '/' . trim($path);
|
||||
$parsedFile->oldPath = isset($file[2]) ? '/' . trim($file[2]) : '';
|
||||
$parsedFile->type = 'file';
|
||||
$parsedFile->action = $action;
|
||||
$logs['files'][$hash][] = $parsedFile;
|
||||
$logs['files'][$hash][] = $parsedFile;
|
||||
}
|
||||
}
|
||||
return $logs;
|
||||
@@ -667,12 +675,14 @@ class GitRepo
|
||||
}
|
||||
elseif(strpos($line, "\t") !== false)
|
||||
{
|
||||
list($action, $entry) = explode("\t", $line);
|
||||
$lineList = explode("\t", $line);
|
||||
list($action, $entry) = $lineList;
|
||||
$entry = '/' . trim($entry);
|
||||
$pathInfo = array();
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$changes[$entry] = $pathInfo;
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$pathInfo['oldPath'] = isset($lineList[2]) ? '/' . trim($lineList[2]) : '';
|
||||
$changes[$entry] = $pathInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -712,4 +722,47 @@ class GitRepo
|
||||
|
||||
return $config->webRoot . $app->getAppName() . 'data' . DS . 'repo' . DS . "{$this->repo->name}_$branch.zip";
|
||||
}
|
||||
|
||||
/**
|
||||
* List all files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @param array $lists
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getAllFiles($path, $revision = 'HEAD', &$lists = array())
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$sub = '';
|
||||
chdir($this->root);
|
||||
if(!empty($path)) $sub = ":$path";
|
||||
if(!empty($this->branch))$revision = $this->branch;
|
||||
$cmd = escapeCmd("$this->client ls-tree -l $revision$sub");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
|
||||
$infos = array();
|
||||
foreach($list as $entry)
|
||||
{
|
||||
list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry);
|
||||
|
||||
/* Get commit info. */
|
||||
$pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR);
|
||||
$info->kind = $kind == 'tree' ? 'dir' : 'file';
|
||||
if($kind == 'tree')
|
||||
{
|
||||
$this->getAllFiles($pathName, $revision, $lists);
|
||||
}
|
||||
else
|
||||
{
|
||||
$lists[] = rtrim($pathName, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
return $lists;
|
||||
}
|
||||
}
|
||||
|
||||
+55
-4
@@ -213,6 +213,8 @@ class Gogs
|
||||
if(!scm::checkRevision($fromRevision)) return array();
|
||||
if(!scm::checkRevision($toRevision)) return array();
|
||||
|
||||
execCmd(escapeCmd("$this->client pull"));
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$count = $count == 0 ? '' : "-n $count";
|
||||
/* compatible with svn. */
|
||||
@@ -278,6 +280,9 @@ class Gogs
|
||||
$blame['lines'] = 1;
|
||||
$blame['content'] = strpos($matches[6], ' ') === false ? $matches[6] : substr($matches[6], 1);
|
||||
|
||||
$log = $this->log('', '', '', 1);
|
||||
$blame['message'] = $log[0]->comment;
|
||||
|
||||
$revision = $matches[1];
|
||||
$revLine = $matches[5];
|
||||
$blames[$revLine] = $blame;
|
||||
@@ -611,6 +616,7 @@ class Gogs
|
||||
$parsedFile = new stdclass();
|
||||
$parsedFile->revision = $hash;
|
||||
$parsedFile->path = '/' . trim($path);
|
||||
$parsedFile->oldPath = isset($file[2]) ? '/' . trim($file[2]) : '';
|
||||
$parsedFile->type = 'file';
|
||||
$parsedFile->action = $action;
|
||||
$logs['files'][$hash][] = $parsedFile;
|
||||
@@ -704,12 +710,14 @@ class Gogs
|
||||
}
|
||||
elseif(strpos($line, "\t") !== false)
|
||||
{
|
||||
list($action, $entry) = explode("\t", $line);
|
||||
$lineList = explode("\t", $line);
|
||||
list($action, $entry) = $lineList;
|
||||
$entry = '/' . trim($entry);
|
||||
$pathInfo = array();
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$changes[$entry] = $pathInfo;
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$pathInfo['oldPath'] = isset($lineList[2]) ? '/' . trim($lineList[2]) : '';
|
||||
$changes[$entry] = $pathInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -752,4 +760,47 @@ class Gogs
|
||||
|
||||
return $config->webRoot . $app->getAppName() . 'data' . DS . 'repo' . DS . "{$this->repo->name}_$branch.zip";
|
||||
}
|
||||
|
||||
/**
|
||||
* List all files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @param array $lists
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getAllFiles($path, $revision = 'HEAD', &$lists = array())
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$sub = '';
|
||||
chdir($this->root);
|
||||
if(!empty($path)) $sub = ":$path";
|
||||
if(!empty($this->branch))$revision = $this->branch;
|
||||
$cmd = escapeCmd("$this->client ls-tree -l $revision$sub");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
|
||||
$infos = array();
|
||||
foreach($list as $entry)
|
||||
{
|
||||
list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry);
|
||||
|
||||
/* Get commit info. */
|
||||
$pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR);
|
||||
$info->kind = $kind == 'tree' ? 'dir' : 'file';
|
||||
if($kind == 'tree')
|
||||
{
|
||||
$this->getAllFiles($pathName, $revision, $lists);
|
||||
}
|
||||
else
|
||||
{
|
||||
$lists[] = rtrim($pathName, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
return $lists;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -271,6 +271,31 @@ class scm
|
||||
{
|
||||
return $this->engine->getDownloadUrl($branch, $savePath, $ext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getAllFiles($path = '', $revision = 'HEAD')
|
||||
{
|
||||
return $this->engine->getAllFiles($path, $revision);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get files by commit.
|
||||
*
|
||||
* @param string $commit
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getFilesByCommit($revision)
|
||||
{
|
||||
return $this->engine->getFilesByCommit($revision);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -306,10 +306,14 @@ class Subversion
|
||||
$blame = array();
|
||||
$blame['revision'] = (int)$line->commit['revision'];
|
||||
$blame['committer'] = (string)$line->commit->author;
|
||||
$blame['time'] = substr($line->commit->date, 0, 10);
|
||||
$blame['time'] = date('Y-m-d H:i:s', strtotime($line->commit->date));
|
||||
$blame['line'] = (int)$line['line-number'];
|
||||
$blame['lines'] = 1;
|
||||
$blame['content'] = $content[$blame['line'] - 1];
|
||||
|
||||
$log = $this->log('', $blame['revision'], 'HEAD', 1);
|
||||
$blame['message'] = $log[0]->comment;
|
||||
|
||||
$revision = $blame['revision'];
|
||||
$revLine = $blame['line'];
|
||||
$blames[$revLine] = $blame;
|
||||
@@ -318,7 +322,7 @@ class Subversion
|
||||
{
|
||||
$blame = array();
|
||||
$blame['line'] = (int)$line['line-number'];
|
||||
$blame['content'] = $content[$blame['line'] - 1];
|
||||
$blame['content'] = zget($content, $blame['line'] - 1, '');
|
||||
|
||||
$blames[$blame['line']] = $blame;
|
||||
$blames[$revLine]['lines'] ++;
|
||||
@@ -712,4 +716,55 @@ class Subversion
|
||||
$zfile->removeDir($repoDir);
|
||||
return $config->webRoot . $app->getAppName() . 'data' . DS . 'repo' . DS . $this->repo->name . '.zip';
|
||||
}
|
||||
|
||||
/**
|
||||
* List all files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @param array $lists
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getAllFiles($path = '', $revision = 'HEAD', &$lists = array())
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
|
||||
$resourcePath = $path;
|
||||
$path = '"' . $this->root . '/' . str_replace(array('%2F', '+'), array('/', ' '), urlencode($path)) . '"';
|
||||
$cmd = $this->replaceAuth(escapeCmd($this->buildCMD($path, 'ls', "-r $revision --xml")));
|
||||
$list = execCmd($cmd, 'string', $result);
|
||||
if($result)
|
||||
{
|
||||
$path = '"' . $this->root . '/' . $resourcePath . '"';
|
||||
$cmd = $this->replaceAuth(escapeCmd($this->buildCMD($path, 'ls', "-r $revision --xml")));
|
||||
$list = execCmd($cmd, 'string', $result);
|
||||
if($result) $list = '';
|
||||
}
|
||||
$listObject = simplexml_load_string($list);
|
||||
if(!empty($list) and empty($listObject))
|
||||
{
|
||||
$list = helper::convertEncoding($list, $this->encoding, 'utf-8');
|
||||
$listObject = simplexml_load_string($list);
|
||||
}
|
||||
if(!empty($listObject->list->entry)) $listObject = $listObject->list->entry;
|
||||
$infos = array();
|
||||
if(empty($listObject)) return $infos;
|
||||
|
||||
foreach($listObject as $list)
|
||||
{
|
||||
$kind = (string)$list['kind'];
|
||||
$pathName = ltrim($path . DIRECTORY_SEPARATOR . (string)$list->name, DIRECTORY_SEPARATOR);
|
||||
if($kind == 'dir')
|
||||
{
|
||||
$this->getAllFiles($pathName, $revision, $lists);
|
||||
}
|
||||
else
|
||||
{
|
||||
$lists[] = rtrim($pathName, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
return $lists;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,10 +18,12 @@ class zfile
|
||||
* @param string $to
|
||||
* @param bool $logLevel
|
||||
* @param string $logFile
|
||||
* @param array $excludeFiles
|
||||
* @param bool $toIsLink
|
||||
* @access public
|
||||
* @return array copied files, count, size or message.
|
||||
*/
|
||||
public function copyDir($from, $to, $logLevel = false, $logFile = '')
|
||||
public function copyDir($from, $to, $logLevel = false, $logFile = '', $excludeFiles = array(), $toIsLink = false)
|
||||
{
|
||||
static $copiedFiles = array();
|
||||
static $errorFiles = array();
|
||||
@@ -41,12 +43,21 @@ class zfile
|
||||
if(!empty($log['message'])) return $log;
|
||||
|
||||
$from = realpath($from) . '/';
|
||||
$to = realpath($to) . '/';
|
||||
if(is_link($to) || $toIsLink)
|
||||
{
|
||||
$to = $to . '/';
|
||||
|
||||
$toIsLink = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$to = realpath($to) . '/';
|
||||
}
|
||||
|
||||
$entries = scandir($from);
|
||||
foreach($entries as $entry)
|
||||
{
|
||||
if($entry == '.' or $entry == '..' or $entry == '.svn' or $entry == '.git') continue;
|
||||
if($entry == '.' or $entry == '..' or $entry == '.svn' or $entry == '.git' or in_array($entry, $excludeFiles)) continue;
|
||||
|
||||
$fullEntry = $from . $entry;
|
||||
if(is_file($fullEntry))
|
||||
@@ -82,7 +93,7 @@ class zfile
|
||||
{
|
||||
$nextFrom = $fullEntry;
|
||||
$nextTo = $to . $entry;
|
||||
$result = $this->copyDir($nextFrom, $nextTo, $logLevel, $logFile);
|
||||
$result = $this->copyDir($nextFrom, $nextTo, $logLevel, $logFile, array(), $toIsLink);
|
||||
$count += $result['count'];
|
||||
$size += $result['size'];
|
||||
}
|
||||
@@ -101,10 +112,11 @@ class zfile
|
||||
* Get count.
|
||||
*
|
||||
* @param string $dir
|
||||
* @param array $excludeFiles
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getCount($dir)
|
||||
public function getCount($dir, $excludeFiles = array())
|
||||
{
|
||||
if(!file_exists($dir)) return 0;
|
||||
if(is_file($dir)) return 1;
|
||||
@@ -113,7 +125,7 @@ class zfile
|
||||
$entries = scandir($dir);
|
||||
foreach($entries as $entry)
|
||||
{
|
||||
if($entry == '.' or $entry == '..' or $entry == '.svn' or $entry == '.git') continue;
|
||||
if($entry == '.' or $entry == '..' or $entry == '.svn' or $entry == '.git' or in_array($entry, $excludeFiles)) continue;
|
||||
|
||||
$fullEntry = $dir . '/' . $entry;
|
||||
$count += $this->getCount($fullEntry);
|
||||
|
||||
+50
-49
@@ -1,53 +1,54 @@
|
||||
<?php
|
||||
$config->action->objectNameFields['product'] = 'name';
|
||||
$config->action->objectNameFields['story'] = 'title';
|
||||
$config->action->objectNameFields['requirement'] = 'title';
|
||||
$config->action->objectNameFields['productplan'] = 'title';
|
||||
$config->action->objectNameFields['release'] = 'name';
|
||||
$config->action->objectNameFields['program'] = 'name';
|
||||
$config->action->objectNameFields['project'] = 'name';
|
||||
$config->action->objectNameFields['execution'] = 'name';
|
||||
$config->action->objectNameFields['task'] = 'name';
|
||||
$config->action->objectNameFields['build'] = 'name';
|
||||
$config->action->objectNameFields['bug'] = 'title';
|
||||
$config->action->objectNameFields['testcase'] = 'title';
|
||||
$config->action->objectNameFields['case'] = 'title';
|
||||
$config->action->objectNameFields['testtask'] = 'name';
|
||||
$config->action->objectNameFields['user'] = 'account';
|
||||
$config->action->objectNameFields['api'] = 'title';
|
||||
$config->action->objectNameFields['doc'] = 'title';
|
||||
$config->action->objectNameFields['doclib'] = 'name';
|
||||
$config->action->objectNameFields['todo'] = 'name';
|
||||
$config->action->objectNameFields['branch'] = 'name';
|
||||
$config->action->objectNameFields['module'] = 'name';
|
||||
$config->action->objectNameFields['testsuite'] = 'name';
|
||||
$config->action->objectNameFields['caselib'] = 'name';
|
||||
$config->action->objectNameFields['testreport'] = 'title';
|
||||
$config->action->objectNameFields['entry'] = 'name';
|
||||
$config->action->objectNameFields['webhook'] = 'name';
|
||||
$config->action->objectNameFields['risk'] = 'name';
|
||||
$config->action->objectNameFields['issue'] = 'title';
|
||||
$config->action->objectNameFields['design'] = 'name';
|
||||
$config->action->objectNameFields['stakeholder'] = 'user';
|
||||
$config->action->objectNameFields['budget'] = 'name';
|
||||
$config->action->objectNameFields['job'] = 'name';
|
||||
$config->action->objectNameFields['team'] = 'name';
|
||||
$config->action->objectNameFields['pipeline'] = 'name';
|
||||
$config->action->objectNameFields['mr'] = 'title';
|
||||
$config->action->objectNameFields['reviewcl'] = 'title';
|
||||
$config->action->objectNameFields['kanbancolumn'] = 'name';
|
||||
$config->action->objectNameFields['kanbanlane'] = 'name';
|
||||
$config->action->objectNameFields['kanbanspace'] = 'name';
|
||||
$config->action->objectNameFields['kanbanregion'] = 'name';
|
||||
$config->action->objectNameFields['kanban'] = 'name';
|
||||
$config->action->objectNameFields['kanbancard'] = 'name';
|
||||
$config->action->objectNameFields['sonarqube'] = 'name';
|
||||
$config->action->objectNameFields['gitlab'] = 'name';
|
||||
$config->action->objectNameFields['gitea'] = 'name';
|
||||
$config->action->objectNameFields['gogs'] = 'name';
|
||||
$config->action->objectNameFields['stage'] = 'name';
|
||||
$config->action->objectNameFields['apistruct'] = 'name';
|
||||
$config->action->objectNameFields['repo'] = 'name';
|
||||
$config->action->objectNameFields['product'] = 'name';
|
||||
$config->action->objectNameFields['story'] = 'title';
|
||||
$config->action->objectNameFields['requirement'] = 'title';
|
||||
$config->action->objectNameFields['productplan'] = 'title';
|
||||
$config->action->objectNameFields['release'] = 'name';
|
||||
$config->action->objectNameFields['program'] = 'name';
|
||||
$config->action->objectNameFields['project'] = 'name';
|
||||
$config->action->objectNameFields['execution'] = 'name';
|
||||
$config->action->objectNameFields['task'] = 'name';
|
||||
$config->action->objectNameFields['build'] = 'name';
|
||||
$config->action->objectNameFields['bug'] = 'title';
|
||||
$config->action->objectNameFields['testcase'] = 'title';
|
||||
$config->action->objectNameFields['case'] = 'title';
|
||||
$config->action->objectNameFields['testtask'] = 'name';
|
||||
$config->action->objectNameFields['user'] = 'account';
|
||||
$config->action->objectNameFields['api'] = 'title';
|
||||
$config->action->objectNameFields['doc'] = 'title';
|
||||
$config->action->objectNameFields['doclib'] = 'name';
|
||||
$config->action->objectNameFields['todo'] = 'name';
|
||||
$config->action->objectNameFields['branch'] = 'name';
|
||||
$config->action->objectNameFields['module'] = 'name';
|
||||
$config->action->objectNameFields['testsuite'] = 'name';
|
||||
$config->action->objectNameFields['caselib'] = 'name';
|
||||
$config->action->objectNameFields['testreport'] = 'title';
|
||||
$config->action->objectNameFields['entry'] = 'name';
|
||||
$config->action->objectNameFields['webhook'] = 'name';
|
||||
$config->action->objectNameFields['risk'] = 'name';
|
||||
$config->action->objectNameFields['issue'] = 'title';
|
||||
$config->action->objectNameFields['design'] = 'name';
|
||||
$config->action->objectNameFields['stakeholder'] = 'user';
|
||||
$config->action->objectNameFields['budget'] = 'name';
|
||||
$config->action->objectNameFields['job'] = 'name';
|
||||
$config->action->objectNameFields['team'] = 'name';
|
||||
$config->action->objectNameFields['pipeline'] = 'name';
|
||||
$config->action->objectNameFields['mr'] = 'title';
|
||||
$config->action->objectNameFields['reviewcl'] = 'title';
|
||||
$config->action->objectNameFields['kanbancolumn'] = 'name';
|
||||
$config->action->objectNameFields['kanbanlane'] = 'name';
|
||||
$config->action->objectNameFields['kanbanspace'] = 'name';
|
||||
$config->action->objectNameFields['kanbanregion'] = 'name';
|
||||
$config->action->objectNameFields['kanban'] = 'name';
|
||||
$config->action->objectNameFields['kanbancard'] = 'name';
|
||||
$config->action->objectNameFields['sonarqube'] = 'name';
|
||||
$config->action->objectNameFields['gitlab'] = 'name';
|
||||
$config->action->objectNameFields['gitea'] = 'name';
|
||||
$config->action->objectNameFields['gogs'] = 'name';
|
||||
$config->action->objectNameFields['stage'] = 'name';
|
||||
$config->action->objectNameFields['apistruct'] = 'name';
|
||||
$config->action->objectNameFields['repo'] = 'name';
|
||||
$config->action->objectNameFields['zanode'] = 'name';
|
||||
|
||||
$config->action->commonImgSize = 870;
|
||||
|
||||
|
||||
+81
-52
@@ -111,6 +111,8 @@ $lang->action->objectTypes['caselib'] = 'Bibliothek';
|
||||
$lang->action->objectTypes['testsuite'] = 'Suite';
|
||||
$lang->action->objectTypes['testtask'] = 'Test Build';
|
||||
$lang->action->objectTypes['testreport'] = 'Berichte';
|
||||
$lang->action->objectTypes['zahost'] = 'Host';
|
||||
$lang->action->objectTypes['zanode'] = 'ZA Node';
|
||||
$lang->action->objectTypes['doc'] = 'Dok';
|
||||
$lang->action->objectTypes['api'] = 'Interface';
|
||||
$lang->action->objectTypes['doclib'] = 'Dok Bibliothek';
|
||||
@@ -225,8 +227,13 @@ $lang->action->desc->reopen = '$date, reopened by <strong>$actor</
|
||||
$lang->action->desc->merged = '$date, merged by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->submitreview = '$date, submitted for review by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->ganttmove = '$date, sort by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->suspend = '$date, the execution node is suspended by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->resume = '$date, the execution node is resumed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->reboot = '$date, the execution node is reboot by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->destroy = '$date, the execution node is destroyed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->switchtolight = '$date, Switch from ALM mode to light mode by <strong>'. $lang->admin->system .'</strong>.' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the sprints of the project from the $extra.' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, Remote control <strong>$extra</strong> by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the ' . $lang->executionCommon . 's of the project from the $extra.' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -303,6 +310,8 @@ $lang->action->label->unlinkedfromproject = "Unlink Project";
|
||||
$lang->action->label->unlinkedfrombuild = "Unlink Build";
|
||||
$lang->action->label->linked2release = "Link Release";
|
||||
$lang->action->label->unlinkedfromrelease = "Unlink Release";
|
||||
$lang->action->label->linked2revision = "Link Revision";
|
||||
$lang->action->label->unlinkedfromrevision = "Unlink Revision";
|
||||
$lang->action->label->linkrelatedbug = "Link to Bug";
|
||||
$lang->action->label->unlinkrelatedbug = "Unlink";
|
||||
$lang->action->label->linkrelatedcase = "Link to Case";
|
||||
@@ -395,6 +404,10 @@ $lang->action->label->tolib = 'imported';
|
||||
$lang->action->label->updatetolib = 'updated';
|
||||
$lang->action->label->ganttmove = 'sorted';
|
||||
$lang->action->label->submitreview = 'submitted';
|
||||
$lang->action->label->suspend = 'suspended';
|
||||
$lang->action->label->resume = 'resumed';
|
||||
$lang->action->label->reboot = 'reboot';
|
||||
$lang->action->label->destroy = 'destroyed';
|
||||
$lang->action->label->switchtolight = 'switch from ALM mode to light mode';
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
@@ -471,6 +484,8 @@ $lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Pl
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
|
||||
$lang->action->dynamicAction->story['linked2revision'] = 'Link Story to Revision';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrevision'] = 'Unlink Story from Revision';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
|
||||
@@ -528,62 +543,66 @@ $lang->action->dynamicAction->kanbancard['deleted'] = 'Delete Card';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Create Task';
|
||||
$lang->action->dynamicAction->task['importfromgitlab'] = "Issue associate create task";
|
||||
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
|
||||
$lang->action->dynamicAction->task['assigned'] = 'Assign Task';
|
||||
$lang->action->dynamicAction->task['confirmed'] = 'Confirm Task';
|
||||
$lang->action->dynamicAction->task['started'] = 'Start Task';
|
||||
$lang->action->dynamicAction->task['finished'] = 'Finish Task';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = 'Add Estimates';
|
||||
$lang->action->dynamicAction->task['editestimate'] = 'Edit Estimates';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = 'Delete Estimates';
|
||||
$lang->action->dynamicAction->task['paused'] = 'Pause Task';
|
||||
$lang->action->dynamicAction->task['closed'] = 'Close Task';
|
||||
$lang->action->dynamicAction->task['canceled'] = 'Cancel Task';
|
||||
$lang->action->dynamicAction->task['activated'] = 'Activate Task';
|
||||
$lang->action->dynamicAction->task['createchildren'] = 'Create Child Task';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Unlink Parent Task';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = 'Delete children task';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = 'Link Parent Task';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = 'Link Child Task';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = 'Create Child Story';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = 'Unlink Parent Story';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = 'Delete children story';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = 'Link Parent Story';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = 'Link Child Story';
|
||||
$lang->action->dynamicAction->task['undeleted'] = 'Restore Task';
|
||||
$lang->action->dynamicAction->task['hidden'] = 'Hide Task';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = 'Order';
|
||||
$lang->action->dynamicAction->task['opened'] = 'Create Task';
|
||||
$lang->action->dynamicAction->task['importfromgitlab'] = "Issue associate create task";
|
||||
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
|
||||
$lang->action->dynamicAction->task['assigned'] = 'Assign Task';
|
||||
$lang->action->dynamicAction->task['confirmed'] = 'Confirm Task';
|
||||
$lang->action->dynamicAction->task['started'] = 'Start Task';
|
||||
$lang->action->dynamicAction->task['finished'] = 'Finish Task';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = 'Add Estimates';
|
||||
$lang->action->dynamicAction->task['editestimate'] = 'Edit Estimates';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = 'Delete Estimates';
|
||||
$lang->action->dynamicAction->task['paused'] = 'Pause Task';
|
||||
$lang->action->dynamicAction->task['closed'] = 'Close Task';
|
||||
$lang->action->dynamicAction->task['canceled'] = 'Cancel Task';
|
||||
$lang->action->dynamicAction->task['activated'] = 'Activate Task';
|
||||
$lang->action->dynamicAction->task['createchildren'] = 'Create Child Task';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Unlink Parent Task';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = 'Delete children task';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = 'Link Parent Task';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = 'Link Child Task';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = 'Create Child Story';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = 'Unlink Parent Story';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = 'Delete children story';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = 'Link Parent Story';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = 'Link Child Story';
|
||||
$lang->action->dynamicAction->task['undeleted'] = 'Restore Task';
|
||||
$lang->action->dynamicAction->task['hidden'] = 'Hide Task';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = 'Order';
|
||||
$lang->action->dynamicAction->task['linked2revision'] = 'Link Task to Revision';
|
||||
$lang->action->dynamicAction->task['unlinkedfromrevision'] = 'Unlink Task from Revision';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = 'Create Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
|
||||
$lang->action->dynamicAction->bug['importfromgitlab'] = "Issue associate create bug";
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = 'Activate Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = 'Assign Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = 'Close Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Confirm Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = 'Resolve Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = 'Restore Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = 'Hide Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = 'Delete Bug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = 'Confirm Story Change';
|
||||
$lang->action->dynamicAction->bug['tostory'] = 'Convert to Story';
|
||||
$lang->action->dynamicAction->bug['totask'] = 'Convert to Task';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = 'Link Plan';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Link Release';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Link Build';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Unlink Build';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = 'Create Bug from SonarQube Issue';
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
|
||||
$lang->action->dynamicAction->bug['importfromgitlab'] = "Issue associate create bug";
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = 'Activate Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = 'Assign Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = 'Close Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Confirm Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = 'Resolve Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = 'Restore Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = 'Hide Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = 'Delete Bug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = 'Confirm Story Change';
|
||||
$lang->action->dynamicAction->bug['tostory'] = 'Convert to Story';
|
||||
$lang->action->dynamicAction->bug['totask'] = 'Convert to Task';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = 'Link Plan';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Link Release';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2revision'] = 'Link Bug to Revision';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrevision'] = 'Unlink Bug from Revision';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Link Build';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Unlink Build';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = 'Create Bug from SonarQube Issue';
|
||||
|
||||
$lang->action->dynamicAction->testtask['opened'] = 'Create Test Request';
|
||||
$lang->action->dynamicAction->testtask['edited'] = 'Edit Test Request';
|
||||
@@ -621,6 +640,14 @@ $lang->action->dynamicAction->caselib['deleted'] = 'Delete Case Lib';
|
||||
$lang->action->dynamicAction->caselib['undeleted'] = 'Restore Case Lib';
|
||||
$lang->action->dynamicAction->caselib['hidden'] = 'Hide Case Lib';
|
||||
|
||||
$lang->action->dynamicAction->zahost['created'] = 'Create Host';
|
||||
|
||||
$lang->action->dynamicAction->zanode['created'] = 'Create Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['suspend'] = 'Suspend Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['resume'] = 'Resume Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['reboot'] = 'Reboot Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['destroy'] = 'Destory Zagent Node';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = 'Create Doc Library';
|
||||
$lang->action->dynamicAction->doclib['edited'] = 'Edit Doc Library';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
|
||||
@@ -871,6 +898,8 @@ $lang->action->apiTitle->unlinkedfromproject = "Unlinked from project";
|
||||
$lang->action->apiTitle->unlinkedfrombuild = "Unlinked from build";
|
||||
$lang->action->apiTitle->linked2release = "Linked to release";
|
||||
$lang->action->apiTitle->unlinkedfromrelease = "Unlinked from release";
|
||||
$lang->action->apiTitle->linked2revision = "Linked to revision";
|
||||
$lang->action->apiTitle->unlinkedfromrevision = "Unlinked from revision";
|
||||
$lang->action->apiTitle->linkrelatedbug = "Linked related Bug";
|
||||
$lang->action->apiTitle->unlinkrelatedbug = "Unlinked related Bug";
|
||||
$lang->action->apiTitle->linkrelatedstory = "Link related story {$lang->SRCommon}";
|
||||
|
||||
+82
-52
@@ -111,6 +111,8 @@ $lang->action->objectTypes['caselib'] = 'Library';
|
||||
$lang->action->objectTypes['testsuite'] = 'Suite';
|
||||
$lang->action->objectTypes['testtask'] = 'Test Build';
|
||||
$lang->action->objectTypes['testreport'] = 'Report';
|
||||
$lang->action->objectTypes['zahost'] = 'Host';
|
||||
$lang->action->objectTypes['zanode'] = 'ZA Node';
|
||||
$lang->action->objectTypes['doc'] = 'Document';
|
||||
$lang->action->objectTypes['api'] = 'Interface';
|
||||
$lang->action->objectTypes['doclib'] = 'Document Library';
|
||||
@@ -225,8 +227,13 @@ $lang->action->desc->reopen = '$date, reopened by <strong>$actor</
|
||||
$lang->action->desc->merged = '$date, merged by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->submitreview = '$date, submitted for review by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->ganttmove = '$date, sort by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->suspend = '$date, the execution node is suspended by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->resume = '$date, the execution node is resumed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->reboot = '$date, the execution node is reboot by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->destroy = '$date, the execution node is destroyed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->switchtolight = '$date, Switch from ALM mode to light mode by <strong>'. $lang->admin->system .'</strong>.' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the sprints of the project from the $extra.' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, Remote control <strong>$extra</strong> by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the ' . $lang->executionCommon . 's of the project from the $extra.' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -303,6 +310,8 @@ $lang->action->label->unlinkedfromproject = "unlinked from project";
|
||||
$lang->action->label->unlinkedfrombuild = "unlinked Build ";
|
||||
$lang->action->label->linked2release = "linked Release ";
|
||||
$lang->action->label->unlinkedfromrelease = "unlinked Release ";
|
||||
$lang->action->label->linked2revision = "Link Revision";
|
||||
$lang->action->label->unlinkedfromrevision = "Unlink Revision";
|
||||
$lang->action->label->linkrelatedbug = "linked Bug ";
|
||||
$lang->action->label->unlinkrelatedbug = "unlinked Bug ";
|
||||
$lang->action->label->linkrelatedcase = "linked Case ";
|
||||
@@ -395,6 +404,10 @@ $lang->action->label->tolib = 'imported';
|
||||
$lang->action->label->updatetolib = 'updated';
|
||||
$lang->action->label->ganttmove = 'sorted';
|
||||
$lang->action->label->submitreview = 'submitted';
|
||||
$lang->action->label->suspend = 'suspended';
|
||||
$lang->action->label->resume = 'resumed';
|
||||
$lang->action->label->reboot = 'reboot';
|
||||
$lang->action->label->destroy = 'destroyed';
|
||||
$lang->action->label->switchtolight = 'switch from ALM mode to light mode';
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
@@ -471,6 +484,9 @@ $lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Pl
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
|
||||
$lang->action->dynamicAction->story['linked2revision'] = 'Link Story to Revision';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrevision'] = 'Unlink Story from Revision';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
|
||||
@@ -528,62 +544,66 @@ $lang->action->dynamicAction->kanbancard['deleted'] = 'Delete Card';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Create Task';
|
||||
$lang->action->dynamicAction->task['importfromgitlab'] = "Issue associate create task";
|
||||
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
|
||||
$lang->action->dynamicAction->task['assigned'] = 'Assign Task';
|
||||
$lang->action->dynamicAction->task['confirmed'] = 'Confirm Task';
|
||||
$lang->action->dynamicAction->task['started'] = 'Start Task';
|
||||
$lang->action->dynamicAction->task['finished'] = 'Finish Task';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = 'Add Estimates';
|
||||
$lang->action->dynamicAction->task['editestimate'] = 'Edit Estimates';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = 'Delete Estimates';
|
||||
$lang->action->dynamicAction->task['paused'] = 'Pause Task';
|
||||
$lang->action->dynamicAction->task['closed'] = 'Close Task';
|
||||
$lang->action->dynamicAction->task['canceled'] = 'Cancel Task';
|
||||
$lang->action->dynamicAction->task['activated'] = 'Activate Task';
|
||||
$lang->action->dynamicAction->task['createchildren'] = 'Create Child Task';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Unlink Parent Task';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = 'Delete children task';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = 'Link Parent Task';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = 'Link Child Task';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = 'Create Child Story';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = 'Unlink Parent Story';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = 'Delete children story';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = 'Link Parent Story';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = 'Link Child Story';
|
||||
$lang->action->dynamicAction->task['undeleted'] = 'Restore Task';
|
||||
$lang->action->dynamicAction->task['hidden'] = 'Hide Task';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = 'Order';
|
||||
$lang->action->dynamicAction->task['opened'] = 'Create Task';
|
||||
$lang->action->dynamicAction->task['importfromgitlab'] = "Issue associate create task";
|
||||
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
|
||||
$lang->action->dynamicAction->task['assigned'] = 'Assign Task';
|
||||
$lang->action->dynamicAction->task['confirmed'] = 'Confirm Task';
|
||||
$lang->action->dynamicAction->task['started'] = 'Start Task';
|
||||
$lang->action->dynamicAction->task['finished'] = 'Finish Task';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = 'Add Estimates';
|
||||
$lang->action->dynamicAction->task['editestimate'] = 'Edit Estimates';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = 'Delete Estimates';
|
||||
$lang->action->dynamicAction->task['paused'] = 'Pause Task';
|
||||
$lang->action->dynamicAction->task['closed'] = 'Close Task';
|
||||
$lang->action->dynamicAction->task['canceled'] = 'Cancel Task';
|
||||
$lang->action->dynamicAction->task['activated'] = 'Activate Task';
|
||||
$lang->action->dynamicAction->task['createchildren'] = 'Create Child Task';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Unlink Parent Task';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = 'Delete children task';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = 'Link Parent Task';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = 'Link Child Task';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = 'Create Child Story';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = 'Unlink Parent Story';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = 'Delete children story';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = 'Link Parent Story';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = 'Link Child Story';
|
||||
$lang->action->dynamicAction->task['undeleted'] = 'Restore Task';
|
||||
$lang->action->dynamicAction->task['hidden'] = 'Hide Task';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = 'Order';
|
||||
$lang->action->dynamicAction->task['linked2revision'] = 'Link Task to Revision';
|
||||
$lang->action->dynamicAction->task['unlinkedfromrevision'] = 'Unlink Task from Revision';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = 'Create Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
|
||||
$lang->action->dynamicAction->bug['importfromgitlab'] = "Issue associate create bug";
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = 'Activate Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = 'Assign Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = 'Close Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Confirm Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = 'Resolve Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = 'Restore Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = 'Hide Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = 'Delete Bug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = 'Confirm Story Change';
|
||||
$lang->action->dynamicAction->bug['tostory'] = 'Convert to Story';
|
||||
$lang->action->dynamicAction->bug['totask'] = 'Convert to Task';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = 'Link Plan';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Link Release';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Link Build';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Unlink Build';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = 'Create Bug from SonarQube Issue';
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
|
||||
$lang->action->dynamicAction->bug['importfromgitlab'] = "Issue associate create bug";
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = 'Activate Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = 'Assign Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = 'Close Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Confirm Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = 'Resolve Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = 'Restore Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = 'Hide Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = 'Delete Bug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = 'Confirm Story Change';
|
||||
$lang->action->dynamicAction->bug['tostory'] = 'Convert to Story';
|
||||
$lang->action->dynamicAction->bug['totask'] = 'Convert to Task';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = 'Link Plan';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Link Release';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Unlink Plan';
|
||||
$lang->action->dynamicAction->bug['linked2revision'] = 'Link Bug to Revision';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrevision'] = 'Unlink Bug from Revision';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Link Build';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Unlink Build';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = 'Create Bug from SonarQube Issue';
|
||||
|
||||
$lang->action->dynamicAction->testtask['opened'] = 'Create Test Request';
|
||||
$lang->action->dynamicAction->testtask['edited'] = 'Edit Test Request';
|
||||
@@ -621,6 +641,14 @@ $lang->action->dynamicAction->caselib['deleted'] = 'Delete Case Lib';
|
||||
$lang->action->dynamicAction->caselib['undeleted'] = 'Restore Case Lib';
|
||||
$lang->action->dynamicAction->caselib['hidden'] = 'Hide Case Lib';
|
||||
|
||||
$lang->action->dynamicAction->zahost['created'] = 'Create Host';
|
||||
|
||||
$lang->action->dynamicAction->zanode['created'] = 'Create Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['suspend'] = 'Suspend Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['resume'] = 'Resume Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['reboot'] = 'Reboot Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['destroy'] = 'Destory Zagent Node';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = 'Create Doc Library';
|
||||
$lang->action->dynamicAction->doclib['edited'] = 'Edit Doc Library';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
|
||||
@@ -871,6 +899,8 @@ $lang->action->apiTitle->unlinkedfromproject = "Unlinked from project";
|
||||
$lang->action->apiTitle->unlinkedfrombuild = "Unlinked from build";
|
||||
$lang->action->apiTitle->linked2release = "Linked to release";
|
||||
$lang->action->apiTitle->unlinkedfromrelease = "Unlinked from release";
|
||||
$lang->action->apiTitle->linked2revision = "Linked to revision";
|
||||
$lang->action->apiTitle->unlinkedfromrevision = "Unlinked from revision";
|
||||
$lang->action->apiTitle->linkrelatedbug = "Linked related Bug";
|
||||
$lang->action->apiTitle->unlinkrelatedbug = "Unlinked related Bug";
|
||||
$lang->action->apiTitle->linkrelatedstory = "Link related story {$lang->SRCommon}";
|
||||
|
||||
@@ -111,6 +111,8 @@ $lang->action->objectTypes['caselib'] = 'Library';
|
||||
$lang->action->objectTypes['testsuite'] = 'Cahier recette';
|
||||
$lang->action->objectTypes['testtask'] = 'Recette';
|
||||
$lang->action->objectTypes['testreport'] = 'Edition';
|
||||
$lang->action->objectTypes['zahost'] = 'Host';
|
||||
$lang->action->objectTypes['zanode'] = 'ZA Node';
|
||||
$lang->action->objectTypes['doc'] = 'Document';
|
||||
$lang->action->objectTypes['api'] = 'Interface';
|
||||
$lang->action->objectTypes['doclib'] = 'Répertoire Documents';
|
||||
@@ -225,8 +227,13 @@ $lang->action->desc->reopen = '$date, reopened by <strong>$actor</
|
||||
$lang->action->desc->merged = '$date, merged by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->submitreview = '$date, submitted for review by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->ganttmove = '$date, sort by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->suspend = '$date, the execution node is suspended by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->resume = '$date, the execution node is resumed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->reboot = '$date, the execution node is reboot by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->destroy = '$date, the execution node is destroyed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->switchtolight = '$date, Switch from ALM mode to light mode by <strong>'. $lang->admin->system .'</strong>.' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the sprints of the project from the $extra.' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, Remote control <strong>$extra</strong> by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the ' . $lang->executionCommon . 's of the project from the $extra.' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> a créé un sous-tâche <strong>$extra</strong>。' . "\n";
|
||||
@@ -303,6 +310,8 @@ $lang->action->label->unlinkedfromproject = "Unlink Project";
|
||||
$lang->action->label->unlinkedfrombuild = "a enlevé du Build ";
|
||||
$lang->action->label->linked2release = "a ajouté à une Release ";
|
||||
$lang->action->label->unlinkedfromrelease = "a enlevé de la Release ";
|
||||
$lang->action->label->linked2revision = "Link Revision";
|
||||
$lang->action->label->unlinked2revision = "Unlink Revision";
|
||||
$lang->action->label->linkrelatedbug = "a lié à un Bug ";
|
||||
$lang->action->label->unlinkrelatedbug = "a délié du Bug ";
|
||||
$lang->action->label->linkrelatedcase = "a mis en relation avec un CasTest ";
|
||||
@@ -395,6 +404,10 @@ $lang->action->label->tolib = 'Importé';
|
||||
$lang->action->label->updatetolib = 'MàJ';
|
||||
$lang->action->label->ganttmove = 'sorted';
|
||||
$lang->action->label->submitreview = 'submitted';
|
||||
$lang->action->label->suspend = 'suspended';
|
||||
$lang->action->label->resume = 'resumed';
|
||||
$lang->action->label->reboot = 'reboot';
|
||||
$lang->action->label->destroy = 'destroyed';
|
||||
$lang->action->label->switchtolight = 'switch from ALM mode to light mode';
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
@@ -471,6 +484,8 @@ $lang->action->dynamicAction->story['linked2plan'] = 'Inclure Story au
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Enlever Story du Plan';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Inclure Story à la Release';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Enlever Story de la Release';
|
||||
$lang->action->dynamicAction->story['linked2revision'] = 'Inclure Story à la Revision';
|
||||
$lang->action->dynamicAction->story['unlinked2revision'] = 'Unlink Stroy to Revision';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Ajouter Story au Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Détacher Story du Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Détacher du Project';
|
||||
@@ -558,6 +573,8 @@ $lang->action->dynamicAction->task['hidden'] = 'Masquer Tâche';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'Committer SVN';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'Committer GIT';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = 'Order';
|
||||
$lang->action->dynamicAction->task['linked2revision'] = 'Link Task to Revision';
|
||||
$lang->action->dynamicAction->task['unlinked2revision'] = 'Unlink Task to Revision';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = 'Créer Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Editer Build';
|
||||
@@ -581,6 +598,8 @@ $lang->action->dynamicAction->bug['linked2plan'] = 'Lié au Plan';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Enlevé du Plan';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Ajouté à la Release';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Enlevé de la Release';
|
||||
$lang->action->dynamicAction->bug['linked2revision'] = 'Ajouté à la Revision';
|
||||
$lang->action->dynamicAction->bug['unlinked2revision'] = 'Unlink Bug to Revision';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Lié au Build';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Retiré du Build';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = 'Create Bug from SonarQube Issue';
|
||||
@@ -621,6 +640,14 @@ $lang->action->dynamicAction->caselib['deleted'] = 'Supprimé CasTest Lib';
|
||||
$lang->action->dynamicAction->caselib['undeleted'] = 'Restauré CasTest Lib';
|
||||
$lang->action->dynamicAction->caselib['hidden'] = 'Masqué CasTest Lib';
|
||||
|
||||
$lang->action->dynamicAction->zahost['created'] = 'Create Host';
|
||||
|
||||
$lang->action->dynamicAction->zanode['created'] = 'Create Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['suspend'] = 'Suspend Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['resume'] = 'Resume Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['reboot'] = 'Reboot Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['destroy'] = 'Destory Zagent Node';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = 'Créer Doc Library';
|
||||
$lang->action->dynamicAction->doclib['edited'] = 'Editer Doc Library';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
|
||||
@@ -871,6 +898,8 @@ $lang->action->apiTitle->unlinkedfromproject = "Unlinked from project";
|
||||
$lang->action->apiTitle->unlinkedfrombuild = "Unlinked from build";
|
||||
$lang->action->apiTitle->linked2release = "Linked to release";
|
||||
$lang->action->apiTitle->unlinkedfromrelease = "Unlinked from release";
|
||||
$lang->action->apiTitle->linked2revision = "Linked to revision";
|
||||
$lang->action->apiTitle->unlinked2revision = "Unlinked to revision";
|
||||
$lang->action->apiTitle->linkrelatedbug = "Linked related Bug";
|
||||
$lang->action->apiTitle->unlinkrelatedbug = "Unlinked related Bug";
|
||||
$lang->action->apiTitle->linkrelatedstory = "Link related story {$lang->SRCommon}";
|
||||
|
||||
+74
-47
@@ -88,6 +88,8 @@ $lang->action->objectTypes['caselib'] = 'Thư viện';
|
||||
$lang->action->objectTypes['testsuite'] = 'Suite';
|
||||
$lang->action->objectTypes['testtask'] = 'Test bản dựng';
|
||||
$lang->action->objectTypes['testreport'] = 'Báo cáo';
|
||||
$lang->action->objectTypes['zahost'] = 'Host';
|
||||
$lang->action->objectTypes['zanode'] = 'ZA Node';
|
||||
$lang->action->objectTypes['doc'] = 'Tài liệu';
|
||||
$lang->action->objectTypes['doclib'] = 'Thư viện tài liệu';
|
||||
$lang->action->objectTypes['todo'] = 'Việc làm';
|
||||
@@ -184,6 +186,10 @@ $lang->action->desc->syncexecution = '$date, starting the task sets the execut
|
||||
$lang->action->desc->reopen = '$date, reopened by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->merged = '$date, merged by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->submitreview = '$date, submitted for review by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspend = '$date, the execution node is suspended by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->resume = '$date, the execution node is resumed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->reboot = '$date, the execution node is reboot by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->destroy = '$date, the execution node is destroyed by <strong>$actor</strong> .' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -250,6 +256,8 @@ $lang->action->label->unlinkedfromproject = "Unlink Project";
|
||||
$lang->action->label->unlinkedfrombuild = "hủy liên kết Bản dựng ";
|
||||
$lang->action->label->linked2release = "liên kết Phát hành ";
|
||||
$lang->action->label->unlinkedfromrelease = "hủy liên kết Release ";
|
||||
$lang->action->label->linked2revision = "Link Revision";
|
||||
$lang->action->label->unlinkedfromrevision = "Unlink Revision";
|
||||
$lang->action->label->linkrelatedbug = "linked Bug ";
|
||||
$lang->action->label->unlinkrelatedbug = "hủy liên kết Bug ";
|
||||
$lang->action->label->linkrelatedcase = "linked Case ";
|
||||
@@ -306,6 +314,10 @@ $lang->action->label->syncproject = 'start';
|
||||
$lang->action->label->syncexecution = 'start';
|
||||
$lang->action->label->startProgram = '(The start of the project sets the status of the program as Ongoing)';
|
||||
$lang->action->label->submitreview = 'submitted';
|
||||
$lang->action->label->suspend = 'suspended';
|
||||
$lang->action->label->resume = 'resumed';
|
||||
$lang->action->label->reboot = 'reboot';
|
||||
$lang->action->label->destroy = 'destroyed';
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
|
||||
@@ -363,6 +375,8 @@ $lang->action->dynamicAction->story['linked2plan'] = 'Liên kết Stor
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Hủy liên kết Story from kế hoạch';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Liên kết Story to phát hành';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Hủy liên kết Story from kế hoạch';
|
||||
$lang->action->dynamicAction->story['linked2revision'] = 'Link Stroy to Revision';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrevision'] = 'Unlink Stroy from Revision';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Liên kết Story to bản dựng';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Hủy liên kết Story from bản dựng';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Hủy liên kết Project';
|
||||
@@ -387,58 +401,63 @@ $lang->action->dynamicAction->execution['moved'] = 'Nhập nhiệm vụ';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Tạo nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['edited'] = 'Sửa nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task nhận xét';
|
||||
$lang->action->dynamicAction->task['assigned'] = 'Bàn giao nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['confirmed'] = 'Xác nhận nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['started'] = 'Bắt đầu nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['finished'] = 'Nhiệm vụ hoàn thành';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = 'Thêm dự tính';
|
||||
$lang->action->dynamicAction->task['editestimate'] = 'Sửa dự tính';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = 'Xóa dự tính';
|
||||
$lang->action->dynamicAction->task['paused'] = 'Pause nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['closed'] = 'Đóng nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['canceled'] = 'Hủy nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['activated'] = 'Kích hoạt nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['createchildren'] = 'Tạo Nhiệm vụ con';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Hủy liên kết Nhiệm vụ mẹ';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = 'Xóa children nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = 'Liên kết Nhiệm vụ mẹ';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = 'Liên kết Nhiệm vụ con';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = 'Tạo Câu chuyện con';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = 'Hủy liên kết Parent câu chuyện';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = 'Xóa children story';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = 'Liên kết Parent câu chuyện';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = 'Liên kết Câu chuyện con';
|
||||
$lang->action->dynamicAction->task['undeleted'] = 'Khôi phục nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['hidden'] = 'Ẩn nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
$lang->action->dynamicAction->task['opened'] = 'Tạo nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['edited'] = 'Sửa nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task nhận xét';
|
||||
$lang->action->dynamicAction->task['assigned'] = 'Bàn giao nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['confirmed'] = 'Xác nhận nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['started'] = 'Bắt đầu nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['finished'] = 'Nhiệm vụ hoàn thành';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = 'Thêm dự tính';
|
||||
$lang->action->dynamicAction->task['editestimate'] = 'Sửa dự tính';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = 'Xóa dự tính';
|
||||
$lang->action->dynamicAction->task['paused'] = 'Pause nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['closed'] = 'Đóng nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['canceled'] = 'Hủy nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['activated'] = 'Kích hoạt nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['createchildren'] = 'Tạo Nhiệm vụ con';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Hủy liên kết Nhiệm vụ mẹ';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = 'Xóa children nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = 'Liên kết Nhiệm vụ mẹ';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = 'Liên kết Nhiệm vụ con';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = 'Tạo Câu chuyện con';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = 'Hủy liên kết Parent câu chuyện';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = 'Xóa children story';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = 'Liên kết Parent câu chuyện';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = 'Liên kết Câu chuyện con';
|
||||
$lang->action->dynamicAction->task['undeleted'] = 'Khôi phục nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['hidden'] = 'Ẩn nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
$lang->action->dynamicAction->task['linked2revision'] = 'Link Task to Revision';
|
||||
$lang->action->dynamicAction->task['unlinkedfromrevision'] = 'Unlink Task from Revision';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = 'Tạo bản dựng';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Sửa bản dựng';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Báo cáo Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Sửa Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = 'Kích hoạt Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = 'Bàn giao Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = 'Đóng Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Xác nhận Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = 'Giải quyết Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = 'Khôi phục Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = 'Ẩn Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = 'Xóa tìBug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = 'Xác nhận thay đổi câu chuyện';
|
||||
$lang->action->dynamicAction->bug['tostory'] = 'Chuyển thành câu chuyện';
|
||||
$lang->action->dynamicAction->bug['totask'] = 'Chuyển thành nhiệm vụ';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = 'Liên kết kế hoạch';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Hủy liên kết kế hoạch';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Liên kết phát hành';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Hủy liên kết kế hoạch';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Liên kết bản dựng';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Hủy liên kết bản dựng';
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Báo cáo Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Sửa Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = 'Kích hoạt Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = 'Bàn giao Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = 'Đóng Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Xác nhận Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = 'Giải quyết Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = 'Khôi phục Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = 'Ẩn Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = 'Xóa tìBug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = 'Xác nhận thay đổi câu chuyện';
|
||||
$lang->action->dynamicAction->bug['tostory'] = 'Chuyển thành câu chuyện';
|
||||
$lang->action->dynamicAction->bug['totask'] = 'Chuyển thành nhiệm vụ';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = 'Liên kết kế hoạch';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Hủy liên kết kế hoạch';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Liên kết phát hành';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Hủy liên kết kế hoạch';
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Link Revision';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Liên kết bản dựng';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Hủy liên kết bản dựng';
|
||||
$lang->action->dynamicAction->bug['linked2revision'] = 'Link Bug to Revision';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrevision'] = 'Unlink Bug from Revision';
|
||||
|
||||
$lang->action->dynamicAction->testtask['opened'] = 'Tạo Yêu cầu Test';
|
||||
$lang->action->dynamicAction->testtask['edited'] = 'Sửa Yêu cầu Test';
|
||||
@@ -474,6 +493,14 @@ $lang->action->dynamicAction->caselib['deleted'] = 'Xóa Case Lib';
|
||||
$lang->action->dynamicAction->caselib['undeleted'] = 'Khôi phục Case Lib';
|
||||
$lang->action->dynamicAction->caselib['hidden'] = 'Ẩn Case Lib';
|
||||
|
||||
$lang->action->dynamicAction->zahost['created'] = 'Create Host';
|
||||
|
||||
$lang->action->dynamicAction->zanode['created'] = 'Create Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['suspend'] = 'Suspend Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['resume'] = 'Resume Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['reboot'] = 'Reboot Zagent Node';
|
||||
$lang->action->dynamicAction->zanode['destroy'] = 'Destory Zagent Node';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = 'Tạo Doc thư viện';
|
||||
$lang->action->dynamicAction->doclib['edited'] = 'Sửa Doc thư viện';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
|
||||
|
||||
@@ -111,6 +111,8 @@ $lang->action->objectTypes['caselib'] = '用例库';
|
||||
$lang->action->objectTypes['testsuite'] = '套件';
|
||||
$lang->action->objectTypes['testtask'] = '测试单';
|
||||
$lang->action->objectTypes['testreport'] = '报告';
|
||||
$lang->action->objectTypes['zahost'] = '宿主机';
|
||||
$lang->action->objectTypes['zanode'] = '执行节点';
|
||||
$lang->action->objectTypes['doc'] = '文档';
|
||||
$lang->action->objectTypes['api'] = '接口';
|
||||
$lang->action->objectTypes['doclib'] = '文档库';
|
||||
@@ -225,8 +227,13 @@ $lang->action->desc->reopen = '$date, 由 <strong>$actor</strong>
|
||||
$lang->action->desc->merged = '$date, 由 <strong>$actor</strong> 合并。' . "\n";
|
||||
$lang->action->desc->submitreview = '$date, 由 <strong>$actor</strong> 提交评审。' . "\n";
|
||||
$lang->action->desc->ganttmove = '$date, 由 <strong>$actor</strong> 排序。' . "\n";
|
||||
$lang->action->desc->suspend = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
|
||||
$lang->action->desc->resume = '$date, 由 <strong>$actor</strong> 恢复。' . "\n";
|
||||
$lang->action->desc->reboot = '$date, 由 <strong>$actor</strong> 重启。' . "\n";
|
||||
$lang->action->desc->destroy = '$date, 由 <strong>$actor</strong> 销毁。' . "\n";
|
||||
$lang->action->desc->switchtolight = '$date, 由于 <strong>'. $lang->admin->system .'</strong> 从全生命周期管理模式切换为轻量管理模式,项目访问控制由项目集内公开调整为私有。' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, 系统判断由于迭代所属项目与$extra取消关联,同步将迭代与$extra取消关联。' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, <strong>$actor</strong>对执行节点 <strong>$extra</strong> 进行了远程操控。' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, 系统判断由于' . $lang->executionCommon . '所属项目与$extra取消关联,同步将' . $lang->executionCommon . '与$extra取消关联。' . "\n";
|
||||
|
||||
/* 用来描述和父子任务相关的操作历史记录。*/
|
||||
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
|
||||
@@ -303,6 +310,8 @@ $lang->action->label->unlinkedfromproject = "移除了项目";
|
||||
$lang->action->label->unlinkedfrombuild = "移除了版本";
|
||||
$lang->action->label->linked2release = "关联了发布";
|
||||
$lang->action->label->unlinkedfromrelease = "移除了发布";
|
||||
$lang->action->label->linked2revision = "关联了代码提交";
|
||||
$lang->action->label->unlinkedfromrevision = "取消关联了代码提交";
|
||||
$lang->action->label->linkrelatedbug = "关联了相关Bug";
|
||||
$lang->action->label->unlinkrelatedbug = "移除了相关Bug";
|
||||
$lang->action->label->linkrelatedcase = "关联了相关用例";
|
||||
@@ -395,6 +404,11 @@ $lang->action->label->tolib = '导入了';
|
||||
$lang->action->label->updatetolib = '更新了';
|
||||
$lang->action->label->ganttmove = '排序了';
|
||||
$lang->action->label->submitreview = '提交了评审';
|
||||
$lang->action->label->suspend = '暂停了';
|
||||
$lang->action->label->resume = '恢复了';
|
||||
$lang->action->label->reboot = '重启了';
|
||||
$lang->action->label->destroy = '销毁了';
|
||||
$lang->action->label->getvnc = '远程操控';
|
||||
$lang->action->label->switchtolight = '从全生命周期管理模式切换为轻量管理模式';
|
||||
$lang->action->label->linkedrepo = '关联代码库到';
|
||||
$lang->action->label->unlinkedrepo = '取消了项目与代码库的关联';
|
||||
@@ -471,6 +485,8 @@ $lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = "计划移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}关联发布";
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "发布移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2revision'] = "{$lang->SRCommon}关联代码提交";
|
||||
$lang->action->dynamicAction->story['unlinkedfromrevision'] = "{$lang->SRCommon}取消关联代码提交";
|
||||
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}关联版本";
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除项目';
|
||||
@@ -528,62 +544,66 @@ $lang->action->dynamicAction->kanbancard['deleted'] = '删除看板卡片';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = '维护团队';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = '创建任务';
|
||||
$lang->action->dynamicAction->task['importfromgitlab'] = "从Gitlab关联创建任务";
|
||||
$lang->action->dynamicAction->task['edited'] = '编辑任务';
|
||||
$lang->action->dynamicAction->task['commented'] = '备注任务';
|
||||
$lang->action->dynamicAction->task['assigned'] = '指派任务';
|
||||
$lang->action->dynamicAction->task['confirmed'] = "确认{$lang->SRCommon}变更";
|
||||
$lang->action->dynamicAction->task['started'] = '开始任务';
|
||||
$lang->action->dynamicAction->task['finished'] = '完成任务';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = '记录工时';
|
||||
$lang->action->dynamicAction->task['editestimate'] = '编辑工时';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = '删除工时';
|
||||
$lang->action->dynamicAction->task['paused'] = '暂停任务';
|
||||
$lang->action->dynamicAction->task['closed'] = '关闭任务';
|
||||
$lang->action->dynamicAction->task['canceled'] = '取消任务';
|
||||
$lang->action->dynamicAction->task['activated'] = '激活任务';
|
||||
$lang->action->dynamicAction->task['createchildren'] = '创建子任务';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = '从父任务取消关联';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = '删除子任务';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = '关联到父任务';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = '关联子任务';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = '创建子需求';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = '从父需求取消关联';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = '删除子需求';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = '关联到父需求';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = '关联子需求';
|
||||
$lang->action->dynamicAction->task['undeleted'] = '还原任务';
|
||||
$lang->action->dynamicAction->task['hidden'] = '隐藏任务';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN提交';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT提交';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = '排序';
|
||||
$lang->action->dynamicAction->task['opened'] = '创建任务';
|
||||
$lang->action->dynamicAction->task['importfromgitlab'] = "从Gitlab关联创建任务";
|
||||
$lang->action->dynamicAction->task['edited'] = '编辑任务';
|
||||
$lang->action->dynamicAction->task['commented'] = '备注任务';
|
||||
$lang->action->dynamicAction->task['assigned'] = '指派任务';
|
||||
$lang->action->dynamicAction->task['confirmed'] = "确认{$lang->SRCommon}变更";
|
||||
$lang->action->dynamicAction->task['started'] = '开始任务';
|
||||
$lang->action->dynamicAction->task['finished'] = '完成任务';
|
||||
$lang->action->dynamicAction->task['recordestimate'] = '记录工时';
|
||||
$lang->action->dynamicAction->task['editestimate'] = '编辑工时';
|
||||
$lang->action->dynamicAction->task['deleteestimate'] = '删除工时';
|
||||
$lang->action->dynamicAction->task['paused'] = '暂停任务';
|
||||
$lang->action->dynamicAction->task['closed'] = '关闭任务';
|
||||
$lang->action->dynamicAction->task['canceled'] = '取消任务';
|
||||
$lang->action->dynamicAction->task['activated'] = '激活任务';
|
||||
$lang->action->dynamicAction->task['createchildren'] = '创建子任务';
|
||||
$lang->action->dynamicAction->task['unlinkparenttask'] = '从父任务取消关联';
|
||||
$lang->action->dynamicAction->task['deletechildrentask'] = '删除子任务';
|
||||
$lang->action->dynamicAction->task['linkparenttask'] = '关联到父任务';
|
||||
$lang->action->dynamicAction->task['linkchildtask'] = '关联子任务';
|
||||
$lang->action->dynamicAction->task['createchildrenstory'] = '创建子需求';
|
||||
$lang->action->dynamicAction->task['unlinkparentstory'] = '从父需求取消关联';
|
||||
$lang->action->dynamicAction->task['deletechildrenstory'] = '删除子需求';
|
||||
$lang->action->dynamicAction->task['linkparentstory'] = '关联到父需求';
|
||||
$lang->action->dynamicAction->task['linkchildstory'] = '关联子需求';
|
||||
$lang->action->dynamicAction->task['undeleted'] = '还原任务';
|
||||
$lang->action->dynamicAction->task['hidden'] = '隐藏任务';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN提交';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT提交';
|
||||
$lang->action->dynamicAction->task['ganttmove'] = '排序';
|
||||
$lang->action->dynamicAction->task['linked2revision'] = '任务关联代码提交';
|
||||
$lang->action->dynamicAction->task['unlinkedfromrevision'] = '任务取消关联代码提交';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = '创建版本';
|
||||
$lang->action->dynamicAction->build['edited'] = '编辑版本';
|
||||
$lang->action->dynamicAction->build['deleted'] = '删除版本';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = '创建Bug';
|
||||
$lang->action->dynamicAction->bug['importfromgitlab'] = "从Gitlab关联创建Bug";
|
||||
$lang->action->dynamicAction->bug['edited'] = '编辑Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = '激活Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = '指派Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = '关闭Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = '确认Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = '解决Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = '还原Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = '隐藏Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = '删除Bug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = "确认{$lang->SRCommon}变更";
|
||||
$lang->action->dynamicAction->bug['tostory'] = "转{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->bug['totask'] = '转任务';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = "Bug关联计划";
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = "计划移除Bug";
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Bug关联发布';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = '发布移除Bug';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Bug关联版本';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = '版本移除Bug';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = '由SonarQube问题创建';
|
||||
$lang->action->dynamicAction->bug['opened'] = '创建Bug';
|
||||
$lang->action->dynamicAction->bug['importfromgitlab'] = "从Gitlab关联创建Bug";
|
||||
$lang->action->dynamicAction->bug['edited'] = '编辑Bug';
|
||||
$lang->action->dynamicAction->bug['activated'] = '激活Bug';
|
||||
$lang->action->dynamicAction->bug['assigned'] = '指派Bug';
|
||||
$lang->action->dynamicAction->bug['closed'] = '关闭Bug';
|
||||
$lang->action->dynamicAction->bug['bugconfirmed'] = '确认Bug';
|
||||
$lang->action->dynamicAction->bug['resolved'] = '解决Bug';
|
||||
$lang->action->dynamicAction->bug['undeleted'] = '还原Bug';
|
||||
$lang->action->dynamicAction->bug['hidden'] = '隐藏Bug';
|
||||
$lang->action->dynamicAction->bug['deleted'] = '删除Bug';
|
||||
$lang->action->dynamicAction->bug['confirmed'] = "确认{$lang->SRCommon}变更";
|
||||
$lang->action->dynamicAction->bug['tostory'] = "转{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->bug['totask'] = '转任务';
|
||||
$lang->action->dynamicAction->bug['linked2plan'] = "Bug关联计划";
|
||||
$lang->action->dynamicAction->bug['unlinkedfromplan'] = "计划移除Bug";
|
||||
$lang->action->dynamicAction->bug['linked2release'] = 'Bug关联发布';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = '发布移除Bug';
|
||||
$lang->action->dynamicAction->bug['linked2revision'] = 'Bug关联代码提交';
|
||||
$lang->action->dynamicAction->bug['unlinkedfromrevision'] = 'Bug取消关联代码提交';
|
||||
$lang->action->dynamicAction->bug['linked2bug'] = 'Bug关联版本';
|
||||
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = '版本移除Bug';
|
||||
$lang->action->dynamicAction->bug['fromsonarqube'] = '由SonarQube问题创建';
|
||||
|
||||
$lang->action->dynamicAction->testtask['opened'] = '创建测试单';
|
||||
$lang->action->dynamicAction->testtask['edited'] = '编辑测试单';
|
||||
@@ -621,6 +641,14 @@ $lang->action->dynamicAction->caselib['deleted'] = '删除用例库';
|
||||
$lang->action->dynamicAction->caselib['undeleted'] = '还原用例库';
|
||||
$lang->action->dynamicAction->caselib['hidden'] = '隐藏用例库';
|
||||
|
||||
$lang->action->dynamicAction->zahost['created'] = '创建宿主机';
|
||||
|
||||
$lang->action->dynamicAction->zanode['created'] = '创建执行节点';
|
||||
$lang->action->dynamicAction->zanode['suspend'] = '暂停执行节点';
|
||||
$lang->action->dynamicAction->zanode['resume'] = '恢复执行节点';
|
||||
$lang->action->dynamicAction->zanode['reboot'] = '重启执行节点';
|
||||
$lang->action->dynamicAction->zanode['destroy'] = '销毁执行节点';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = '创建文档库';
|
||||
$lang->action->dynamicAction->doclib['edited'] = '编辑文档库';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = '删除文档库';
|
||||
@@ -871,6 +899,8 @@ $lang->action->apiTitle->unlinkedfromproject = "移除项目";
|
||||
$lang->action->apiTitle->unlinkedfrombuild = "移除版本";
|
||||
$lang->action->apiTitle->linked2release = "关联发布";
|
||||
$lang->action->apiTitle->unlinkedfromrelease = "移除发布";
|
||||
$lang->action->apiTitle->linked2revision = "关联代码提交";
|
||||
$lang->action->apiTitle->unlinkedfromrevision = "取消关联代码提交";
|
||||
$lang->action->apiTitle->linkrelatedbug = "关联了相关Bug";
|
||||
$lang->action->apiTitle->unlinkrelatedbug = "移除了相关Bug";
|
||||
$lang->action->apiTitle->linkrelatedstory = "关联了相关{$lang->SRCommon}";
|
||||
|
||||
+18
-6
@@ -253,6 +253,8 @@ class actionModel extends model
|
||||
case 'task':
|
||||
$fields = 'project, execution, story';
|
||||
$result = $this->dao->select($fields)->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch();
|
||||
if(empty($result)) break;
|
||||
|
||||
if($result->story != 0)
|
||||
{
|
||||
$product = $this->dao->select('product')->from(TABLE_STORY)->where('id')->eq($result->story)->fetchPairs('product');
|
||||
@@ -323,29 +325,30 @@ class actionModel extends model
|
||||
*/
|
||||
public function getList($objectType, $objectID)
|
||||
{
|
||||
$modules = $objectType == 'module' ? $this->dao->select('id')->from(TABLE_MODULE)->where('root')->eq($objectID)->fetchPairs('id') : array();
|
||||
$objectID = is_array($objectID) ? $objectID : (int)$objectID;
|
||||
$modules = $objectType == 'module' ? $this->dao->select('id')->from(TABLE_MODULE)->where('root')->in($objectID)->fetchPairs('id') : array();
|
||||
$commiters = $this->loadModel('user')->getCommiters();
|
||||
$actions = $this->dao->select('*')->from(TABLE_ACTION)
|
||||
->beginIF($objectType == 'project')
|
||||
->where("objectType IN('project', 'testtask', 'build')")
|
||||
->andWhere('project')->eq((int)$objectID)
|
||||
->andWhere('project')->in($objectID)
|
||||
->fi()
|
||||
->beginIF($objectType == 'story')
|
||||
->where('objectType')->in('story,requirement')
|
||||
->andWhere('objectID')->eq((int)$objectID)
|
||||
->andWhere('objectID')->in($objectID)
|
||||
->fi()
|
||||
->beginIF($objectType == 'case')
|
||||
->where('objectType')->in('case,testcase')
|
||||
->andWhere('objectID')->eq((int)$objectID)
|
||||
->andWhere('objectID')->in($objectID)
|
||||
->fi()
|
||||
->beginIF($objectType == 'module')
|
||||
->where('objectType')->eq($objectType)
|
||||
->andWhere('((action')->ne('deleted')->andWhere('objectID')->eq((int)$objectID)->markRight(1)
|
||||
->andWhere('((action')->ne('deleted')->andWhere('objectID')->in($objectID)->markRight(1)
|
||||
->orWhere('(action')->eq('deleted')->andWhere('objectID')->in($modules)->markRight(1)->markRight(1)
|
||||
->fi()
|
||||
->beginIF(strpos('project,case,story,module', $objectType) === false)
|
||||
->where('objectType')->eq($objectType)
|
||||
->andWhere('objectID')->eq((int)$objectID)
|
||||
->andWhere('objectID')->in($objectID)
|
||||
->fi()
|
||||
->orderBy('date, id')
|
||||
->fetchAll('id');
|
||||
@@ -420,6 +423,15 @@ class actionModel extends model
|
||||
$name = $this->dao->select('name')->from(TABLE_TESTTASK)->where('id')->eq($action->extra)->fetch('name');
|
||||
if($name) $action->extra = common::hasPriv('testtask', 'view') ? html::a(helper::createLink('testtask', 'view', "taskID=$action->extra"), $name) : $name;
|
||||
}
|
||||
elseif($actionName == 'linked2revision' or $actionName == 'unlinkedfromrevision')
|
||||
{
|
||||
$commit = $this->dao->select('repo,revision')->from(TABLE_REPOHISTORY)->where('id')->eq($action->extra)->fetch();
|
||||
if($commit)
|
||||
{
|
||||
$revision = substr($commit->revision, 0, 10);
|
||||
$action->extra = common::hasPriv('repo', 'revision') ? html::a(helper::createLink('repo', 'revision', "repoID=$commit->repo&objectID=0&revision=$commit->revision"), $revision) : $revision;
|
||||
}
|
||||
}
|
||||
elseif($actionName == 'moved' and $action->objectType != 'module')
|
||||
{
|
||||
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
|
||||
|
||||
@@ -141,3 +141,4 @@ $lang->admin->safe->resetPWDList[0] = 'Off';
|
||||
$lang->admin->safe->noticeMode = 'The password will be checked when creating and modifying user information, and changing passwords.';
|
||||
$lang->admin->safe->noticeWeakMode = 'The password will be checked when logging into the system, creating and modifying user information, and changing passwords.';
|
||||
$lang->admin->safe->noticeStrong = 'The longer the password, the more letters, numbers, or special characters it contains, and the less repetitive the password, the more secure it is!';
|
||||
$lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.';
|
||||
|
||||
@@ -141,3 +141,4 @@ $lang->admin->safe->resetPWDList[0] = 'Off';
|
||||
$lang->admin->safe->noticeMode = 'The password will be checked when creating and modifying user information, and changing passwords.';
|
||||
$lang->admin->safe->noticeWeakMode = 'The password will be checked when logging into the system, creating and modifying user information, and changing passwords.';
|
||||
$lang->admin->safe->noticeStrong = 'The longer the password, the more letters, numbers, or special characters it contains, and the less repetitive the password, the more secure it is!';
|
||||
$lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.';
|
||||
@@ -141,3 +141,4 @@ $lang->admin->safe->resetPWDList[0] = 'Off';
|
||||
$lang->admin->safe->noticeMode = "Le mot de passe sera vérifié lors de la création et de la modification des coordonnées de l'utilisateur, et du changement de mot de passe.";
|
||||
$lang->admin->safe->noticeWeakMode = "Le mot de passe sera vérifié lors de la connexion au système, de la création et de la modification des coordonnées de l'utilisateur, et du changement de mot de passe.";
|
||||
$lang->admin->safe->noticeStrong = "Le mot de passe est d'autant plus sécurisé qu'il est long, qu'il contient plus de lettres, de chiffres ou de caractères spéciaux, et que les lettres du mot de passe sont peu répétitives !";
|
||||
$lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.';
|
||||
|
||||
@@ -84,3 +84,4 @@ $lang->admin->safe->loginCaptchaList[0] = 'No';
|
||||
|
||||
$lang->admin->safe->noticeMode = 'Mật khẩu sẽ được kiểm tra khi người dùng đăng nhập hoặc người dùng thêm hoặc sửa.';
|
||||
$lang->admin->safe->noticeStrong = '';
|
||||
$lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.';
|
||||
@@ -141,3 +141,4 @@ $lang->admin->safe->resetPWDList[0] = '关闭';
|
||||
$lang->admin->safe->noticeMode = '系统会在创建和修改用户、修改密码的时候检查用户口令。';
|
||||
$lang->admin->safe->noticeWeakMode = '系统会在登录、创建和修改用户、修改密码的时候检查用户口令。';
|
||||
$lang->admin->safe->noticeStrong = '密码长度越长,含有大写字母或数字或特殊符号越多,密码字母越不重复,安全度越强!';
|
||||
$lang->admin->safe->noticeGd = '系统检测到您的服务器未安装GD模块,无法使用验证码功能,请安装后使用。';
|
||||
|
||||
@@ -82,5 +82,7 @@ $lang->admin->safe->modifyPasswordList[0] = '不強制';
|
||||
$lang->admin->safe->loginCaptchaList[1] = '是';
|
||||
$lang->admin->safe->loginCaptchaList[0] = '否';
|
||||
|
||||
$lang->admin->safe->noticeMode = '系統會在登錄、創建和修改用戶、修改密碼的時候檢查用戶口令。';
|
||||
$lang->admin->safe->noticeStrong = '密碼長度越長,含有大寫字母或數字或特殊符號越多,密碼字母越不重複,安全度越強!';
|
||||
$lang->admin->safe->noticeMode = '系統會在創建和修改用戶、修改密碼的時候檢查用戶口令。';
|
||||
$lang->admin->safe->noticeWeakMode = '系統會在登錄、創建和修改用戶、修改密碼的時候檢查用戶口令。';
|
||||
$lang->admin->safe->noticeStrong = '密碼長度越長,含有大寫字母或數字或特殊符號越多,密碼字母越不重複,安全度越強!';
|
||||
$lang->admin->safe->noticeGd = '系統檢測到您的伺服器未安裝GD模組,無法使用驗證碼功能,請安裝後使用。';
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
.notice {color:#2667E3; margin-left: 12px;}
|
||||
</style>
|
||||
<?php js::set('adminLang', $lang->admin);?>
|
||||
<?php js::set('loadedGD', extension_loaded('gd'));?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
@@ -71,7 +72,8 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->admin->safe->loginCaptcha?></th>
|
||||
<td colspan='2'><?php echo html::radio('loginCaptcha', $lang->admin->safe->loginCaptchaList, isset($config->safe->loginCaptcha) ? $config->safe->loginCaptcha : 0)?></td>
|
||||
<td><?php echo html::radio('loginCaptcha', $lang->admin->safe->loginCaptchaList, isset($config->safe->loginCaptcha) ? $config->safe->loginCaptcha : 0)?></td>
|
||||
<td class='notice'><?php if(!extension_loaded('gd')) echo $lang->admin->safe->noticeGd;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
@@ -89,6 +91,7 @@ $(function()
|
||||
{
|
||||
var mode = $("input[name='mode']:checked").val();
|
||||
showModeRule(mode);
|
||||
if(!loadedGD) $('#loginCaptcha1').attr('disabled', true);
|
||||
});
|
||||
function showModeRule(mode)
|
||||
{
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<?php $code = $group . ucfirst($feature);?>
|
||||
<?php if(strpos(",$disabledFeatures,", ",$code,") !== false) continue;?>
|
||||
<?php $hasData = true;?>
|
||||
<?php endForeach;?>
|
||||
<?php endforeach;?>
|
||||
|
||||
<?php if($hasData):?>
|
||||
<tr>
|
||||
@@ -52,11 +52,11 @@
|
||||
<?php echo html::checkbox("module[{$code}]", array('1' => $lang->admin->setModule->{$feature}), $value, "data-code='{$code}'", 'inline');?>
|
||||
<?php echo html::hidden("module[{$code}][]", $value, $value ? 'disabled' : '');?>
|
||||
</div>
|
||||
<?php endForeach;?>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php endForeach;?>
|
||||
<?php endforeach;?>
|
||||
<tr>
|
||||
<td class='text-middle text-right thWidth'>
|
||||
<div class="checkbox-primary checkbox-inline checkbox-right check-all">
|
||||
@@ -68,7 +68,7 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>`
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -34,6 +34,7 @@ class backupModel extends model
|
||||
public function backFile($backupFile)
|
||||
{
|
||||
$zfile = $this->app->loadClass('zfile');
|
||||
|
||||
$return = new stdclass();
|
||||
$return->result = true;
|
||||
$return->error = '';
|
||||
@@ -42,10 +43,10 @@ class backupModel extends model
|
||||
|
||||
$tmpLogFile = $this->getTmpLogFile($backupFile);
|
||||
$dataDir = $this->app->getAppRoot() . 'www/data/';
|
||||
$count = $zfile->getCount($dataDir);
|
||||
$count = $zfile->getCount($dataDir, array('course'));
|
||||
file_put_contents($tmpLogFile, json_encode(array('allCount' => $count)));
|
||||
|
||||
$result = $zfile->copyDir($dataDir, $backupFile, $logLevel = false, $tmpLogFile);
|
||||
$result = $zfile->copyDir($dataDir, $backupFile, $logLevel = false, $tmpLogFile, array('course'));
|
||||
$this->processSummary($backupFile, $result['count'], $result['size'], $result['errorFiles'], $count);
|
||||
unlink($tmpLogFile);
|
||||
|
||||
|
||||
@@ -19,8 +19,9 @@
|
||||
<?php $isFirstTab = true;?>
|
||||
<?php $printMore = false;?>
|
||||
<?php $i = 0;?>
|
||||
<?php $maxItem = common::checkNotCN() ? 6 : 8;?>
|
||||
<?php foreach($hasViewPriv as $type => $bool):?>
|
||||
<?php if(!common::checkNotCN() or $i <= 6):?>
|
||||
<?php if($i <= $maxItem):?>
|
||||
<li<?php if($isFirstTab) {echo ' class="active"';}?>>
|
||||
<a data-tab href='#assigntomeTab-<?php echo $type;?>' onClick="changeLabel('<?php echo $type;?>')">
|
||||
<?php echo $type == 'review' ? $lang->my->audit : $lang->block->availableBlocks->$type;?>
|
||||
@@ -36,7 +37,7 @@
|
||||
<?php endif;?>
|
||||
<li<?php if($isFirstTab) {echo ' class="active"';}?>>
|
||||
<a data-tab href='#assigntomeTab-<?php echo $type;?>' class='<?php echo "$type"?>' onClick="changeMoreBtn('<?php echo $type;?>', this);">
|
||||
<?php echo $lang->block->availableBlocks->$type;?>
|
||||
<?php echo $type == 'review' ? $lang->my->audit : $lang->block->availableBlocks->$type;?>
|
||||
<span class='label label-light label-badge label-assignto <?php echo $type . "-count "; echo $isFirstTab ? '' : 'hidden'; $isFirstTab = false ?>'><?php echo $count[$type];?></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -328,11 +328,13 @@ $config->bug->datatable->fieldList['os']['title'] = 'os';
|
||||
$config->bug->datatable->fieldList['os']['fixed'] = 'no';
|
||||
$config->bug->datatable->fieldList['os']['width'] = '80';
|
||||
$config->bug->datatable->fieldList['os']['required'] = 'no';
|
||||
$config->bug->datatable->fieldList['os']['control'] = 'multiple';
|
||||
|
||||
$config->bug->datatable->fieldList['browser']['title'] = 'browser';
|
||||
$config->bug->datatable->fieldList['browser']['fixed'] = 'no';
|
||||
$config->bug->datatable->fieldList['browser']['width'] = '80';
|
||||
$config->bug->datatable->fieldList['browser']['required'] = 'no';
|
||||
$config->bug->datatable->fieldList['browser']['control'] = 'multiple';
|
||||
|
||||
$config->bug->datatable->fieldList['mailto']['title'] = 'mailto';
|
||||
$config->bug->datatable->fieldList['mailto']['fixed'] = 'no';
|
||||
|
||||
+40
-23
@@ -227,7 +227,8 @@ class bug extends control
|
||||
$this->view->product = $product;
|
||||
$this->view->projectProducts = $this->product->getProducts($this->projectID);
|
||||
$this->view->productName = $productName;
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'withreleased');
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $branch);
|
||||
$this->view->releasedBuilds = $this->loadModel('release')->getReleasedBuilds($productID, $branch);
|
||||
$this->view->modules = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $branch);
|
||||
$this->view->moduleTree = $moduleTree;
|
||||
$this->view->moduleName = $moduleID ? $this->tree->getById($moduleID)->name : $this->lang->tree->all;
|
||||
@@ -558,13 +559,13 @@ class bug extends control
|
||||
/* If executionID is setted, get builds and stories of this execution. */
|
||||
if($executionID)
|
||||
{
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noterminate,nodone', $executionID, 'execution');
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noterminate,nodone,noreleased', $executionID, 'execution');
|
||||
$stories = $this->story->getExecutionStoryPairs($executionID);
|
||||
if(!$projectID) $projectID = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($executionID)->fetch('project');
|
||||
}
|
||||
else
|
||||
{
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noterminate,nodone,withbranch');
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noterminate,nodone,withbranch,noreleased');
|
||||
$stories = $this->story->getProductStoryPairs($productID, $branch, 0, 'all','id_desc', 0, 'full', 'story', false);
|
||||
}
|
||||
|
||||
@@ -655,6 +656,7 @@ class bug extends control
|
||||
$this->view->projectExecutionPairs = $this->loadModel('project')->getProjectExecutionPairs();
|
||||
$this->view->executions = defined('TUTORIAL') ? $this->loadModel('tutorial')->getExecutionPairs() : $executions;
|
||||
$this->view->builds = $builds;
|
||||
$this->view->releasedBuilds = $this->loadModel('release')->getReleasedBuilds($productID, $branch);
|
||||
$this->view->moduleID = (int)$moduleID;
|
||||
$this->view->projectID = $projectID;
|
||||
$this->view->projectModel = $projectModel;
|
||||
@@ -765,7 +767,7 @@ class bug extends control
|
||||
/* If executionID is setted, get builds and stories of this execution. */
|
||||
if($executionID)
|
||||
{
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty', $executionID, 'execution');
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noreleased', $executionID, 'execution');
|
||||
$stories = $this->story->getExecutionStoryPairs($executionID);
|
||||
$execution = $this->loadModel('execution')->getById($executionID);
|
||||
if($execution->type == 'kanban')
|
||||
@@ -785,7 +787,7 @@ class bug extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty');
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noreleased');
|
||||
$stories = $this->story->getProductStoryPairs($productID, $branch);
|
||||
}
|
||||
|
||||
@@ -933,9 +935,10 @@ class bug extends control
|
||||
$this->view->branchName = $product->type == 'normal' ? '' : zget($branches, $bug->branch, '');
|
||||
$this->view->users = $this->user->getPairs('noletter');
|
||||
$this->view->actions = $this->action->getList('bug', $bugID);
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'withreleased');
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, 'all');
|
||||
$this->view->preAndNext = $this->loadModel('common')->getPreAndNextObject('bug', $bugID);
|
||||
$this->view->product = $product;
|
||||
$this->view->linkCommits = $this->loadModel('repo')->getCommitsByObject($bugID, 'bug');
|
||||
|
||||
$this->view->projects = array('' => '') + $projects;
|
||||
|
||||
@@ -1079,18 +1082,18 @@ class bug extends control
|
||||
$this->view->position[] = $this->lang->bug->edit;
|
||||
|
||||
/* Assign. */
|
||||
$allBuilds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'noempty,withreleased');
|
||||
$allBuilds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'noempty');
|
||||
if($executionID)
|
||||
{
|
||||
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch', $executionID, 'execution');
|
||||
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased', $executionID, 'execution');
|
||||
}
|
||||
elseif($projectID)
|
||||
{
|
||||
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch', $projectID, 'project');
|
||||
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased', $projectID, 'project');
|
||||
}
|
||||
else
|
||||
{
|
||||
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch');
|
||||
$openedBuilds = $this->build->getBuildPairs($productID, $bug->branch, 'noempty,noterminate,nodone,withbranch,noreleased');
|
||||
}
|
||||
|
||||
/* Set the openedBuilds list. */
|
||||
@@ -1163,7 +1166,6 @@ class bug extends control
|
||||
if($product->shadow) $this->view->project = $this->loadModel('project')->getByShadowProduct($bug->product);
|
||||
|
||||
$this->view->bug = $bug;
|
||||
$this->view->productID = $productID;
|
||||
$this->view->product = $product;
|
||||
$this->view->execution = $execution;
|
||||
$this->view->productBugs = $productBugs;
|
||||
@@ -1828,15 +1830,15 @@ class bug extends control
|
||||
$this->bug->checkBugExecutionPriv($bug);
|
||||
$this->qa->setMenu($this->products, $productID, $bug->branch);
|
||||
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->resolve;
|
||||
$this->view->bug = $bug;
|
||||
$this->view->users = $users;
|
||||
$this->view->assignedTo = $assignedTo;
|
||||
$this->view->productBugs = $productBugs;
|
||||
$this->view->executions = $this->loadModel('product')->getExecutionPairsByProduct($productID, $bug->branch ? "0,{$bug->branch}" : 0, 'id_desc', $projectID, 'stagefilter');
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $bug->branch, 'withbranch');
|
||||
$this->view->actions = $this->action->getList('bug', $bugID);
|
||||
$this->view->execution = isset($execution) ? $execution : '';
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->resolve;
|
||||
$this->view->bug = $bug;
|
||||
$this->view->users = $users;
|
||||
$this->view->assignedTo = $assignedTo;
|
||||
$this->view->productBugs = $productBugs;
|
||||
$this->view->executions = $this->loadModel('product')->getExecutionPairsByProduct($productID, $bug->branch ? "0,{$bug->branch}" : 0, 'id_desc', $projectID, 'stagefilter');
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $bug->branch, 'withbranch,noreleased');
|
||||
$this->view->actions = $this->action->getList('bug', $bugID);
|
||||
$this->view->execution = isset($execution) ? $execution : '';
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -1933,7 +1935,7 @@ class bug extends control
|
||||
|
||||
$this->view->bug = $bug;
|
||||
$this->view->users = $this->user->getPairs('noclosed', $bug->resolvedBy);
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $bug->branch, 'noempty', 0, 'execution', $bug->openedBuild);
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $bug->branch, 'noempty,noreleased', 0, 'execution', $bug->openedBuild);
|
||||
$this->view->actions = $this->action->getList('bug', $bugID);
|
||||
|
||||
$this->display();
|
||||
@@ -2150,7 +2152,7 @@ class bug extends control
|
||||
|
||||
$this->view->bugs = $bugs;
|
||||
$this->view->users = $this->user->getPairs();
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty');
|
||||
$this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noreleased');
|
||||
|
||||
$this->display();
|
||||
}
|
||||
@@ -2412,7 +2414,7 @@ class bug extends control
|
||||
public function ajaxGetBugFieldOptions($productID, $executionID = 0)
|
||||
{
|
||||
$modules = $this->loadModel('tree')->getOptionMenu($productID, 'bug');
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, 'all', '', $executionID, 'execution');
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'noreleased', $executionID, 'execution');
|
||||
$type = $this->lang->bug->typeList;
|
||||
$pri = $this->lang->bug->priList;
|
||||
$severity = $this->lang->bug->severityList;
|
||||
@@ -2500,4 +2502,19 @@ class bug extends control
|
||||
if($project->model == 'kanban') return print($this->lang->bug->kanban);
|
||||
return print($this->lang->bug->execution);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajax get released builds.
|
||||
*
|
||||
* @param int $productID
|
||||
* @param int|string $branch
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function ajaxGetReleasedBuilds($productID, $branch = 'all')
|
||||
{
|
||||
$releasedBuilds = $this->loadModel('release')->getReleasedBuilds($productID, $branch);
|
||||
|
||||
return print(helper::jsonEncode($releasedBuilds));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,4 +8,5 @@
|
||||
.osContent, .browserContent {margin: 0 0 5px;}
|
||||
.browserContent {margin-left: -4px;}
|
||||
.resolution {white-space: nowrap; overflow: hidden;}
|
||||
.main-actions .btn-toolbar{display: inline-flex; flex-wrap: wrap;}
|
||||
.link-commit {overflow: hidden; white-space: nowrap; margin-right: 5px;}
|
||||
.main-actions .btn-toolbar{display: inline-flex; flex-wrap: wrap;}
|
||||
|
||||
@@ -38,13 +38,13 @@ function setOpenedBuilds(link, index)
|
||||
var selected = $('#buildBox' + index).find('select').val();
|
||||
$('#buildBox' + index).html(builds);
|
||||
$('#buildBox' + index).find('select').val(selected);
|
||||
$('#openedBuilds' + index + '_chosen').remove();
|
||||
$('#pickerDropMenu-pk_openedBuild' + index).remove();
|
||||
$('#openedBuilds' + index).next('.picker').remove();
|
||||
$('#buildBox' + index + ' select').removeClass('select-3');
|
||||
$('#buildBox' + index + ' select').addClass('select-1');
|
||||
$('#buildBox' + index + ' select').attr('name','openedBuilds[' + index + '][]');
|
||||
$('#buildBox' + index + ' select').attr('id','openedBuilds' + index);
|
||||
$('#buildBox' + index + ' select').chosen();
|
||||
$('#buildBox' + index + ' select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
|
||||
index++;
|
||||
if($('#executions' + index).val() != 'ditto') break;
|
||||
|
||||
+99
-26
@@ -19,6 +19,27 @@ $(function()
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if($('#openedBuild').length || $('#resolvedBuild').length || $('[name^=openedBuilds]').length)
|
||||
{
|
||||
$.get(createLink('bug', 'ajaxGetReleasedBuilds', 'productID=' + productID), function(data){releasedBuilds = data;}, 'json');
|
||||
|
||||
$('#openedBuild, #resolvedBuild, [name^=openedBuilds]').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
}
|
||||
|
||||
function markReleasedBuilds($option)
|
||||
{
|
||||
var build = $option.attr('data-value');
|
||||
if($.inArray(build, releasedBuilds) != -1)
|
||||
{
|
||||
if(!$option.find('.label-released').length)
|
||||
{
|
||||
var optionText = $option.find('.picker-option-text').html();
|
||||
$option.find('.picker-option-text').replaceWith("<p class='picker-option-text no-margin'><span class='label label-released label-primary label-outline'>" + releasedBuild + "</span> " + optionText + "</p>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all fields.
|
||||
*
|
||||
@@ -178,6 +199,8 @@ function loadAllExecutionBuilds(executionID, productID, buildBox)
|
||||
{
|
||||
branch = $('#branch').val();
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
$.get(createLink('bug', 'ajaxGetReleasedBuilds', 'productID=' + productID), function(data){releasedBuilds = data;}, 'json');
|
||||
|
||||
if(page == 'create')
|
||||
{
|
||||
oldOpenedBuild = $('#openedBuild').val() ? $('#openedBuild').val() : 0;
|
||||
@@ -186,10 +209,10 @@ function loadAllExecutionBuilds(executionID, productID, buildBox)
|
||||
{
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control" multiple=multiple></select>';
|
||||
$('#openedBuild').replaceWith(data);
|
||||
$('#openedBuild_chosen').remove();
|
||||
$('#pickerDropMenu-pk_openedBuild').remove();
|
||||
$('#openedBuild').next('.picker').remove();
|
||||
$("#openedBuild").chosen();
|
||||
notice();
|
||||
$("#openedBuild").picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
})
|
||||
}
|
||||
if(page == 'edit')
|
||||
@@ -197,12 +220,12 @@ function loadAllExecutionBuilds(executionID, productID, buildBox)
|
||||
if(buildBox == 'openedBuildBox')
|
||||
{
|
||||
link = createLink('build', 'ajaxGetExecutionBuilds', 'executionID=' + executionID + '&productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch + '&index=0&needCreate=true&type=all');
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').chosen()});
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
if(buildBox == 'resolvedBuildBox')
|
||||
{
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=resolvedBuild&build=' + oldResolvedBuild + '&branch=' + branch + '&index=0&type=all');
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').chosen()});
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -219,6 +242,9 @@ function loadAllProductBuilds(productID, buildBox)
|
||||
{
|
||||
branch = $('#branch').val();
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
|
||||
$.get(createLink('bug', 'ajaxGetReleasedBuilds', 'productID=' + productID), function(data){releasedBuilds = data;}, 'json');
|
||||
|
||||
if(page == 'create')
|
||||
{
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch + '&index=0&type=all');
|
||||
@@ -226,10 +252,10 @@ function loadAllProductBuilds(productID, buildBox)
|
||||
{
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control" multiple=multiple></select>';
|
||||
$('#openedBuild').replaceWith(data);
|
||||
$('#openedBuild_chosen').remove();
|
||||
$('#pickerDropMenu-pk_openedBuild').remove();
|
||||
$('#openedBuild').next('.picker').remove();
|
||||
$("#openedBuild").chosen();
|
||||
notice();
|
||||
$("#openedBuild").picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
})
|
||||
}
|
||||
if(page == 'edit')
|
||||
@@ -237,12 +263,12 @@ function loadAllProductBuilds(productID, buildBox)
|
||||
if(buildBox == 'openedBuildBox')
|
||||
{
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch + '&index=0&type=all');
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').chosen()});
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
if(buildBox == 'resolvedBuildBox')
|
||||
{
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=resolvedBuild&build=' + oldResolvedBuild + '&branch=' + branch + '&index=0&type=all');
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').chosen()});
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -294,7 +320,7 @@ function loadProductStories(productID)
|
||||
function loadProductProjects(productID)
|
||||
{
|
||||
required = $('#project_chosen').hasClass('required');
|
||||
branch = $('#branch').val();
|
||||
branch = $('#branch').val();
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
link = createLink('product', 'ajaxGetProjects', 'productID=' + productID + '&branch=' + branch + '&projectID=' + oldProjectID);
|
||||
$('#projectBox').load(link, function()
|
||||
@@ -437,23 +463,25 @@ function loadProductBuilds(productID)
|
||||
if(typeof(oldOpenedBuild) == 'undefined') oldOpenedBuild = 0;
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch);
|
||||
|
||||
$.get(createLink('bug', 'ajaxGetReleasedBuilds', 'productID=' + productID), function(data){releasedBuilds = data;}, 'json');
|
||||
|
||||
if(page == 'create')
|
||||
{
|
||||
$.get(link, function(data)
|
||||
{
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control" multiple=multiple></select>';
|
||||
$('#openedBuild').replaceWith(data);
|
||||
$('#openedBuild_chosen').remove();
|
||||
$('#pickerDropMenu-pk_openedBuild').remove();
|
||||
$('#openedBuild').next('.picker').remove();
|
||||
$("#openedBuild").chosen();
|
||||
notice();
|
||||
$("#openedBuild").picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
})
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').chosen()});
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=resolvedBuild&build=' + oldResolvedBuild + '&branch=' + branch);
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').chosen()});
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -466,9 +494,12 @@ function loadProductBuilds(productID)
|
||||
*/
|
||||
function loadExecutionRelated(executionID)
|
||||
{
|
||||
executionID = parseInt(executionID);
|
||||
executionID = parseInt(executionID);
|
||||
currentProjectID = $('#project').val() == 'undefined' ? 0 : $('#project').val();
|
||||
|
||||
if(executionID)
|
||||
{
|
||||
if(currentProjectID == 0) loadProjectByExecutionID(executionID);
|
||||
loadExecutionTasks(executionID);
|
||||
loadExecutionStories(executionID);
|
||||
loadExecutionBuilds(executionID);
|
||||
@@ -477,7 +508,6 @@ function loadExecutionRelated(executionID)
|
||||
}
|
||||
else
|
||||
{
|
||||
var currentProjectID = $('#project').val() == 'undefined' ? 0 : $('#project').val();
|
||||
var currentProductID = $('#product').val();
|
||||
|
||||
$('#taskIdBox').innerHTML = '<select id="task"></select>'; // Reset the task.
|
||||
@@ -496,6 +526,43 @@ function loadExecutionRelated(executionID)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a project by execution id.
|
||||
*
|
||||
* @param executionID $executionID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function loadProjectByExecutionID(executionID)
|
||||
{
|
||||
link = createLink('project', 'ajaxGetPairsByExecution', 'executionID=' + executionID, 'json');
|
||||
required = $('#project_chosen').hasClass('required');
|
||||
productID = $('#product').val();
|
||||
|
||||
$.post(link, function(data)
|
||||
{
|
||||
var originProject = $('#project').html();
|
||||
|
||||
if($('#project').find('option[value="' + data.id + '"]').length > 0)
|
||||
{
|
||||
$('#project').find('option[value="' + data.id + '"]').attr('selected', 'selected');
|
||||
originProject = $('#project').html();
|
||||
$('#project').replaceWith('<select id="project" name="project" class="form-control" onchange="loadProductExecutions(' + productID + ', this.value)">' + originProject + '</select>');
|
||||
}
|
||||
else
|
||||
{
|
||||
var newProject = '<option value="' + data.id + '" data-keys="' + data.namePinyin + '" selected="selected">' + data.name + '</option>';
|
||||
$('#project').replaceWith('<select id="project" name="project" class="form-control" onchange="loadProductExecutions(' + productID + ', this.value)">' + originProject + newProject+ '</select>');
|
||||
}
|
||||
|
||||
$('#project_chosen').remove();
|
||||
$('#project').next('.picker').remove();
|
||||
$('#project').chosen();
|
||||
|
||||
if(required) $('#project_chosen').addClass('required');
|
||||
}, 'json')
|
||||
}
|
||||
|
||||
/**
|
||||
* Load execution tasks.
|
||||
*
|
||||
@@ -552,28 +619,30 @@ function loadProjectBuilds(projectID)
|
||||
var productID = $('#product').val();
|
||||
var oldOpenedBuild = $('#openedBuild').val() ? $('#openedBuild').val() : 0;
|
||||
|
||||
$.get(createLink('bug', 'ajaxGetReleasedBuilds', 'productID=' + productID), function(data){releasedBuilds = data;}, 'json');
|
||||
|
||||
if(page == 'create')
|
||||
{
|
||||
var link = createLink('build', 'ajaxGetProjectBuilds', 'projectID=' + projectID + '&productID=' + productID + '&varName=openedBuild&build=&branch=' + branch);
|
||||
$.get(link, function(data)
|
||||
{
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control" multiple=multiple></select>';
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control picker-select" multiple=multiple></select>';
|
||||
$('#openedBuild').replaceWith(data);
|
||||
$('#openedBuild').val(oldOpenedBuild);
|
||||
$('#openedBuild_chosen').remove();
|
||||
$('#pickerDropMenu-pk_openedBuild').remove();
|
||||
$('#openedBuild').next('.picker').remove();
|
||||
$("#openedBuild").chosen();
|
||||
notice();
|
||||
$("#openedBuild").picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
})
|
||||
}
|
||||
else
|
||||
{
|
||||
var link = createLink('build', 'ajaxGetProjectBuilds', 'projectID=' + projectID + '&productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch);
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').val(oldOpenedBuild).chosen()});
|
||||
$('#openedBuildBox').load(link, function(){$(this).find('select').val(oldOpenedBuild).picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
|
||||
var oldResolvedBuild = $('#resolvedBuild').val() ? $('#resolvedBuild').val() : 0;
|
||||
var link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=resolvedBuild&build=' + oldResolvedBuild + '&branch=' + branch);
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').val(oldResolvedBuild).chosen()});
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').val(oldResolvedBuild).picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -595,28 +664,30 @@ function loadExecutionBuilds(executionID, num)
|
||||
if(typeof(branch) == 'undefined') var branch = 0;
|
||||
if(typeof(productID) == 'undefined') var productID = 0;
|
||||
|
||||
$.get(createLink('bug', 'ajaxGetReleasedBuilds', 'productID=' + productID), function(data){releasedBuilds = data;}, 'json');
|
||||
|
||||
if(page == 'create')
|
||||
{
|
||||
link = createLink('build', 'ajaxGetExecutionBuilds', 'executionID=' + executionID + '&productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + "&branch=" + branch + "&index=0&needCreate=true");
|
||||
$.get(link, function(data)
|
||||
{
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control" multiple=multiple></select>';
|
||||
if(!data) data = '<select id="openedBuild" name="openedBuild" class="form-control picker-select" multiple=multiple></select>';
|
||||
$('#openedBuild').replaceWith(data);
|
||||
$('#openedBuild').val(oldOpenedBuild);
|
||||
$('#openedBuild_chosen').remove();
|
||||
$('#pickerDropMenu-pk_openedBuild').remove();
|
||||
$('#openedBuild').next('.picker').remove();
|
||||
$("#openedBuild").chosen();
|
||||
notice();
|
||||
$("#openedBuild").picker({optionRender: markReleasedBuilds, dropWidth: 'auto'});
|
||||
})
|
||||
}
|
||||
else
|
||||
{
|
||||
link = createLink('build', 'ajaxGetExecutionBuilds', 'executionID=' + executionID + '&productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch + '&index=0&needCreate=false&type=normal&number=' + num);
|
||||
$('#openedBuildBox' + num).load(link, function(){$(this).find('select').val(oldOpenedBuild).chosen()});
|
||||
$('#openedBuildBox' + num).load(link, function(){$(this).find('select').val(oldOpenedBuild).picker({optionRender: markReleaseBuilds, dropWidth: 'auto'})});
|
||||
|
||||
oldResolvedBuild = $('#resolvedBuild').val() ? $('#resolvedBuild').val() : 0;
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=resolvedBuild&build=' + oldResolvedBuild + '&branch=' + branch);
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').val(oldResolvedBuild).chosen()});
|
||||
$('#resolvedBuildBox').load(link, function(){$(this).find('select').val(oldResolvedBuild).picker({optionRender: markReleasedBuilds, dropWidth: 'auto'})});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -776,7 +847,9 @@ function notice()
|
||||
if(page == 'edit') return;
|
||||
|
||||
$('#buildBoxActions').empty().hide();
|
||||
if($('#openedBuild').find('option').length <= 1)
|
||||
var itemCount = $('#openedBuild').find('option').length;
|
||||
if($('#openedBuild').attr('data-items') != undefined) var itemCount = $('#openedBuild').attr('data-items');
|
||||
if(itemCount <= 1)
|
||||
{
|
||||
var html = '';
|
||||
if($('#execution').length == 0 || $('#execution').val() == 0)
|
||||
|
||||
@@ -124,6 +124,7 @@ $(function()
|
||||
});
|
||||
});
|
||||
|
||||
$(window).unload(function(){
|
||||
$(window).unload(function()
|
||||
{
|
||||
if(blockID) window.parent.refreshBlock($('#block' + blockID));
|
||||
});
|
||||
|
||||
+15
-12
@@ -176,6 +176,7 @@ $lang->bug->labelPostponed = 'Postponed';
|
||||
$lang->bug->changed = 'Changed';
|
||||
$lang->bug->storyChanged = 'Story Changed';
|
||||
$lang->bug->linkMR = 'Related MRs';
|
||||
$lang->bug->linkCommit = 'Related Commits';
|
||||
$lang->bug->duplicateTip = 'Please enter keyword search';
|
||||
|
||||
/* Page tags. */
|
||||
@@ -396,18 +397,20 @@ $lang->bug->report->bugHistories->graph->xAxisName = 'Bearbeitungsschri
|
||||
|
||||
/* Operating record. */
|
||||
$lang->bug->action = new stdclass();
|
||||
$lang->bug->action->resolved = array('main' => '$date, gelöst von <strong>$actor</strong> und die Lösung ist <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, konvertiert von <strong>$actor</strong> zu <strong>Story</strong> mit ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, importiert von <strong>$actor</strong> als <strong>Aufgabe</strong> mit ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong>,with ID <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, verknüpft von <strong>$actor</strong> mit Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> von Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, verknüpft von <strong>$actor</strong> zum Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> von Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, verknüpft von <strong>$actor</strong> zu Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> vom Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, verknüpft von <strong>$actor</strong> mit Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> zum Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->resolved = array('main' => '$date, gelöst von <strong>$actor</strong> und die Lösung ist <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, konvertiert von <strong>$actor</strong> zu <strong>Story</strong> mit ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, importiert von <strong>$actor</strong> als <strong>Aufgabe</strong> mit ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong>,with ID <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, verknüpft von <strong>$actor</strong> mit Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> von Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, verknüpft von <strong>$actor</strong> zum Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> von Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, verknüpft von <strong>$actor</strong> zu Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> vom Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2revision = array('main' => '$date, linked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrevision = array('main' => '$date, unlinked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, verknüpft von <strong>$actor</strong> mit Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, verknüpfung aufgehoben von <strong>$actor</strong> zum Bug <strong>$extra</strong>.');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = 'Build wählen...';
|
||||
|
||||
+15
-12
@@ -176,6 +176,7 @@ $lang->bug->labelPostponed = 'Postponed';
|
||||
$lang->bug->changed = 'Changed';
|
||||
$lang->bug->storyChanged = 'Story Changed';
|
||||
$lang->bug->linkMR = 'Related MRs';
|
||||
$lang->bug->linkCommit = 'Related Commits';
|
||||
$lang->bug->duplicateTip = 'Please enter keyword search';
|
||||
|
||||
/* Page tags. */
|
||||
@@ -396,18 +397,20 @@ $lang->bug->report->bugHistories->graph->xAxisName = 'Handling Steps';
|
||||
|
||||
/* Operating record. */
|
||||
$lang->bug->action = new stdclass();
|
||||
$lang->bug->action->resolved = array('main' => '$date, resolved by <strong>$actor</strong> and the resolution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, converted by <strong>$actor</strong> to <strong>Story</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong>,with ID <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, linked by <strong>$actor</strong> to Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, deleted by <strong>$actor</strong> from Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, linked by <strong>$actor</strong> to Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, unlinked by <strong>$actor</strong> from Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, linked by <strong>$actor</strong> to Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, unlinked by <strong>$actor</strong> from Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, linked by <strong>$actor</strong> to Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, unlinked by <strong>$actor</strong> from Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->resolved = array('main' => '$date, resolved by <strong>$actor</strong> and the resolution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, converted by <strong>$actor</strong> to <strong>Story</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong>,with ID <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, linked by <strong>$actor</strong> to Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, deleted by <strong>$actor</strong> from Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, linked by <strong>$actor</strong> to Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, unlinked by <strong>$actor</strong> from Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, linked by <strong>$actor</strong> to Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, unlinked by <strong>$actor</strong> from Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2revision = array('main' => '$date, linked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrevision = array('main' => '$date, unlinked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, linked by <strong>$actor</strong> to Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, unlinked by <strong>$actor</strong> from Bug <strong>$extra</strong>.');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = 'Select Build';
|
||||
|
||||
+15
-12
@@ -176,6 +176,7 @@ $lang->bug->labelPostponed = 'Postponed';
|
||||
$lang->bug->changed = 'Changed';
|
||||
$lang->bug->storyChanged = 'Story Changed';
|
||||
$lang->bug->linkMR = 'Related MRs';
|
||||
$lang->bug->linkCommit = 'Related Commits';
|
||||
$lang->bug->duplicateTip = 'Please enter keyword search';
|
||||
|
||||
/* Page tags. */
|
||||
@@ -396,18 +397,20 @@ $lang->bug->report->bugHistories->graph->xAxisName = 'Etapes résolutio
|
||||
|
||||
/* Operating record. */
|
||||
$lang->bug->action = new stdclass();
|
||||
$lang->bug->action->resolved = array('main' => '$date, résolu par <strong>$actor</strong> et la résolution est <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, converti par <strong>$actor</strong> en <strong>Story</strong> avec ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, importé par <strong>$actor</strong> en tant que <strong>Task</strong> avec ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong>,with ID <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, lié par <strong>$actor</strong> au Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, supprimé par <strong>$actor</strong> du Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, lié par <strong>$actor</strong> au Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, retiré par <strong>$actor</strong> du Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, ajouté par <strong>$actor</strong> à la Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, retiré par <strong>$actor</strong> de la Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, associé par <strong>$actor</strong> au Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, dissocié par <strong>$actor</strong> du Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->resolved = array('main' => '$date, résolu par <strong>$actor</strong> et la résolution est <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, converti par <strong>$actor</strong> en <strong>Story</strong> avec ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, importé par <strong>$actor</strong> en tant que <strong>Task</strong> avec ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong>,with ID <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, lié par <strong>$actor</strong> au Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, supprimé par <strong>$actor</strong> du Plan <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, lié par <strong>$actor</strong> au Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, retiré par <strong>$actor</strong> du Build <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, ajouté par <strong>$actor</strong> à la Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, retiré par <strong>$actor</strong> de la Release <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2revision = array('main' => '$date, linked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrevision = array('main' => '$date, unlinked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, associé par <strong>$actor</strong> au Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, dissocié par <strong>$actor</strong> du Bug <strong>$extra</strong>.');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = 'Sélect Build';
|
||||
|
||||
+15
-11
@@ -172,6 +172,8 @@ $lang->bug->legendComment = 'Ghi chú';
|
||||
$lang->bug->legendLife = 'Toàn bộ';
|
||||
$lang->bug->legendMisc = 'Khác';
|
||||
$lang->bug->legendRelated = 'Thông tin liên quan';
|
||||
$lang->bug->linkMRs = 'Related MRs';
|
||||
$lang->bug->linkCommit = 'Related Commits';
|
||||
|
||||
/* Button. */
|
||||
$lang->bug->buttonConfirm = 'Xác nhận';
|
||||
@@ -376,17 +378,19 @@ $lang->bug->report->bugHistories->graph->xAxisName = 'Cột bước';
|
||||
|
||||
/* Operating record. */
|
||||
$lang->bug->action = new stdclass();
|
||||
$lang->bug->action->resolved = array('main' => '$date, được giải quyết bởi <strong>$actor</strong> và giải pháp là <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, được chuyển bởi <strong>$actor</strong> thành <strong>Story</strong> với ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, nhập bởi <strong>$actor</strong> như <strong>Task</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, liên kết bởi <strong>$actor</strong> cho kế hoạch <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, được xóa bởi <strong>$actor</strong> từ kế hoạch <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới Bản dựng <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, bị hủy bởi <strong>$actor</strong> từ bản dựng <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới Phát hành <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, bị hủy bởi <strong>$actor</strong> từ Phát hành <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, bị hủy bởi <strong>$actor</strong> từ Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->resolved = array('main' => '$date, được giải quyết bởi <strong>$actor</strong> và giải pháp là <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, được chuyển bởi <strong>$actor</strong> thành <strong>Story</strong> với ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->totask = array('main' => '$date, nhập bởi <strong>$actor</strong> như <strong>Task</strong> with ID <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, liên kết bởi <strong>$actor</strong> cho kế hoạch <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, được xóa bởi <strong>$actor</strong> từ kế hoạch <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới Bản dựng <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, bị hủy bởi <strong>$actor</strong> từ bản dựng <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới Phát hành <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, bị hủy bởi <strong>$actor</strong> từ Phát hành <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2revision = array('main' => '$date, linked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrevision = array('main' => '$date, unlinked by <strong>$actor</strong> to Revision <strong>$extra</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, liên kết bởi <strong>$actor</strong> tới Bug <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, bị hủy bởi <strong>$actor</strong> từ Bug <strong>$extra</strong>.');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = 'Chọn bản dựng';
|
||||
|
||||
+15
-12
@@ -176,6 +176,7 @@ $lang->bug->labelPostponed = '被延期';
|
||||
$lang->bug->changed = '已变动';
|
||||
$lang->bug->storyChanged = '需求变动';
|
||||
$lang->bug->linkMR = '相关合并请求';
|
||||
$lang->bug->linkCommit = '相关代码版本';
|
||||
$lang->bug->duplicateTip = '请输入关键字';
|
||||
|
||||
/* 页面标签。*/
|
||||
@@ -396,18 +397,20 @@ $lang->bug->report->bugHistories->graph->xAxisName = '处理步骤';
|
||||
|
||||
/* 操作记录。*/
|
||||
$lang->bug->action = new stdclass();
|
||||
$lang->bug->action->resolved = array('main' => '$date, 由 <strong>$actor</strong> 解决,方案为 <strong>$extra</strong> $appendLink。', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, 由 <strong>$actor</strong> 转为<strong> ' . $lang->SRCommon . '</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->totask = array('main' => '$date, 由 <strong>$actor</strong> 导入为<strong>任务</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, 由 <strong>$actor</strong> 转为<strong>任务</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, 由 <strong>$actor</strong> 关联到计划 <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, 由 <strong>$actor</strong> 从计划 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, 由 <strong>$actor</strong> 从版本 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, 由 <strong>$actor</strong> 关联到发布 <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, 由 <strong>$actor</strong> 从发布 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, 由 <strong>$actor</strong> 关联相关Bug <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, 由 <strong>$actor</strong> 移除相关Bug <strong>$extra</strong>。');
|
||||
$lang->bug->action->resolved = array('main' => '$date, 由 <strong>$actor</strong> 解决,方案为 <strong>$extra</strong> $appendLink。', 'extra' => 'resolutionList');
|
||||
$lang->bug->action->tostory = array('main' => '$date, 由 <strong>$actor</strong> 转为<strong> ' . $lang->SRCommon . '</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->totask = array('main' => '$date, 由 <strong>$actor</strong> 导入为<strong>任务</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->converttotask = array('main' => '$date, 由 <strong>$actor</strong> 转为<strong>任务</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, 由 <strong>$actor</strong> 关联到计划 <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, 由 <strong>$actor</strong> 从计划 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->linked2build = array('main' => '$date, 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, 由 <strong>$actor</strong> 从版本 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->unlinkedfromrelease = array('main' => '$date, 由 <strong>$actor</strong> 从发布 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->linked2release = array('main' => '$date, 由 <strong>$actor</strong> 关联到发布 <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2revision = array('main' => '$date, 由 <strong>$actor</strong> 关联到代码提交 <strong>$extra</strong>.');
|
||||
$lang->bug->action->unlinkedfromrevision = array('main' => '$date, 由 <strong>$actor</strong> 取消关联到代码提交 <strong>$extra</strong>。');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, 由 <strong>$actor</strong> 关联相关Bug <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, 由 <strong>$actor</strong> 移除相关Bug <strong>$extra</strong>。');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = '选择相关版本...';
|
||||
|
||||
@@ -81,8 +81,6 @@ class bugModel extends model
|
||||
->remove('files,labels,uid,oldTaskID,contactListMenu,region,lane,ticket')
|
||||
->get();
|
||||
|
||||
if($bug->execution != 0) $bug->project = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($bug->execution)->fetch('project');
|
||||
|
||||
/* Check repeat bug. */
|
||||
$result = $this->loadModel('common')->removeDuplicate('bug', $bug, "product={$bug->product}");
|
||||
if($result and $result['stop']) return array('status' => 'exists', 'id' => $result['duplicate']);
|
||||
@@ -219,8 +217,6 @@ class bugModel extends model
|
||||
|
||||
if(isset($data->lanes[$i])) $bug->laneID = $data->lanes[$i];
|
||||
|
||||
if($bug->execution != 0) $bug->project = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($bug->execution)->fetch('project');
|
||||
|
||||
/* Assign the bug to the person in charge of the module. */
|
||||
if(!empty($moduleOwners[$bug->module]))
|
||||
{
|
||||
@@ -1623,7 +1619,7 @@ class bugModel extends model
|
||||
$this->config->bug->search['params']['module']['values'] = $modules;
|
||||
$this->config->bug->search['params']['execution']['values'] = $this->loadModel('product')->getExecutionPairsByProduct($productID, 0, 'id_desc', $projectID);
|
||||
$this->config->bug->search['params']['severity']['values'] = array(0 => '') + $this->lang->bug->severityList; //Fix bug #939.
|
||||
$this->config->bug->search['params']['openedBuild']['values'] = $this->loadModel('build')->getBuildPairs($productID, 'all', 'withbranch');
|
||||
$this->config->bug->search['params']['openedBuild']['values'] = $this->loadModel('build')->getBuildPairs($productID, 'all', 'withbranch|releasetag');
|
||||
$this->config->bug->search['params']['resolvedBuild']['values'] = $this->config->bug->search['params']['openedBuild']['values'];
|
||||
if($this->session->currentProductType == 'normal')
|
||||
{
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<?php $this->printExtendFields($bug, 'table');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->openedBuild;?></th>
|
||||
<td colspan='2'><?php echo html::select('openedBuild[]', $builds, $bug->openedBuild, 'size=4 multiple=multiple class="form-control chosen"');?></td>
|
||||
<td colspan='2'><?php echo html::select('openedBuild[]', $builds, $bug->openedBuild, 'size=4 multiple=multiple class="form-control picker-select"');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
@@ -56,4 +56,8 @@
|
||||
<div class='main'><?php include '../../common/view/action.html.php';?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
js::set('productID', $bug->product);
|
||||
js::set('releasedBuild', $lang->build->releasedBuild);
|
||||
?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
js::set('productID', $productID);
|
||||
js::set('releasedBuild', $lang->build->releasedBuild);
|
||||
?>
|
||||
<?php
|
||||
$visibleFields = array();
|
||||
@@ -107,7 +109,7 @@ foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange='loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, 'trunk', "class='form-control chosen' multiple");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, 'trunk', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
@@ -163,7 +165,7 @@ foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control chosen' multiple");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
@@ -224,7 +226,7 @@ foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
<td><?php echo html::select("modules[%s]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[%s]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, \"%s\")'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[%s]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, \"%s\")'");?></td>
|
||||
<td id='buildBox%s'><?php echo html::select("openedBuilds[%s][]", $builds, '', "class='form-control chosen' multiple");?></td>
|
||||
<td id='buildBox%s'><?php echo html::select("openedBuilds[%s][]", $builds, '', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
@@ -267,7 +269,7 @@ foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control chosen' multiple");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control picker-select' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
|
||||
@@ -328,7 +328,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
|
||||
{
|
||||
$actionLink = $this->createLink('bug', 'batchResolve', "resolution=fixed&resolvedBuild=$key");
|
||||
echo "<li class='option' data-key='$key'>";
|
||||
echo html::a('javascript:;', $build, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\"");
|
||||
echo html::a('javascript:;', (in_array($key, $releasedBuilds) ? "<span class='label label-primary label-outline'>{$lang->build->releasedBuild}</span> " : '') . $build, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#bugList')\"");
|
||||
echo "</li>";
|
||||
}
|
||||
echo "</ul>";
|
||||
|
||||
@@ -30,6 +30,8 @@ js::set('tab', $this->app->tab);
|
||||
js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
js::set('showFields', $showFields);
|
||||
js::set('projectExecutionPairs', $projectExecutionPairs);
|
||||
js::set('productID', $productID);
|
||||
js::set('releasedBuild', $lang->build->releasedBuild);
|
||||
if($this->app->tab == 'execution') js::set('objectID', zget($execution, 'id', ''));
|
||||
if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
?>
|
||||
@@ -128,7 +130,7 @@ if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
<td>
|
||||
<div class='input-group' id='buildBox'>
|
||||
<span class="input-group-addon"><?php echo $lang->bug->openedBuild?></span>
|
||||
<?php echo html::select('openedBuild[]', $builds, empty($buildID) ? '' : $buildID, "multiple=multiple class='chosen form-control'");?>
|
||||
<?php echo html::select('openedBuild[]', $builds, empty($buildID) ? '' : $buildID, "multiple=multiple class='picker-select form-control' data-items='" . count($builds) . "'");?>
|
||||
<span class='input-group-addon fix-border' id='buildBoxActions'></span>
|
||||
<div class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' id='all' data-toggle='tooltip' onclick='loadAllBuilds()'")?></div>
|
||||
</div>
|
||||
|
||||
@@ -30,6 +30,8 @@ js::set('bugID' , $bug->id);
|
||||
js::set('bugBranch' , $bug->branch);
|
||||
js::set('isClosedBug' , $bug->status == 'closed');
|
||||
js::set('projectExecutionPairs' , $projectExecutionPairs);
|
||||
js::set('productID' , $product->id);
|
||||
js::set('releasedBuild' , $lang->build->releasedBuild);
|
||||
if($this->app->tab == 'execution') js::set('objectID', $bug->execution);
|
||||
if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
?>
|
||||
@@ -100,7 +102,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
<th class='w-80px'><?php echo $lang->bug->product;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('product', $products, $productID, "onchange='loadAll(this.value)' class='form-control chosen'");?>
|
||||
<?php echo html::select('product', $products, $product->id, "onchange='loadAll(this.value)' class='form-control chosen'");?>
|
||||
<?php if($product->type != 'normal') echo html::select('branch', $branchTagOption, $bug->branch, "onchange='loadBranch();' class='form-control'");?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -114,9 +116,9 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
if(count($moduleOptionMenu) == 1)
|
||||
{
|
||||
echo "<span class='input-group-addon'>";
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID=$productID&view=bug¤tModuleID=0&branch=$bug->branch", '', true), $lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID={$product->id}&view=bug¤tModuleID=0&branch=$bug->branch", '', true), $lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");
|
||||
echo ' ';
|
||||
echo html::a("javascript:void(0)", $lang->refreshIcon, '', "class='refresh' title='$lang->refresh' onclick='loadProductModules($productID)'");
|
||||
echo html::a("javascript:void(0)", $lang->refreshIcon, '', "class='refresh' title='$lang->refresh' onclick='loadProductModules($product->id)'");
|
||||
echo '</span>';
|
||||
}
|
||||
?>
|
||||
@@ -240,7 +242,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
<th><?php echo $lang->bug->openedBuild;?></th>
|
||||
<td>
|
||||
<div id='openedBuildBox' class='input-group'>
|
||||
<?php echo html::select('openedBuild[]', $openedBuilds, $bug->openedBuild, 'size=4 multiple=multiple class="chosen form-control"');?>
|
||||
<?php echo html::select('openedBuild[]', $openedBuilds, $bug->openedBuild, 'size=4 multiple=multiple class="picker-select form-control"');?>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' onclick='loadAllBuilds(this)'")?></span>
|
||||
</div>
|
||||
</td>
|
||||
@@ -257,7 +259,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
<th><?php echo $lang->bug->resolvedBuild;?></th>
|
||||
<td>
|
||||
<div id='resolvedBuildBox' class='input-group'>
|
||||
<?php echo html::select('resolvedBuild', $resolvedBuilds, $bug->resolvedBuild, "class='form-control chosen'");?>
|
||||
<?php echo html::select('resolvedBuild', $resolvedBuilds, $bug->resolvedBuild, "class='form-control picker-select'");?>
|
||||
<span class='input-group-btn'><?php echo html::commonButton($lang->bug->allBuilds, "class='btn' onclick='loadAllBuilds(this)'")?></span>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -14,8 +14,9 @@
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php
|
||||
js::set('page' , 'resolve');
|
||||
js::set('productID' , $bug->product);
|
||||
js::set('page', 'resolve');
|
||||
js::set('productID', $bug->product);
|
||||
js::set('releasedBuild', $lang->build->releasedBuild);
|
||||
?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
@@ -49,7 +50,7 @@ js::set('productID' , $bug->product);
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div id='resolvedBuildBox'><?php echo html::select('resolvedBuild', $builds, '', "class='form-control chosen'");?></div>
|
||||
<div id='resolvedBuildBox'><?php echo html::select('resolvedBuild', $builds, '', "class='form-control picker-select'");?></div>
|
||||
<div id='newBuildBox' class='hidden required'><?php echo html::input('buildName', '', "class='form-control' placeholder='{$lang->bug->placeholder->newBuildName}'");?></div>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -435,6 +435,20 @@
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->linkCommit;?></th>
|
||||
<td>
|
||||
<?php
|
||||
$canViewRevision = common::hasPriv('repo', 'revision');
|
||||
foreach($linkCommits as $commit)
|
||||
{
|
||||
$revision = substr($commit->revision, 0, 10);
|
||||
$commitTitle = $revision . ' ' . $commit->comment;
|
||||
echo "<div class='link-commit' title='$commitTitle'>" . ($canViewRevision ? html::a($this->createLink('repo', 'revision', "repoID={$commit->repo}&objectID=0&revision={$commit->revision}"), $revision) . " $commit->comment" : $commitTitle) . '</div>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
+19
-13
@@ -385,32 +385,38 @@ class build extends control
|
||||
* @param string|int $branch
|
||||
* @param int $index the index of batch create bug.
|
||||
* @param string $type get all builds or some builds belong to normal releases and executions are not done.
|
||||
* @param string $extra
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function ajaxGetProductBuilds($productID, $varName, $build = '', $branch = 'all', $index = 0, $type = 'normal')
|
||||
public function ajaxGetProductBuilds($productID, $varName, $build = '', $branch = 'all', $index = 0, $type = 'normal', $extra = '')
|
||||
{
|
||||
$isJsonView = $this->app->getViewType() == 'json';
|
||||
if($varName == 'openedBuild' )
|
||||
{
|
||||
$params = ($type == 'all') ? 'noempty,withbranch' : 'noempty,noterminate,nodone,withbranch';
|
||||
$params = ($type == 'all') ? 'noempty,withbranch,noreleased' : 'noempty,noterminate,nodone,withbranch,noreleased';
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $params, 0, 'project', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName . '[]', $builds, $build, 'size=4 class=form-control multiple'));
|
||||
}
|
||||
if($varName == 'openedBuilds' )
|
||||
{
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, 'noempty', 0, 'project', $build);
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, 'noempty,noreleased', 0, 'project', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName . "[$index][]", $builds, $build, 'size=4 class=form-control multiple'));
|
||||
}
|
||||
if($varName == 'resolvedBuild')
|
||||
{
|
||||
$params = ($type == 'all') ? 'withbranch' : 'noterminate,nodone,withbranch';
|
||||
$params = ($type == 'all') ? 'withbranch,noreleased' : 'noterminate,nodone,withbranch,noreleased';
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $params, 0, 'project', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName, $builds, $build, "class='form-control'"));
|
||||
}
|
||||
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $type, 0, 'project', $build);
|
||||
if(strpos($extra, 'multiple') !== false) $varName .= '[]';
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName, $builds, $build, "class='form-control chosen' $extra"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -434,7 +440,7 @@ class build extends control
|
||||
{
|
||||
if(empty($projectID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type);
|
||||
|
||||
$params = ($type == 'all') ? 'noempty,withbranch' : 'noempty,noterminate,nodone,withbranch';
|
||||
$params = ($type == 'all') ? 'noempty,withbranch,noreleased' : 'noempty,noterminate,nodone,withbranch,noreleased';
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $params, $projectID, 'project', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName . '[]', $builds , '', 'size=4 class=form-control multiple'));
|
||||
@@ -443,13 +449,13 @@ class build extends control
|
||||
{
|
||||
if(empty($projectID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type);
|
||||
|
||||
$params = ($type == 'all') ? 'withbranch' : 'noterminate,nodone,withbranch';
|
||||
$params = ($type == 'all') ? 'withbranch,noreleased' : 'noterminate,nodone,withbranch,noreleased';
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $params, $projectID, 'project', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName, $builds, $build, "class='form-control'"));
|
||||
}
|
||||
|
||||
if(empty($projectID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type);
|
||||
if(empty($projectID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type, $extra);
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $type, $projectID, 'project', $build, false);
|
||||
if(strpos($extra, 'multiple') !== false) $varName .= '[]';
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
@@ -478,7 +484,7 @@ class build extends control
|
||||
{
|
||||
if(empty($executionID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type);
|
||||
|
||||
$params = ($type == 'all') ? 'noempty' : 'noempty,noterminate,nodone';
|
||||
$params = ($type == 'all') ? 'noempty,noreleased' : 'noempty,noterminate,nodone,noreleased';
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $params, $executionID, 'execution', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
|
||||
@@ -489,7 +495,7 @@ class build extends control
|
||||
{
|
||||
if(empty($executionID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type);
|
||||
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, 'noempty', $executionID, 'execution', $build);
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, 'noempty,noreleased', $executionID, 'execution', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName . "[$index][]", $builds , $build, 'size=4 class=form-control multiple'));
|
||||
}
|
||||
@@ -497,14 +503,14 @@ class build extends control
|
||||
{
|
||||
if(empty($executionID)) return $this->ajaxGetProductBuilds($productID, $varName, $build, $branch, $index, $type);
|
||||
|
||||
$params = ($type == 'all') ? '' : 'noterminate,nodone';
|
||||
$params = ($type == 'all') ? ',noreleased' : 'noterminate,nodone,noreleased';
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, $params, $executionID, 'execution', $build);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
return print(html::select($varName, $builds, $build, "class='form-control'"));
|
||||
}
|
||||
if($varName == 'testTaskBuild')
|
||||
{
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, 'noempty,notrunk', $executionID, 'execution');
|
||||
$builds = $this->build->getBuildPairs($productID, $branch, 'noempty,notrunk', $executionID, 'execution', '', false);
|
||||
if($isJsonView) return print(json_encode($builds));
|
||||
|
||||
if(empty($builds))
|
||||
@@ -543,7 +549,7 @@ class build extends control
|
||||
{
|
||||
$lastBuild = $this->build->getLast($executionID, $projectID);
|
||||
if($lastBuild)
|
||||
{
|
||||
{
|
||||
echo "<div class='help-block'> " . $this->lang->build->last . ": <a class='code label label-badge label-light' id='lastBuildBtn'>" . $lastBuild->name . "</a></div>";
|
||||
}
|
||||
else
|
||||
@@ -714,7 +720,7 @@ class build extends control
|
||||
$this->config->bug->search['params']['plan']['values'] = $this->loadModel('productplan')->getPairsForStory($build->product, $build->branch, 'skipParent');
|
||||
$this->config->bug->search['params']['module']['values'] = $this->loadModel('tree')->getOptionMenu($build->product, 'bug', 0, $build->branch);
|
||||
$this->config->bug->search['params']['execution']['values'] = $this->loadModel('product')->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project);
|
||||
$this->config->bug->search['params']['openedBuild']['values'] = $this->build->getBuildPairs($build->product, $branch = 'all', $params = '');
|
||||
$this->config->bug->search['params']['openedBuild']['values'] = $this->build->getBuildPairs($build->product, $branch = 'all', $params = 'releasetag');
|
||||
$this->config->bug->search['params']['resolvedBuild']['values'] = $this->config->bug->search['params']['openedBuild']['values'];
|
||||
|
||||
unset($this->config->bug->search['fields']['product']);
|
||||
|
||||
@@ -36,6 +36,7 @@ $lang->build->execution = $lang->executionCommon;
|
||||
$lang->build->integrated = 'Integrated';
|
||||
$lang->build->singled = 'Singled';
|
||||
$lang->build->builds = 'Included Builds';
|
||||
$lang->build->releasedBuild = 'Released Build';
|
||||
$lang->build->name = 'Name';
|
||||
$lang->build->date = 'Datum';
|
||||
$lang->build->builder = 'Builder';
|
||||
@@ -60,6 +61,7 @@ $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the vers
|
||||
$lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}";
|
||||
$lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds";
|
||||
$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version";
|
||||
$lang->build->notice->createTest = "The execution of this version has been deleted, and the test cannot be submitted";
|
||||
|
||||
$lang->build->finishStories = " %s {$lang->SRCommon} sind abgeschlossen.";
|
||||
$lang->build->resolvedBugs = ' %s Bugs sind gelöst.';
|
||||
|
||||
@@ -36,6 +36,7 @@ $lang->build->execution = $lang->executionCommon;
|
||||
$lang->build->integrated = 'Integrated';
|
||||
$lang->build->singled = 'Singled';
|
||||
$lang->build->builds = 'Included Builds';
|
||||
$lang->build->releasedBuild = 'Released Build';
|
||||
$lang->build->name = 'Name';
|
||||
$lang->build->date = 'Date';
|
||||
$lang->build->builder = 'Builder';
|
||||
@@ -60,6 +61,7 @@ $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the vers
|
||||
$lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}";
|
||||
$lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds";
|
||||
$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version";
|
||||
$lang->build->notice->createTest = "The execution of this version has been deleted, and the test cannot be submitted";
|
||||
|
||||
$lang->build->finishStories = " Finished {$lang->SRCommon} %s";
|
||||
$lang->build->resolvedBugs = ' Resolved Bug %s';
|
||||
|
||||
@@ -36,6 +36,7 @@ $lang->build->execution = $lang->executionCommon;
|
||||
$lang->build->integrated = 'Integrated';
|
||||
$lang->build->singled = 'Singled';
|
||||
$lang->build->builds = 'Included Builds';
|
||||
$lang->build->releasedBuild = 'Released Build';
|
||||
$lang->build->name = 'Nom';
|
||||
$lang->build->date = 'Date';
|
||||
$lang->build->builder = 'Builder';
|
||||
@@ -60,6 +61,7 @@ $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the vers
|
||||
$lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}";
|
||||
$lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds";
|
||||
$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version";
|
||||
$lang->build->notice->createTest = "The execution of this version has been deleted, and the test cannot be submitted";
|
||||
|
||||
$lang->build->finishStories = " {$lang->SRCommon} Terminées %s";
|
||||
$lang->build->resolvedBugs = ' Bugs Résolus %s';
|
||||
|
||||
@@ -54,6 +54,7 @@ $lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the vers
|
||||
$lang->build->notice->changeExecution = "The version of the submitted test order cannot be modified {$lang->executionCommon}";
|
||||
$lang->build->notice->changeBuilds = "The version of the submitted test order cannot be modified builds";
|
||||
$lang->build->notice->autoRelation = "The completed requirements, resolved bugs, and generated bugs under the relevant version will be automatically associated with the project version";
|
||||
$lang->build->notice->createTest = "The execution of this version has been deleted, and the test cannot be submitted";
|
||||
|
||||
$lang->build->finishStories = " {$lang->SRCommon} đã kết thúc %s";
|
||||
$lang->build->resolvedBugs = ' Bug đã giải quyết %s';
|
||||
|
||||
@@ -28,7 +28,7 @@ $lang->build->confirmUnlinkBug = "您确认移除该Bug吗?";
|
||||
$lang->build->basicInfo = '基本信息';
|
||||
|
||||
$lang->build->id = 'ID';
|
||||
$lang->build->product = $lang->productCommon;
|
||||
$lang->build->product = '所属' . $lang->productCommon;
|
||||
$lang->build->project = '所属项目';
|
||||
$lang->build->branch = '平台/分支';
|
||||
$lang->build->branchName = '所属%s';
|
||||
@@ -36,6 +36,7 @@ $lang->build->execution = '所属' . $lang->executionCommon;
|
||||
$lang->build->integrated = '集成版本';
|
||||
$lang->build->singled = '单一版本';
|
||||
$lang->build->builds = '包含版本';
|
||||
$lang->build->releasedBuild = '发布版本';
|
||||
$lang->build->name = '名称编号';
|
||||
$lang->build->date = '打包日期';
|
||||
$lang->build->builder = '构建者';
|
||||
@@ -60,6 +61,7 @@ $lang->build->notice->changeProduct = "已经关联{$lang->SRCommon}、Bug或
|
||||
$lang->build->notice->changeExecution = "提交测试单的版本,不能修改其所属{$lang->executionCommon}";
|
||||
$lang->build->notice->changeBuilds = "提交测试单的版本,不能修改关联版本";
|
||||
$lang->build->notice->autoRelation = "相关版本下完成的需求、解决的Bug、产生的Bug将会自动关联到项目版本中";
|
||||
$lang->build->notice->createTest = "该版本所属执行已删除,不能提交测试";
|
||||
|
||||
$lang->build->finishStories = " 本次共完成 %s 个{$lang->SRCommon}";
|
||||
$lang->build->resolvedBugs = ' 本次共解决 %s 个Bug';
|
||||
|
||||
+44
-5
@@ -181,6 +181,38 @@ class buildModel extends model
|
||||
return $this->getExecutionBuilds($executionID, 'bysearch', $buildQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter linked stories or bugs builds.
|
||||
*
|
||||
* @param array $buildIdList
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function filterLinked($buildIdList)
|
||||
{
|
||||
$linkeds = array();
|
||||
$buildList = $this->getByList($buildIdList);
|
||||
foreach($buildList as $build)
|
||||
{
|
||||
if(!$build->execution && !empty($build->builds))
|
||||
{
|
||||
$childBuilds = $this->getByList($build->builds);
|
||||
foreach($childBuilds as $childBuild)
|
||||
{
|
||||
$childBuild->stories = trim($childBuild->stories, ',');
|
||||
$childBuild->bugs = trim($childBuild->bugs, ',');
|
||||
|
||||
if($childBuild->stories) $build->stories .= ',' . $childBuild->stories;
|
||||
if($childBuild->bugs) $build->bugs .= ',' . $childBuild->bugs;
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($build->stories) or !empty($build->bugs)) $linkeds[$build->id] = $build->id;
|
||||
}
|
||||
|
||||
return $linkeds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get story builds.
|
||||
*
|
||||
@@ -202,7 +234,7 @@ class buildModel extends model
|
||||
*
|
||||
* @param int|array $products
|
||||
* @param string|int $branch
|
||||
* @param string $params noempty|notrunk|noterminate|withbranch|hasproject|noDeleted|singled|withreleased, can be a set of them
|
||||
* @param string $params noempty|notrunk|noterminate|withbranch|hasproject|noDeleted|singled|noreleased|releasedtag, can be a set of them
|
||||
* @param string|int $objectID
|
||||
* @param string $objectType
|
||||
* @param int|array $buildIdList
|
||||
@@ -227,7 +259,7 @@ class buildModel extends model
|
||||
}
|
||||
|
||||
$branchs = strpos($params, 'separate') === false ? "0,$branch" : $branch;
|
||||
$allBuilds = $this->dao->select('t1.id, t1.name, t1.date, t1.deleted, t2.status as objectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName, t5.type as productType')->from(TABLE_BUILD)->alias('t1')
|
||||
$allBuilds = $this->dao->select('t1.id, t1.name, t1.execution, t1.date, t1.deleted, t2.status as objectStatus, t3.id as releaseID, t3.status as releaseStatus, t4.name as branchName, t5.type as productType')->from(TABLE_BUILD)->alias('t1')
|
||||
->beginIF($objectType === 'execution')->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')->fi()
|
||||
->beginIF($objectType === 'project')->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')->fi()
|
||||
->leftJoin(TABLE_RELEASE)->alias('t3')->on("FIND_IN_SET(t1.id,t3.build)")
|
||||
@@ -243,6 +275,8 @@ class buildModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('t1.branch')->in("$branchs")->fi()
|
||||
->orderBy('t1.date desc, t1.id desc')->fetchAll('id');
|
||||
|
||||
$deletedExecutions = $this->dao->select('id, deleted')->from(TABLE_EXECUTION)->where('type')->eq('sprint')->andWhere('deleted')->eq('1')->fetchPairs();
|
||||
|
||||
/* Set builds and filter done executions and terminate releases. */
|
||||
$builds = array();
|
||||
$buildIdList = array();
|
||||
@@ -251,6 +285,7 @@ class buildModel extends model
|
||||
{
|
||||
if(empty($build->releaseID) and (strpos($params, 'nodone') !== false) and ($build->objectStatus === 'done')) continue;
|
||||
if((strpos($params, 'noterminate') !== false) and ($build->releaseStatus === 'terminate')) continue;
|
||||
if((strpos($params, 'withexecution') !== false) and $build->execution and isset($executions[$build->execution])) continue;
|
||||
|
||||
if($build->deleted == 1) $build->name .= ' (' . $this->lang->build->deleted . ')';
|
||||
$branchName = $build->branchName ? $build->branchName : $this->lang->branch->main;
|
||||
@@ -292,12 +327,13 @@ class buildModel extends model
|
||||
$releaseName = $release->name;
|
||||
$branchName = $release->branchName ? $release->branchName : $this->lang->branch->main;
|
||||
if($release->productType != 'normal') $releaseName = (strpos($params, 'withbranch') !== false ? $branchName . '/' : '') . $releaseName;
|
||||
if(strpos($params, 'releasetag') !== false) $releaseName = "[{$this->lang->build->releasedBuild}] " . $releaseName;
|
||||
$builds[$release->date][$release->shadow] = $releaseName;
|
||||
foreach(explode(',', trim($release->build, ',')) as $buildID)
|
||||
{
|
||||
if(!isset($allBuilds[$buildID])) continue;
|
||||
$build = $allBuilds[$buildID];
|
||||
if(strpos($params, 'withreleased') === false) unset($builds[$build->date][$buildID]);
|
||||
if(strpos($params, 'noreleased') !== false) unset($builds[$build->date][$buildID]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -621,7 +657,7 @@ class buildModel extends model
|
||||
{
|
||||
$action = strtolower($action);
|
||||
|
||||
if($module == 'testtask' && $action == 'create') return !!$object->execution;
|
||||
if($module == 'testtask' and $action == 'create') return !$object->executionDeleted;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -651,11 +687,14 @@ class buildModel extends model
|
||||
{
|
||||
$executionID = $tab == 'execution' ? $extraParams['executionID'] : $build->execution;
|
||||
$execution = $this->loadModel('execution')->getByID($executionID);
|
||||
$build->executionDeleted = $execution ? $execution->deleted : 0;
|
||||
|
||||
$testtaskApp = (!empty($execution->type) and $execution->type == 'kanban') ? 'data-app="qa"' : "data-app='{$tab}'";
|
||||
|
||||
if(common::hasPriv($module, 'linkstory') and common::canBeChanged('build', $build)) $menu .= $this->buildMenu($module, 'view', "{$params}&type=story&link=true", $build, $type, 'link', '', '', '', "data-app={$tab}", $this->lang->build->linkStory);
|
||||
|
||||
$menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id&projectID=$build->project", $build, $type, 'bullhorn', '', '', '', $testtaskApp);
|
||||
$title = ($execution and $execution->deleted === '1') ? $this->lang->build->notice->createTest : '';
|
||||
$menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id&projectID=$build->project", $build, $type, 'bullhorn', '', '', '', $testtaskApp, $title);
|
||||
|
||||
if($tab == 'execution' and !empty($execution->type) and $execution->type != 'kanban') $menu .= $this->buildMenu('execution', 'bug', "execution={$extraParams['executionID']}&productID={$extraParams['productID']}&branchID=all&orderBy=status&build=$build->id", $build, $type, '', '', '', '', $this->lang->execution->viewBug);
|
||||
if($tab == 'project' or empty($execution->type) or $execution->type == 'kanban') $menu .= $this->buildMenu($module, 'view', "{$params}&type=generatedBug", $build, $type, 'bug', '', '', '', "data-app='$tab'", $this->lang->project->bug);
|
||||
|
||||
@@ -26,7 +26,11 @@ tbody tr td:first-child input {display: none;}
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php $browseLink = $this->session->buildList ? $this->session->buildList : $this->createLink('execution', 'build', "executionID=$build->execution");?>
|
||||
<?php common::printBack($browseLink, 'btn btn-secondary');?>
|
||||
<?php
|
||||
$dataApp = strpos($browseLink, 'release') !== false ? 'data-app=product' : '';
|
||||
if(strpos($browseLink, 'projectrelease') !== false) $dataApp = 'data-app=project';
|
||||
?>
|
||||
<?php common::printBack($browseLink, 'btn btn-secondary', $dataApp);?>
|
||||
<div class='divider'></div>
|
||||
<div class='page-title'>
|
||||
<span title='<?php echo $build->name;?>'>
|
||||
|
||||
@@ -1,89 +1,91 @@
|
||||
<?php
|
||||
$lang->common = new stdclass();
|
||||
$lang->index = new stdclass();
|
||||
$lang->my = new stdclass();
|
||||
$lang->todo = new stdclass();
|
||||
$lang->program = new stdclass();
|
||||
$lang->programplan = new stdclass();
|
||||
$lang->product = new stdclass();
|
||||
$lang->project = new stdclass();
|
||||
$lang->design = new stdclass();
|
||||
$lang->stage = new stdclass();
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->waterfall = new stdclass();
|
||||
$lang->execution = new stdclass();
|
||||
$lang->kanban = new stdclass();
|
||||
$lang->story = new stdclass();
|
||||
$lang->requirement = new stdclass();
|
||||
$lang->release = new stdclass();
|
||||
$lang->branch = new stdclass();
|
||||
$lang->productplan = new stdclass();
|
||||
$lang->measurement = new stdclass();
|
||||
$lang->review = new stdclass();
|
||||
$lang->milestone = new stdclass();
|
||||
$lang->qa = new stdclass();
|
||||
$lang->doc = new stdclass();
|
||||
$lang->system = new stdclass();
|
||||
$lang->testcase = new stdclass();
|
||||
$lang->testtask = new stdclass();
|
||||
$lang->testreport = new stdclass();
|
||||
$lang->score = new stdclass();
|
||||
$lang->auditplan = new stdclass();
|
||||
$lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->task = new stdclass();
|
||||
$lang->build = new stdclass();
|
||||
$lang->bug = new stdclass();
|
||||
$lang->company = new stdclass();
|
||||
$lang->dept = new stdclass();
|
||||
$lang->group = new stdclass();
|
||||
$lang->user = new stdclass();
|
||||
$lang->report = new stdclass();
|
||||
$lang->repo = new stdclass();
|
||||
$lang->jenkins = new stdclass();
|
||||
$lang->gitlab = new stdclass();
|
||||
$lang->gitea = new stdclass();
|
||||
$lang->gogs = new stdclass();
|
||||
$lang->mr = new stdclass();
|
||||
$lang->compile = new stdclass();
|
||||
$lang->job = new stdclass();
|
||||
$lang->svn = new stdclass();
|
||||
$lang->git = new stdclass();
|
||||
$lang->subject = new stdclass();
|
||||
$lang->company = new stdclass();
|
||||
$lang->admin = new stdclass();
|
||||
$lang->convert = new stdclass();
|
||||
$lang->upgrade = new stdclass();
|
||||
$lang->action = new stdclass();
|
||||
$lang->backup = new stdclass();
|
||||
$lang->extension = new stdclass();
|
||||
$lang->custom = new stdclass();
|
||||
$lang->mail = new stdclass();
|
||||
$lang->cron = new stdclass();
|
||||
$lang->dev = new stdclass();
|
||||
$lang->entry = new stdclass();
|
||||
$lang->webhook = new stdclass();
|
||||
$lang->message = new stdclass();
|
||||
$lang->search = new stdclass();
|
||||
$lang->devops = new stdclass();
|
||||
$lang->team = new stdclass();
|
||||
$lang->automation = new stdclass();
|
||||
$lang->personnel = new stdclass();
|
||||
$lang->mail = new stdclass();
|
||||
$lang->testsuite = new stdclass();
|
||||
$lang->caselib = new stdclass();
|
||||
$lang->ci = new stdclass();
|
||||
$lang->datatable = new stdclass();
|
||||
$lang->tree = new stdclass();
|
||||
$lang->api = new stdclass();
|
||||
$lang->file = new stdclass();
|
||||
$lang->misc = new stdclass();
|
||||
$lang->acl = new stdclass();
|
||||
$lang->curd = new stdclass();
|
||||
$lang->sonarqube = new stdclass();
|
||||
$lang->app = new stdclass();
|
||||
$lang->common = new stdclass();
|
||||
$lang->index = new stdclass();
|
||||
$lang->my = new stdclass();
|
||||
$lang->todo = new stdclass();
|
||||
$lang->program = new stdclass();
|
||||
$lang->programplan = new stdclass();
|
||||
$lang->product = new stdclass();
|
||||
$lang->project = new stdclass();
|
||||
$lang->design = new stdclass();
|
||||
$lang->stage = new stdclass();
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->waterfall = new stdclass();
|
||||
$lang->execution = new stdclass();
|
||||
$lang->kanban = new stdclass();
|
||||
$lang->story = new stdclass();
|
||||
$lang->requirement = new stdclass();
|
||||
$lang->release = new stdclass();
|
||||
$lang->branch = new stdclass();
|
||||
$lang->productplan = new stdclass();
|
||||
$lang->measurement = new stdclass();
|
||||
$lang->review = new stdclass();
|
||||
$lang->milestone = new stdclass();
|
||||
$lang->qa = new stdclass();
|
||||
$lang->doc = new stdclass();
|
||||
$lang->system = new stdclass();
|
||||
$lang->testcase = new stdclass();
|
||||
$lang->testtask = new stdclass();
|
||||
$lang->testreport = new stdclass();
|
||||
$lang->score = new stdclass();
|
||||
$lang->auditplan = new stdclass();
|
||||
$lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->task = new stdclass();
|
||||
$lang->build = new stdclass();
|
||||
$lang->bug = new stdclass();
|
||||
$lang->company = new stdclass();
|
||||
$lang->dept = new stdclass();
|
||||
$lang->group = new stdclass();
|
||||
$lang->user = new stdclass();
|
||||
$lang->report = new stdclass();
|
||||
$lang->repo = new stdclass();
|
||||
$lang->jenkins = new stdclass();
|
||||
$lang->gitlab = new stdclass();
|
||||
$lang->gitea = new stdclass();
|
||||
$lang->gogs = new stdclass();
|
||||
$lang->mr = new stdclass();
|
||||
$lang->compile = new stdclass();
|
||||
$lang->job = new stdclass();
|
||||
$lang->svn = new stdclass();
|
||||
$lang->git = new stdclass();
|
||||
$lang->subject = new stdclass();
|
||||
$lang->company = new stdclass();
|
||||
$lang->admin = new stdclass();
|
||||
$lang->convert = new stdclass();
|
||||
$lang->upgrade = new stdclass();
|
||||
$lang->action = new stdclass();
|
||||
$lang->backup = new stdclass();
|
||||
$lang->extension = new stdclass();
|
||||
$lang->custom = new stdclass();
|
||||
$lang->mail = new stdclass();
|
||||
$lang->cron = new stdclass();
|
||||
$lang->dev = new stdclass();
|
||||
$lang->entry = new stdclass();
|
||||
$lang->webhook = new stdclass();
|
||||
$lang->message = new stdclass();
|
||||
$lang->search = new stdclass();
|
||||
$lang->devops = new stdclass();
|
||||
$lang->team = new stdclass();
|
||||
$lang->automation = new stdclass();
|
||||
$lang->zahost = new stdclass();
|
||||
$lang->zanode = new stdclass();
|
||||
$lang->personnel = new stdclass();
|
||||
$lang->mail = new stdclass();
|
||||
$lang->testsuite = new stdclass();
|
||||
$lang->caselib = new stdclass();
|
||||
$lang->ci = new stdclass();
|
||||
$lang->datatable = new stdclass();
|
||||
$lang->tree = new stdclass();
|
||||
$lang->api = new stdclass();
|
||||
$lang->file = new stdclass();
|
||||
$lang->misc = new stdclass();
|
||||
$lang->acl = new stdclass();
|
||||
$lang->curd = new stdclass();
|
||||
$lang->sonarqube = new stdclass();
|
||||
$lang->app = new stdclass();
|
||||
|
||||
$lang->projectbuild = new stdclass();
|
||||
$lang->projectrelease = new stdclass();
|
||||
|
||||
+51
-49
@@ -155,55 +155,57 @@ $lang->code = 'Code';
|
||||
$lang->pri = 'Priority';
|
||||
$lang->delayed = 'Delayed';
|
||||
|
||||
$lang->common->common = 'Standard Module';
|
||||
$lang->common->story = 'Story';
|
||||
$lang->my->common = 'My';
|
||||
$lang->program->common = 'Program';
|
||||
$lang->product->common = 'Product';
|
||||
$lang->project->common = 'Project';
|
||||
$lang->execution->common = 'Execution';
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->qa->common = 'QA';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = 'Doc';
|
||||
$lang->repo->common = 'Code';
|
||||
$lang->repo->codeRepo = 'Code Repo';
|
||||
$lang->report->common = 'Statistics';
|
||||
$lang->system->common = 'System';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->story->common = 'Story';
|
||||
$lang->task->common = 'Task';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = 'Testcase';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->score->common = 'Score';
|
||||
$lang->build->common = 'Build';
|
||||
$lang->testreport->common = 'Report';
|
||||
$lang->automation->common = 'Automation';
|
||||
$lang->team->common = 'Team';
|
||||
$lang->user->common = 'User';
|
||||
$lang->custom->common = 'Custom';
|
||||
$lang->custom->mode = 'Mode';
|
||||
$lang->extension->common = 'Extension';
|
||||
$lang->company->common = 'Company';
|
||||
$lang->dept->common = 'Dept';
|
||||
$lang->upgrade->common = 'Update';
|
||||
$lang->program->list = 'Program List';
|
||||
$lang->program->kanban = 'Program Kanban';
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->HLDS = 'HLDS';
|
||||
$lang->design->DDS = 'DDS';
|
||||
$lang->design->DBDS = 'DBDS';
|
||||
$lang->design->ADS = 'ADS';
|
||||
$lang->stage->common = 'Stage';
|
||||
$lang->stage->list = 'Stage List';
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
$lang->review->common = 'Review';
|
||||
$lang->common->common = 'Standard Module';
|
||||
$lang->common->story = 'Story';
|
||||
$lang->my->common = 'My';
|
||||
$lang->program->common = 'Program';
|
||||
$lang->product->common = 'Product';
|
||||
$lang->project->common = 'Project';
|
||||
$lang->execution->common = 'Execution';
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->qa->common = 'QA';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = 'Doc';
|
||||
$lang->repo->common = 'Code';
|
||||
$lang->repo->codeRepo = 'Code Repo';
|
||||
$lang->report->common = 'Statistics';
|
||||
$lang->system->common = 'System';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->story->common = 'Story';
|
||||
$lang->task->common = 'Task';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = 'Testcase';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->score->common = 'Score';
|
||||
$lang->build->common = 'Build';
|
||||
$lang->testreport->common = 'Report';
|
||||
$lang->automation->common = 'Automation:';
|
||||
$lang->zahost->common = 'ZAhost';
|
||||
$lang->zanode->common = 'ZAnode';
|
||||
$lang->team->common = 'Team';
|
||||
$lang->user->common = 'User';
|
||||
$lang->custom->common = 'Custom';
|
||||
$lang->custom->mode = 'Mode';
|
||||
$lang->extension->common = 'Extension';
|
||||
$lang->company->common = 'Company';
|
||||
$lang->dept->common = 'Dept';
|
||||
$lang->upgrade->common = 'Update';
|
||||
$lang->program->list = 'Program List';
|
||||
$lang->program->kanban = 'Program Kanban';
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->HLDS = 'HLDS';
|
||||
$lang->design->DDS = 'DDS';
|
||||
$lang->design->DBDS = 'DBDS';
|
||||
$lang->design->ADS = 'ADS';
|
||||
$lang->stage->common = 'Stage';
|
||||
$lang->stage->list = 'Stage List';
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
$lang->review->common = 'Review';
|
||||
|
||||
$lang->personnel->common = 'Member';
|
||||
$lang->personnel->invest = 'Investment';
|
||||
|
||||
+51
-49
@@ -155,55 +155,57 @@ $lang->code = 'Code';
|
||||
$lang->pri = 'Priority';
|
||||
$lang->delayed = 'Delayed';
|
||||
|
||||
$lang->common->common = 'Common Module';
|
||||
$lang->common->story = 'Story';
|
||||
$lang->my->common = 'My';
|
||||
$lang->program->common = 'Program';
|
||||
$lang->product->common = 'Product';
|
||||
$lang->project->common = 'Project';
|
||||
$lang->execution->common = 'Execution';
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->qa->common = 'QA';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = 'Doc';
|
||||
$lang->repo->common = 'Code';
|
||||
$lang->repo->codeRepo = 'Code Repo';
|
||||
$lang->report->common = 'Statistics';
|
||||
$lang->system->common = 'System';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->story->common = 'Story';
|
||||
$lang->task->common = 'Task';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = 'Testcase';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->score->common = 'Score';
|
||||
$lang->build->common = 'Build';
|
||||
$lang->testreport->common = 'Report';
|
||||
$lang->automation->common = 'Automation';
|
||||
$lang->team->common = 'Team';
|
||||
$lang->user->common = 'User';
|
||||
$lang->custom->common = 'Custom';
|
||||
$lang->custom->mode = 'Mode';
|
||||
$lang->extension->common = 'Extension';
|
||||
$lang->company->common = 'Company';
|
||||
$lang->dept->common = 'Dept';
|
||||
$lang->upgrade->common = 'Update';
|
||||
$lang->program->list = 'Program List';
|
||||
$lang->program->kanban = 'Program Kanban';
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->HLDS = 'Preliminary Design';
|
||||
$lang->design->DDS = 'Detailed Design';
|
||||
$lang->design->DBDS = 'Database Design';
|
||||
$lang->design->ADS = 'Interface Design';
|
||||
$lang->stage->common = 'Stage';
|
||||
$lang->stage->list = 'Stage List';
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
$lang->review->common = 'Review';
|
||||
$lang->common->common = 'Common Module';
|
||||
$lang->common->story = 'Story';
|
||||
$lang->my->common = 'My';
|
||||
$lang->program->common = 'Program';
|
||||
$lang->product->common = 'Product';
|
||||
$lang->project->common = 'Project';
|
||||
$lang->execution->common = 'Execution';
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->qa->common = 'QA';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = 'Doc';
|
||||
$lang->repo->common = 'Code';
|
||||
$lang->repo->codeRepo = 'Code Repo';
|
||||
$lang->report->common = 'Statistics';
|
||||
$lang->system->common = 'System';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->story->common = 'Story';
|
||||
$lang->task->common = 'Task';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = 'Testcase';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->score->common = 'Score';
|
||||
$lang->build->common = 'Build';
|
||||
$lang->testreport->common = 'Report';
|
||||
$lang->automation->common = 'Automation:';
|
||||
$lang->zahost->common = 'ZAhost';
|
||||
$lang->zanode->common = 'ZAnode';
|
||||
$lang->team->common = 'Team';
|
||||
$lang->user->common = 'User';
|
||||
$lang->custom->common = 'Custom';
|
||||
$lang->custom->mode = 'Mode';
|
||||
$lang->extension->common = 'Extension';
|
||||
$lang->company->common = 'Company';
|
||||
$lang->dept->common = 'Dept';
|
||||
$lang->upgrade->common = 'Update';
|
||||
$lang->program->list = 'Program List';
|
||||
$lang->program->kanban = 'Program Kanban';
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->HLDS = 'Preliminary Design';
|
||||
$lang->design->DDS = 'Detailed Design';
|
||||
$lang->design->DBDS = 'Database Design';
|
||||
$lang->design->ADS = 'Interface Design';
|
||||
$lang->stage->common = 'Stage';
|
||||
$lang->stage->list = 'Stage List';
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
$lang->review->common = 'Review';
|
||||
|
||||
$lang->personnel->common = 'Member';
|
||||
$lang->personnel->invest = 'Investment';
|
||||
|
||||
+51
-49
@@ -155,55 +155,57 @@ $lang->code = 'Code';
|
||||
$lang->pri = 'Priority';
|
||||
$lang->delayed = 'Delayed';
|
||||
|
||||
$lang->common->common = 'Module Commun';
|
||||
$lang->common->story = 'Story';
|
||||
$lang->my->common = 'My';
|
||||
$lang->program->common = 'Program';
|
||||
$lang->product->common = 'Product';
|
||||
$lang->project->common = 'Project';
|
||||
$lang->execution->common = 'Execution';
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->qa->common = 'QA';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = 'Doc';
|
||||
$lang->repo->common = 'Code';
|
||||
$lang->repo->codeRepo = 'Code Repo';
|
||||
$lang->report->common = 'Statistics';
|
||||
$lang->system->common = 'System';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->story->common = 'Story';
|
||||
$lang->task->common = 'Task';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = 'Testcase';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->score->common = 'Score';
|
||||
$lang->build->common = 'Build';
|
||||
$lang->testreport->common = 'Report';
|
||||
$lang->automation->common = 'Automation';
|
||||
$lang->team->common = 'Team';
|
||||
$lang->user->common = 'User';
|
||||
$lang->custom->common = 'Custom';
|
||||
$lang->custom->mode = 'Mode';
|
||||
$lang->extension->common = 'Extension';
|
||||
$lang->company->common = 'Company';
|
||||
$lang->dept->common = 'Dept';
|
||||
$lang->upgrade->common = 'Update';
|
||||
$lang->program->list = 'Program List';
|
||||
$lang->program->kanban = 'Program Kanban';
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->HLDS = 'HLDS';
|
||||
$lang->design->DDS = 'DDS';
|
||||
$lang->design->DBDS = 'DBDS';
|
||||
$lang->design->ADS = 'ADS';
|
||||
$lang->stage->common = 'Stage';
|
||||
$lang->stage->list = 'Stage List';
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
$lang->review->common = 'Review';
|
||||
$lang->common->common = 'Module Commun';
|
||||
$lang->common->story = 'Story';
|
||||
$lang->my->common = 'My';
|
||||
$lang->program->common = 'Program';
|
||||
$lang->product->common = 'Product';
|
||||
$lang->project->common = 'Project';
|
||||
$lang->execution->common = 'Execution';
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->qa->common = 'QA';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = 'Doc';
|
||||
$lang->repo->common = 'Code';
|
||||
$lang->repo->codeRepo = 'Code Repo';
|
||||
$lang->report->common = 'Statistics';
|
||||
$lang->system->common = 'System';
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->story->common = 'Story';
|
||||
$lang->task->common = 'Task';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = 'Testcase';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->score->common = 'Score';
|
||||
$lang->build->common = 'Build';
|
||||
$lang->testreport->common = 'Report';
|
||||
$lang->automation->common = 'Automation:';
|
||||
$lang->zahost->common = 'ZAhost';
|
||||
$lang->zanode->common = 'ZAnode';
|
||||
$lang->team->common = 'Team';
|
||||
$lang->user->common = 'User';
|
||||
$lang->custom->common = 'Custom';
|
||||
$lang->custom->mode = 'Mode';
|
||||
$lang->extension->common = 'Extension';
|
||||
$lang->company->common = 'Company';
|
||||
$lang->dept->common = 'Dept';
|
||||
$lang->upgrade->common = 'Update';
|
||||
$lang->program->list = 'Program List';
|
||||
$lang->program->kanban = 'Program Kanban';
|
||||
$lang->design->common = 'Design';
|
||||
$lang->design->HLDS = 'HLDS';
|
||||
$lang->design->DDS = 'DDS';
|
||||
$lang->design->DBDS = 'DBDS';
|
||||
$lang->design->ADS = 'ADS';
|
||||
$lang->stage->common = 'Stage';
|
||||
$lang->stage->list = 'Stage List';
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
$lang->review->common = 'Review';
|
||||
|
||||
$lang->personnel->common = 'Member';
|
||||
$lang->personnel->invest = 'Investment';
|
||||
|
||||
+23
-20
@@ -443,14 +443,16 @@ $lang->project->noMultiple->kanban->menuOrder[15] = 'settings';
|
||||
|
||||
/* QA menu.*/
|
||||
$lang->qa->menu = new stdclass();
|
||||
$lang->qa->menu->index = array('link' => "$lang->dashboard|qa|index");
|
||||
$lang->qa->menu->bug = array('link' => "{$lang->bug->common}|bug|browse|productID=%s", 'subModule' => 'bug');
|
||||
$lang->qa->menu->testcase = array('link' => "{$lang->testcase->shortCommon}|testcase|browse|productID=%s", 'subModule' => 'testcase,story');
|
||||
$lang->qa->menu->testsuite = array('link' => "{$lang->testcase->testsuite}|testsuite|browse|productID=%s", 'subModule' => 'testsuite');
|
||||
$lang->qa->menu->testtask = array('link' => "{$lang->testtask->common}|testtask|browse|productID=%s", 'subModule' => 'testtask', 'alias' => 'view,edit,linkcase,cases,start,close,batchrun,groupcase,report,importunitresult');
|
||||
$lang->qa->menu->report = array('link' => "{$lang->testreport->common}|testreport|browse|productID=%s", 'subModule' => 'testreport');
|
||||
$lang->qa->menu->caselib = array('link' => "{$lang->testcase->caselib}|caselib|browse|libID=0", 'subModule' => 'caselib');
|
||||
$lang->qa->menu->automation = array('link' => "{$lang->automation->common}|automation|browse|productID=%s", 'subModule' => 'automation', 'alias' => '');
|
||||
$lang->qa->menu->index = array('link' => "$lang->dashboard|qa|index");
|
||||
$lang->qa->menu->bug = array('link' => "{$lang->bug->common}|bug|browse|productID=%s", 'subModule' => 'bug');
|
||||
$lang->qa->menu->testcase = array('link' => "{$lang->testcase->shortCommon}|testcase|browse|productID=%s", 'subModule' => 'testcase,story');
|
||||
$lang->qa->menu->testsuite = array('link' => "{$lang->testcase->testsuite}|testsuite|browse|productID=%s", 'subModule' => 'testsuite');
|
||||
$lang->qa->menu->testtask = array('link' => "{$lang->testtask->common}|testtask|browse|productID=%s", 'subModule' => 'testtask', 'alias' => 'view,edit,linkcase,cases,start,close,batchrun,groupcase,report,importunitresult');
|
||||
$lang->qa->menu->report = array('link' => "{$lang->testreport->common}|testreport|browse|productID=%s", 'subModule' => 'testreport');
|
||||
$lang->qa->menu->caselib = array('link' => "{$lang->testcase->caselib}|caselib|browse|libID=0", 'subModule' => 'caselib');
|
||||
$lang->qa->menu->automation = array('link' => "{$lang->automation->common}|project|other|productID=%s", 'subModule' => 'automation', 'alias' => '', 'class' => "qa-automation-menu");
|
||||
$lang->qa->menu->zahost = array('link' => "{$lang->zahost->common}|zahost|browse", 'subModule' => 'zahost');
|
||||
$lang->qa->menu->zanode = array('link' => "{$lang->zanode->common}|zanode|browse", 'subModule' => 'zanode');
|
||||
|
||||
/* QA menu order. */
|
||||
$lang->qa->menuOrder[5] = 'product';
|
||||
@@ -464,13 +466,13 @@ $lang->qa->menuOrder[40] = 'caselib';
|
||||
$lang->qa->menuOrder[45] = 'automation';
|
||||
|
||||
// $lang->qa->menu->automation['subMenu'] = new stdclass();
|
||||
// $lang->qa->menu->automation['subMenu']->browse = array('link' => "{$lang->intro}|automation|browse|productID=%s", 'alias' => '');
|
||||
// $lang->qa->menu->automation['subMenu']->browse = array('link' => "{$lang->automation->common}|zahost|browse", 'alias' => 'create');
|
||||
// $lang->qa->menu->automation['subMenu']->framework = array('link' => '框架|automation|framework|productID=%s', 'alias' => '');
|
||||
// $lang->qa->menu->automation['subMenu']->data = array('link' => '数据|automation|date|productID=%s', 'alias' => '');
|
||||
// $lang->qa->menu->automation['subMenu']->interface = array('link' => '接口|automation|interface|productID=%s', 'alias' => '');
|
||||
// $lang->qa->menu->automation['subMenu']->environment = array('link' => '环境|automation|environment|productID=%s', 'alias' => '');
|
||||
|
||||
$lang->qa->dividerMenu = ',bug,testtask,caselib,';
|
||||
$lang->qa->dividerMenu = ',bug,testtask,caselib,automation,';
|
||||
|
||||
/* DevOps menu. */
|
||||
$lang->devops->menu = new stdclass();
|
||||
@@ -717,16 +719,17 @@ $lang->navGroup->api = 'doc';
|
||||
|
||||
$lang->navGroup->report = 'report';
|
||||
|
||||
$lang->navGroup->qa = 'qa';
|
||||
$lang->navGroup->bug = 'qa';
|
||||
$lang->navGroup->testcase = 'qa';
|
||||
$lang->navGroup->testtask = 'qa';
|
||||
$lang->navGroup->automation = 'qa';
|
||||
$lang->navGroup->testreport = 'qa';
|
||||
$lang->navGroup->testcase = 'qa';
|
||||
$lang->navGroup->testtask = 'qa';
|
||||
$lang->navGroup->testsuite = 'qa';
|
||||
$lang->navGroup->caselib = 'qa';
|
||||
$lang->navGroup->qa = 'qa';
|
||||
$lang->navGroup->bug = 'qa';
|
||||
$lang->navGroup->testcase = 'qa';
|
||||
$lang->navGroup->testtask = 'qa';
|
||||
$lang->navGroup->zahost = 'qa';
|
||||
$lang->navGroup->zanode = 'qa';
|
||||
$lang->navGroup->testreport = 'qa';
|
||||
$lang->navGroup->testcase = 'qa';
|
||||
$lang->navGroup->testtask = 'qa';
|
||||
$lang->navGroup->testsuite = 'qa';
|
||||
$lang->navGroup->caselib = 'qa';
|
||||
|
||||
$lang->navGroup->devops = 'devops';
|
||||
$lang->navGroup->repo = 'devops';
|
||||
|
||||
@@ -155,55 +155,57 @@ $lang->code = '代号';
|
||||
$lang->pri = '优先级';
|
||||
$lang->delayed = '已延期';
|
||||
|
||||
$lang->common->common = '公有模块';
|
||||
$lang->common->story = '需求';
|
||||
$lang->my->common = '地盘';
|
||||
$lang->program->common = '项目集';
|
||||
$lang->product->common = '产品';
|
||||
$lang->project->common = '项目';
|
||||
$lang->execution->common = '执行';
|
||||
$lang->kanban->common = '看板';
|
||||
$lang->qa->common = '测试';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = '文档';
|
||||
$lang->repo->common = '代码';
|
||||
$lang->repo->codeRepo = '代码库';
|
||||
$lang->report->common = '统计';
|
||||
$lang->system->common = '组织';
|
||||
$lang->admin->common = '后台';
|
||||
$lang->story->common = $lang->SRCommon;
|
||||
$lang->task->common = '任务';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = '用例';
|
||||
$lang->testtask->common = '测试单';
|
||||
$lang->score->common = '我的积分';
|
||||
$lang->build->common = '版本';
|
||||
$lang->testreport->common = '测试报告';
|
||||
$lang->automation->common = '自动化';
|
||||
$lang->team->common = '团队';
|
||||
$lang->user->common = '用户';
|
||||
$lang->custom->common = '自定义';
|
||||
$lang->custom->mode = '模式';
|
||||
$lang->extension->common = '插件';
|
||||
$lang->company->common = '公司';
|
||||
$lang->dept->common = '部门';
|
||||
$lang->upgrade->common = '升级';
|
||||
$lang->program->list = '项目集列表';
|
||||
$lang->program->kanban = '项目集看板';
|
||||
$lang->design->common = '设计';
|
||||
$lang->design->HLDS = '概要设计';
|
||||
$lang->design->DDS = '详细设计';
|
||||
$lang->design->DBDS = '数据库设计';
|
||||
$lang->design->ADS = '接口设计';
|
||||
$lang->stage->common = '阶段';
|
||||
$lang->stage->list = '阶段列表';
|
||||
$lang->execution->list = "{$lang->executionCommon}列表";
|
||||
$lang->kanban->common = '看板';
|
||||
$lang->backup->common = '备份';
|
||||
$lang->action->trash = '回收站';
|
||||
$lang->app->common = '应用';
|
||||
$lang->app->serverLink = '服务器链接';
|
||||
$lang->review->common = '审批';
|
||||
$lang->common->common = '公有模块';
|
||||
$lang->common->story = '需求';
|
||||
$lang->my->common = '地盘';
|
||||
$lang->program->common = '项目集';
|
||||
$lang->product->common = '产品';
|
||||
$lang->project->common = '项目';
|
||||
$lang->execution->common = '执行';
|
||||
$lang->kanban->common = '看板';
|
||||
$lang->qa->common = '测试';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->doc->common = '文档';
|
||||
$lang->repo->common = '代码';
|
||||
$lang->repo->codeRepo = '代码库';
|
||||
$lang->report->common = '统计';
|
||||
$lang->system->common = '组织';
|
||||
$lang->admin->common = '后台';
|
||||
$lang->story->common = $lang->SRCommon;
|
||||
$lang->task->common = '任务';
|
||||
$lang->bug->common = 'Bug';
|
||||
$lang->testcase->common = '用例';
|
||||
$lang->testtask->common = '测试单';
|
||||
$lang->score->common = '我的积分';
|
||||
$lang->build->common = '版本';
|
||||
$lang->testreport->common = '测试报告';
|
||||
$lang->automation->common = '自动化:';
|
||||
$lang->zahost->common = '宿主机';
|
||||
$lang->zanode->common = '执行节点';
|
||||
$lang->team->common = '团队';
|
||||
$lang->user->common = '用户';
|
||||
$lang->custom->common = '自定义';
|
||||
$lang->custom->mode = '模式';
|
||||
$lang->extension->common = '插件';
|
||||
$lang->company->common = '公司';
|
||||
$lang->dept->common = '部门';
|
||||
$lang->upgrade->common = '升级';
|
||||
$lang->program->list = '项目集列表';
|
||||
$lang->program->kanban = '项目集看板';
|
||||
$lang->design->common = '设计';
|
||||
$lang->design->HLDS = '概要设计';
|
||||
$lang->design->DDS = '详细设计';
|
||||
$lang->design->DBDS = '数据库设计';
|
||||
$lang->design->ADS = '接口设计';
|
||||
$lang->stage->common = '阶段';
|
||||
$lang->stage->list = '阶段列表';
|
||||
$lang->execution->list = "{$lang->executionCommon}列表";
|
||||
$lang->kanban->common = '看板';
|
||||
$lang->backup->common = '备份';
|
||||
$lang->action->trash = '回收站';
|
||||
$lang->app->common = '应用';
|
||||
$lang->app->serverLink = '服务器链接';
|
||||
$lang->review->common = '审批';
|
||||
|
||||
$lang->personnel->common = '人员';
|
||||
$lang->personnel->invest = '投入人员';
|
||||
|
||||
@@ -163,7 +163,8 @@ $lang->testtask->common = '測試單';
|
||||
$lang->score->common = '我的積分';
|
||||
$lang->build->common = '版本';
|
||||
$lang->testreport->common = '測試報告';
|
||||
$lang->automation->common = '自動化';
|
||||
$lang->automation->common = '自動化:';
|
||||
$lang->zahost->common = '宿主機';
|
||||
$lang->team->common = '團隊';
|
||||
$lang->user->common = '用戶';
|
||||
$lang->custom->common = '自定義';
|
||||
|
||||
@@ -2365,6 +2365,8 @@ EOD;
|
||||
*/
|
||||
public function checkSafeFile()
|
||||
{
|
||||
if($this->app->isContainer()) return false;
|
||||
|
||||
if($this->app->getModuleName() == 'upgrade' and $this->session->upgrading) return false;
|
||||
|
||||
$statusFile = $this->app->getAppRoot() . 'www' . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'ok.txt';
|
||||
@@ -3200,6 +3202,7 @@ EOD;
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
|
||||
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
||||
curl_setopt($curl, CURLOPT_HEADER, FALSE);
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 2);
|
||||
curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<style>
|
||||
#successModal #modalLink{color: #2e7fff;text-decoration: underline;}
|
||||
#successModal .modal-dialog .modal-content{border: 2px solid #75e5c4; background-color: #f1fcf9; border-radius: 4px;}
|
||||
#successModal .icon-check-circle{color: #17ce97; margin-right: 10px; font-size: 20px;}
|
||||
#successModal .modal-dialog{width: fit-content;}
|
||||
#successModal .modal-dialog{border-radius: 4px;}
|
||||
#successModal .modal-header{padding:9px 15px 0px; margin:0px; border-bottom:0;}
|
||||
#successModal .modal-dialog .modal-body{padding: 5px 15px 20px 15px;}
|
||||
</style>
|
||||
<div class="modal fade" id="successModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<?php echo html::a($closeLink, '×', '', 'class="close"');?>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<i class="icon-check-circle icon"></i><?php echo $notice;?>
|
||||
<?php $modalLink = !empty($modalLink) ? $modalLink : '';?>
|
||||
<?php echo html::a($modalLink, $buttonName, '', 'id="modalLink"');?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function showModal(url = '')
|
||||
{
|
||||
if(url) $("#modalLink").attr('href', url);
|
||||
$('#successModal').modal('show', 'center');
|
||||
}
|
||||
</script>
|
||||
@@ -652,6 +652,7 @@ class custom extends control
|
||||
$this->view->disabledFeatures = $disabledFeatures;
|
||||
$this->view->enabledScrumFeatures = $enabledScrumFeatures;
|
||||
$this->view->disabledScrumFeatures = $disabledScrumFeatures;
|
||||
$this->view->currentModeTips = sprintf($this->lang->custom->currentModeTips, $this->lang->custom->modeList[$mode], $this->lang->custom->modeList[$mode == 'light' ? 'ALM' : 'light']);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<h2><?php echo $lang->custom->modeManagement;?></h2>
|
||||
</div>
|
||||
<div class='main-table'>
|
||||
<p class='strong'><?php echo sprintf($lang->custom->currentModeTips, $lang->custom->modeList[$mode], $lang->custom->modeList[$mode == 'light' ? 'ALM' : 'light']);?> </p>
|
||||
<p class='strong'><?php echo $currentModeTips;?></p>
|
||||
<table class='table table-bordered'>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -55,15 +55,15 @@
|
||||
<?php endforeach;?>
|
||||
<tr class='text-center select-mode'>
|
||||
<td class='text-left strong'><?php echo $this->lang->custom->selectUsage;?></td>
|
||||
<td>
|
||||
<?php $primaryClass = $mode == 'light' ? '' : 'btn-primary';?>
|
||||
<?php $disabled = $mode == 'light' ? 'disabled' : '';?>
|
||||
<?php echo html::commonButton($lang->custom->useLight, "id='useLight' data-mode='light' $disabled", "btn btn-wide $primaryClass");?>
|
||||
<?php $title = $mode == 'light' ? "title='{$currentModeTips}'" : '';?>
|
||||
<td <?php echo $title;?>>
|
||||
<?php $disabled = $mode == 'light' ? 'disabled' : '';?>
|
||||
<?php echo html::commonButton($lang->custom->useLight, "id='useLight' data-mode='light' $disabled", "btn btn-wide btn-primary");?>
|
||||
</td>
|
||||
<td>
|
||||
<?php $primaryClass = $mode == 'ALM' ? '' : 'btn-primary';?>
|
||||
<?php $disabled = $mode == 'ALM' ? 'disabled' : '';?>
|
||||
<?php echo html::commonButton($lang->custom->useALM, "id='useALM' data-mode='ALM' $disabled", "btn btn-wide $primaryClass");?>
|
||||
<?php $title = $mode == 'ALM' ? "title='{$currentModeTips}'" : '';?>
|
||||
<td <?php echo $title;?>>
|
||||
<?php $disabled = $mode == 'ALM' ? 'disabled' : '';?>
|
||||
<?php echo html::commonButton($lang->custom->useALM, "id='useALM' data-mode='ALM' $disabled", "btn btn-wide btn-primary");?>
|
||||
<?php echo html::hidden('mode', $mode);?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -249,6 +249,7 @@ $lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmUpdateContent = 'You have a document that is not saved from last time. Do you want to continue editing it?';
|
||||
$lang->doc->selectLibType = 'Please select a type of doc library.';
|
||||
$lang->doc->noLibreOffice = 'You does not have access to office conversion settings!';
|
||||
$lang->doc->errorParentChapter = 'The parent chapter cannot be its own chapter or sub chapter!';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Users who can access the selected product can access it.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users who can access the selected product or users in the whiltelist can access it.';
|
||||
|
||||
@@ -249,6 +249,7 @@ $lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmUpdateContent = 'You have a document that is not saved from last time. Do you want to continue editing it?';
|
||||
$lang->doc->selectLibType = 'Please select a type of doc library.';
|
||||
$lang->doc->noLibreOffice = 'You does not have access to office conversion settings!';
|
||||
$lang->doc->errorParentChapter = 'The parent chapter cannot be its own chapter or sub chapter!';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Users who can access the selected product can access it.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users who can access the selected product or users in the whiltelist can access it.';
|
||||
|
||||
@@ -249,6 +249,7 @@ $lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmUpdateContent = 'You have a document that is not saved from last time. Do you want to continue editing it?';
|
||||
$lang->doc->selectLibType = 'Please select a type of doc library.';
|
||||
$lang->doc->noLibreOffice = 'You does not have access to office conversion settings!';
|
||||
$lang->doc->errorParentChapter = 'The parent chapter cannot be its own chapter or sub chapter!';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Les utilisateurs qui ont accès au Product peuvent y accéder.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Les utilisateurs qui ont accès au Product ou les utilisateurs de la Liste Blanche peuvent y accéder.';
|
||||
|
||||
@@ -249,6 +249,7 @@ $lang->doc->errorEmptyLib = '文档库暂无数据。';
|
||||
$lang->doc->confirmUpdateContent = '检查到您有未保存的文档内容,是否继续编辑?';
|
||||
$lang->doc->selectLibType = '请选择文档库类型';
|
||||
$lang->doc->noLibreOffice = '您还没有office转换设置访问权限!';
|
||||
$lang->doc->errorParentChapter = '父章节不能是自身章节及子章节!';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = '有所选产品访问权限的用户可以访问。';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = '有所选产品访问权限或白名单里的用户可以访问。';
|
||||
|
||||
@@ -821,6 +821,16 @@ class docModel extends model
|
||||
->remove('comment,files,labels,uid,contactListMenu')
|
||||
->get();
|
||||
|
||||
if($doc->type == 'chapter' and $doc->parent)
|
||||
{
|
||||
$parentDoc = $this->dao->select('*')->from(TABLE_DOC)->where('id')->eq((int)$doc->parent)->fetch();
|
||||
if(strpos($parentDoc->path, ",$docID,") !== false)
|
||||
{
|
||||
dao::$errors['parent'] = $this->lang->doc->errorParentChapter;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($doc->acl) and $doc->acl == 'private') $doc->users = $oldDoc->addedBy;
|
||||
|
||||
$oldDocContent = $this->dao->select('*')->from(TABLE_DOCCONTENT)->where('doc')->eq($docID)->andWhere('version')->eq($oldDoc->version)->fetch();
|
||||
|
||||
@@ -1097,7 +1097,7 @@ class execution extends control
|
||||
$modules = $this->tree->getAllModulePairs('bug');
|
||||
|
||||
/* Get module tree.*/
|
||||
$extra = array('executionID' => $executionID, 'orderBy' => $orderBy, 'type' => $type, 'build' => $build, 'branchID' => $branch);
|
||||
$extra = array('projectID' => $executionID, 'orderBy' => $orderBy, 'type' => $type, 'build' => $build, 'branchID' => $branch);
|
||||
if($executionID and empty($productID) and count($products) > 1)
|
||||
{
|
||||
$moduleTree = $this->tree->getBugTreeMenu($executionID, $productID, 0, array('treeModel', 'createBugLink'), $extra);
|
||||
@@ -1205,7 +1205,7 @@ class execution extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
$moduleTree = $this->tree->getTreeMenu($productID, 'case', 0, array('treeModel', 'createCaseLink'), array('executionID' => $executionID, 'productID' => $productID), $branchID);
|
||||
$moduleTree = $this->tree->getTreeMenu($productID, 'case', 0, array('treeModel', 'createCaseLink'), array('projectID' => $executionID, 'productID' => $productID), $branchID);
|
||||
}
|
||||
$tree = $moduleID ? $this->tree->getByID($moduleID) : '';
|
||||
|
||||
@@ -3867,22 +3867,12 @@ class execution extends control
|
||||
|
||||
$executionStats = $this->execution->getStatData(0, $status, $productID, 0, false, $queryID, $orderBy, $pager);
|
||||
|
||||
$parentIdList = array();
|
||||
foreach($executionStats as $execution)
|
||||
{
|
||||
if($execution->type != 'stage') continue;
|
||||
if($execution->grade == 2 and $execution->project != $execution->parent) $parentIdList[$execution->parent] = $execution->parent;
|
||||
}
|
||||
$parents = array();
|
||||
if($parentIdList) $parents = $this->execution->getByIdList($parentIdList);
|
||||
|
||||
$allExecutionsNum = $this->execution->getStatData(0, 'all');
|
||||
$this->view->allExecutionsNum = count($allExecutionsNum);
|
||||
|
||||
$this->view->executionStats = $executionStats;
|
||||
$this->view->productList = $this->loadModel('product')->getProductPairsByProject(0);
|
||||
$this->view->productID = $productID;
|
||||
$this->view->parents = $parents;
|
||||
$this->view->pager = $pager;
|
||||
$this->view->orderBy = $orderBy;
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
||||
|
||||
@@ -67,7 +67,8 @@ function renderUserAvatar(user, objectType, objectID, size, objectStatus)
|
||||
if(objectType == 'bug' && !priv.canAssignBug) return $noPrivAvatar;
|
||||
|
||||
var realname = user.realname ? user.realname : user.account;
|
||||
return objectStatus == 'closed' ? '' : $('<a class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" title="' + realname + '" href="' + link + '"/>').avatar({user: user});
|
||||
var title = user.title ? user.title : realname;
|
||||
return objectStatus == 'closed' ? '' : $('<a class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" title="' + title + '" href="' + link + '"/>').avatar({user: user});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -286,8 +287,9 @@ function renderTaskItem(item, $item, col)
|
||||
{
|
||||
var priHtml = '<span class="info info-pri' + (item.pri ? ' label-pri label-pri-' + item.pri : '') + '" title="' + item.pri + '">' + item.pri + '</span>';
|
||||
var hoursHtml = scaleSize <= 1 && item.status != 'wait' ? ('<span class="info info-estimate text-muted">' + taskLang.leftAB + ' ' + item.left + 'h</span>') : ('<span class="info info-estimate text-muted">' + taskLang.estimateAB + ' ' + item.estimate + 'h</span>');
|
||||
var avatarHtml = renderUserAvatar(item.assignedTo, 'task', item.id, '', col.type);
|
||||
|
||||
var avatarHtml = '';
|
||||
if(item.assignedTo == '' && item.mode == 'multi') avatarHtml = renderUserAvatar({title: item.teamMembers, realname: teamWords}, 'task', item.id, '', col.type);
|
||||
else avatarHtml = renderUserAvatar(item.assignedTo, 'task', item.id, '', col.type);
|
||||
var $infos = $item.find('.infos');
|
||||
if(!$infos.length) $infos = $('<div class="infos"></div>');
|
||||
$infos.html([priHtml, hoursHtml].join(''));
|
||||
|
||||
@@ -345,7 +345,7 @@ $lang->execution->timeSummary = '<div class="table-col"><div class="cle
|
||||
$lang->execution->groupSummaryAB = "<div>Aufgaben <strong>%s</strong></div><div><span class='text-muted'>Wartend</span> %s <span class='text-muted'>In Arbeit</span> %s</div><div>Geplant <strong>%s</strong></div><div><span class='text-muted'>Genutzt</span> %s <span class='text-muted'>Rest</span> %s</div>";
|
||||
$lang->execution->wbs = "Aufgaben aufteilen";
|
||||
$lang->execution->batchWBS = "Mehrere aufteilen";
|
||||
$lang->execution->howToUpdateBurn = "<a href='http://api.zentao.net/goto.php?item=burndown&lang=zh-cn' target='_blank' title='Wie wird der Burndown Chart aktualisiert?' class='btn btn-link'>Hilfe <i class='icon icon-help'></i></a>";
|
||||
$lang->execution->howToUpdateBurn = "<a href='https://api.zentao.pm/goto.php?item=burndown' target='_blank' title='Wie wird der Burndown Chart aktualisiert?' class='btn btn-link'>Hilfe <i class='icon icon-help'></i></a>";
|
||||
$lang->execution->whyNoStories = "Keine Story kann verknüpft werden. Bitte prüfen Sie ob ein Story mit {$lang->executionCommon} verknüpft ist {$lang->productCommon} und stellen Sie sicher das diese geprüft ist.";
|
||||
$lang->execution->projectNoStories = "No story can be linked. Please check whether there is any story in project and make sure it has been reviewed.";
|
||||
$lang->execution->productStories = "{$lang->executionCommon} verknüpfte Story ist ein Subset von {$lang->productCommon}, welche nur nach überprüfung verknüpft werden kann. Bitte <a href='%s'> Story verknüpfen</a>。";
|
||||
@@ -478,6 +478,8 @@ $lang->execution->kanbanViewList['story'] = "{$lang->SRCommon}";
|
||||
$lang->execution->kanbanViewList['bug'] = 'Bug';
|
||||
$lang->execution->kanbanViewList['task'] = 'Task';
|
||||
|
||||
$lang->execution->teamWords = 'Team';
|
||||
|
||||
$lang->kanbanSetting = new stdclass();
|
||||
$lang->kanbanSetting->noticeReset = 'Möchten Sie die Einstellungen des Kanbans zurücksetzen?';
|
||||
$lang->kanbanSetting->optionList['0'] = 'Verstecken';
|
||||
|
||||
@@ -478,6 +478,8 @@ $lang->execution->kanbanViewList['story'] = "{$lang->SRCommon}";
|
||||
$lang->execution->kanbanViewList['bug'] = 'Bug';
|
||||
$lang->execution->kanbanViewList['task'] = 'Task';
|
||||
|
||||
$lang->execution->teamWords = 'Team';
|
||||
|
||||
$lang->kanbanSetting = new stdclass();
|
||||
$lang->kanbanSetting->noticeReset = 'Do you want to reset Kanban?';
|
||||
$lang->kanbanSetting->optionList['0'] = 'Hide';
|
||||
|
||||
@@ -478,6 +478,8 @@ $lang->execution->kanbanViewList['story'] = "{$lang->SRCommon}";
|
||||
$lang->execution->kanbanViewList['bug'] = 'Bug';
|
||||
$lang->execution->kanbanViewList['task'] = 'Task';
|
||||
|
||||
$lang->execution->teamWords = 'Team';
|
||||
|
||||
$lang->kanbanSetting = new stdclass();
|
||||
$lang->kanbanSetting->noticeReset = 'Voulez-vous réinitialiser le tableau Kanban ?';
|
||||
$lang->kanbanSetting->optionList['0'] = 'Masquer';
|
||||
|
||||
@@ -436,4 +436,6 @@ $lang->execution->statusColorList['doing'] = '#0BD986';
|
||||
$lang->execution->statusColorList['suspended'] = '#fdc137';
|
||||
$lang->execution->statusColorList['closed'] = '#838A9D';
|
||||
|
||||
$lang->execution->teamWords = 'đội';
|
||||
|
||||
$lang->execution->boardColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#7FBB00', '#424BAC', '#66c5f8', '#EC2761');
|
||||
|
||||
@@ -478,6 +478,8 @@ $lang->execution->kanbanViewList['story'] = "{$lang->SRCommon}看板";
|
||||
$lang->execution->kanbanViewList['bug'] = 'Bug看板';
|
||||
$lang->execution->kanbanViewList['task'] = '任务看板';
|
||||
|
||||
$lang->execution->teamWords = '团队';
|
||||
|
||||
$lang->kanbanSetting = new stdclass();
|
||||
$lang->kanbanSetting->noticeReset = '是否恢复看板默认设置?';
|
||||
$lang->kanbanSetting->optionList['0'] = '隐藏';
|
||||
|
||||
@@ -453,4 +453,6 @@ $lang->execution->statusColorList['doing'] = '#0BD986';
|
||||
$lang->execution->statusColorList['suspended'] = '#fdc137';
|
||||
$lang->execution->statusColorList['closed'] = '#838A9D';
|
||||
|
||||
$lang->execution->teamWords = '團隊';
|
||||
|
||||
$lang->execution->boardColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#7FBB00', '#424BAC', '#66c5f8', '#EC2761');
|
||||
|
||||
+10
-11
@@ -114,14 +114,12 @@ class executionModel extends model
|
||||
}
|
||||
|
||||
$stageFilter = array('request', 'design', 'review');
|
||||
if(isset($execution->attribute))
|
||||
if(isset($execution->attribute) and in_array($execution->attribute, $stageFilter))
|
||||
{
|
||||
if($this->config->edition == 'open' and in_array($execution->attribute, $stageFilter))
|
||||
{
|
||||
unset($this->lang->execution->menu->story);
|
||||
unset($this->lang->execution->menu->qa);
|
||||
unset($this->lang->execution->menu->build);
|
||||
}
|
||||
unset($this->lang->execution->menu->story);
|
||||
unset($this->lang->execution->menu->devops);
|
||||
unset($this->lang->execution->menu->qa);
|
||||
unset($this->lang->execution->menu->build);
|
||||
}
|
||||
|
||||
if($executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied();
|
||||
@@ -1627,7 +1625,7 @@ class executionModel extends model
|
||||
}
|
||||
|
||||
/* In the case of the waterfall model, calculate the sub-stage. */
|
||||
if($param == 'skipParent')
|
||||
if($param === 'skipParent')
|
||||
{
|
||||
if($execution->parent < 0 and $execution->type == 'stage') unset($executions[$key]);
|
||||
if($execution->projectName) $execution->name = $execution->projectName . ' / ' . $execution->name;
|
||||
@@ -3178,12 +3176,12 @@ class executionModel extends model
|
||||
{
|
||||
dao::$errors['message'][] = sprintf($this->lang->execution->daysGreaterProject, $execution->days);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if((float)$hours[$key] > 24)
|
||||
{
|
||||
dao::$errors['message'][] = $this->lang->execution->errorHours;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->dao->delete()->from(TABLE_TEAM)->where('root')->eq($executionID)->andWhere('type')->eq($executionType)->exec();
|
||||
@@ -5191,7 +5189,6 @@ class executionModel extends model
|
||||
$_POST = array();
|
||||
$_POST['project'] = $projectID;
|
||||
$_POST['name'] = $project->name;
|
||||
$_POST['code'] = $project->code;
|
||||
$_POST['begin'] = $project->begin;
|
||||
$_POST['end'] = $project->end;
|
||||
$_POST['realBegan'] = $project->realBegan;
|
||||
@@ -5205,6 +5202,8 @@ class executionModel extends model
|
||||
$_POST['status'] = $project->status;
|
||||
$_POST['acl'] = 'open';
|
||||
|
||||
if(!empty($_POST['code'])) $_POST['code'] = $project->code;
|
||||
|
||||
$projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetchAll();
|
||||
foreach($projectProducts as $projectProduct)
|
||||
{
|
||||
|
||||
@@ -187,7 +187,7 @@ $closedExecutionsHtml .= '</ul>';
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
<?php if($currentExecution->status == 'done' or $currentExecution->status == 'closed'):?>
|
||||
<?php if($currentExecution and ($currentExecution->status == 'done' or $currentExecution->status == 'closed')):?>
|
||||
$('.col-footer .toggle-right-col').click(function(){ scrollToSelected(); })
|
||||
<?php else:?>
|
||||
scrollToSelected();
|
||||
|
||||
@@ -161,7 +161,8 @@
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if(isset($project->model) and $project->model == 'scrum') $hidden = '';?>
|
||||
<?php $hidden = 'hide'?>
|
||||
<?php if(isset($project->model) and !empty($project->hasProduct) and $project->model == 'scrum') $hidden = '';?>
|
||||
<tr class="<?php echo $hidden?>">
|
||||
<th><?php echo $lang->execution->linkPlan;?></th>
|
||||
<td colspan="3" id="plansBox">
|
||||
|
||||
@@ -231,4 +231,5 @@ js::set('priv',
|
||||
<?php js::set('orderBy', $storyOrder);?>
|
||||
<?php js::set('defaultMinColWidth', $this->config->minColWidth);?>
|
||||
<?php js::set('defaultMaxColWidth', $this->config->maxColWidth);?>
|
||||
<?php js::set('teamWords', $lang->execution->teamWords);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -780,11 +780,10 @@ class extensionModel extends model
|
||||
/**
|
||||
* Update an extension.
|
||||
*
|
||||
* @param string $extension
|
||||
* @param string $status
|
||||
* @param array $files
|
||||
* @param string $extension
|
||||
* @param array|object $data
|
||||
* @access public
|
||||
* @return void
|
||||
* @return int
|
||||
*/
|
||||
public function updateExtension($extension, $data)
|
||||
{
|
||||
|
||||
+9
-23
@@ -221,34 +221,20 @@ class file extends control
|
||||
$this->view->fields = $this->post->fields;
|
||||
$this->view->rows = $this->post->rows;
|
||||
$this->host = common::getSysURL();
|
||||
$kind = $this->post->kind;
|
||||
|
||||
switch($this->post->kind)
|
||||
foreach($this->view->rows as $row)
|
||||
{
|
||||
case 'task':
|
||||
foreach($this->view->rows as $row)
|
||||
foreach($row as &$field)
|
||||
{
|
||||
$row->name = html::a($this->host . $this->createLink('task', 'view', "taskID=$row->id"), $row->name);
|
||||
if(empty($field)) continue;
|
||||
$field = preg_replace('/ src="{([0-9]+)(\.(\w+))?}" /', ' src="' . $this->host . helper::createLink('file', 'read', "fileID=$1", "$3") . '" ', $field);
|
||||
}
|
||||
break;
|
||||
case 'story':
|
||||
foreach($this->view->rows as $row)
|
||||
{
|
||||
$row->title= html::a($this->host . $this->createLink('story', 'view', "storyID=$row->id"), $row->title);
|
||||
}
|
||||
break;
|
||||
case 'bug':
|
||||
foreach($this->view->rows as $row)
|
||||
{
|
||||
$row->title= html::a($this->host . $this->createLink('bug', 'view', "bugID=$row->id"), $row->title);
|
||||
}
|
||||
break;
|
||||
case 'testcase':
|
||||
foreach($this->view->rows as $row)
|
||||
{
|
||||
$row->title= html::a($this->host . $this->createLink('testcase', 'view', "caseID=$row->id"), $row->title);
|
||||
}
|
||||
break;
|
||||
|
||||
if(in_array($kind, array('story', 'bug', 'testcase'))) $row->title = html::a($this->host . $this->createLink($kind, 'view', "{$kind}ID=$row->id"), $row->title);
|
||||
if($kind == 'task') $row->name = html::a($this->host . $this->createLink('task', 'view', "taskID=$row->id"), $row->name);
|
||||
}
|
||||
|
||||
$this->view->fileName = $this->post->fileName;
|
||||
$output = $this->parse('file', 'export2Html');
|
||||
|
||||
|
||||
@@ -667,7 +667,6 @@ class fileModel extends model
|
||||
public function pasteImage($data, $uid = '', $safe = false)
|
||||
{
|
||||
if(empty($data)) return '';
|
||||
$data = str_replace('\"', '"', $data);
|
||||
|
||||
$dataLength = strlen($data);
|
||||
if(ini_get('pcre.backtrack_limit') < $dataLength) ini_set('pcre.backtrack_limit', $dataLength);
|
||||
@@ -676,7 +675,8 @@ class fileModel extends model
|
||||
{
|
||||
foreach($out[3] as $key => $base64Image)
|
||||
{
|
||||
$extension = strtolower($out[2][$key]);
|
||||
$base64Image = str_replace('\"', '"', $base64Image);
|
||||
$extension = strtolower($out[2][$key]);
|
||||
if(!in_array($extension, $this->config->file->imageExtensions)) helper::end();
|
||||
$imageData = base64_decode($base64Image);
|
||||
|
||||
|
||||
+14
-1
@@ -189,7 +189,20 @@ class gitModel extends model
|
||||
' task:' . join(' ', $objects['tasks']) .
|
||||
' bug:' . join(',', $objects['bugs']));
|
||||
|
||||
if($lastVersion != $version) $this->repo->saveAction2PMS($objects, $log, $this->repoRoot, $repo->encoding, 'git', $accountPairs);
|
||||
if($lastVersion != $version)
|
||||
{
|
||||
$this->repo->saveAction2PMS($objects, $log, $this->repoRoot, $repo->encoding, 'git', $accountPairs);
|
||||
|
||||
/* Objects link commit. */
|
||||
foreach($objects as $objectType => $objectIDs)
|
||||
{
|
||||
$objectTypeMap = array('stories' => 'story', 'bugs' => 'bug', 'tasks' => 'task');
|
||||
if(empty($objectIDs) or !isset($objectTypeMap[$objectType])) continue;
|
||||
|
||||
$this->post->$objectType = $objectIDs;
|
||||
$this->repo->link($repo->id, $log->revision, $objectTypeMap[$objectType]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -227,7 +227,7 @@ class gitlab extends control
|
||||
|
||||
$gitLab = $this->gitlab->getByID($id);
|
||||
$changes = common::createChanges($oldGitLab, $gitLab);
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
$this->loadModel('action')->logHistory($actionID, $changes);
|
||||
echo js::reload('parent');
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,8 @@ $lang->moduleOrder[85] = 'testtask';
|
||||
$lang->moduleOrder[90] = 'testsuite';
|
||||
$lang->moduleOrder[95] = 'testreport';
|
||||
$lang->moduleOrder[100] = 'caselib';
|
||||
$lang->moduleOrder[105] = 'automation';
|
||||
$lang->moduleOrder[105] = 'zahost';
|
||||
$lang->moduleOrder[108] = 'zanode';
|
||||
|
||||
$lang->moduleOrder[110] = 'doc';
|
||||
$lang->moduleOrder[115] = 'report';
|
||||
@@ -1074,6 +1075,7 @@ $lang->resource->testcase->confirmLibcaseChange = 'confirmLibcaseChange';
|
||||
$lang->resource->testcase->ignoreLibcaseChange = 'ignoreLibcaseChange';
|
||||
$lang->resource->testcase->batchConfirmStoryChange = 'batchConfirmStoryChange';
|
||||
$lang->resource->testcase->importToLib = 'importToLib';
|
||||
$lang->resource->testcase->automation = 'automation';
|
||||
|
||||
$lang->testcase->methodOrder[0] = 'index';
|
||||
$lang->testcase->methodOrder[5] = 'browse';
|
||||
@@ -1085,26 +1087,27 @@ $lang->testcase->methodOrder[30] = 'createBug';
|
||||
$lang->testcase->methodOrder[35] = 'view';
|
||||
$lang->testcase->methodOrder[40] = 'edit';
|
||||
$lang->testcase->methodOrder[45] = 'delete';
|
||||
$lang->testcase->methodOrder[50] = 'showScript';
|
||||
$lang->testcase->methodOrder[55] = 'export';
|
||||
$lang->testcase->methodOrder[60] = 'confirmChange';
|
||||
$lang->testcase->methodOrder[65] = 'confirmStoryChange';
|
||||
$lang->testcase->methodOrder[70] = 'batchEdit';
|
||||
$lang->testcase->methodOrder[75] = 'batchDelete';
|
||||
$lang->testcase->methodOrder[80] = 'batchChangeModule';
|
||||
$lang->testcase->methodOrder[85] = 'batchChangeBranch';
|
||||
$lang->testcase->methodOrder[90] = 'linkCases';
|
||||
$lang->testcase->methodOrder[95] = 'linkBugs';
|
||||
$lang->testcase->methodOrder[100] = 'bugs';
|
||||
$lang->testcase->methodOrder[105] = 'review';
|
||||
$lang->testcase->methodOrder[110] = 'batchReview';
|
||||
$lang->testcase->methodOrder[115] = 'batchConfirmStoryChange';
|
||||
$lang->testcase->methodOrder[120] = 'importFromLib';
|
||||
$lang->testcase->methodOrder[125] = 'batchCaseTypeChange';
|
||||
$lang->testcase->methodOrder[130] = 'confirmLibcaseChange';
|
||||
$lang->testcase->methodOrder[135] = 'ignoreLibcaseChange';
|
||||
$lang->testcase->methodOrder[140] = 'batchConfirmStoryChange';
|
||||
$lang->testcase->methodOrder[145] = 'importToLib';
|
||||
$lang->testcase->methodOrder[50] = 'export';
|
||||
$lang->testcase->methodOrder[55] = 'confirmChange';
|
||||
$lang->testcase->methodOrder[60] = 'confirmStoryChange';
|
||||
$lang->testcase->methodOrder[65] = 'batchEdit';
|
||||
$lang->testcase->methodOrder[70] = 'batchDelete';
|
||||
$lang->testcase->methodOrder[75] = 'batchChangeModule';
|
||||
$lang->testcase->methodOrder[80] = 'batchChangeBranch';
|
||||
$lang->testcase->methodOrder[85] = 'linkCases';
|
||||
$lang->testcase->methodOrder[87] = 'linkBugs';
|
||||
$lang->testcase->methodOrder[90] = 'bugs';
|
||||
$lang->testcase->methodOrder[95] = 'review';
|
||||
$lang->testcase->methodOrder[100] = 'batchReview';
|
||||
$lang->testcase->methodOrder[110] = 'batchConfirmStoryChange';
|
||||
$lang->testcase->methodOrder[115] = 'importFromLib';
|
||||
$lang->testcase->methodOrder[120] = 'batchCaseTypeChange';
|
||||
$lang->testcase->methodOrder[125] = 'confirmLibcaseChange';
|
||||
$lang->testcase->methodOrder[130] = 'ignoreLibcaseChange';
|
||||
$lang->testcase->methodOrder[135] = 'batchConfirmStoryChange';
|
||||
$lang->testcase->methodOrder[140] = 'importToLib';
|
||||
$lang->testcase->methodOrder[145] = 'automation';
|
||||
$lang->testcase->methodOrder[150] = 'showScript';
|
||||
|
||||
/* Test task. */
|
||||
$lang->resource->testtask = new stdclass();
|
||||
@@ -1218,6 +1221,42 @@ $lang->resource->automation->browse = 'browse';
|
||||
|
||||
$lang->automation->methodOrder[0] = 'browse';
|
||||
|
||||
$lang->resource->zahost = new stdclass();
|
||||
$lang->resource->zahost->browse = 'browse';
|
||||
$lang->resource->zahost->create = 'create';
|
||||
$lang->resource->zahost->edit = 'editAction';
|
||||
$lang->resource->zahost->delete = 'deleteAction';
|
||||
$lang->resource->zahost->browseTemplate = 'browseTemplate';
|
||||
$lang->resource->zahost->createTemplate = 'createTemplate';
|
||||
$lang->resource->zahost->editTemplate = 'editTemplate';
|
||||
$lang->resource->zahost->deleteTemplate = 'deleteTemplate';
|
||||
|
||||
$lang->zahost->methodOrder[0] = 'browse';
|
||||
$lang->zahost->methodOrder[5] = 'create';
|
||||
$lang->zahost->methodOrder[10] = 'edit';
|
||||
$lang->zahost->methodOrder[15] = 'delete';
|
||||
$lang->zahost->methodOrder[20] = 'browseTemplate';
|
||||
$lang->zahost->methodOrder[25] = 'createTemplate';
|
||||
$lang->zahost->methodOrder[30] = 'editTemplate';
|
||||
$lang->zahost->methodOrder[35] = 'deleteTemplate';
|
||||
|
||||
$lang->resource->zanode = new stdclass();
|
||||
$lang->resource->zanode->browse = 'browse';
|
||||
$lang->resource->zanode->create = 'create';
|
||||
$lang->resource->zanode->destroy = 'destroy';
|
||||
$lang->resource->zanode->reboot = 'reboot';
|
||||
$lang->resource->zanode->suspend = 'suspend';
|
||||
$lang->resource->zanode->resume = 'resume';
|
||||
$lang->resource->zanode->getVNC = 'getVNC';
|
||||
|
||||
$lang->zanode->methodOrder[5] = 'browse';
|
||||
$lang->zanode->methodOrder[10] = 'create';
|
||||
$lang->zanode->methodOrder[15] = 'destroy';
|
||||
$lang->zanode->methodOrder[20] = 'reboot';
|
||||
$lang->zanode->methodOrder[35] = 'suspend';
|
||||
$lang->zanode->methodOrder[30] = 'resume';
|
||||
$lang->zanode->methodOrder[35] = 'getVNC';
|
||||
|
||||
$lang->resource->repo = new stdclass();
|
||||
$lang->resource->repo->browse = 'browseAction';
|
||||
$lang->resource->repo->view = 'view';
|
||||
@@ -1234,6 +1273,10 @@ $lang->resource->repo->maintain = 'maintain';
|
||||
$lang->resource->repo->setRules = 'setRules';
|
||||
$lang->resource->repo->apiGetRepoByUrl = 'apiGetRepoByUrl';
|
||||
$lang->resource->repo->downloadCode = 'downloadCode';
|
||||
$lang->resource->repo->linkStory = 'linkStory';
|
||||
$lang->resource->repo->linkBug = 'linkBug';
|
||||
$lang->resource->repo->linkTask = 'linkTask';
|
||||
$lang->resource->repo->unlink = 'unlink';
|
||||
|
||||
$lang->repo->methodOrder[5] = 'create';
|
||||
$lang->repo->methodOrder[10] = 'edit';
|
||||
@@ -1250,6 +1293,10 @@ $lang->repo->methodOrder[60] = 'download';
|
||||
$lang->repo->methodOrder[65] = 'setRules';
|
||||
$lang->repo->methodOrder[70] = 'apiGetRepoByUrl';
|
||||
$lang->repo->methodOrder[75] = 'downloadCode';
|
||||
$lang->repo->methodOrder[80] = 'linkStory';
|
||||
$lang->repo->methodOrder[85] = 'linkBug';
|
||||
$lang->repo->methodOrder[90] = 'linkTask';
|
||||
$lang->repo->methodOrder[95] = 'unlink';
|
||||
|
||||
$lang->resource->ci = new stdclass();
|
||||
$lang->resource->ci->commitResult = 'commitResult';
|
||||
|
||||
@@ -266,7 +266,10 @@ class install extends control
|
||||
$this->setting->setItem('system.common.safe.changeWeak', '1');
|
||||
$this->setting->setItem('system.common.global.cron', 1);
|
||||
|
||||
if(strpos($this->app->getClientLang(), 'zh') === 0) $this->loadModel('api')->createDemoData($this->lang->api->zentaoAPI, 'http://' . $_SERVER['HTTP_HOST'] . $this->app->config->webRoot . 'api.php/v1', '16.0');
|
||||
$httpType = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') ? 'https' : 'http';
|
||||
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') $httpType = 'https';
|
||||
if(isset($_SERVER['REQUEST_SCHEME']) and strtolower($_SERVER['REQUEST_SCHEME']) == 'https') $httpType = 'https';
|
||||
if(strpos($this->app->getClientLang(), 'zh') === 0) $this->loadModel('api')->createDemoData($this->lang->api->zentaoAPI, "{$httpType}://{$_SERVER['HTTP_HOST']}" . $this->app->config->webRoot . 'api.php/v1', '16.0');
|
||||
return print(js::locate(inlink('step6'), 'parent'));
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#mainContent tr td {background-color: rgb(255, 255, 255); border-bottom: 1px solid rgb(238, 238, 238); border-right: 1px solid rgb(238, 238, 238);}
|
||||
|
||||
.btn-wide {padding: 6px 85px;}
|
||||
#useLight:hover, #useALM:hover{color: #fff; background-color: #2e7fff; border-color: transparent;}
|
||||
|
||||
#mainContent .datatable {cursor: default;}
|
||||
.container {padding-top: 20px;}
|
||||
|
||||
@@ -1511,6 +1511,8 @@ class kanbanModel extends model
|
||||
$cardData['status'] = $object->status;
|
||||
$cardData['left'] = $object->left;
|
||||
$cardData['estStarted'] = $object->estStarted;
|
||||
$cardData['mode'] = $object->mode;
|
||||
if($object->mode == 'multi') $cardData['teamMembers'] = $object->teamMembers;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -114,7 +114,6 @@ class messageModel extends model
|
||||
$this->loadModel('webhook')->send($objectType, $objectID, $actionType, $actionID, $actor);
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($messageSetting['message']))
|
||||
{
|
||||
$actions = $messageSetting['message']['setting'];
|
||||
@@ -201,6 +200,14 @@ class messageModel extends model
|
||||
|
||||
if(!empty($notifyPersons)) $toList = implode(',', $notifyPersons);
|
||||
}
|
||||
if(empty($toList) and $objectType == 'task' and $object->mode == 'multi')
|
||||
{
|
||||
$teamMembers = $this->loadModel('task')->getTeamMembers($object->id);
|
||||
$toList = array_filter($teamMembers, function($account){
|
||||
return $account != $this->app->user->account;
|
||||
});
|
||||
$toList = implode(',', $toList);
|
||||
}
|
||||
|
||||
if($toList == 'closed') $toList = '';
|
||||
if($objectType == 'feedback' and $object->status == 'replied') $toList = ',' . $object->openedBy . ',';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user