diff --git a/db/update18.3.sql b/db/update18.3.sql index cf9c51a501..f6efd25a12 100644 --- a/db/update18.3.sql +++ b/db/update18.3.sql @@ -738,6 +738,12 @@ CHANGE `team` `team` varchar(90) NOT NULL DEFAULT '', CHANGE `whitelist` `whitelist` text NULL, CHANGE `order` `order` mediumint unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `zt_relation` +CHANGE `project` `project` mediumint NOT NULL DEFAULT '0', +CHANGE `product` `product` mediumint NOT NULL DEFAULT '0', +CHANGE `execution` `execution` mediumint NOT NULL DEFAULT '0', +CHANGE `extra` `extra` char(30) NOT NULL DEFAULT ''; + ALTER TABLE `zt_release` CHANGE `project` `project` varchar(255) NOT NULL DEFAULT '0', CHANGE `leftBugs` `leftBugs` text NULL; diff --git a/db/zentao.sql b/db/zentao.sql index 597de86cd7..b976da3927 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1379,9 +1379,9 @@ CREATE UNIQUE INDEX `project` ON `zt_projectstory`(`project`,`story`); -- DROP TABLE IF EXISTS `zt_relation`; CREATE TABLE IF NOT EXISTS `zt_relation` ( `id` int(8) NOT NULL AUTO_INCREMENT, - `project` mediumint(8) NOT NULL, - `product` mediumint(8) NOT NULL, - `execution` mediumint(8) NOT NULL, + `project` mediumint(8) NOT NULL DEFAULT '0', + `product` mediumint(8) NOT NULL DEFAULT '0', + `execution` mediumint(8) NOT NULL DEFAULT '0', `AType` char(30) NOT NULL, `AID` mediumint(8) NOT NULL, `AVersion` char(30) NOT NULL, @@ -1389,7 +1389,7 @@ CREATE TABLE IF NOT EXISTS `zt_relation` ( `BType` char(30) NOT NULL, `BID` mediumint(8) NOT NULL, `BVersion` char(30) NOT NULL, - `extra` char(30) NOT NULL, + `extra` char(30) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE='InnoDB' DEFAULT CHARSET=utf8; CREATE UNIQUE INDEX `relation` ON `zt_relation`(`product`,`relation`,`AType`,`BType`, `AID`, `BID`); diff --git a/module/block/config.php b/module/block/config.php index 15dd685cb6..c7dfa03993 100644 --- a/module/block/config.php +++ b/module/block/config.php @@ -85,3 +85,4 @@ $config->block->modules['doc'] = new stdclass(); $config->block->modules['doc']->moreLinkList = new stdclass(); $config->block->modules['doc']->moreLinkList->docmycollection = 'doc|myspace|type=collect&libID=0&moduleID=0&browseType=all¶m=0&orderBy=editedDate_desc'; $config->block->modules['doc']->moreLinkList->productdoc = 'doc|productspace|'; +$config->block->modules['doc']->moreLinkList->projectdoc = 'doc|projectspace|'; diff --git a/module/block/control.php b/module/block/control.php index c31d135b24..eb16af3daa 100755 --- a/module/block/control.php +++ b/module/block/control.php @@ -2153,14 +2153,14 @@ class block extends control /* Set project status and count. */ $count = isset($this->params->count) ? (int)$this->params->count : 15; - $products = $this->loadModel('product')->getList(0, 'all'); - $involveds = $this->product->getList(0, 'involved'); + $products = $this->loadModel('product')->getOrderedProducts('all'); + $involveds = $this->product->getOrderedProducts('involved'); $productIdList = array_merge(array_keys($products), array_keys($involveds)); - $stmt = $this->dao->select('*')->from(TABLE_DOC) + $stmt = $this->dao->select('id,product,lib,title,type,addedBy,addedDate,editedDate,status,acl,groups,users,deleted')->from(TABLE_DOC)->alias('t1') ->where('deleted')->eq(0) ->andWhere('product')->in($productIdList) - ->orderBy('product,editedDate_desc') + ->orderBy('product,status,editedDate_desc') ->query(); $docGroup = array(); while($doc = $stmt->fetch()) @@ -2184,6 +2184,38 @@ class block extends control */ public function printProjectDocBlock() { + $this->loadModel('doc'); + $this->app->loadLang('project'); + + /* Set project status and count. */ + $count = isset($this->params->count) ? (int)$this->params->count : 15; + $involveds = $this->loadModel('program')->getProjectList('0', 'all', 0, 'order_asc', null, 0, $involved = 1); + $projects = $this->program->getProjectList('0', 'all', 0, 'order_asc'); + $projectIdList = array_merge(array_keys($projects), array_keys($involveds)); + + $stmt = $this->dao->select('t1.id,t1.lib,t1.title,t1.type,t1.addedBy,t1.addedDate,t1.editedDate,t1.status,t1.acl,t1.groups,t1.users,t1.deleted,if(t1.project = 0, t2.project, t1.project) as project')->from(TABLE_DOC)->alias('t1') + ->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution=t2.id') + ->where('t1.deleted')->eq(0) + ->andWhere('t2.deleted', true)->eq(0) + ->orWhere('t2.deleted is null') + ->markRight(1) + ->andWhere('t1.project',true)->in($projectIdList) + ->orWhere('t2.project',true)->in($projectIdList) + ->markRight(1) + ->orderBy('project,t1.status,t1.editedDate_desc') + ->query(); + $docGroup = array(); + while($doc = $stmt->fetch()) + { + if(!isset($docGroup[$doc->project])) $docGroup[$doc->project] = array(); + if(count($docGroup[$doc->project]) > $count) break; + if($this->doc->checkPrivDoc($doc)) $docGroup[$doc->project][$doc->id] = $doc; + } + + $this->view->users = $this->loadModel('user')->getPairs('noletter'); + $this->view->projects = $projects; + $this->view->involveds = $involveds; + $this->view->docGroup = $docGroup; } /** diff --git a/module/block/model.php b/module/block/model.php index 150d9a0188..b8a8e627f1 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -1148,7 +1148,8 @@ class blockModel extends model */ public function getProjectDocParams() { - return false; + $params = $this->appendCountParams(); + return json_encode($params); } /** diff --git a/module/block/view/productdocblock.html.php b/module/block/view/productdocblock.html.php index d4ea3b926c..b6c46c8995 100644 --- a/module/block/view/productdocblock.html.php +++ b/module/block/view/productdocblock.html.php @@ -12,7 +12,7 @@ .block-productdoc .nav-secondary > li {position: relative;} .block-productdoc .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;} .block-productdoc .nav-secondary > li > a:first-child {padding-right: 36px;} -.block-productdoc .nav-secondary > li.active > a:first-child {color: #3C4353; background: transparent; box-shadow: none;} +.block-productdoc .nav-secondary > li.active > a:first-child {color: #3C4353; box-shadow: none;} .block-productdoc .nav-secondary > li.active > a:first-child:hover, .block-productdoc .nav-secondary > li.active > a:first-child:focus, .block-productdoc .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;} @@ -52,6 +52,11 @@ .block-productdoc #productType {position: absolute;top: 6px;left: 120px;} .block-productdoc #productType .btn {border:0px;} + +.block-productdoc .table .c-name > .doc-title {display: inline-block; overflow: hidden; background: transparent; padding-right:0px;} +.block-productdoc .table .c-name > span.doc-title {line-height: 0; vertical-align: inherit;} +.block-productdoc .table .c-name[data-status=draft] > .doc-title {max-width: calc(100% - 35px);} +.block-productdoc .table .c-name > .draft {background-color:rgba(129, 102, 238, 0.12); color:#8166EE;}
@@ -118,21 +123,23 @@ function changeProductType(type)
-