From ad32cd3092be5407203b84161547d711e660bd27 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Fri, 8 Jul 2022 11:00:47 +0800 Subject: [PATCH] * Fix getRows and set config for bug. --- module/bug/config.php | 79 +++++++++++++++++- module/bug/control.php | 177 +--------------------------------------- module/bug/model.php | 29 +++++++ module/port/control.php | 21 +++-- module/port/model.php | 24 ++++-- 5 files changed, 138 insertions(+), 192 deletions(-) diff --git a/module/bug/config.php b/module/bug/config.php index 5f6f19c8b9..3b190fcbaa 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -26,7 +26,7 @@ $config->bug->list->allFields = 'id, module, execution, story, task, $config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution'; -$config->bug->list->exportFields = 'id, product, branch, module, project, execution, story, task, +$config->bug->exportFields = 'id, product, branch, module, project, execution, story, task, title, keywords, severity, pri, type, os, browser, steps, status, deadline, activatedCount, confirmed, mailto, openedBy, openedDate, openedBuild, @@ -37,7 +37,82 @@ $config->bug->list->exportFields = 'id, product, branch, module, project, execut case, lastEditedBy, lastEditedDate, files ,feedbackBy, notifyEmail'; -if($config->systemMode == 'classic') $config->bug->list->exportFields = str_replace(' project,', '', $config->bug->list->exportFields); + +$config->bug->fieldList['id']['title'] = 'id'; + +$config->bug->fieldList['product']['title'] = 'product'; +//$config->bug->fieldList['product']['foreignKey'] = true; +//$config->bug->fieldList['product']['foreignKeySource'] = ; + +$config->bug->fieldList['branch']['title'] = 'branch'; +$config->bug->fieldList['branch']['foreignKey'] = true; +$config->bug->fieldList['branch']['foreignKeySource'] = array('module' => 'branch', 'method' => 'getPairs', 'params' => '$executionID'); + +$config->bug->fieldList['module']['title'] = 'module'; +$config->bug->fieldList['module']['foreignKey'] = true; +$config->bug->fieldList['module']['foreignKeySource'] = array('module' => 'tree', 'method' => 'getAllModulePairs', 'params' => 'bug');; + +$config->bug->fieldList['project']['title'] = 'project'; +$config->bug->fieldList['project']['foreignKey'] = true; +$config->bug->fieldList['project']['foreignKeySource'] = array('module' => 'product', 'method' => 'getProjectPairsByProduct', 'params' => '$productID'); + +$config->bug->fieldList['execution']['title'] = 'execution'; +$config->bug->fieldList['execution']['foreignKey'] = true; +$config->bug->fieldList['execution']['foreignKeySource'] = array('module' => 'execution', 'method' =>'getPairs'); + +$config->bug->fieldList['story']['title'] = 'story'; +$config->bug->fieldList['story']['foreignKey'] = true; +$config->bug->fieldList['story']['foreignKeySource'] = array('module' => 'bug', 'method' =>'getRelatedObjects', 'params' => 'story&id,title'); + +$config->bug->fieldList['task']['title'] = 'task'; + +$config->bug->fieldList['steps']['title'] = 'steps'; + +$config->bug->fieldList['status']['title'] = 'status'; + +$config->bug->fieldList['deadline']['title'] = 'deadline'; + +$config->bug->fieldList['activatedCount']['title'] = 'activatedCount'; + +$config->bug->fieldList['confirmed']['title'] = 'confirmed'; + +$config->bug->fieldList['mailto']['title'] = 'mailto'; + +$config->bug->fieldList['openedBy']['title'] = 'openedBy'; + +$config->bug->fieldList['openedDate']['title'] = 'openedDate'; + +$config->bug->fieldList['openedBuild']['title'] = 'openedBuild'; + +$config->bug->fieldList['assignedTo']['title'] = 'assignedTo'; + +$config->bug->fieldList['assignedDate']['title'] = 'assignedDate'; + +$config->bug->fieldList['resolvedBy']['title'] = 'resolvedBy'; + +$config->bug->fieldList['resolution']['title'] = 'resolution'; + +$config->bug->fieldList['resolvedBuild']['title'] = 'resolvedBuild'; + +$config->bug->fieldList['resolvedDate']['title'] = 'resolvedDate'; + +$config->bug->fieldList['closedBy']['title'] = 'closedBy'; + +$config->bug->fieldList['closedDate']['title'] = 'closedDate'; + +$config->bug->fieldList['duplicateBug']['title'] = 'duplicateBug'; + +$config->bug->fieldList['linkBug']['title'] = 'linkBug'; + +$config->bug->fieldList['case']['title'] = 'case'; + +$config->bug->fieldList['lastEditedBy']['title'] = 'lastEditedBy'; +$config->bug->fieldList['lastEditedDate']['title'] = 'lastEditedDate'; +$config->bug->fieldList['files']['title'] = 'files'; +$config->bug->fieldList['feedbackBy']['title'] = 'feedbackBy'; +$config->bug->fieldList['notifyEmail']['title'] = 'notifyEmail'; + +if($config->systemMode == 'classic') $config->bug->exportFields = str_replace(' project,', '', $config->bug->exportFields); $config->bug->list->customCreateFields = 'execution,noticefeedbackBy,story,task,pri,severity,os,browser,deadline,mailto,keywords'; $config->bug->list->customBatchEditFields = 'type,severity,pri,productplan,assignedTo,deadline,resolvedBy,resolution,os,browser,keywords'; diff --git a/module/bug/control.php b/module/bug/control.php index 478ce03b7d..c01bb8e481 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -2268,181 +2268,8 @@ class bug extends control { $this->loadModel('file'); $this->loadModel('branch'); - $bugLang = $this->lang->bug; - $bugConfig = $this->config->bug; - /* Create field lists. */ - $fields = $this->post->exportFields ? $this->post->exportFields : explode(',', $bugConfig->list->exportFields); - foreach($fields as $key => $fieldName) - { - $fieldName = trim($fieldName); - $fields[$fieldName] = isset($bugLang->$fieldName) ? $bugLang->$fieldName : $fieldName; - unset($fields[$key]); - } - - /* Get bugs. */ - $bugs = $this->dao->select('*')->from(TABLE_BUG)->where($this->session->bugQueryCondition) - ->beginIF($this->post->exportType == 'selected')->andWhere('id')->in($this->cookie->checkedItem)->fi() - ->orderBy($orderBy)->fetchAll('id'); - - /* Get users, products and executions. */ - $users = $this->loadModel('user')->getPairs('noletter'); - $products = $this->loadModel('product')->getPairs(); - $projects = $this->loadModel('project')->getPairsByProgram(); - $executions = $this->loadModel('execution')->getPairs($this->projectID, 'all', 'all'); - - /* Get related objects id lists. */ - $relatedProductIdList = array(); - $relatedStoryIdList = array(); - $relatedTaskIdList = array(); - $relatedBugIdList = array(); - $relatedCaseIdList = array(); - $relatedBuildIdList = array(); - $relatedBranchIdList = array(); - - foreach($bugs as $bug) - { - $relatedProductIdList[$bug->product] = $bug->product; - $relatedStoryIdList[$bug->story] = $bug->story; - $relatedTaskIdList[$bug->task] = $bug->task; - $relatedCaseIdList[$bug->case] = $bug->case; - $relatedBugIdList[$bug->duplicateBug] = $bug->duplicateBug; - $relatedBranchIdList[$bug->branch] = $bug->branch; - - /* Process link bugs. */ - $linkBugs = explode(',', $bug->linkBug); - foreach($linkBugs as $linkBugID) - { - if($linkBugID) $relatedBugIdList[$linkBugID] = trim($linkBugID); - } - - /* Process builds. */ - $builds = $bug->openedBuild . ',' . $bug->resolvedBuild; - $builds = explode(',', $builds); - foreach($builds as $buildID) - { - if($buildID) $relatedBuildIdList[$buildID] = trim($buildID); - } - } - - /* Get related objects title or names. */ - $productsType = $this->dao->select('id, type')->from(TABLE_PRODUCT)->where('id')->in($relatedProductIdList)->fetchPairs(); - $relatedStories = $this->dao->select('id,title')->from(TABLE_STORY) ->where('id')->in($relatedStoryIdList)->fetchPairs(); - $relatedTasks = $this->dao->select('id, name')->from(TABLE_TASK)->where('id')->in($relatedTaskIdList)->fetchPairs(); - $relatedBugs = $this->dao->select('id, title')->from(TABLE_BUG)->where('id')->in($relatedBugIdList)->fetchPairs(); - $relatedCases = $this->dao->select('id, title')->from(TABLE_CASE)->where('id')->in($relatedCaseIdList)->fetchPairs(); - $relatedBranch = array('0' => $this->lang->branch->main) + $this->dao->select('id, name')->from(TABLE_BRANCH)->where('id')->in($relatedBranchIdList)->fetchPairs(); - $relatedBuilds = array('trunk' => $this->lang->trunk) + $this->dao->select('id, name')->from(TABLE_BUILD)->where('id')->in($relatedBuildIdList)->fetchPairs(); - $relatedFiles = $this->dao->select('id, objectID, pathname, title')->from(TABLE_FILE)->where('objectType')->eq('bug')->andWhere('objectID')->in(@array_keys($bugs))->andWhere('extra')->ne('editor')->fetchGroup('objectID'); - $relatedModules = $this->loadModel('tree')->getAllModulePairs('bug'); - if($this->config->edition == 'max') $reviews = $this->loadModel('review')->getPairs(0, $productID); - - foreach($bugs as $bug) - { - if($this->post->fileType == 'csv') - { - $bug->steps = str_replace("
", "\n", $bug->steps); - $bug->steps = str_replace('"', '""', $bug->steps); - $bug->steps = str_replace(' ', ' ', $bug->steps); - } - - $bug->openedDate = !helper::isZeroDate($bug->openedDate) ? $bug->openedDate : ''; - $bug->assignedDate = !helper::isZeroDate($bug->assignedDate) ? $bug->assignedDate : ''; - $bug->resolvedDate = !helper::isZeroDate($bug->resolvedDate) ? $bug->resolvedDate : ''; - $bug->closedDate = !helper::isZeroDate($bug->closedDate) ? $bug->closedDate : ''; - $bug->lastEditedDate = !helper::isZeroDate($bug->lastEditedDate) ? $bug->lastEditedDate : ''; - $bug->deadline = !helper::isZeroDate($bug->deadline) ? $bug->deadline : ''; - - /* fill some field with useful value. */ - $bug->product = !isset($products[$bug->product]) ? '' : $products[$bug->product] . "(#$bug->product)"; - $bug->project = !isset($projects[$bug->project]) ? '' : $projects[$bug->project] . "(#$bug->project)"; - $bug->execution = !isset($executions[$bug->execution]) ? '' : $executions[$bug->execution] . "(#$bug->execution)"; - $bug->story = !isset($relatedStories[$bug->story]) ? '' : $relatedStories[$bug->story] . "(#$bug->story)"; - $bug->task = !isset($relatedTasks[$bug->task]) ? '' : $relatedTasks[$bug->task] . "($bug->task)"; - $bug->case = !isset($relatedCases[$bug->case]) ? '' : $relatedCases[$bug->case] . "($bug->case)"; - if($this->config->edition == 'max' and isset($reviews)) $bug->identify = !isset($reviews[$bug->identify]) ? '' : $reviews[$bug->identify] . "(#$bug->identify)"; - - if(isset($relatedModules[$bug->module])) $bug->module = $relatedModules[$bug->module] . "(#$bug->module)"; - if(isset($relatedBugs[$bug->duplicateBug])) $bug->duplicateBug = $relatedBugs[$bug->duplicateBug] . "($bug->duplicateBug)"; - if(isset($relatedBuilds[$bug->resolvedBuild])) $bug->resolvedBuild = $relatedBuilds[$bug->resolvedBuild] . "(#$bug->resolvedBuild)"; - if(isset($relatedBranch[$bug->branch])) $bug->branch = $relatedBranch[$bug->branch] . "(#$bug->branch)"; - - if(isset($bugLang->priList[$bug->pri])) $bug->pri = $bugLang->priList[$bug->pri]; - if(isset($bugLang->typeList[$bug->type])) $bug->type = $bugLang->typeList[$bug->type]; - if(isset($bugLang->severityList[$bug->severity])) $bug->severity = $bugLang->severityList[$bug->severity]; - if(isset($bugLang->osList[$bug->os])) $bug->os = $bugLang->osList[$bug->os]; - if(isset($bugLang->browserList[$bug->browser])) $bug->browser = $bugLang->browserList[$bug->browser]; - if(isset($bugLang->statusList[$bug->status])) $bug->status = $this->processStatus('bug', $bug); - if(isset($bugLang->confirmedList[$bug->confirmed])) $bug->confirmed = $bugLang->confirmedList[$bug->confirmed]; - if(isset($bugLang->resolutionList[$bug->resolution])) $bug->resolution = $bugLang->resolutionList[$bug->resolution]; - - if(isset($users[$bug->openedBy])) $bug->openedBy = $users[$bug->openedBy]; - if(isset($users[$bug->assignedTo])) $bug->assignedTo = $users[$bug->assignedTo] . "(#$bug->assignedTo)"; - if(isset($users[$bug->resolvedBy])) $bug->resolvedBy = $users[$bug->resolvedBy]; - if(isset($users[$bug->lastEditedBy])) $bug->lastEditedBy = $users[$bug->lastEditedBy]; - if(isset($users[$bug->closedBy])) $bug->closedBy = $users[$bug->closedBy]; - - $bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES); - - if($bug->linkBug) - { - $tmpLinkBugs = array(); - $linkBugIdList = explode(',', $bug->linkBug); - foreach($linkBugIdList as $linkBugID) - { - $linkBugID = trim($linkBugID); - $tmpLinkBugs[] = isset($relatedBugs[$linkBugID]) ? $relatedBugs[$linkBugID] : $linkBugID; - } - $bug->linkBug = join("; \n", $tmpLinkBugs); - } - - if($bug->openedBuild) - { - $tmpOpenedBuilds = array(); - $tmpResolvedBuilds = array(); - $buildIdList = explode(',', $bug->openedBuild); - foreach($buildIdList as $buildID) - { - $buildID = trim($buildID); - $tmpOpenedBuilds[] = isset($relatedBuilds[$buildID]) ? $relatedBuilds[$buildID] . "(#$buildID)" : $buildID; - } - $bug->openedBuild = join("\n", $tmpOpenedBuilds); - if($this->post->fileType == 'html') $bug->openedBuild = nl2br($bug->openedBuild); - } - - /* Set related files. */ - $bug->files = ''; - if(isset($relatedFiles[$bug->id])) - { - foreach($relatedFiles[$bug->id] as $file) - { - $fileURL = common::getSysURL() . $this->file->webPath . $this->file->getRealPathName($file->pathname); - $bug->files .= html::a($fileURL, $file->title, '_blank') . '
'; - } - } - - $bug->mailto = trim(trim($bug->mailto), ','); - $mailtos = explode(',', $bug->mailto); - $bug->mailto = ''; - foreach($mailtos as $mailto) - { - $mailto = trim($mailto); - if(isset($users[$mailto])) $bug->mailto .= $users[$mailto] . ','; - } - $bug->mailto = rtrim($bug->mailto, ','); - - unset($bug->caseVersion); - unset($bug->result); - unset($bug->deleted); - } - - if(!(in_array('platform', $productsType) or in_array('branch', $productsType))) unset($fields['branch']);// If products's type are normal, unset branch field. - if($this->config->edition != 'open') list($fields, $bugs) = $this->loadModel('workflowfield')->appendDataFromFlow($fields, $bugs); - - $this->post->set('fields', $fields); - $this->post->set('rows', $bugs); - $this->post->set('kind', 'bug'); - $this->fetch('file', 'export2' . $this->post->fileType, $_POST); + $this->fetch('port', 'export', 'model=bug¶ms=productID=' . $productID . ',executionID=' . $executionID); } $fileName = $this->lang->bug->common; @@ -2460,7 +2287,7 @@ class bug extends control } $this->view->fileName = $fileName; - $this->view->allExportFields = $this->config->bug->list->exportFields; + $this->view->allExportFields = $this->config->bug->exportFields; $this->view->customExport = true; $this->display(); } diff --git a/module/bug/model.php b/module/bug/model.php index ed1b76ea8c..f7d1d6547c 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -3433,4 +3433,33 @@ class bugModel extends model return $menu; } + + /** + * Get related objects id lists. + * + * @param int $object + * @param string $name + * @access public + * @return void + */ + public function getRelatedObjects($object, $pairs = '') + { + /* Get bugs. */ + $bugs = $this->dao->select('*')->from(TABLE_BUG)->where($this->session->bugQueryCondition) + ->fetchAll('id'); + + /* Get related objects id lists. */ + $relatedObjectIdList = array(); + $relatedObjects = array(); + + foreach($bugs as $bug) + { + $relatedObjectIdList[$bug->$object] = $bug->$object; + } + + /* Get related objects title or names. */ + $table = $this->config->objectTables[$object]; + if($table) $relatedObjects = $this->dao->select($pairs)->from($table) ->where('id')->in($relatedObjectIdList)->fetchPairs(); + return $relatedObjects; + } } diff --git a/module/port/control.php b/module/port/control.php index e8ce3248aa..af421f838b 100644 --- a/module/port/control.php +++ b/module/port/control.php @@ -41,6 +41,7 @@ class port extends control $this->post->set('rows', $exportDatas['rows']); $this->post->set('fields', $exportDatas['fields']); $this->post->set('kind', $model); + $this->fetch('file', 'export2' . $_POST['fileType'], $_POST); } } @@ -94,11 +95,11 @@ class port extends control * Get ExportDatas. * * @param int $fieldList - * @param array $modelDatas + * @param array $rows * @access public * @return void */ - public function getExportDatas($fieldList, $modelDatas = array()) + public function getExportDatas($fieldList, $rows = array()) { $exportDatas = array(); $foreignKeyList = array(); @@ -112,26 +113,32 @@ class port extends control } } - if(empty($modelDatas)) return $exportDatas; + if(empty($rows)) return $exportDatas; $exportDatas['user'] = $this->loadModel('user')->getPairs('devfirst|noclosed|nodeleted'); - foreach ($modelDatas as $id => $values) + foreach ($rows as $id => $values) { foreach($values as $field => $value) { if(in_array($field, $foreignKeyList)) { - $modelDatas[$id]->$field = zget($exportDatas[$field], $value); + $rows[$id]->$field = zget($exportDatas[$field], $value); } elseif(strpos($this->config->port->userFields, $field) !== false) { - $modelDatas[$id]->$field = zget($exportDatas['user'], $value); + $rows[$id]->$field = zget($exportDatas['user'], $value); + } + + /* if value = 0 or value = 0000:00:00 set value = ''*/ + if(!$value or helper::isZeroDate($value)) + { + $rows[$id]->$field = ''; } } } - $exportDatas['rows'] = array_values($modelDatas); + $exportDatas['rows'] = array_values($rows); return $exportDatas; } diff --git a/module/port/model.php b/module/port/model.php index 6d3f306450..72fb7bf9ac 100644 --- a/module/port/model.php +++ b/module/port/model.php @@ -158,7 +158,7 @@ class portModel extends model if(empty($values)) { if(strpos($this->modelConfig->sysLangFields, $field)) return $this->modelLang->{$field.'List'}; - if(strpos($this->modelConfig->sysDataFields, $field)) return $this->portConfig->sysDataList[$values]; + if(strpos($this->modelConfig->sysDataFields, $field) and !empty($this->portConfig->sysDataList[$values])) return $this->portConfig->sysDataList[$values]; } return $values; @@ -261,18 +261,25 @@ class portModel extends model { $getParams = $this->session->{$model.'PortParams'}; - $params = empty($params) ? '' : $params; - if(!empty($params)) + if($params) { - $sourceParams = explode(',', $params); - foreach($sourceParams as $key => $param) + $params = explode('&', $params); + foreach($params as $param => $value) { - if(strpos($param, '$') !== false) $sourceParams[$key] = $getParams[ltrim($param, '$')]; + if(strpos($value, '$') !== false) $params[$param] = $getParams[ltrim($value, '$')]; } - $params = join(',', $sourceParams); } - $values = $this->loadModel($module)->$method($params); + /* If this method has multiple parameters use call_user_func_array */ + if(is_array($params)) + { + $values = call_user_func_array(array($this->loadModel($module), $method), $params); + } + else + { + $values = $this->loadModel($module)->$method($params); + } + if(!empty($pairs)) { $valuePairs = array(); @@ -285,6 +292,7 @@ class portModel extends model } $values = $valuePairs; } + return $values; }