From 2ab1aadd4e713a42c45b6e957e1e993ab2bdfbc6 Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Tue, 3 May 2011 08:20:33 +0000 Subject: [PATCH] * rewrite the export method. --- module/bug/control.php | 8 +-- module/task/config.php | 11 +++ module/task/control.php | 134 +++++++++++++++--------------------- module/task/model.php | 20 ------ module/testcase/control.php | 13 ++-- 5 files changed, 79 insertions(+), 107 deletions(-) diff --git a/module/bug/control.php b/module/bug/control.php index 9285560454..3ef280e98b 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -835,10 +835,10 @@ class bug extends control if(isset($relatedBugs[$bug->duplicateBug])) $bug->duplicateBug = $relatedBugs[$bug->duplicateBug]; if(isset($relatedCases[$bug->case])) $bug->case = $relatedCases[$bug->case]; - $bug->pri = $bugLang->priList[$bug->pri]; - $bug->type = $bugLang->typeList[$bug->type]; - $bug->status = $bugLang->statusList[$bug->status]; - $bug->resolution = $bugLang->resolutionList[$bug->resolution]; + 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->statusList[$bug->status])) $bug->status = $bugLang->statusList[$bug->status]; + 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]; diff --git a/module/task/config.php b/module/task/config.php index 4e62155d34..c305b5cac4 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -22,3 +22,14 @@ $config->task->search['params']['type'] = array('operator' => '=', $config->task->editor->create = array('id' => 'desc', 'tools' => 'simpleTools'); $config->task->editor->edit = array('id' => 'desc', 'tools' => 'simpleTools'); + +$config->task->exportFields = ' + id, project, story, + name, desc, + type, pri, deadline, status,estimate, consumed, left, + mailto, + openedBy, openedDate, assignedTo, assignedDate, + finishedBy, finishedDate, canceledBy, canceledDate, + closedBy, closedDate, closedReason, + lastEditedBy, lastEditedDate,files + '; diff --git a/module/task/control.php b/module/task/control.php index dad8013198..0eecc1f7fd 100644 --- a/module/task/control.php +++ b/module/task/control.php @@ -535,101 +535,81 @@ class task extends control */ public function export($projectID, $orderBy) { - $fields = array(); - $users = $this->loadModel('user')->getPairs('noletter'); - $projects = $this->loadModel('project')->getPairs(); - $relatedStories = $this->dao->select('id,title')->from(TABLE_STORY)->fetchPairs(); - - /* get the fields of task module from lang. */ - $fields = array( - 'id' => $this->lang->task->id, - 'project' => $this->lang->task->project, - 'story' => $this->lang->task->story, - 'storyVersion' => $this->lang->task->storyVersion, - 'name' => $this->lang->task->name, - 'type' => $this->lang->task->type, - 'pri' => $this->lang->task->pri, - 'estimate' => $this->lang->task->estimate, - 'consumed' => $this->lang->task->consumed, - 'left' => $this->lang->task->left, - 'deadline' => $this->lang->task->deadline, - 'status' => $this->lang->task->status, - 'statusCustom' => $this->lang->task->statusCustom, - 'mailto' => $this->lang->task->mailto, - 'desc' => $this->lang->task->desc, - 'openedBy' => $this->lang->task->openedBy, - 'openedDate' => $this->lang->task->openedDate, - 'assignedTo' => $this->lang->task->assignedTo, - 'assignedDate' => $this->lang->task->assignedDate, - 'finishedBy' => $this->lang->task->finishedBy, - 'finishedDate' => $this->lang->task->finishedDate, - 'canceledBy' => $this->lang->task->canceledBy, - 'canceledDate' => $this->lang->task->canceledDate, - 'closedBy' => $this->lang->task->closedBy, - 'closedDate' => $this->lang->task->closedDate, - 'closedReason' => $this->lang->task->closedReason, - 'lastEditedBy' => $this->lang->task->lastEditedBy, - 'lastEditedDate' => $this->lang->task->lastEditedDate, - ); - if($_POST) { - $tasks = $this->task->getByQuery($projectID, $this->session->taskReport, $orderBy); + $taskLang = $this->lang->task; + $taskConfig = $this->config->task; + + /* Create field lists. */ + $fields = explode(',', $taskConfig->exportFields); + foreach($fields as $key => $fieldName) + { + $fieldName = trim($fieldName); + $fields[$fieldName] = isset($taskLang->$fieldName) ? $taskLang->$fieldName : $fieldName; + unset($fields[$key]); + } + + /* Get tasks. */ + $tasks = $this->dao->select('*')->from(TABLE_TASK)->alias('t1')->where($this->session->taskReportCondition)->orderBy($orderBy)->fetchAll('id'); + + /* Get users and projects. */ + $users = $this->loadModel('user')->getPairs('noletter'); + $projects = $this->loadModel('project')->getPairs('all'); + + /* Get related objects id lists. */ + $relatedStoryIdList = array(); + foreach($tasks as $task) $relatedStoryIdList[$task->story] = $task->story; + + /* Get related objects title or names. */ + $relatedStories = $this->dao->select('id,title')->from(TABLE_STORY) ->where('id')->in($relatedStoryIdList)->fetchPairs(); + $relatedFiles = $this->dao->select('id, objectID, pathname, title')->from(TABLE_FILE)->where('objectType')->eq('task')->andWhere('objectID')->in(@array_keys($tasks))->fetchGroup('objectID'); foreach($tasks as $task) { - if($_POST['fileType'] == 'html') + if($this->post->fileType == 'csv') { - $legendAttatchs = $this->dao->select('pathname, title')->from(TABLE_FILE)->where('objectType')->eq('task')->andWhere('objectID')->eq($task->id)->fetchAll(); - if($legendAttatchs) - { - foreach($legendAttatchs as $legendAttatch) - { - $legendAttatch->pathname = "http://" . $_SERVER['HTTP_HOST'] . $this->config->webRoot . "data/upload/$task->company/" . $legendAttatch->pathname; - $task->legendAttatchs .= "pathname>" . $legendAttatch->title . "
"; - } - } - } - else if($_POST['fileType'] == 'csv') - { - $task->desc = str_replace("<br />", "\n", $task->desc); + $task->desc = htmlspecialchars_decode($task->desc); $task->desc = str_replace("
", "\n", $task->desc); - $task->desc = str_replace(" ", " ", $task->desc); $task->desc = str_replace('"', '""', $task->desc); } - /* drop some field that is not needed. */ - unset($task->company); - /* fill some field with useful value. */ $task->story = isset($relatedStories[$task->story]) ? $relatedStories[$task->story] : ''; - $task->project = $projects[$task->project]; - $task->type = $this->lang->task->typeList[$task->type]; - $task->pri = $this->lang->task->priList[$task->pri]; - $task->estimate = substr($task->estimate, 0, 10); - $task->deadline = substr($task->deadline, 0, 10); - $task->status = $this->lang->task->statusList[$task->status]; - $task->openedBy = $users[$task->openedBy]; - $task->openedDate = substr($task->openedDate, 0, 10); - $task->assignedTo = $users[$task->assignedTo]; - $task->assignedDate = substr($task->assignedTo, 0, 10); - $task->finishedBy = $users[$task->finishedBy]; - $task->finishedDate = substr($task->finishedDate, 0, 10); - $task->canceledBy = $users[$task->canceledBy]; - $task->canceledDate = substr($task->canceledDate, 0, 10); - $task->closedBy = $users[$task->closedBy]; - $task->closedDate = substr($task->closedDate, 0, 10); - $task->closedReason = $this->lang->task->reasonList[$task->closedReason]; - $task->lastEditedBy = $users[$task->lastEditedBy]; + if(isset($projects[$task->project])) $task->project = $projects[$task->project]; + if(isset($taskLang->typeList[$task->type])) $task->type = $taskLang->typeList[$task->type]; + if(isset($taskLang->priList[$task->pri])) $task->pri = $taskLang->priList[$task->pri]; + if(isset($taskLang->statusList[$task->status])) $task->status = $taskLang->statusList[$task->status]; + if(isset($taskLang->reasonList[$task->closedReason])) $task->closedReason = $taskLang->reasonList[$task->closedReason]; + + if(isset($users[$task->openedBy])) $task->openedBy = $users[$task->openedBy]; + if(isset($users[$task->assignedTo])) $task->assignedTo = $users[$task->assignedTo]; + if(isset($users[$task->finishedBy])) $task->finishedBy = $users[$task->finishedBy]; + if(isset($users[$task->canceledBy])) $task->canceledBy = $users[$task->canceledBy]; + if(isset($users[$task->closedBy])) $task->closedBy = $users[$task->closedBy]; + if(isset($users[$task->lastEditedBy])) $task->lastEditedBy = $users[$task->lastEditedBy]; + + $task->openedDate = substr($task->openedDate, 0, 10); + $task->assignedDate = substr($task->assignedTo, 0, 10); + $task->finishedDate = substr($task->finishedDate, 0, 10); + $task->canceledDate = substr($task->canceledDate, 0, 10); + $task->closedDate = substr($task->closedDate, 0, 10); $task->lastEditedDate = substr($task->lastEditedDate, 0, 10); + + /* Set related files. */ + if(isset($relatedFiles[$task->id])) + { + foreach($relatedFiles[$task->id] as $file) + { + $fileURL = 'http://' . $this->server->http_host . $this->config->webRoot . "data/upload/$task->company/" . $file->pathname; + $task->files .= html::a($fileURL, $file->title, '_blank') . '
'; + } + } } $this->post->set('fields', $fields); $this->post->set('rows', $tasks); - if($this->post->fileType == 'csv') $this->fetch('file', 'export2CSV', $_POST); - if($this->post->fileType == 'xml') $this->fetch('file', 'export2XML', $_POST); - if($this->post->fileType == 'html') $this->fetch('file', 'export2HTML', $_POST); + $this->fetch('file', 'export2' . $this->post->fileType, $_POST); } $this->display(); diff --git a/module/task/model.php b/module/task/model.php index 99929ecfa3..f51eda6e38 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -299,26 +299,6 @@ class taskModel extends model return $this->processTask($task); } - /** - * getByQuery - * - * @param string $projectID - * @param string $query - * @param string $orderBy - * @param string $pager - * @access public - * @return void - */ - public function getByQuery($projectID, $query, $orderBy) - { - $tmpTasks = $this->dao->select('*')->from(TABLE_TASK)->alias('t1')->where($query) - ->andWhere('project')->eq((int)$projectID) - ->andWhere('deleted')->eq(0) - ->orderBy($orderBy) - ->fetchAll(); - return $tmpTasks; - } - /** * Get tasks of a project. * diff --git a/module/testcase/control.php b/module/testcase/control.php index 4bdcc333b6..b42bb80361 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -439,12 +439,13 @@ class testcase extends control if(isset($relatedModules[$case->module])) $case->module = $relatedModules[$case->module]; if(isset($relatedStories[$case->story])) $case->story = $relatedStories[$case->story]; - $case->pri = $caseLang->priList[$case->pri]; - $case->type = $caseLang->typeList[$case->type]; - $case->stage = $caseLang->stageList[$case->stage]; - $case->status = $this->lang->case->statusList[$case->status]; - $case->openedBy = $users[$case->openedBy]; - $case->lastEditedBy = $users[$case->lastEditedBy]; + if(isset($caseLang->priList[$case->pri])) $case->pri = $caseLang->priList[$case->pri]; + if(isset($caseLang->typeList[$case->type])) $case->type = $caseLang->typeList[$case->type]; + if(isset($caseLang->stageList[$case->stage])) $case->stage = $caseLang->stageList[$case->stage]; + if(isset($caseLang->statusList[$case->status])) $case->status = $caseLang->statusList[$case->status]; + if(isset($users[$case->openedBy])) $case->openedBy = $users[$case->openedBy]; + if(isset($users[$case->lastEditedBy])) $case->lastEditedBy = $users[$case->lastEditedBy]; + $case->openedDate = substr($case->openedDate, 0, 10); $case->lastEditedDate = substr($case->lastEditedDate, 0, 10);