diff --git a/module/convert/config.php b/module/convert/config.php index de99977d0a..8b58f272dc 100644 --- a/module/convert/config.php +++ b/module/convert/config.php @@ -1,7 +1,8 @@ app->loadLang('story'); + $this->app->loadLang('bug'); + $this->app->loadLang('task'); + if($_POST) { - a($_POST);die; + $this->session->set('linkType', $_POST); + + $response['result'] = 'success'; + $response['message'] = $this->lang->saveSuccess; + $response['locate'] = $this->createLink('convert', 'initJiraUser', "type=$type"); + return print($this->send($response)); } if($type == 'db') { - $this->convert->connectDB($dbName); - $issueTypePairs = $this->convert->getIssueTypePairs(); - $linkTypePairs = $this->convert->getLinkTypePairs(); + $dbh = $this->convert->connectDB($dbName); + + $issueTypePairs = $this->dao->dbh($dbh)->select('ID,pname')->from(JIRA_ISSUETYPE)->fetchPairs(); + $linkTypePairs = $this->dao->dbh($dbh)->select('ID,LINKNAME')->from(JIRA_ISSUELINKTYPE)->fetchPairs(); + $resolutions = $this->dao->dbh($dbh)->select('ID,pname')->from(JIRA_RESOLUTION)->fetchPairs(); + $statusList = $this->dao->dbh($dbh)->select('ID,pname')->from(JIRA_ISSUESTATUS)->fetchPairs(); } $this->view->title = $this->lang->convert->jira->mapJira2Zentao; $this->view->issueTypePairs = $issueTypePairs; $this->view->linkTypePairs = $linkTypePairs; + $this->view->resolutions = $resolutions; + $this->view->statusList = $statusList; + $this->display(); + } + + public function initJiraUser($type = 'db') + { + $this->app->loadLang('user'); + + if($_POST) + { + if(!$this->post->password1 || !$this->post->password2) + { + $response['result'] = 'fail'; + $response['message'] = $this->lang->convert->jira->passwordEmpty; + return print($this->send($response)); + } + + if($this->post->password1 != $this->post->password2) + { + $response['result'] = 'fail'; + $response['message'] = $this->lang->convert->jira->passwordDifferent; + return print($this->send($response)); + } + + $jiraUser['password'] = md5($this->post->password1); + $jiraUser['group'] = $this->post->group; + $this->session->set('jiraUser', $jiraUser); + + $response['result'] = 'success'; + $response['message'] = $this->lang->saveSuccess; + $response['locate'] = $this->createLink('convert', 'importJira', "type=$type"); + return print($this->send($response)); + } + + $this->view->title = $this->lang->convert->jira->initJiraUser; + $this->view->groups = $this->loadModel('group')->getPairs(); + $this->display(); + } + + public function importJira($method = 'db', $type = 'user', $lastID = 0) + { + set_time_limit(0); + + if($method = 'db') + { + if(helper::isAjaxRequest()) + { + $result = $this->convert->importJiraFromDB($type, $lastID); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + if(isset($result['finished']) and $result['finished']) + { + return $this->send(array('result' => 'finished', 'message' => $this->lang->convert->jira->importSuccessfully)); + } + else + { + $type = zget($this->lang->convert->jira->objectList, $result['type'], $result['type']); + return $this->send(array('result' => 'unfinished', 'message' => sprintf($this->lang->convert->jira->importResult, $type, $type, $result['count']), 'type' => $type, 'count' => $result['count'], 'next' => inlink('importJira', "type={$result['type']}&lastID={$result['lastID']}") )); + } + } + } + else + { + //$this->convert->importJiraFromFile(); + } + + $this->view->type = $type; + $this->view->title = $this->lang->convert->jira->importJira; $this->display(); } } diff --git a/module/convert/lang/zh-cn.php b/module/convert/lang/zh-cn.php index f586548793..3822cc01ba 100644 --- a/module/convert/lang/zh-cn.php +++ b/module/convert/lang/zh-cn.php @@ -116,22 +116,39 @@ $lang->convert->issue->zentao = '禅道'; $lang->convert->issue->goto = '转换为'; $lang->convert->jira = new stdclass(); -$lang->convert->jira->method = '选择导入方式'; -$lang->convert->jira->next = '下一步'; -$lang->convert->jira->importFromDB = '从数据库导入'; -$lang->convert->jira->importFromFile = '从文件导入'; -$lang->convert->jira->mapJira2Zentao = '设置对应关系'; -$lang->convert->jira->dbNameNotice = '请输入Jira数据库名字'; -$lang->convert->jira->importNotice = '注意:导入数据有风险!请务必确保如下操作步骤依次完成,再进行合并。'; -$lang->convert->jira->dbDesc = '
如果您的Jira使用Mysql数据库, 请选择此方式
'; -$lang->convert->jira->fileDesc = '如果您的Jira使用非Mysql数据库, 请选择此方式
'; -$lang->convert->jira->jiraObject = 'Jira Issues'; -$lang->convert->jira->zentaoObject = '禅道对象'; -$lang->convert->jira->jiraLinkType = 'Jira 关联关系'; -$lang->convert->jira->zentaoLinkType = '禅道关联关系'; +$lang->convert->jira->method = '选择导入方式'; +$lang->convert->jira->next = '下一步'; +$lang->convert->jira->importFromDB = '从数据库导入'; +$lang->convert->jira->importFromFile = '从文件导入'; +$lang->convert->jira->mapJira2Zentao = '设置对应关系'; +$lang->convert->jira->dbNameNotice = '请输入Jira数据库名字'; +$lang->convert->jira->importNotice = '注意:导入数据有风险!请务必确保如下操作步骤依次完成,再进行合并。'; +$lang->convert->jira->dbDesc = '如果您的Jira使用Mysql数据库, 请选择此方式
'; +$lang->convert->jira->fileDesc = '如果您的Jira使用非Mysql数据库, 请选择此方式
'; +$lang->convert->jira->jiraObject = 'Jira Issues'; +$lang->convert->jira->zentaoObject = '禅道对象'; +$lang->convert->jira->jiraLinkType = 'Jira 关联关系'; +$lang->convert->jira->zentaoLinkType = '禅道关联关系'; +$lang->convert->jira->jiraResolution = 'Jira 解决方案'; +$lang->convert->jira->zentaoResolution = '禅道Bug解决方案'; +$lang->convert->jira->zentaoReason = '禅道需求关闭原因'; +$lang->convert->jira->jiraStatus = 'Jira Issues 状态'; +$lang->convert->jira->storyStatus = '禅道需求状态'; +$lang->convert->jira->storyStage = '禅道需求阶段'; +$lang->convert->jira->bugStatus = '禅道Bug状态'; +$lang->convert->jira->taskStatus = '禅道任务状态'; +$lang->convert->jira->initJiraUser = '设置Jira用户'; +$lang->convert->jira->importJira = '导入Jira'; +$lang->convert->jira->start = '开始导入'; -$lang->convert->jira->dbNameEmpty = 'Jira数据库名字不能为空!'; -$lang->convert->jira->invalidDB = '无效的数据库名!'; +$lang->convert->jira->dbNameEmpty = 'Jira数据库名字不能为空!'; +$lang->convert->jira->invalidDB = '无效的数据库名!'; +$lang->convert->jira->passwordNotice = "设置Jira用户导入到禅道后的默认密码,用户后续可以在禅道中自行修改密码。"; +$lang->convert->jira->groupNotice = "设置Jira用户导入到禅道后的默认权限分组。"; +$lang->convert->jira->passwordDifferent = '两次密码不一致!'; +$lang->convert->jira->passwordEmpty = '密码不能为空!'; +$lang->convert->jira->importSuccessfully = 'Jira导入完成!'; +$lang->convert->jira->importResult = "导入 %s 数据, 已导入 %s 条记录;"; $lang->convert->jira->zentaoObjectList['task'] = '任务'; $lang->convert->jira->zentaoObjectList['requirement'] = '用户需求'; @@ -150,3 +167,10 @@ $lang->convert->jira->importSteps['db'][4] = "上述步骤完成后,请输 $lang->convert->jira->importSteps['file'][1] = '备份禅道数据库,备份Jira数据库。'; $lang->convert->jira->importSteps['file'][2] = '将Jira数据库导入到禅道使用的Mysql中,名字和禅道数据库区别开来。'; $lang->convert->jira->importSteps['file'][3] = "将Jira附件目录放到 %s 下。"; + +$lang->convert->jira->objectList['user'] = '用户'; +$lang->convert->jira->objectList['project'] = '项目'; +$lang->convert->jira->objectList['issue'] = 'Issue'; +$lang->convert->jira->objectList['build'] = '版本'; +//$lang->convert->jira->objectList['relates'] = '关联关系'; +$lang->convert->jira->objectList['file'] = '附件'; diff --git a/module/convert/model.php b/module/convert/model.php index 6776fad133..127d385957 100644 --- a/module/convert/model.php +++ b/module/convert/model.php @@ -94,13 +94,26 @@ class convertModel extends model $this->session->set('state', $state); } - public function getIssueTypePairs() + public function importJiraFromDB($type = '', $lastID = 0) { - return $this->dao->dbh($this->sourceDBH)->select('ID,pname')->from(JIRA_ISSUETYPE)->fetchPairs(); + $limit = 1000; + $nextObject = false; + if(empty($type)) $type = key($this->lang->convert->jira->objectList); + + foreach($this->lang->convert->jira->objectList as $module => $moduleName) + { + if($module != $type and !$nextObject) continue; + if($module == $type) $nextObject = true; + + while(true) + { + $query = $this->buildQuery($module); + } + } } - public function getLinkTypePairs() + public function buildQuery($module) { - return $this->dao->dbh($this->sourceDBH)->select('ID,LINKNAME')->from(JIRA_ISSUELINKTYPE)->fetchPairs(); + if($module == 'user') } } diff --git a/module/convert/view/mapjira2zentao.html.php b/module/convert/view/mapjira2zentao.html.php index 56dc25bbb1..7156708bdc 100644 --- a/module/convert/view/mapjira2zentao.html.php +++ b/module/convert/view/mapjira2zentao.html.php @@ -16,7 +16,7 @@ convert->jira->mapJira2Zentao;?> -