This commit is contained in:
zhujinyong
2021-07-20 09:37:16 +08:00
16 changed files with 133 additions and 86 deletions
+1 -1
View File
@@ -1 +1 @@
15.1
15.2
+1 -1
View File
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
$config->version = '15.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->version = '15.2'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
$config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php.
@@ -253,7 +253,7 @@ CREATE TABLE `zt_config` (
`value` longtext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
CREATE TABLE `zt_cron` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`m` varchar(20) NOT NULL,
@@ -269,7 +269,7 @@ CREATE TABLE `zt_cron` (
`lastTime` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `lastTime` (`lastTime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
CREATE TABLE `zt_dept` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(60) NOT NULL,
@@ -430,7 +430,7 @@ CREATE TABLE `zt_group` (
`desc` char(255) NOT NULL DEFAULT '',
`acl` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
CREATE TABLE `zt_grouppriv` (
`group` mediumint(8) unsigned NOT NULL DEFAULT 0,
`module` char(30) NOT NULL DEFAULT '',
@@ -447,20 +447,6 @@ CREATE TABLE `zt_history` (
PRIMARY KEY (`id`),
KEY `action` (`action`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_jenkins` (
`id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`account` varchar(30) DEFAULT NULL,
`password` varchar(255) NOT NULL,
`token` varchar(255) DEFAULT NULL,
`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',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_job` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
@@ -495,7 +481,7 @@ CREATE TABLE `zt_lang` (
`system` enum('0','1') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
CREATE TABLE `zt_log` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL,
@@ -555,6 +541,22 @@ CREATE TABLE `zt_oauth` (
KEY `providerType` (`providerType`),
KEY `providerID` (`providerID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_pipeline` (
`id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
`type` char(30) NOT NULL,
`name` varchar(50) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`account` varchar(30) DEFAULT NULL,
`password` varchar(255) NOT NULL,
`token` varchar(255) DEFAULT NULL,
`private` char(32) DEFAULT NULL,
`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',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_planstory` (
`plan` mediumint(8) unsigned NOT NULL,
`story` mediumint(8) unsigned NOT NULL,
@@ -608,7 +610,7 @@ CREATE TABLE `zt_project` (
`model` char(30) NOT NULL,
`type` char(30) NOT NULL DEFAULT 'sprint',
`product` char(30) NOT NULL DEFAULT 'single',
`lifetime` char(30) NOT NULL,
`lifetime` char(30) NOT NULL DEFAULT '',
`budget` varchar(30) NOT NULL DEFAULT '0',
`budgetUnit` char(30) NOT NULL DEFAULT 'CNY',
`attribute` varchar(30) NOT NULL DEFAULT '',
@@ -709,7 +711,7 @@ CREATE TABLE `zt_relation` (
`BVersion` char(30) NOT NULL,
`extra` char(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `relation` (`relation`,`AType`,`BType`,`AID`,`BID`)
UNIQUE KEY `relation` (`product`,`relation`,`AType`,`BType`,`AID`,`BID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_release` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
@@ -864,7 +866,7 @@ CREATE TABLE `zt_story` (
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
`lastEditedDate` datetime NOT NULL,
`reviewedBy` varchar(255) NOT NULL,
`reviewedDate` datetime NOT NULL,
`reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
`closedReason` varchar(30) NOT NULL,
@@ -880,6 +882,15 @@ CREATE TABLE `zt_story` (
KEY `status` (`status`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storyestimate` (
`story` mediumint(9) NOT NULL,
`round` smallint(6) NOT NULL,
`estimate` text NOT NULL,
`average` float NOT NULL,
`openedBy` varchar(30) NOT NULL,
`openedDate` datetime NOT NULL,
UNIQUE KEY `story` (`story`,`round`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storyreview` (
`story` mediumint(9) NOT NULL,
`version` smallint(6) NOT NULL,
@@ -888,15 +899,6 @@ CREATE TABLE `zt_storyreview` (
`reviewDate` datetime NOT NULL,
UNIQUE KEY `story` (`story`,`version`,`reviewer`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storyestimate` (
`story` mediumint(9) NOT NULL,
`round` smallint(6) NOT NULL,
`estimate` text NOT NULL,
`average` float(10,2) NOT NULL,
`openedBy` varchar(30) NOT NULL,
`openedDate` datetime NOT NULL,
UNIQUE KEY `story` (`story`,`round`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storyspec` (
`story` mediumint(9) NOT NULL,
`version` smallint(6) NOT NULL,
@@ -998,7 +1000,7 @@ CREATE TABLE `zt_team` (
`limited` char(8) NOT NULL DEFAULT 'no',
`join` date NOT NULL DEFAULT '0000-00-00',
`days` smallint(5) unsigned NOT NULL,
`hours` float(2,1) unsigned NOT NULL DEFAULT 0.0,
`hours` float(3,1) unsigned NOT NULL DEFAULT 0.0,
`estimate` decimal(12,2) unsigned NOT NULL DEFAULT 0.00,
`consumed` decimal(12,2) unsigned NOT NULL DEFAULT 0.00,
`left` decimal(12,2) unsigned NOT NULL DEFAULT 0.00,
+3 -1
View File
@@ -6,7 +6,9 @@ ALTER TABLE `zt_storyestimate` MODIFY COLUMN `average` float NOT NULL;
ALTER TABLE `zt_jenkins` ADD COLUMN `type` char(30) NOT NULL AFTER `id`;
ALTER TABLE `zt_jenkins` ADD COLUMN `private` char(32) NOT NULL AFTER `token`;
UPDATE `zt_jenkins` SET `type`='jenkins';
RENAME TABLE `zt_jenkins` TO `zt_pipeline`;
ALTER TABLE `zt_relation` DROP INDEX `relation`, ADD UNIQUE INDEX `relation`(`product`, `relation`, `AType`, `BType`, `AID`, `BID`) USING BTREE;
ALTER TABLE `zt_relation` DROP INDEX `relation`;
ALTER TABLE `zt_relation` ADD UNIQUE INDEX `relation`(`product`, `relation`, `AType`, `BType`, `AID`, `BID`);
+17 -17
View File
@@ -471,23 +471,6 @@ CREATE TABLE IF NOT EXISTS `zt_history` (
PRIMARY KEY (`id`),
KEY `action` (`action`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_pipeline`;
CREATE TABLE IF NOT EXISTS `zt_pipeline` (
`id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
`type` char(30) NOT NULL,
`name` varchar(50) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`account` varchar(30) DEFAULT NULL,
`password` varchar(255) NOT NULL,
`token` varchar(255) DEFAULT NULL,
`private` char(32) DEFAULT NULL,
`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',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_job`;
CREATE TABLE IF NOT EXISTS `zt_job` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
@@ -588,6 +571,23 @@ CREATE TABLE IF NOT EXISTS `zt_oauth` (
KEY `providerType` (`providerType`),
KEY `providerID` (`providerID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_pipeline`;
CREATE TABLE IF NOT EXISTS `zt_pipeline` (
`id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
`type` char(30) NOT NULL,
`name` varchar(50) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`account` varchar(30) DEFAULT NULL,
`password` varchar(255) NOT NULL,
`token` varchar(255) DEFAULT NULL,
`private` char(32) DEFAULT NULL,
`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',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_planstory`;
CREATE TABLE IF NOT EXISTS `zt_planstory` (
`plan` mediumint(8) unsigned NOT NULL,
+1 -1
View File
@@ -141,7 +141,7 @@ class branchModel extends model
{
if($products[$branch->product]->type == 'normal')
{
$branchGroups[$branch->product][0] = '';
if(strpos($params, 'ignoreNormal') === false) $branchGroups[$branch->product][0] = '';
}
else
{
+2
View File
@@ -27,7 +27,9 @@
<?php endforeach;?>
<div class="input-control space w-150px"><?php echo html::select('account', $userIdPairs, $user ? $user->id : '', 'onchange=changeUser(this.value) class="form-control chosen"');?></div>
<div class="input-control space w-150px"><?php echo html::select('product', $products, $product, 'onchange=changeProduct(this.value) class="form-control chosen"');?></div>
<?php if($config->systemMode == 'new'):?>
<div class="input-control space w-150px"><?php echo html::select('project', $projects, $project, 'onchange=changeProject(this.value) class="form-control chosen"');?></div>
<?php endif;?>
<div class="input-control space w-150px"><?php echo html::select('execution', $executions, $execution, 'onchange=changeExecution(this.value) class="form-control chosen"'); ?></div>
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->action->dynamic->search;?></a>
</div>
+1 -1
View File
@@ -2236,7 +2236,7 @@ class execution extends control
$this->view->execution = $execution;
$this->view->linkedProducts = $linkedProducts;
$this->view->unmodifiableProducts = $unmodifiableProducts;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), '', $linkedBranches);
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal', $linkedBranches);
$this->display();
}
+4 -4
View File
@@ -982,11 +982,11 @@ class executionModel extends model
/* Order by status's content whether or not done */
$executions = $this->dao->select('*, IF(INSTR("done,closed", status) < 2, 0, 1) AS isDone, INSTR("doing,wait,suspended,closed", status) AS sortStatus')->from(TABLE_EXECUTION)
->where('deleted')->eq(0)
->beginIF($type == 'all' && $this->config->systemMode == 'new')->andWhere('type')->in('stage,sprint')->fi()
->beginIF($projectID && $this->config->systemMode == 'new')->andWhere('project')->eq($projectID)->fi()
->beginIF($type != 'all' && $this->config->systemMode == 'new')->andWhere('type')->eq($type)->fi()
->beginIF($type == 'all')->andWhere('type')->in('stage,sprint')->fi()
->beginIF($projectID and $this->config->systemMode == 'new')->andWhere('project')->eq($projectID)->fi()
->beginIF($type != 'all' and $this->config->systemMode == 'new')->andWhere('type')->eq($type)->fi()
->beginIF(strpos($mode, 'withdelete') === false)->andWhere('deleted')->eq(0)->fi()
->beginIF(!$this->app->user->admin)->andWhere('project')->in($this->app->user->view->projects)->fi()
->beginIF(!$this->app->user->admin and $this->config->systemMode == 'new')->andWhere('project')->in($this->app->user->view->projects)->fi()
->beginIF(!$this->app->user->admin and strpos($mode, 'all') === false)->andWhere('id')->in($this->app->user->view->sprints)->fi()
->orderBy($orderBy)
->fetchAll();
+1 -1
View File
@@ -657,7 +657,7 @@ class productModel extends model
$productID = (int)$productID;
$products[$productID] = new stdClass();
if($this->config->systemMode == 'new' and isset($data->programs[$productID])) $products[$productID]->program = $data->programs[$productID];
if($this->config->systemMode == 'new' and isset($data->programs[$productID])) $products[$productID]->program = (int)$data->programs[$productID];
$products[$productID]->name = $productName;
$products[$productID]->line = (int)$data->lines[$productID];
$products[$productID]->PO = $data->POs[$productID];
+1 -1
View File
@@ -1589,7 +1589,7 @@ class project extends control
$this->view->allProducts = $allProducts;
$this->view->linkedProducts = $linkedProducts;
$this->view->unmodifiableProducts = $unmodifiableProducts;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), '', $linkedBranches);
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($allProducts), 'ignoreNormal', $linkedBranches);
$this->display();
}
+1 -1
View File
@@ -138,7 +138,7 @@ $(function()
{
var $toggle = $('<span class="module-name" data-id="' + item.id + '">' + link + '</span>');
var title = (item.type === 'product' ? '<i class="icon icon-cube text-muted"></i> ' : '') + item.name;
var title = (item.type === 'product' ? '<i class="icon icon-product text-muted"></i> ' : '') + item.name;
var link = item.id !== undefined ? ('<a data-app=' + openApp + ' href="' + createLink('tree', 'browsetask', 'rootID=<?php echo $rootID ?>&viewType=task&moduleID={0}'.format(item.id)) + '">' + title + '</a>') : ('<span class="tree-toggle">' + title + '</span>');
var $toggle = $('<span class="module-name" data-id="' + item.id + '">' + link + '</span>');
if(item.type === 'task')
+57 -22
View File
@@ -107,6 +107,14 @@ $(function()
$('#source .cell').height($('#source').height());
$('#programBox .cell').height($('#programBox').height() - 20);
programBegin = $('.programParams #begin').val();
programEnd = $('.programParams #end').val();
setProgramBegin(programBegin);
setProgramEnd(programEnd);
setProjectPM();
setProgramByProduct($(':checkbox:checked[data-productid]'));
/* Select all product line events. */
$('#checkAllLines').click(function()
{
@@ -131,6 +139,9 @@ $(function()
$('#programName').val('');
}
setProgramBegin(programBegin);
setProgramEnd(programEnd);
/* If the project is checked, the relevant form will be displayed according to the selected mode. */
hiddenProject();
})
@@ -141,20 +152,37 @@ $(function()
var lineID = $('li.currentPage').attr('lineid');
if($(this).is(':checked'))
{
$("[id^='productLines\[" + lineID + "\]']").prop('checked', true);
$('#checkAllProjects').prop('checked', true);
$('[name^=products]').prop('checked', true);
$('[name^=sprints]').prop('checked', true);
$('#programName').val($('.main-row .side-col .nav li.currentPage div a').text());
if($('[id^=productLines]').length > 0)
{
$('[data-line=' + lineID + ']').prop('checked', true);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', true);
}
else
{
$('[name^=products]').prop('checked', true);
$('[name^=sprints]').prop('checked', true);
}
}
else
{
$("[id^='productLines\[" + lineID + "\]']").prop('checked', false);
$('#checkAllProjects').prop('checked', false);
$('[name^=products]').prop('checked', false);
$('[name^=sprints]').prop('checked', false);
if($('[id^=productLines]').length > 0)
{
$('[data-line=' + lineID + ']').prop('checked', false);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', false);
}
else
{
$('[name^=products]').prop('checked', false);
$('[name^=sprints]').prop('checked', false);
}
$('#programName').val('');
}
setProgramBegin(programBegin);
setProgramEnd(programEnd);
hiddenProject();
})
@@ -164,36 +192,40 @@ $(function()
var lineID = $('li.currentPage').attr('lineid');
if($(this).is(':checked'))
{
$("[id^='productLines\[" + lineID + "\]']").prop('checked', true);
$('#checkAllProducts').prop('checked', true);
$('[name^=products]').prop('checked', true);
$('[name^=sprints]').prop('checked', true);
$('#programName').val($('.main-row .side-col .nav li.currentPage div a').text());
if($('[id^=productLines]').length > 0)
{
$('[data-line=' + lineID + ']').prop('checked', true);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', true);
}
else
{
$('[name^=products]').prop('checked', true);
$('[name^=sprints]').prop('checked', true);
}
}
else
{
$("[id^='productLines\[" + lineID + "\]']").prop('checked', false);
$('#checkAllProducts').prop('checked', false);
$('[name^=products]').prop('checked', false);
$('[name^=sprints]').prop('checked', false);
$('#programName').val('');
if($('[id^=productLines]').length > 0)
{
$('[data-line=' + lineID + ']').prop('checked', false);
$("[id^='productLines\[" + lineID + "\]']").prop('checked', false);
}
else
{
$('[name^=products]').prop('checked', false);
$('[name^=sprints]').prop('checked', false);
}
}
programBegin = $('.programParams #begin').val();
programEnd = $('.programParams #end').val();
setProgramBegin(programBegin);
setProgramEnd(programEnd);
hiddenProject();
})
programBegin = $('.programParams #begin').val();
programEnd = $('.programParams #end').val();
setProgramBegin(programBegin);
setProgramEnd(programEnd);
setProjectPM();
setProgramByProduct($(':checkbox:checked[data-productid]'));
/* Select a product line event. */
$('[name^=productLines]').change(function()
{
@@ -233,6 +265,9 @@ $(function()
if(lineNum > checkedLineNum) checked = false;
$('#checkAllLines').prop('checked', checked);
setProgramBegin(programBegin);
setProgramEnd(programEnd);
/* If the project is checked, the relevant form will be displayed according to the selected mode. */
hiddenProject();
})
+1
View File
@@ -139,3 +139,4 @@ $lang->upgrade->fromVersions['15_0_rc3'] = '15.0.rc3';
$lang->upgrade->fromVersions['15_0'] = '15.0';
$lang->upgrade->fromVersions['15_0_1'] = '15.0.1';
$lang->upgrade->fromVersions['15_0_2'] = '15.0.2';
$lang->upgrade->fromVersions['15_0_3'] = '15.0.3';
+6 -3
View File
@@ -3075,8 +3075,10 @@ class upgradeModel extends model
$this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->exec('TRUNCATE TABLE ' . TABLE_NOTIFY);
$this->saveLogs($this->dao->get());
$mailQueueTable = '`' . $this->config->db->prefix . 'mailqueue`';
$stmt = $this->dao->select('*')->from($mailQueueTable)->query();
$mailQueueTable = '`' . $this->config->db->prefix . 'mailqueue`';
$syncBeginDate = date('Y-m-d', time() - 15 * 24 * 3600);
$stmt = $this->dao->select('*')->from($mailQueueTable)->where('addedDate')->ge($syncBeginDate)->orderBy('id')->query();
while($mailQueue = $stmt->fetch())
{
$notify = new stdclass();
@@ -3095,7 +3097,7 @@ class upgradeModel extends model
}
$webhookDataTable = '`' . $this->config->db->prefix . 'webhookdatas`';
$stmt = $this->dao->select('*')->from($webhookDataTable)->query();
$stmt = $this->dao->select('*')->from($webhookDataTable)->orderBy('id')->limit($offset, $rows)->query();
while($webhookData = $stmt->fetch())
{
$notify = new stdclass();
@@ -3109,6 +3111,7 @@ class upgradeModel extends model
$this->dao->insert(TABLE_NOTIFY)->data($notify)->exec();
$this->saveLogs($this->dao->get());
}
return true;
}
+3 -1
View File
@@ -11,7 +11,7 @@
?>
<?php include '../../common/view/header.lite.html.php';?>
<div class='container'>
<form method='post' action='<?php echo inlink('execute');?>'>
<form method='post' onsubmit="submit.disabled=1" action='<?php echo inlink('execute');?>'>
<div class='modal-dialog'>
<div class='modal-header'>
<strong><?php echo $lang->upgrade->confirm;?></strong>
@@ -23,4 +23,6 @@
</div>
</form>
</div>
<script>
</script>
<?php include '../../common/view/footer.lite.html.php';?>