diff --git a/VERSION b/VERSION index c175e23c58..80e3420014 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.3.beta +5.0.beta1 diff --git a/config/config.php b/config/config.php index 6059aa9124..cec0bacb39 100644 --- a/config/config.php +++ b/config/config.php @@ -17,7 +17,7 @@ if(!function_exists('getWebRoot')){function getWebRoot(){}} /* Basic settings. */ $config = new config(); -$config->version = '4.2'; // The version of zentaopms. Don't change it. +$config->version = '5.0.beta1'; // The version of zentaopms. Don't change it. $config->charset = 'UTF-8'; // The charset of zentaopms. $config->cookieLife = time() + 2592000; // The cookie life time. $config->timezone = 'Asia/Shanghai'; // The time zone setting, for more see http://www.php.net/manual/en/timezones.php @@ -134,7 +134,7 @@ define('TABLE_FILE', '`' . $config->db->prefix . 'file`'); define('TABLE_HISTORY', '`' . $config->db->prefix . 'history`'); define('TABLE_EXTENSION', '`' . $config->db->prefix . 'extension`'); define('TABLE_WEBAPP', '`' . $config->db->prefix . 'webapp`'); -define('TABLE_CUSTOM', '`' . $config->db->prefix . 'custom`'); +define('TABLE_LANG', '`' . $config->db->prefix . 'lang`'); $config->objectTables['product'] = TABLE_PRODUCT; $config->objectTables['story'] = TABLE_STORY; @@ -151,7 +151,7 @@ $config->objectTables['user'] = TABLE_USER; $config->objectTables['doc'] = TABLE_DOC; $config->objectTables['doclib'] = TABLE_DOCLIB; $config->objectTables['todo'] = TABLE_TODO; -$config->objectTables['custom'] = TABLE_CUSTOM; +$config->objectTables['custom'] = TABLE_LANG; /* Include extension config files. */ $extConfigFiles = glob($configRoot . 'ext/*.php'); diff --git a/db/update4.3.sql b/db/update4.3.sql index 743ee51395..ab58d360af 100644 --- a/db/update4.3.sql +++ b/db/update4.3.sql @@ -1,4 +1,4 @@ -CREATE TABLE IF NOT EXISTS `zt_custom` ( +CREATE TABLE IF NOT EXISTS `zt_lang` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `lang` varchar(30) NOT NULL, `module` varchar(30) NOT NULL, @@ -9,4 +9,3 @@ CREATE TABLE IF NOT EXISTS `zt_custom` ( PRIMARY KEY (`id`), UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; - diff --git a/db/zentao.sql b/db/zentao.sql index 2f2e7af25f..0e45ee81ed 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -139,12 +139,10 @@ CREATE TABLE IF NOT EXISTS `zt_company` ( `zipcode` char(10) default NULL, `website` char(120) default NULL, `backyard` char(120) default NULL, - `pms` char(120) default NULL, `guest` enum('1','0') NOT NULL default '0', `admins` char(255) default NULL, `deleted` enum('0','1') NOT NULL default '0', - PRIMARY KEY (`id`), - UNIQUE KEY `pms` (`pms`) + PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_config`; CREATE TABLE IF NOT EXISTS `zt_config` ( @@ -157,6 +155,18 @@ CREATE TABLE IF NOT EXISTS `zt_config` ( PRIMARY KEY (`id`), UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_lang`; +CREATE TABLE IF NOT EXISTS `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL auto_increment, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_dept`; CREATE TABLE IF NOT EXISTS `zt_dept` ( `id` mediumint(8) unsigned NOT NULL auto_increment, @@ -225,8 +235,9 @@ CREATE TABLE IF NOT EXISTS `zt_extension` ( `license` text NOT NULL, `type` varchar(20) NOT NULL default 'extension', `site` varchar(150) NOT NULL, - `zentaoVersion` varchar(100) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, `dirs` text NOT NULL, `files` text NOT NULL, `status` varchar(20) NOT NULL, diff --git a/framework/router.class.php b/framework/router.class.php index e2fde411c1..11ba2d554f 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -1369,7 +1369,7 @@ class router /* Set the files to include. */ if(!is_file($mainConfigFile)) { - if($exitIfNone) self::error("config file $mainConfigFile not found", __FILE__, __LINE__, true); + if($exitIfNone) self::triggerError("config file $mainConfigFile not found", __FILE__, __LINE__, true); if(empty($extConfigFiles) and !isset($config->system->$moduleName)) return false; // and no extension file or extension in db, exit. $configFiles = $extConfigFiles; } @@ -1505,7 +1505,7 @@ class router */ private function connectByPDO($params) { - if(!isset($params->driver)) self::error('no pdo driver defined, it should be mysql or sqlite', __FILE__, __LINE__, $exit = true); + if(!isset($params->driver)) self::triggerError('no pdo driver defined, it should be mysql or sqlite', __FILE__, __LINE__, $exit = true); if(!isset($params->user)) return false; if($params->driver == 'mysql') { @@ -1530,7 +1530,7 @@ class router } catch (PDOException $exception) { - self::error($exception->getMessage(), __FILE__, __LINE__, $exit = true); + self::triggerError($exception->getMessage(), __FILE__, __LINE__, $exit = true); } } diff --git a/module/bug/control.php b/module/bug/control.php index 9ef85ec620..202263928c 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -221,6 +221,7 @@ class bug extends control { $this->view->users = $this->user->getPairs('nodeleted,devfirst'); if(empty($this->products)) $this->locate($this->createLink('product', 'create')); + $this->app->loadLang('release'); if(!empty($_POST)) { @@ -237,7 +238,9 @@ class bug extends control $actionID = $this->action->create('bug', $bugID, 'Opened'); $this->sendmail($bugID, $actionID); - $response['locate'] = $this->createLink('bug', 'browse', "productID={$this->post->product}&type=byModule¶m={$this->post->module}"); + + $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&type=byModule¶m={$this->post->module}"); + $response['locate'] = isset($_SESSION['bugList']) ? $this->session->bugList : $location; $this->send($response); } @@ -305,9 +308,10 @@ class bug extends control } else { - $builds = $this->loadModel('build')->getProductBuildPairs($productID, 'noempty'); + $builds = $this->loadModel('build')->getProductBuildPairs($productID, 'noempty,release'); $stories = $this->story->getProductStoryPairs($productID); } + $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->create; $this->view->position[] = html::a($this->createLink('bug', 'browse', "productID=$productID"), $this->products[$productID]); $this->view->position[] = $this->lang->bug->create; diff --git a/module/bug/js/common.js b/module/bug/js/common.js index 1fb51070c7..0aa33e5fc5 100644 --- a/module/bug/js/common.js +++ b/module/bug/js/common.js @@ -5,12 +5,14 @@ $(function() if(typeof page == 'undefined') page = ''; if(page == 'create') { + productID = $('#product').val(); changeProductConfirmed = true; oldStoryID = 0; oldProjectID = 0; oldOpenedBuild = ''; oldTaskID = 0; - setAssignedTo(); + setAssignedTo(0,productID); + notice(); } if(page == 'create' || page == 'edit' || page == 'assignedto' || page == 'confirmbug') @@ -42,10 +44,9 @@ function loadAll(productID) $('#taskIdBox').innerHTML = ''; // Reset the task. $('#task').chosen({no_results_text: noResultsMatch}); loadProductModules(productID); - loadProductStories(productID); loadProductProjects(productID); loadProductBuilds(productID); - loadProductPlans(productID); + loadProductStories(productID); } } @@ -101,7 +102,7 @@ function loadProductBuilds(productID) if(page == 'create') { - $('#buildBox').load(link); + $('#buildBox').load(link, function(){ notice(); }); } else { @@ -161,20 +162,6 @@ function loadProjectStories(projectID) $('#storyIdBox').load(link, function(){$('#story').chosen({no_results_text:noResultsMatch});}); } -/** - * Load product plans. - * - * @param int $productID - * @access public - * @return void - */ -function loadProductPlans(productID) -{ - if(typeof(planID) == 'undefined') planID = 0; - link = createLink('product', 'ajaxGetPlans', 'productID=' + $('#product').val() + '&planID=' + planID); - $('#planIdBox').load(link, function(){$('#story').chosen({no_results_text:noResultsMatch});}); -} - /** * Load builds of a project. * @@ -221,3 +208,26 @@ function setStories(moduleID, productID) $("#story").chosen({no_results_text: ''}); }); } + +/** + * notice for create build. + * + * @access public + * @return void + */ +function notice() +{ + if($('#openedBuild').find('option').length <= 1) + { + if($('#project').val() == '') + { + $('#buildBox').append('' + createRelease + ''); + $('#buildBox').append('' + refresh + ''); + } + else + { + $('#buildBox').append('' + createBuild + ''); + $('#buildBox').append('' + refresh + ''); + } + } +} diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index 3c1cb69661..274bf6c60e 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -80,7 +80,7 @@ $lang->bug->assignTo = 'Assign'; $lang->bug->browse = 'Browse Bug'; $lang->bug->view = 'Bug Info'; $lang->bug->resolve = 'Resolve'; -$lang->bug->barchResolve = 'batchResolve'; +$lang->bug->batchResolve = 'Batch resolve'; $lang->bug->close = 'Close'; $lang->bug->activate = 'Activate'; $lang->bug->reportChart = 'Report'; diff --git a/module/bug/lang/zh-tw.php b/module/bug/lang/zh-tw.php index 7611b86ea6..85e1dd97eb 100644 --- a/module/bug/lang/zh-tw.php +++ b/module/bug/lang/zh-tw.php @@ -73,16 +73,18 @@ $lang->bug->index = '首頁'; $lang->bug->create = '提Bug'; $lang->bug->batchCreate = '批量添加'; $lang->bug->confirmBug = '確認'; +$lang->bug->batchConfirm = '批量確認'; $lang->bug->edit = '編輯'; -$lang->bug->batchEdit = '批量編輯'; +$lang->bug->batchEdit = '批量編輯'; $lang->bug->assignTo = '指派'; $lang->bug->browse = 'Bug列表'; $lang->bug->view = 'Bug詳情'; $lang->bug->resolve = '解決'; +$lang->bug->batchResolve = '批量解決'; $lang->bug->close = '關閉'; $lang->bug->activate = '激活'; $lang->bug->reportChart = '報表統計'; -$lang->bug->export = '導出'; +$lang->bug->export = '導出數據'; $lang->bug->delete = '刪除'; $lang->bug->saveTemplate = '保存模板'; $lang->bug->deleteTemplate = '刪除模板'; diff --git a/module/bug/view/create.html.php b/module/bug/view/create.html.php index a5b99f7719..7493f41df2 100644 --- a/module/bug/view/create.html.php +++ b/module/bug/view/create.html.php @@ -18,6 +18,9 @@ include '../../common/view/alert.html.php'; include '../../common/view/kindeditor.html.php'; js::set('holders', $lang->bug->placeholder); js::set('page', 'create'); +js::set('createRelease', $lang->release->create); +js::set('createBuild', $lang->build->create); +js::set('refresh', $lang->refresh); ?>
@@ -26,7 +29,7 @@ js::set('page', 'create'); bug->lblProductAndModule;?> - + bug->project;?> - + bug->openedBuild;?> - createLink('build', 'create', "projectID=$projectID"), $lang->build->create, '_blank'); - echo html::a("javascript:loadProjectsBuilds($projectID)", $lang->refresh); - } - ?> + diff --git a/module/build/control.php b/module/build/control.php index 51f89211ed..3e98a90e95 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -39,13 +39,23 @@ class build extends control $this->project->setMenu($this->project->getPairs(), $projectID); /* Get stories and bugs. */ - $orderBy = 'status_asc, stage_asc, id_desc'; - $stories = $this->story->getProjectStories($projectID, $orderBy); - $bugs = $this->bug->getProjectBugs($projectID); - foreach($bugs as $key => $bug) + $orderBy = 'status_asc, stage_asc, id_desc'; + $stories = $this->story->getProjectStories($projectID, $orderBy); + $projectBugs = $this->bug->getProjectBugs($projectID); + $bugs = array(); + foreach($projectBugs as $key => $bug) { - if($bug->status == 'closed') unset($bugs[$key]); + if($bug->status == 'resolved') + { + $bugs[$key] = $bug; + unset($projectBugs[$key]); + } + else if($bug->status == 'closed') + { + unset($projectBugs[$key]); + } } + $bugs += $projectBugs; /* Assign. */ $project = $this->loadModel('project')->getById($projectID); @@ -197,9 +207,9 @@ class build extends control */ public function ajaxGetProductBuilds($productID, $varName, $build = '', $index = 0) { - if($varName == 'openedBuild' ) die(html::select($varName . '[]', $this->build->getProductBuildPairs($productID, 'noempty'), $build, 'size=4 class=select-3 multiple')); - if($varName == 'openedBuilds' ) die(html::select($varName . "[$index][]", $this->build->getProductBuildPairs($productID, 'noempty'), $build, 'size=4 class=select-3 multiple')); - if($varName == 'resolvedBuild') die(html::select($varName, $this->build->getProductBuildPairs($productID, 'noempty'), $build, 'class=select-3')); + if($varName == 'openedBuild' ) die(html::select($varName . '[]', $this->build->getProductBuildPairs($productID, 'noempty,release'), $build, 'size=4 class=select-3 multiple')); + if($varName == 'openedBuilds' ) die(html::select($varName . "[$index][]", $this->build->getProductBuildPairs($productID, 'noempty,release'), $build, 'size=4 class=select-3 multiple')); + if($varName == 'resolvedBuild') die(html::select($varName, $this->build->getProductBuildPairs($productID, 'noempty,release'), $build, 'class=select-3')); } /** @@ -217,7 +227,7 @@ class build extends control { if($varName == 'openedBuild') { - $builds = $this->build->getProjectBuildPairs($projectID, $productID, 'noempty'); + $builds = $this->build->getProjectBuildPairs($projectID, $productID, 'noempty,release'); $output = html::select($varName . '[]', $builds , $build, 'size=4 class=select-3 multiple'); if(count($builds) == 1 and $needCreate) { diff --git a/module/build/model.php b/module/build/model.php index 672b0ae2fc..7d9c052707 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -96,10 +96,27 @@ class buildModel extends model if(strpos($params, 'noempty') === false) $sysBuilds = array('' => ''); if(strpos($params, 'notrunk') === false) $sysBuilds = $sysBuilds + array('trunk' => 'Trunk'); - $builds = $this->dao->select('id,name')->from(TABLE_BUILD) + $productBuilds = $this->dao->select('id,name,project')->from(TABLE_BUILD) ->where('product')->in($products) ->andWhere('deleted')->eq(0) - ->orderBy('date desc, id desc')->fetchPairs(); + ->orderBy('date desc, id desc')->fetchAll('id'); + $releases = $this->dao->select('build,name,deleted')->from(TABLE_RELEASE) + ->where('product')->in($products) + ->fetchAll('build'); + + $builds = array(); + foreach($productBuilds as $key => $build) + { + if($build->project) + { + $builds[$key] = isset($releases[$key]) ? $releases[$key]->name : $build->name; + } + else if(isset($releases[$key]) and !$releases[$key]->deleted) + { + $builds[$key] = $releases[$key]->name; + } + } + if(!$builds) return $sysBuilds; return $sysBuilds + $builds; } diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 265923f82b..f27a9524eb 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -316,6 +316,7 @@ $lang->menugroup->dept = 'company'; $lang->menugroup->todo = 'my'; $lang->menugroup->action = 'admin'; $lang->menugroup->extension = 'admin'; +$lang->menugroup->custom = 'admin'; $lang->menugroup->editor = 'admin'; $lang->menugroup->mail = 'admin'; $lang->menugroup->sso = 'admin'; diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 305fe16796..d8cf6134b8 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -272,24 +272,27 @@ $lang->admin = new stdclass(); $lang->admin->menu = new stdclass(); $lang->admin->menu->index = array('link' => '首頁|admin|index'); $lang->admin->menu->extension = array('link' => '擴展|extension|browse', 'subModule' => 'extension,editor'); +$lang->admin->menu->custom = array('link' => '自定義|custom|index', 'subModule' => 'custom'); $lang->admin->menu->mail = array('link' => '發信|mail|index', 'subModule' => 'mail'); $lang->admin->menu->clearData = array('link' => '清除數據|admin|cleardata'); $lang->admin->menu->convert = array('link' => '導入|convert|index', 'subModule' => 'convert'); $lang->admin->menu->trashes = array('link' => '資源回收筒|action|trash', 'subModule' => 'action'); $lang->admin->menu->sso = array('link' => '單點登錄|sso|browse', 'subModule' => 'sso'); -$lang->convert = new stdclass(); -$lang->upgrade = new stdclass(); -$lang->action = new stdclass(); -$lang->extension = new stdclass(); -$lang->editor = new stdclass(); -$lang->mail = new stdclass(); -$lang->sso = new stdclass(); +$lang->convert = new stdclass(); +$lang->upgrade = new stdclass(); +$lang->action = new stdclass(); +$lang->extension = new stdclass(); +$lang->custom = new stdclass(); +$lang->editor = new stdclass(); +$lang->mail = new stdclass(); +$lang->sso = new stdclass(); $lang->convert->menu = $lang->admin->menu; $lang->upgrade->menu = $lang->admin->menu; $lang->action->menu = $lang->admin->menu; $lang->extension->menu = $lang->admin->menu; +$lang->custom->menu = $lang->admin->menu; $lang->editor->menu = $lang->admin->menu; $lang->mail->menu = $lang->admin->menu; $lang->sso->menu = $lang->admin->menu; @@ -313,6 +316,7 @@ $lang->menugroup->dept = 'company'; $lang->menugroup->todo = 'my'; $lang->menugroup->action = 'admin'; $lang->menugroup->extension = 'admin'; +$lang->menugroup->custom = 'admin'; $lang->menugroup->editor = 'admin'; $lang->menugroup->mail = 'admin'; $lang->menugroup->sso = 'admin'; diff --git a/module/common/model.php b/module/common/model.php index a9bd1fa173..cbad95c533 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -126,6 +126,7 @@ class commonModel extends model */ public function loadCustomFromDB() { + if(defined('IN_UPGRADE')) return; if(!$this->config->db->name) return; $records = $this->loadModel('custom')->getAll(); if(!$records) return; @@ -153,7 +154,7 @@ class commonModel extends model if(stripos($method, 'downnotify') !== false) return true; } - if(stripos($method, 'ajaxgetdropmenu') !== false) return true; + if(stripos($method, 'ajaxgetdropmenu') !== false and $this->app->user->account == 'guest') return true; if($module == 'misc' and $method == 'qrcode') return true; if($module == 'misc' and $method == 'about') return true; if($module == 'misc' and $method == 'checkupdate') return true; @@ -611,13 +612,14 @@ class commonModel extends model if(empty($queryCondition) or $this->session->$typeOnlyCondition) { $objects = $this->dao->select('*')->from($table) - ->beginIF($queryCondition != false)->where($queryCondition)->fi() + ->where('id')->eq($objectID) + ->beginIF($queryCondition != false)->orWhere($queryCondition)->fi() ->beginIF($orderBy != false)->orderBy($orderBy)->fi() ->fetchAll(); } else { - $objects = $this->dbh->query($queryCondition . " ORDER BY $orderBy")->fetchAll(); + $objects = $this->dbh->query($queryCondition . "OR id=$objectID ORDER BY $orderBy")->fetchAll(); } $tmpObjectIDs = array(); diff --git a/module/custom/lang/zh-tw.php b/module/custom/lang/zh-tw.php new file mode 100644 index 0000000000..c4a9a03f17 --- /dev/null +++ b/module/custom/lang/zh-tw.php @@ -0,0 +1,20 @@ +custom->common = '自定義'; +$lang->custom->index = '首頁'; +$lang->custom->set = '自定義配置'; +$lang->custom->restore = '恢復預設'; +$lang->custom->key = '鍵'; +$lang->custom->value = '值'; + +$lang->custom->story = '需求'; +$lang->custom->task = '任務'; +$lang->custom->bug = 'Bug'; +$lang->custom->testcase = '測試用例'; +$lang->custom->testtask = '測試任務'; +$lang->custom->todo = '待辦'; +$lang->custom->user = '用戶'; + +$lang->custom->currentLang = '適用當前語言'; +$lang->custom->allLang = '適用所有語言'; + +$lang->custom->confirmRestore = '是否要恢復預設語言配置?'; diff --git a/module/custom/model.php b/module/custom/model.php index 71914c1025..719b3c1580 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -19,7 +19,7 @@ class customModel extends model */ public function getAll() { - $allCustomLang = $this->dao->select('*')->from(TABLE_CUSTOM)->orderBy('lang,id')->fetchAll('id'); + $allCustomLang = $this->dao->select('*')->from(TABLE_LANG)->orderBy('lang,id')->fetchAll('id'); $currentLang = $this->app->getClientLang(); $processedLang = array(); @@ -59,7 +59,7 @@ class customModel extends model $item->value = $value; $item->system = $system; - $this->dao->replace(TABLE_CUSTOM)->data($item)->exec(); + $this->dao->replace(TABLE_LANG)->data($item)->exec(); } /** @@ -116,7 +116,7 @@ class customModel extends model */ public function createDAO($params, $method = 'select') { - return $this->dao->$method('*')->from(TABLE_CUSTOM)->where('1 = 1') + return $this->dao->$method('*')->from(TABLE_LANG)->where('1 = 1') ->beginIF($params['lang'])->andWhere('lang')->in($params['lang'])->fi() ->beginIF($params['module'])->andWhere('module')->in($params['module'])->fi() ->beginIF($params['section'])->andWhere('section')->in($params['section'])->fi() diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 0c2efc9fcf..51e0a689a3 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -903,3 +903,39 @@ $lang->changelog['4.0'][] = 'action-hideOne'; $lang->changelog['4.0'][] = 'action-hideAll'; $lang->changelog['4.0'][] = 'task-editEstimate'; $lang->changelog['4.0'][] = 'task-deleteEstimate'; + +$lang->changelog['4.1'][] = 'todo-batchFinish'; +$lang->changelog['4.1'][] = 'productplan-batchUnlinkStory'; +$lang->changelog['4.1'][] = 'company-view'; +$lang->changelog['4.1'][] = 'user-story'; +$lang->changelog['4.1'][] = 'user-testTask'; +$lang->changelog['4.1'][] = 'user-testCase'; + +$lang->changelog['4.2.beta'][] = 'tree-browseTask'; + +$lang->changelog['4.3.beta'][] = 'product-batchEdit'; +$lang->changelog['4.3.beta'][] = 'project-batchEdit'; +$lang->changelog['4.3.beta'][] = 'story-batchReview'; +$lang->changelog['4.3.beta'][] = 'story-batchChangePlan'; +$lang->changelog['4.3.beta'][] = 'story-batchChangeStage'; +$lang->changelog['4.3.beta'][] = 'productplan-linkBug'; +$lang->changelog['4.3.beta'][] = 'productplan-unlinkBug'; +$lang->changelog['4.3.beta'][] = 'productplan-batchUnlinkBug'; +$lang->changelog['4.3.beta'][] = 'bug-batchCreate'; +$lang->changelog['4.3.beta'][] = 'testcase-exportTemplet'; +$lang->changelog['4.3.beta'][] = 'testcase-import'; +$lang->changelog['4.3.beta'][] = 'testcase-showImport'; +$lang->changelog['4.3.beta'][] = 'testcase-confirmChange'; +$lang->changelog['4.3.beta'][] = 'mail-reset'; +$lang->changelog['4.3.beta'][] = 'sso-browse'; +$lang->changelog['4.3.beta'][] = 'sso-create'; +$lang->changelog['4.3.beta'][] = 'sso-edit'; +$lang->changelog['4.3.beta'][] = 'sso-delete'; +$lang->changelog['4.3.beta'][] = 'api-debug'; +$lang->changelog['4.3.beta'][] = 'action-editComment'; + +$lang->changelog['5.0.beta1'][] = 'bug-batchConfirm'; +$lang->changelog['5.0.beta1'][] = 'bug-batchResolve'; +$lang->changelog['5.0.beta1'][] = 'custom-index'; +$lang->changelog['5.0.beta1'][] = 'custom-set'; +$lang->changelog['5.0.beta1'][] = 'custom-restore'; diff --git a/module/product/control.php b/module/product/control.php index 9ba407d28c..fb8dc58201 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -487,9 +487,9 @@ class product extends control * Drop menu page. * * @param int $productID - * @param int $module - * @param int $method - * @param int $extra + * @param string $module + * @param string $method + * @param string $extra * @access public * @return void */ diff --git a/module/project/view/task.html.php b/module/project/view/task.html.php index 545f4a3e2d..4ab8f9512e 100644 --- a/module/project/view/task.html.php +++ b/module/project/view/task.html.php @@ -140,11 +140,10 @@ var browseType = '';
"; echo html::selectAll() . html::selectReverse(); echo "
"; diff --git a/module/sso/config.php b/module/sso/config.php index 35f8e1b88b..4e199981ee 100644 --- a/module/sso/config.php +++ b/module/sso/config.php @@ -1,4 +1,5 @@ sso = new stdclass(); $config->sso->create = new stdclass(); $config->sso->create->requiredFields = 'title,code,key,ip'; $config->sso->edit = new stdclass(); diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php index e182186108..ad28088ef0 100644 --- a/module/story/lang/zh-tw.php +++ b/module/story/lang/zh-tw.php @@ -28,7 +28,7 @@ $lang->story->tasks = "相關任務"; $lang->story->taskCount = '任務數'; $lang->story->bugs = "Bug"; $lang->story->linkStory = '關聯需求'; -$lang->story->export = "導出"; +$lang->story->export = "導出數據"; $lang->story->reportChart = "統計報表"; $lang->story->batchChangePlan = "批量修改計劃"; $lang->story->batchChangeStage = "批量修改階段"; diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index ae483afb1f..2ba66ea4e9 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -194,7 +194,7 @@
-tasks as $projectTasks) { foreach($projectTasks as $task) diff --git a/module/task/lang/zh-tw.php b/module/task/lang/zh-tw.php index 8f6beef9e6..0a2b63791d 100644 --- a/module/task/lang/zh-tw.php +++ b/module/task/lang/zh-tw.php @@ -25,7 +25,7 @@ $lang->task->close = "關閉"; $lang->task->batchClose = "批量關閉"; $lang->task->cancel = "取消"; $lang->task->activate = "激活"; -$lang->task->export = "導出"; +$lang->task->export = "導出數據"; $lang->task->reportChart = "報表統計"; $lang->task->fromBug = '來源Bug'; $lang->task->confirmStoryChange = "確認需求變動"; diff --git a/module/testcase/config.php b/module/testcase/config.php index 8a43ec311e..eb9f410af8 100644 --- a/module/testcase/config.php +++ b/module/testcase/config.php @@ -1,4 +1,5 @@ testcase = new stdclass(); $config->testcase->defaultSteps = 3; $config->testcase->batchCreate = 10; diff --git a/module/testcase/lang/zh-tw.php b/module/testcase/lang/zh-tw.php index 4f18d5b153..a756fade5f 100644 --- a/module/testcase/lang/zh-tw.php +++ b/module/testcase/lang/zh-tw.php @@ -65,7 +65,7 @@ $lang->testcase->import = "導入"; $lang->testcase->importID = "行號"; $lang->testcase->showImport = "顯示導入內容"; $lang->testcase->exportTemplet = "導出模板"; -$lang->testcase->export = "導出"; +$lang->testcase->export = "導出數據"; $lang->testcase->confirmChange = '確認用例變動'; $lang->testcase->confirmStoryChange = '確認需求變動'; @@ -135,13 +135,6 @@ $lang->testcase->stageList['system'] = '系統測試階段'; $lang->testcase->stageList['smoke'] = '冒煙測試階段'; $lang->testcase->stageList['bvt'] = '版本驗證階段'; -$lang->testcase->stageListAB['unittest'] = '單元'; -$lang->testcase->stageListAB['feature'] = '功能'; -$lang->testcase->stageListAB['intergrate'] = '整合'; -$lang->testcase->stageListAB['system'] = '系統'; -$lang->testcase->stageListAB['smoke'] = '冒煙'; -$lang->testcase->stageListAB['bvt'] = '版本'; - $lang->testcase->statusList[''] = ''; $lang->testcase->statusList['normal'] = '正常'; $lang->testcase->statusList['blocked'] = '被阻塞'; diff --git a/module/tree/control.php b/module/tree/control.php index 76e9d55eca..7a3ed645ef 100644 --- a/module/tree/control.php +++ b/module/tree/control.php @@ -303,7 +303,14 @@ class tree extends control */ public function ajaxGetOptionMenu($rootID, $viewType = 'story', $rootModuleID = 0, $returnType = 'html', $needManage = false) { - $optionMenu = $this->tree->getOptionMenu($rootID, $viewType, $rootModuleID); + if($viewType = 'task') + { + $optionMenu = $this->tree->getTaskOptionMenu($rootID); + } + else + { + $optionMenu = $this->tree->getOptionMenu($rootID, $viewType, $rootModuleID); + } if($returnType == 'html') { $output = html::select("module", $optionMenu, '', "onchange=loadModuleRelated()"); diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php index 330c1d004f..0b452b80d5 100644 --- a/module/upgrade/lang/en.php +++ b/module/upgrade/lang/en.php @@ -72,3 +72,4 @@ $lang->upgrade->fromVersions['4_0'] = '4.0'; $lang->upgrade->fromVersions['4_0_1'] = '4.0.1'; $lang->upgrade->fromVersions['4_1'] = '4.1'; $lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta'; +$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta'; diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php index dada729eaf..895a1b6953 100644 --- a/module/upgrade/lang/zh-cn.php +++ b/module/upgrade/lang/zh-cn.php @@ -72,3 +72,4 @@ $lang->upgrade->fromVersions['4_0'] = '4.0'; $lang->upgrade->fromVersions['4_0_1'] = '4.0.1'; $lang->upgrade->fromVersions['4_1'] = '4.1'; $lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta'; +$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta'; diff --git a/module/upgrade/lang/zh-tw.php b/module/upgrade/lang/zh-tw.php index 36e3161374..3d71b43823 100644 --- a/module/upgrade/lang/zh-tw.php +++ b/module/upgrade/lang/zh-tw.php @@ -72,3 +72,4 @@ $lang->upgrade->fromVersions['4_0'] = '4.0'; $lang->upgrade->fromVersions['4_0_1'] = '4.0.1'; $lang->upgrade->fromVersions['4_1'] = '4.1'; $lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta'; +$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta'; diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 27edd4eba1..bb38434846 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -92,6 +92,8 @@ class upgradeModel extends model $this->deleteCompany(); case '4_2_beta': $this->execSQL($this->getUpgradeFile('4.2')); + case '4_3_beta': + $this->execSQL($this->getUpgradeFile('4.3')); default: if(!$this->isError()) $this->setting->updateVersion($this->config->version); } @@ -143,6 +145,7 @@ class upgradeModel extends model case '4_0_1': $confirmContent .= file_get_contents($this->getUpgradeFile('4.0.1')); case '4_1': $confirmContent .= file_get_contents($this->getUpgradeFile('4.1')); case '4_2_beta': $confirmContent .= file_get_contents($this->getUpgradeFile('4.2')); + case '4_3_beta': $confirmContent .= file_get_contents($this->getUpgradeFile('4.3')); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); } diff --git a/tools/check.php b/tools/check.php index 66f750ce0d..8f5a29d06d 100755 --- a/tools/check.php +++ b/tools/check.php @@ -53,6 +53,9 @@ $whiteList[] = 'story-commonaction'; $whiteList[] = 'story-sendmail'; $whiteList[] = 'webapp-ajaxaddview'; $whiteList[] = 'report-remind'; +$whiteList[] = 'sso-auth'; +$whiteList[] = 'sso-depts'; +$whiteList[] = 'sso-users'; /* checking actions of every module. */ echo '-------------action checking-----------------' . "\n"; diff --git a/www/upgrade.php b/www/upgrade.php index e2bad61d14..0ce2755eaf 100644 --- a/www/upgrade.php +++ b/www/upgrade.php @@ -10,6 +10,7 @@ * @link http://www.zentao.net */ /* Judge my.php exists or not. */ +define('IN_UPGRADE', true); $myConfig = dirname(dirname(__FILE__)) . '/config/my.php'; if(!file_exists($myConfig)) {