From 3dabfc1b45dbb95bf2c2aec33be75ba22d09556b Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 2 Jan 2020 10:00:17 +0800 Subject: [PATCH] * adjust code. --- db/update11.7.sql | 2 + db/zentao.sql | 68 +++++++++++++++++++++++ module/block/control.php | 6 +- module/block/model.php | 88 ------------------------------ module/bug/control.php | 4 +- module/bug/model.php | 3 +- module/build/view/create.html.php | 2 +- module/group/lang/resource.php | 12 ++-- module/product/model.php | 52 ++++++++++++++++++ module/project/model.php | 37 +++++++++++++ module/project/view/story.html.php | 5 +- module/task/control.php | 1 + 12 files changed, 178 insertions(+), 102 deletions(-) diff --git a/db/update11.7.sql b/db/update11.7.sql index d1a3049229..c029523b9b 100644 --- a/db/update11.7.sql +++ b/db/update11.7.sql @@ -64,3 +64,5 @@ ALTER TABLE `zt_bug` ADD `v1` varchar(40) COLLATE 'utf8_general_ci' NOT NULL AFT ALTER TABLE `zt_bug` ADD `v2` varchar(40) COLLATE 'utf8_general_ci' NOT NULL AFTER `v1`; ALTER TABLE `zt_bug` ADD `repoType` varchar(30) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `v2`; ALTER TABLE `zt_bug` ADD `entry` varchar(255) COLLATE 'utf8_general_ci' NOT NULL AFTER `repo`; + +DELETE FROM `zt_grouppriv` WHERE `module` = 'api' AND `method` = 'sql'; diff --git a/db/zentao.sql b/db/zentao.sql index 72676a4f86..aaadbd4059 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -91,6 +91,12 @@ CREATE TABLE IF NOT EXISTS `zt_bug` ( `case` mediumint(8) unsigned NOT NULL, `caseVersion` smallint(6) NOT NULL default '1', `result` mediumint(8) unsigned NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `entry` varchar(255) unsigned NOT NULL, + `lines` varchar(10) unsigned NOT NULL, + `v1` varchar(40) unsigned NOT NULL, + `v2` varchar(40) unsigned NOT NULL, + `repoType` varchar(30) unsigned NOT NULL DEFAULT '', `testtask` mediumint(8) unsigned NOT NULL, `lastEditedBy` varchar(30) NOT NULL default '', `lastEditedDate` datetime NOT NULL, @@ -566,6 +572,61 @@ CREATE TABLE IF NOT EXISTS `zt_release` ( KEY `product` (`product`), KEY `build` (`build`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_repo`; +CREATE TABLE IF NOT EXISTS `zt_repo` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `path` varchar(255) NOT NULL, + `prefix` varchar(100) NOT NULL, + `encoding` varchar(20) NOT NULL, + `SCM` varchar(10) NOT NULL, + `client` varchar(100) NOT NULL, + `commits` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `password` varchar(30) NOT NULL, + `encrypt` varchar(30) NOT NULL DEFAULT 'plain', + `acl` text NOT NULL, + `synced` tinyint(1) NOT NULL DEFAULT '0', + `lastSync` datetime NOT NULL, + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_repobranch`; +CREATE TABLE IF NOT EXISTS `zt_repobranch` ( + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL, + UNIQUE KEY `repo_revision_branch` (`repo`,`revision`,`branch`), + KEY `branch` (`branch`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_repofiles`; +CREATE TABLE IF NOT EXISTS `zt_repofiles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `path` varchar(255) NOT NULL, + `parent` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `action` char(1) NOT NULL, + PRIMARY KEY (`id`), + KEY `path` (`path`), + KEY `parent` (`parent`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_repohistory`; +CREATE TABLE IF NOT EXISTS `zt_repohistory` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `repo` mediumint(9) NOT NULL, + `revision` varchar(40) NOT NULL, + `commit` mediumint(8) unsigned NOT NULL, + `comment` text NOT NULL, + `committer` varchar(100) NOT NULL, + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_story`; CREATE TABLE IF NOT EXISTS `zt_story` ( `id` mediumint(8) unsigned NOT NULL auto_increment, @@ -1102,6 +1163,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'doc', 'createLib'), (1, 'doc', 'delete'), (1, 'doc', 'deleteLib'), +(1, 'doc', 'deleteFile'), (1, 'doc', 'edit'), (1, 'doc', 'editLib'), (1, 'doc', 'index'), @@ -1878,6 +1940,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (4, 'doc', 'createLib'), (4, 'doc', 'delete'), (4, 'doc', 'deleteLib'), +(4, 'doc', 'deleteFile'), (4, 'doc', 'edit'), (4, 'doc', 'editLib'), (4, 'doc', 'index'), @@ -2106,6 +2169,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (5, 'doc', 'createLib'), (5, 'doc', 'delete'), (5, 'doc', 'deleteLib'), +(5, 'doc', 'deleteFile'), (5, 'doc', 'edit'), (5, 'doc', 'editLib'), (5, 'doc', 'index'), @@ -2380,6 +2444,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (6, 'doc', 'createLib'), (6, 'doc', 'delete'), (6, 'doc', 'deleteLib'), +(6, 'doc', 'deleteFile'), (6, 'doc', 'edit'), (6, 'doc', 'editLib'), (6, 'doc', 'index'), @@ -2606,6 +2671,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7, 'doc', 'createLib'), (7, 'doc', 'delete'), (7, 'doc', 'deleteLib'), +(7, 'doc', 'deleteFile'), (7, 'doc', 'edit'), (7, 'doc', 'editLib'), (7, 'doc', 'index'), @@ -2859,6 +2925,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8, 'doc', 'createLib'), (8, 'doc', 'delete'), (8, 'doc', 'deleteLib'), +(8, 'doc', 'deleteFile'), (8, 'doc', 'edit'), (8, 'doc', 'editLib'), (8, 'doc', 'index'), @@ -3099,6 +3166,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (9, 'doc', 'createLib'), (9, 'doc', 'delete'), (9, 'doc', 'deleteLib'), +(9, 'doc', 'deleteFile'), (9, 'doc', 'edit'), (9, 'doc', 'editLib'), (9, 'doc', 'index'), diff --git a/module/block/control.php b/module/block/control.php index ffb3c3522d..87b53ee798 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -752,7 +752,7 @@ class block extends control $status = isset($this->params->type) ? $this->params->type : ''; $num = isset($this->params->num) ? $this->params->num : ''; - $products = $this->block->getProducts($status, $num); + $products = $this->loadModel('product')->getOrderedProducts($status, $num); $productIdList = array_keys($products); if(empty($products)) @@ -883,7 +883,7 @@ class block extends control $num = isset($this->params->num) ? (int)$this->params->num : 0; /* Get projects. */ - $projects = $this->block->getProjects($status, $num); + $projects = $this->loadModel('project')->getOrderedProjects($status, $num); if(empty($projects)) { $this->view->projects = $projects; @@ -992,7 +992,7 @@ class block extends control $status = isset($this->params->type) ? $this->params->type : ''; $num = isset($this->params->num) ? (int)$this->params->num : 0; - $products = $this->block->getProducts($status, $num); + $products = $this->loadModel('product')->getOrderedProducts($status, $num); $productIdList = array_keys($products); if(empty($products)) diff --git a/module/block/model.php b/module/block/model.php index 2b2b1aa0d8..4ca702ab2e 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -660,92 +660,4 @@ class blockModel extends model return $key == $hash; } - - /** - * Get products like drop menu order - * - * @param strint $status - * @param int $num - * @access public - * @return array - */ - public function getProducts($status, $num) - { - $products = $this->loadModel('product')->getList($status); - if(empty($products)) return $products; - - $lines = $this->loadModel('tree')->getLinePairs($useShort = true); - $productList = array(); - foreach($lines as $id => $name) - { - foreach($products as $key => $product) - { - if($product->line == $id) - { - $product->name = $name . '/' . $product->name; - $productList[] = $product; - unset($products[$key]); - } - } - } - $productList = array_merge($productList, $products); - - $products = $mineProducts = $otherProducts = $closedProducts = array(); - foreach($productList as $product) - { - if(!$this->app->user->admin and !$this->product->checkPriv($product->id)) continue; - if($product->status == 'normal' and $product->PO == $this->app->user->account) - { - $mineProducts[$product->id] = $product; - } - elseif($product->status == 'normal' and $product->PO != $this->app->user->account) - { - $otherProducts[$product->id] = $product; - } - elseif($product->status == 'closed') - { - $closedProducts[$product->id] = $product; - } - } - $products = $mineProducts + $otherProducts + $closedProducts; - - if(empty($num)) return $products; - return array_slice($products, 0, $num, true); - } - - /** - * Get projects like drop menu order - * - * @param string $status - * @param int $num - * @access public - * @return array - */ - public function getProjects($status, $num) - { - $projectList = $this->loadModel('project')->getList($status); - if(empty($projectList)) return $projectList; - - $projects = $mineProjects = $otherProjects = $closedProjects = array(); - foreach($projectList as $project) - { - if(!$this->app->user->admin and !$this->project->checkPriv($project->id)) continue; - if($project->status != 'done' and $project->status != 'closed' and $project->PM == $this->app->user->account) - { - $mineProjects[$project->id] = $project; - } - elseif($project->status != 'done' and $project->status != 'closed' and !($project->PM == $this->app->user->account)) - { - $otherProjects[$project->id] = $project; - } - elseif($project->status == 'done' or $project->status == 'closed') - { - $closedProjects[$project->id] = $project; - } - } - $projects = $mineProjects + $otherProjects + $closedProjects; - - if(empty($num)) return $projects; - return array_slice($projects, 0, $num, true); - } } diff --git a/module/bug/control.php b/module/bug/control.php index d48e71ddd4..cf7dd372b8 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -408,7 +408,7 @@ class bug extends control $moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $branch); if(empty($moduleOptionMenu)) die(js::locate(helper::createLink('tree', 'browse', "productID=$productID&view=story"))); - $productList = $this->loadModel('block')->getProducts('noclosed', ''); + $productList = $this->product->getOrderedProducts('all'); foreach($productList as $product) $products[$product->id] = $product->name; /* Set custom. */ @@ -1322,7 +1322,7 @@ class bug extends control if($bug->toTask != 0) { $task = $this->task->getById($bug->toTask); - if($task->deleted != '1') + if(!$task->deleted) { $confirmURL = $this->createLink('task', 'view', "taskID=$bug->toTask"); unset($_GET['onlybody']); diff --git a/module/bug/model.php b/module/bug/model.php index 154f8cc4ca..81701faa5c 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -1688,6 +1688,7 @@ class bugModel extends model $projects = $this->loadModel('project')->getPairs(); $maxLength = 12; + if(common::checkNotCN()) $maxLength = 22; foreach($datas as $projectID => $data) { $data->name = isset($projects[$projectID]) ? $projects[$projectID] : $this->lang->report->undefined; @@ -2311,7 +2312,7 @@ class bugModel extends model if($branch and strpos($bugQuery, '`branch` =') === false) $bugQuery .= " AND `branch` in('0','$branch')"; if(strpos($bugQuery, $allBranch) !== false) $bugQuery = str_replace($allBranch, '1', $bugQuery); - /* Fix bug #2877. */ + /* Fix bug #2878. */ if(strpos($bugQuery, '`resolvedDate`') !== false) $bugQuery .= " AND `resolvedDate` != '0000-00-00 00:00:00'"; if(strpos($bugQuery, '`closedDate`') !== false) $bugQuery .= " AND `closedDate` != '0000-00-00 00:00:00'"; diff --git a/module/build/view/create.html.php b/module/build/view/create.html.php index c22cee3054..67c6d0ae1e 100644 --- a/module/build/view/create.html.php +++ b/module/build/view/create.html.php @@ -44,7 +44,7 @@ -
  build->last . ': ' . $lastBuild->name . '';?>
+
  build->last . ': ' . $lastBuild->name . '';?>
diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index c87343227c..8e74c17adc 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -704,6 +704,7 @@ $lang->resource->doc->create = 'create'; $lang->resource->doc->view = 'view'; $lang->resource->doc->edit = 'edit'; $lang->resource->doc->delete = 'delete'; +$lang->resource->doc->deleteFile = 'deleteFile'; $lang->resource->doc->allLibs = 'allLibs'; $lang->resource->doc->objectLibs = 'objectLibs'; $lang->resource->doc->showFiles = 'showFiles'; @@ -720,11 +721,12 @@ $lang->doc->methodOrder[25] = 'create'; $lang->doc->methodOrder[30] = 'view'; $lang->doc->methodOrder[35] = 'edit'; $lang->doc->methodOrder[40] = 'delete'; -$lang->doc->methodOrder[45] = 'allLibs'; -$lang->doc->methodOrder[50] = 'showFiles'; -$lang->doc->methodOrder[55] = 'objectLibs'; -$lang->doc->methodOrder[60] = 'sort'; -$lang->doc->methodOrder[65] = 'collect'; +$lang->doc->methodOrder[45] = 'deleteFile'; +$lang->doc->methodOrder[50] = 'allLibs'; +$lang->doc->methodOrder[55] = 'showFiles'; +$lang->doc->methodOrder[60] = 'objectLibs'; +$lang->doc->methodOrder[65] = 'sort'; +$lang->doc->methodOrder[70] = 'collect'; //$lang->doc->methodOrder[55] = 'diff'; /* mail. */ diff --git a/module/product/model.php b/module/product/model.php index ef8cda66ba..35085b1af5 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -339,6 +339,58 @@ class productModel extends model $products = $this->dao->select('id, name, status')->from(TABLE_PRODUCT)->where('deleted')->eq(0)->fetchGroup('status'); } + /** + * Get ordered products + * + * @param string $status + * @param int $num + * @access public + * @return array + */ + public function getOrderedProducts($status, $num = 0) + { + $products = $this->getList($status); + if(empty($products)) return $products; + + $lines = $this->loadModel('tree')->getLinePairs($useShort = true); + $productList = array(); + foreach($lines as $id => $name) + { + foreach($products as $key => $product) + { + if($product->line == $id) + { + $product->name = $name . '/' . $product->name; + $productList[] = $product; + unset($products[$key]); + } + } + } + $productList = array_merge($productList, $products); + + $products = $mineProducts = $otherProducts = $closedProducts = array(); + foreach($productList as $product) + { + if(!$this->app->user->admin and !$this->checkPriv($product->id)) continue; + if($product->status == 'normal' and $product->PO == $this->app->user->account) + { + $mineProducts[$product->id] = $product; + } + elseif($product->status == 'normal' and $product->PO != $this->app->user->account) + { + $otherProducts[$product->id] = $product; + } + elseif($product->status == 'closed') + { + $closedProducts[$product->id] = $product; + } + } + $products = $mineProducts + $otherProducts + $closedProducts; + + if(empty($num)) return $products; + return array_slice($products, 0, $num, true); + } + /** * Create a product. * diff --git a/module/project/model.php b/module/project/model.php index 4eab4e76d1..0b3ae632ca 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -850,6 +850,7 @@ class projectModel extends model ->orderBy($orderBy) ->page($pager) ->fetchAll('id'); + if(empty($projects)) return array(); $projectKeys = array_keys($projects); $stats = array(); @@ -1120,6 +1121,42 @@ class projectModel extends model return $query->fetchAll('id'); } + /** + * Get ordered projects. + * + * @param string $status + * @param int $num + * @access public + * @return array + */ + public function getOrderedProjects($status, $num = 0) + { + $projectList = $this->getList($status); + if(empty($projectList)) return $projectList; + + $projects = $mineProjects = $otherProjects = $closedProjects = array(); + foreach($projectList as $project) + { + if(!$this->app->user->admin and !$this->checkPriv($project->id)) continue; + if($project->status != 'done' and $project->status != 'closed' and $project->PM == $this->app->user->account) + { + $mineProjects[$project->id] = $project; + } + elseif($project->status != 'done' and $project->status != 'closed' and !($project->PM == $this->app->user->account)) + { + $otherProjects[$project->id] = $project; + } + elseif($project->status == 'done' or $project->status == 'closed') + { + $closedProjects[$project->id] = $project; + } + } + $projects = $mineProjects + $otherProjects + $closedProjects; + + if(empty($num)) return $projects; + return array_slice($projects, 0, $num, true); + } + /** * Build story search form. * diff --git a/module/project/view/story.html.php b/module/project/view/story.html.php index e670351a43..bce2c41a31 100644 --- a/module/project/view/story.html.php +++ b/module/project/view/story.html.php @@ -54,8 +54,9 @@ echo " {$lang->story->create} "; echo ''; echo "'; echo ''; } diff --git a/module/task/control.php b/module/task/control.php index 6764bb719e..509341b607 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -1072,6 +1072,7 @@ class task extends control /* Skip parent task when batch close task. */ if($task->parent == '-1') continue; + /* Skip closed task when batch close task. */ if($task->status == 'closed') continue;