| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- <?php
- /**
- * The model file of bugfree version 1 convert of ZenTaoPMS.
- *
- * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
- * @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
- * @author Chunsheng Wang <chunsheng@cnezsoft.com>
- * @package convert
- * @version $Id: bugfree1.php 5028 2013-07-06 02:59:41Z wyd621@gmail.com $
- * @link https://www.zentao.net
- */
- class bugfree1ConvertModel extends bugfreeConvertModel
- {
- /**
- * Execute the convert.
- *
- * @access public
- * @return array
- */
- public function execute()
- {
- $this->clear();
- $this->convertGroup();
- $result['users'] = $this->convertUser();
- $result['executions'] = $this->convertExecution();
- $result['modules'] = $this->convertModule();
- $result['bugs'] = $this->convertBug();
- $result['actions'] = $this->convertAction();
- $result['files'] = $this->convertFile();
- $this->dao->dbh($this->dbh);
- $this->loadModel('tree')->fixModulePath();
- return $result;
- }
- /**
- * Convert groups.
- *
- * @access public
- * @return void
- */
- public function convertGroup()
- {
- $groups = $this->dao->dbh($this->sourceDBH)
- ->select("groupID AS id, groupName AS name, groupUser AS users")
- ->from('BugGroup')
- ->fetchAll('id');
- foreach($groups as $groupID => $group)
- {
- /* Explode into array. */
- $groupUsers = explode(',', $group->users);
- unset($group->id);
- unset($group->users);
- /* Insert the group. */
- $this->dao->dbh($this->dbh)->insert(TABLE_GROUP)->data($group)->exec();
- $zentaoGroupID = $this->dao->lastInsertId();
- /* Insert account. */
- foreach($groupUsers as $account)
- {
- if(empty($account)) continue;
- $this->dao->dbh($this->dbh)->insert(TABLE_USERGROUP)->set('`group`')->eq($zentaoGroupID)->set('account')->eq($account)->exec();
- }
- }
- }
- /**
- * Convert user.
- *
- * @access public
- * @return int converted user count
- */
- public function convertUser()
- {
- /* Get users exist in the system. */
- $activeUsers = $this->dao
- ->dbh($this->sourceDBH)
- ->select("username AS account, userpassword AS password, realname, email")
- ->from('BugUser')
- ->orderBy('userID ASC')
- ->fetchAll('account');
- /* Get users in histories. */
- $allUsers = $this->dao->select("distinct(username) AS account")->from('BugHistory')->fetchPairs();
- /* Merge them. */
- foreach($allUsers as $key => $account)
- {
- if(isset($activeUsers[$account]))
- {
- $allUsers[$key] = $activeUsers[$account];
- }
- else
- {
- $allUsers[$key] = array('account' => $account, 'realname' => $account, 'deleted' => '1');
- }
- }
- foreach($activeUsers as $account => $user) if(!isset($allUsers[$account])) $allUsers[$account] = $user;
- /* Insert into zentao. */
- $convertCount = 0;
- foreach($allUsers as $account => $user)
- {
- if(!$this->dao->dbh($this->dbh)->findByAccount($account)->from(TABLE_USER)->fetch('account'))
- {
- $this->dao->dbh($this->dbh)->insert(TABLE_USER)->data($user)->exec();
- $convertCount ++;
- }
- else
- {
- self::$info['users'][] = sprintf($this->lang->convert->errorUserExists, $account);
- }
- }
- return $convertCount;
- }
- /**
- * Convert execution in bugfree to product in zentao.
- *
- * @access public
- * @return int converted execution count
- */
- public function convertExecution()
- {
- $executions = $this->dao->dbh($this->sourceDBH)->select("executionID AS id, executionName AS name")->from('Bugexecution')->fetchAll('id');
- foreach($executions as $executionID => $execution)
- {
- unset($execution->id);
- $this->dao->dbh($this->dbh)->insert(TABLE_PRODUCT)->data($execution)->exec();
- $this->map['product'][$executionID] = $this->dao->lastInsertID();
- }
- return count($executions);
- }
- /**
- * Convert modules.
- *
- * @access public
- * @return int converted modules count
- */
- public function convertModule()
- {
- $this->map['module'][0] = 0;
- $modules = $this->dao
- ->dbh($this->sourceDBH)
- ->select(
- 'moduleID AS id,
- executionID AS root,
- moduleName AS name,
- moduleGrade AS grade,
- parentID AS parent,
- "bug" AS type')
- ->from('BugModule')
- ->orderBy('id ASC')
- ->fetchAll('id');
- foreach($modules as $moduleID => $module)
- {
- $module->root = $this->map['product'][$module->root];
- unset($module->id);
- $this->dao->dbh($this->dbh)->insert(TABLE_MODULE)->data($module)->exec();
- $this->map['module'][$moduleID] = $this->dao->lastInsertID();
- }
- /* Update parents. */
- foreach($modules as $oldModuleID => $module)
- {
- $newModuleID = $this->map['module'][$oldModuleID];
- $newParentID = $this->map['module'][$module->parent];
- $this->dao->dbh($this->dbh)->update(TABLE_MODULE)->set('parent')->eq($newParentID)->where('id')->eq($newModuleID)->exec();
- }
- return count($modules);
- }
- /**
- * Convert bugs.
- *
- * @access public
- * @return int converted bugs count.
- */
- public function convertBug()
- {
- $bugs = $this->dao
- ->dbh($this->sourceDBH)
- ->select('
- bugID AS id,
- executionID AS product,
- moduleID AS module,
- bugTitle AS title,
- bugSeverity AS severity,
- bugType AS type,
- bugOS AS os,
- bugStatus AS status,
- mailto,
- openedBy, openedDate, openedBuild,
- assignedTo, assignedDate,
- resolvedBy, resolution, resolvedBuild, resolvedDate,
- closedBy, closedDate,
- lastEditedBy, lastEditedDate,
- linkID as duplicateBug
- ')
- ->from('BugInfo')
- ->orderBy('bugID')
- ->fetchAll('id');
- foreach($bugs as $bugID => $bug)
- {
- /* Adjust some fields of bug. */
- $bugID = (int)$bugID;
- unset($bug->id);
- if($bug->assignedTo == 'Closed') $bug->assignedTo = 'closed';
- $bug->type = strtolower($bug->type);
- $bug->os = strtolower($bug->os);
- $bug->browser = 'all';
- $bug->resolution = str_replace(' ','', strtolower($bug->resolution));
- $bug->product = $this->map['product'][$bug->product];
- $bug->module = $this->map['module'][$bug->module];
- $this->dao->dbh($this->dbh)->insert(TABLE_BUG)->data($bug)->exec();
- $this->map['bug'][$bugID] = $this->dao->lastInsertID();
- }
- /* Update duplicated bugs. */
- foreach($this->map['bug'] as $oldBugID => $newBugID)
- {
- $this->dao->dbh($this->dbh)->update(TABLE_BUG)->set('duplicateBug')->eq($newBugID)->where('duplicateBug')->eq($oldBugID)->exec();
- }
- return count($bugs);
- }
- /**
- * Convert actions.
- *
- * @access public
- * @return int converted actions count.
- */
- public function convertAction()
- {
- $actions = $this->dao
- ->dbh($this->sourceDBH)
- ->select("
- 'bug' AS objectType,
- bugID AS objectID,
- userName AS actor,
- action,
- fullInfo AS comment,
- actionDate AS date")
- ->from('BugHistory')
- ->orderBy('bugID, historyID')
- ->fetchGroup('objectID');
- $convertCount = 0;
- foreach($actions as $bugID => $bugActions)
- {
- /* Get the related bugID. */
- $bugID = (int)$bugID;
- $zentaoBugID = $this->map['bug'][$bugID];
- /* Process actions. */
- foreach($bugActions as $key => $action)
- {
- $action->objectID = $zentaoBugID;
- if($key == 0)
- {
- $this->dao->dbh($this->dbh)->update(TABLE_BUG)->set('steps')->eq(nl2br($action->comment))->where('id')->eq($zentaoBugID)->exec();
- $action->comment = '';
- }
- $this->dao->dbh($this->dbh)->insert(TABLE_ACTION)->data($action)->exec();
- $convertCount ++;
- }
- }
- return $convertCount;
- }
- /**
- * Convert files.
- *
- * @access public
- * @return int converted files count.
- */
- public function convertFile()
- {
- $this->setPath();
- $files = $this->dao->dbh($this->sourceDBH)
- ->select("
- fileName AS pathname,
- fileTitle AS title,
- fileType AS extension,
- fileSize AS size,
- 'bug' AS objectType,
- bugID AS objectID,
- addUser AS addedBy,
- addDate AS addedDate
- ")
- ->from('BugFile')
- ->orderBy('fileID')
- ->fetchAll();
- foreach($files as $file)
- {
- $file->objectID = $this->map['bug'][(int)$file->objectID];
- if(strpos($file->size, 'KB')) $file->size = (int)(str_replace('KB', '', $file->size) * 1024);
- if(strpos($file->size, 'MB')) $file->size = (int)(str_replace('MB', '', $file->size) * 1024 * 1024);
- $this->dao->dbh($this->dbh)->insert(TABLE_FILE)->data($file)->exec();
- /* Copy files. */
- $soureFile = $this->filePath . $file->pathname;
- if(!file_exists($soureFile))
- {
- self::$info['files'][] = sprintf($this->lang->convert->errorFileNotExits, $soureFile);
- continue;
- }
- $targetFile = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . $file->pathname;
- $targetPath = dirname($targetFile);
- if(!is_dir($targetPath)) mkdir($targetPath, 0777, true);
- if(!copy($soureFile, $targetFile))
- {
- self::$info['files'][] = sprintf($this->lang->convert->errorCopyFailed, $targetFile);
- }
- }
- return count($files);
- }
- }
|