diff --git a/db/update18.0.beta1.sql b/db/update18.0.beta1.sql new file mode 100644 index 0000000000..e7e4c35cbd --- /dev/null +++ b/db/update18.0.beta1.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_effort` ADD `extra` text COLLATE 'utf8_general_ci' NOT NULL AFTER `end`; diff --git a/db/zentao.sql b/db/zentao.sql index f17e27812a..5c27b3d7a6 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -6554,6 +6554,7 @@ ALTER TABLE `zt_effort` CHANGE `begin` `begin` smallint(4) unsigned zerofill NOT ALTER TABLE `zt_effort` CHANGE `end` `end` smallint(4) unsigned zerofill NOT NULL AFTER `begin`; ALTER TABLE `zt_effort` ADD `deleted` enum('0','1') NOT NULL DEFAULT '0' AFTER `end`; ALTER TABLE `zt_effort` ADD `order` tinyint unsigned NOT NULL DEFAULT '0' AFTER `end`; +ALTER TABLE `zt_effort` ADD `extra` text COLLATE 'utf8_general_ci' NULL AFTER `end`; ALTER TABLE `zt_effort` ADD INDEX `execution` (`execution`); ALTER TABLE `zt_effort` ADD INDEX `objectID` (`objectID`); ALTER TABLE `zt_effort` ADD INDEX `date` (`date`); diff --git a/module/action/config.php b/module/action/config.php index 053d148d83..8dce374066 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -62,7 +62,7 @@ $config->action->majorList['project'] = array('opened', 'edited'); $config->action->majorList['execution'] = array('opened', 'edited'); $config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan,gapanalysis,researchplan,researchreport,'; -$config->action->needGetRelateField = ',story,productplan,release,task,build,bug,testcase,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,researchplan,researchreport,meeting,kanbanlane,kanbancolumn,module,'; +$config->action->needGetRelateField = ',story,productplan,release,task,build,bug,testcase,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,researchplan,researchreport,meeting,kanbanlane,kanbancolumn,module,review,'; $config->action->noLinkModules = ',doclib,module,webhook,gitlab,gitea,gogs,sonarqube,pipeline,jenkins,kanban,kanbanspace,kanbancolumn,kanbanlane,kanbanregion,kanbancard,execution,project,traincategory,apistruct,program,product,user,entry,repo,'; $config->action->ignoreObjectType4Dynamic = 'kanbanregion,kanbanlane,kanbancolumn'; diff --git a/module/action/model.php b/module/action/model.php index 17954cb970..7ee8ea4231 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -287,6 +287,15 @@ class actionModel extends model if(strpos(',deleted,', ",$actionType,") !== false) $module = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->eq($objectID)->fetch(); if(!empty($module) and $module->type == 'story') $record['product'] = $module->root; break; + case 'review': + $result = $this->dao->select('*')->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch(); + if($result) + { + $products = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($result->project)->fetchPairs('product'); + $record['product'] = join(',', array_keys($products)); + $record['project'] = zget($result, 'project', 0); + } + break; default: $result = $this->dao->select('*')->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch(); $record['product'] = zget($result, 'product', '0'); diff --git a/module/execution/model.php b/module/execution/model.php index ac9033160a..d2d9a2001b 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -1582,14 +1582,17 @@ class executionModel extends model ->andWhere('type')->eq('execution') ->fetchPairs(); } + $project = $this->loadModel('project')->getByID($projectID); $executions = $this->dao->select('t1.*,t2.name projectName, t2.model as projectModel')->from(TABLE_EXECUTION)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') - ->beginIF($productID)->leftJoin(TABLE_PROJECTPRODUCT)->alias('t3')->on('t1.id=t3.project')->fi() + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t3')->on('t1.id=t3.project') + ->beginIF($project->division)->leftJoin(TABLE_PRODUCT)->alias('t4')->on('t4.id=t3.product')->fi() ->where('t1.type')->in('sprint,stage,kanban') ->andWhere('t1.deleted')->eq('0') ->andWhere('t1.vision')->eq($this->config->vision) ->andWhere('t1.multiple')->eq('1') + ->beginIF($project->division)->andWhere('t4.deleted')->eq('0')->fi() ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi() ->beginIF(!empty($executionQuery))->andWhere($executionQuery)->fi() ->beginIF($productID)->andWhere('t3.product')->eq($productID)->fi() diff --git a/module/productplan/config.php b/module/productplan/config.php index 4dddb53677..bd16b51610 100644 --- a/module/productplan/config.php +++ b/module/productplan/config.php @@ -30,7 +30,7 @@ $config->productplan->search['fields']['end'] = $lang->productplan->end; $config->productplan->search['params']['id'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->productplan->search['params']['title'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); -$config->productplan->search['params']['branch'] = array('operator' => '=', 'control' => 'select', 'values' => ''); +$config->productplan->search['params']['branch'] = array('operator' => 'include', 'control' => 'select', 'values' => ''); $config->productplan->search['params']['status'] = array('operator' => '=', 'control' => 'select', 'values' => array('' => '') + $lang->productplan->statusList); $config->productplan->search['params']['begin'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->productplan->search['params']['end'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); diff --git a/module/transfer/config.php b/module/transfer/config.php index 35deafb6c1..c53f3b1d84 100644 --- a/module/transfer/config.php +++ b/module/transfer/config.php @@ -18,6 +18,7 @@ $config->transfer->listFields = ''; $config->transfer->sysLangFields = ',pri,status,type,mode,severity,os,browser,resolution,confirmed,source,reviewResult,stage,change,category'; $config->transfer->sysDataFields = 'execution,product,user'; $config->transfer->userFields = 'assignedTo,openedBy,finishedBy,canceledBy,closedBy,lastEditedBy,lastRunner,resolvedBy,reviewedBy,mailto'; +$config->transfer->textareaFields = 'spec,desc'; $config->transfer->defaultZeroField = 'severity,pri'; $config->transfer->defaultEmptyField = ''; diff --git a/module/transfer/model.php b/module/transfer/model.php index 1cee8c3173..0721b4d5af 100644 --- a/module/transfer/model.php +++ b/module/transfer/model.php @@ -1473,6 +1473,7 @@ class transferModel extends model } $html .= ''; } + elseif(strpos($this->transferConfig->textareaFields, $field) !== false) $html .= '