From 94ccf64354a5d00a471833da9d1332f4a414aaa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B9=BF=E6=98=8E?= Date: Wed, 9 Feb 2022 13:23:28 +0800 Subject: [PATCH] * Add merge jira. --- module/common/lang/en.php | 2 + module/common/lang/menu.php | 4 +- module/common/lang/zh-cn.php | 2 + module/convert/config.php | 12 +++++ module/convert/control.php | 56 +++++++++++++++++++ module/convert/lang/en.php | 3 ++ module/convert/lang/zh-cn.php | 36 +++++++++++++ module/convert/model.php | 22 +++++--- module/convert/view/importnotice.html.php | 42 +++++++++++++++ module/convert/view/jira.html.php | 50 +++++++++++++++++ module/convert/view/mapjira2zentao.html.php | 59 +++++++++++++++++++++ 11 files changed, 281 insertions(+), 7 deletions(-) create mode 100644 module/convert/config.php create mode 100644 module/convert/view/importnotice.html.php create mode 100644 module/convert/view/jira.html.php create mode 100644 module/convert/view/mapjira2zentao.html.php diff --git a/module/common/lang/en.php b/module/common/lang/en.php index d48b8d0d94..7506af29fe 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -280,6 +280,8 @@ $lang->admin->data = 'Data'; $lang->admin->cron = 'Cron'; $lang->admin->buildIndex = 'Full Text Search'; +$lang->convert->importJira = 'Import Jira'; + $lang->storyConcept = 'Story Concpet'; $lang->searchTips = ''; diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 06031c105c..04ab7a34d0 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -480,7 +480,7 @@ $lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom| $lang->admin->menu->extension = array('link' => "{$lang->extension->common}|extension|browse", 'subModule' => 'extension'); $lang->admin->menu->dev = array('link' => "$lang->redev|dev|api", 'alias' => 'db', 'subModule' => 'dev,editor,entry'); $lang->admin->menu->message = array('link' => "{$lang->message->common}|message|index", 'subModule' => 'message,mail,webhook'); -$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin,search', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany'); +$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin,search,convert', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany'); $lang->admin->menu->model['dropMenu'] = new stdclass(); $lang->admin->menu->model['dropMenu']->allModel = array('link' => "{$lang->globalSetting}|custom|browsestoryconcept|", 'subModule' => 'measurement,report,sqlbuilder,subject,custom,meetingroom,baseline'); @@ -540,6 +540,7 @@ $lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->secu $lang->admin->menu->system['subMenu']->cron = array('link' => "{$lang->admin->cron}|cron|index", 'subModule' => 'cron'); $lang->admin->menu->system['subMenu']->timezone = array('link' => "$lang->timezone|custom|timezone"); $lang->admin->menu->system['subMenu']->buildIndex = array('link' => "{$lang->admin->buildIndex}|search|buildindex|"); +$lang->admin->menu->system['subMenu']->jira = array('link' => "{$lang->convert->importJira}|convert|jira|", 'subModule' => 'convert'); $lang->admin->dividerMenu = ',company,message,system,'; @@ -660,6 +661,7 @@ $lang->navGroup->dev = 'admin'; $lang->navGroup->entry = 'admin'; $lang->navGroup->extension = 'admin'; $lang->navGroup->action = 'admin'; +$lang->navGroup->convert = 'admin'; $lang->navGroup->search = 'search'; $lang->navGroup->index = 'index'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index c6c8dada3c..b7212e328e 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -280,6 +280,8 @@ $lang->admin->data = '数据'; $lang->admin->cron = '定时'; $lang->admin->buildIndex = '重建索引'; +$lang->convert->importJira = '导入Jira数据'; + $lang->storyConcept = '需求概念'; $lang->searchTips = ''; diff --git a/module/convert/config.php b/module/convert/config.php new file mode 100644 index 0000000000..de99977d0a --- /dev/null +++ b/module/convert/config.php @@ -0,0 +1,12 @@ +view->info = redmineConvertModel::$info; $this->display(); } + + public function jira() + { + $this->view->title = $this->lang->convert->jira->method; + $this->display(); + } + + public function importNotice($type = 'db') + { + if($_POST) + { + $dbName = $this->post->dbName; + if(!$dbName) + { + $response['result'] = 'fail'; + $response['message'] = $this->lang->convert->jira->dbNameEmpty; + return print($this->send($response)); + } + + if(!$this->convert->dbExists($dbName)) + { + $response['result'] = 'fail'; + $response['message'] = $this->lang->convert->jira->invalidDB; + return print($this->send($response)); + } + + $response['result'] = 'success'; + $response['message'] = $this->lang->saveSuccess; + $response['locate'] = $this->createLink('convert', 'mapJira2Zentao', "type=db&dbName={$this->post->dbName}"); + return print($this->send($response)); + } + + $this->view->title = $this->lang->convert->jira->method; + $this->view->type = $type; + $this->display(); + } + + public function mapJira2Zentao($type = 'db', $dbName = '') + { + if($_POST) + { + a($_POST);die; + } + + if($type == 'db') + { + $this->convert->connectDB($dbName); + $issueTypePairs = $this->convert->getIssueTypePairs(); + $linkTypePairs = $this->convert->getLinkTypePairs(); + } + + $this->view->title = $this->lang->convert->jira->mapJira2Zentao; + $this->view->issueTypePairs = $issueTypePairs; + $this->view->linkTypePairs = $linkTypePairs; + $this->display(); + } } diff --git a/module/convert/lang/en.php b/module/convert/lang/en.php index cf993dbd6f..065d9fda22 100644 --- a/module/convert/lang/en.php +++ b/module/convert/lang/en.php @@ -114,3 +114,6 @@ $lang->convert->issue = new stdclass(); $lang->convert->issue->redmine = 'Redmine'; $lang->convert->issue->zentao = 'ZenTao'; $lang->convert->issue->goto = 'Convert To'; + +$lang->convert->jira = new stdclass(); +$lang->convert->jira->import = 'Import Jira'; diff --git a/module/convert/lang/zh-cn.php b/module/convert/lang/zh-cn.php index 1326aa2751..f586548793 100644 --- a/module/convert/lang/zh-cn.php +++ b/module/convert/lang/zh-cn.php @@ -114,3 +114,39 @@ $lang->convert->issue = new stdclass(); $lang->convert->issue->redmine = 'Redmine'; $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->dbNameEmpty = 'Jira数据库名字不能为空!'; +$lang->convert->jira->invalidDB = '无效的数据库名!'; + +$lang->convert->jira->zentaoObjectList['task'] = '任务'; +$lang->convert->jira->zentaoObjectList['requirement'] = '用户需求'; +$lang->convert->jira->zentaoObjectList['story'] = '软件需求'; +$lang->convert->jira->zentaoObjectList['bug'] = 'Bug'; + +$lang->convert->jira->zentaoLinkTypeList['subTaskLink'] = '父-子任务'; +$lang->convert->jira->zentaoLinkTypeList['subStoryLink'] = '父-子需求'; +$lang->convert->jira->zentaoLinkTypeList['duplicate'] = '重复对象'; +$lang->convert->jira->zentaoLinkTypeList['relates'] = '互相关联'; + +$lang->convert->jira->importSteps['db'][1] = '备份禅道数据库,备份Jira数据库。'; +$lang->convert->jira->importSteps['db'][2] = '将Jira数据库导入到禅道使用的Mysql中,名字和禅道数据库区别开来。'; +$lang->convert->jira->importSteps['db'][3] = "将Jira附件目录 attachment 放到 %s 下,确保禅道服务器磁盘空间足够。"; +$lang->convert->jira->importSteps['db'][4] = "上述步骤完成后,请输入Jira数据库名字进行下一步。"; +$lang->convert->jira->importSteps['file'][1] = '备份禅道数据库,备份Jira数据库。'; +$lang->convert->jira->importSteps['file'][2] = '将Jira数据库导入到禅道使用的Mysql中,名字和禅道数据库区别开来。'; +$lang->convert->jira->importSteps['file'][3] = "将Jira附件目录放到 %s 下。"; diff --git a/module/convert/model.php b/module/convert/model.php index 99f357bbd7..6776fad133 100644 --- a/module/convert/model.php +++ b/module/convert/model.php @@ -19,15 +19,15 @@ class convertModel extends model * @access public * @return void */ - public function connectDB() + public function connectDB($dbName = '') { - $dsn = "mysql:host={$this->post->dbHost}; port={$this->post->dbPort};dbname={$this->post->dbName}"; + $dsn = "mysql:host={$this->config->db->host}; port={$this->config->db->port};dbname={$dbName}"; try { - $dbh = new PDO($dsn, $this->post->dbUser, $this->post->dbPassword); + $dbh = new PDO($dsn, $this->config->db->user, $this->config->db->password); $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $dbh->exec("SET NAMES {$this->post->dbCharset}"); + $dbh->exec("SET NAMES {$this->config->db->encoding}"); $this->sourceDBH = $dbh; return $dbh; } @@ -43,9 +43,9 @@ class convertModel extends model * @access public * @return bool */ - public function dbExists() + public function dbExists($dbName = '') { - $sql = "SHOW DATABASES like '{$this->post->db->name}'"; + $sql = "SHOW DATABASES like '{$dbName}'"; return $this->dbh->query($sql)->fetch(); } @@ -93,4 +93,14 @@ class convertModel extends model } $this->session->set('state', $state); } + + public function getIssueTypePairs() + { + return $this->dao->dbh($this->sourceDBH)->select('ID,pname')->from(JIRA_ISSUETYPE)->fetchPairs(); + } + + public function getLinkTypePairs() + { + return $this->dao->dbh($this->sourceDBH)->select('ID,LINKNAME')->from(JIRA_ISSUELINKTYPE)->fetchPairs(); + } } diff --git a/module/convert/view/importnotice.html.php b/module/convert/view/importnotice.html.php new file mode 100644 index 0000000000..095041622e --- /dev/null +++ b/module/convert/view/importnotice.html.php @@ -0,0 +1,42 @@ + + * @package convert + * @version $Id: execute.html.php 4129 2013-01-18 01:58:14Z wwccss $ + */ +?> + + +
+
+

+ convert->jira->importFromDB : $lang->convert->jira->importFromFile;?> +

+
+
+
convert->jira->importNotice;?>
+
+
    +
  1. convert->jira->importSteps[$type][1];?>
  2. +
  3. convert->jira->importSteps[$type][2];?>
  4. +
  5. convert->jira->importSteps[$type][3], $this->app->getTmpRoot());?>
  6. +
  7. + convert->jira->importSteps[$type][4];?> + convert->jira->dbNameNotice}");?> +
  8. +
+
+
+ +
+
+ diff --git a/module/convert/view/jira.html.php b/module/convert/view/jira.html.php new file mode 100644 index 0000000000..35d3bcd4b6 --- /dev/null +++ b/module/convert/view/jira.html.php @@ -0,0 +1,50 @@ + + * @package convert + * @version $Id: execute.html.php 4129 2013-01-18 01:58:14Z wwccss $ + */ +?> + + +
+
+
+
+

convert->jira->method;?>

+
+
+
+
+
"> +

convert->jira->importFromDB;?>

+ convert->jira->dbDesc;?> +
+
+
+
"> +

convert->jira->importFromFile;?>

+ convert->jira->fileDesc;?> +
+
+
+
+
+ + diff --git a/module/convert/view/mapjira2zentao.html.php b/module/convert/view/mapjira2zentao.html.php new file mode 100644 index 0000000000..56dc25bbb1 --- /dev/null +++ b/module/convert/view/mapjira2zentao.html.php @@ -0,0 +1,59 @@ + + * @package convert + * @version $Id: execute.html.php 4129 2013-01-18 01:58:14Z wwccss $ + */ +?> + +
+
+

+ convert->jira->mapJira2Zentao;?> +

+
+
+ + + + + + + + + $name):?> + + + + + + +
convert->jira->jiraObject;?>convert->jira->zentaoObject;?>
convert->jira->zentaoObjectList, '', "class='form-control chosen'");?>
+
+ + + + + + + + + $name):?> + + + + + + + + + + + +
convert->jira->jiraLinkType;?>convert->jira->zentaoLinkType;?>
convert->jira->zentaoLinkTypeList, '', "class='form-control chosen'");?>
+
+