From 4e3fe4dc9fcd1325dca4f3f6a2f191638db9528d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 23 Feb 2023 14:42:06 +0800 Subject: [PATCH] * code for feature bar. --- module/api/lang/de.php | 1 - module/api/lang/en.php | 1 - module/api/lang/fr.php | 1 - module/api/lang/vi.php | 1 - module/api/lang/zh-cn.php | 1 - module/api/lang/zh-tw.php | 1 - module/dev/lang/de.php | 12 +-- module/dev/lang/en.php | 12 +-- module/dev/lang/fr.php | 12 +-- module/dev/lang/zh-cn.php | 1 + module/dev/model.php | 156 +++++++++++++++++++++++++++++--------- 11 files changed, 141 insertions(+), 58 deletions(-) diff --git a/module/api/lang/de.php b/module/api/lang/de.php index 8b6b1cfaf9..efc65af19e 100644 --- a/module/api/lang/de.php +++ b/module/api/lang/de.php @@ -9,7 +9,6 @@ * @version $Id: English.php 824 2010-05-02 15:32:06Z wwccss $ * @link http://www.zentao.net */ -$lang->api = new stdclass(); $lang->api->common = 'API'; $lang->api->getModel = 'Super Model API'; $lang->api->sql = 'SQL Query API'; diff --git a/module/api/lang/en.php b/module/api/lang/en.php index 762f425fe6..9ade64dd07 100644 --- a/module/api/lang/en.php +++ b/module/api/lang/en.php @@ -9,7 +9,6 @@ * @version $Id: English.php 824 2010-05-02 15:32:06Z wwccss $ * @link http://www.zentao.net */ -$lang->api = new stdclass(); $lang->api->common = 'API'; $lang->api->getModel = 'Super Model API'; $lang->api->sql = 'SQL Query API'; diff --git a/module/api/lang/fr.php b/module/api/lang/fr.php index 9bb3b5bcea..140be832f2 100644 --- a/module/api/lang/fr.php +++ b/module/api/lang/fr.php @@ -9,7 +9,6 @@ * @version $Id: English.php 824 2010-05-02 15:32:06Z wwccss $ * @link http://www.zentao.net */ -$lang->api = new stdclass(); $lang->api->common = 'API'; $lang->api->getModel = 'Super Model API'; $lang->api->sql = 'SQL Query API'; diff --git a/module/api/lang/vi.php b/module/api/lang/vi.php index 1d6a424c88..e132968307 100644 --- a/module/api/lang/vi.php +++ b/module/api/lang/vi.php @@ -9,7 +9,6 @@ * @version $Id: English.php 824 2010-05-02 15:32:06Z wwccss $ * @link http://www.zentao.net */ -$lang->api = new stdclass(); $lang->api->common = 'API'; $lang->api->getModel = 'Super Model API'; $lang->api->sql = 'SQL Query API'; diff --git a/module/api/lang/zh-cn.php b/module/api/lang/zh-cn.php index 8772adf94b..204f2906a8 100755 --- a/module/api/lang/zh-cn.php +++ b/module/api/lang/zh-cn.php @@ -9,7 +9,6 @@ * @version $Id: zh-cn.php 5129 2013-07-15 00:16:07Z zhujinyonging@gmail.com $ * @link http://www.zentao.net */ -$lang->api = new stdclass(); $lang->api->common = 'API接口'; $lang->api->getModel = '超级model调用接口'; $lang->api->sql = 'SQL查询接口'; diff --git a/module/api/lang/zh-tw.php b/module/api/lang/zh-tw.php index f8c3aee086..ba2f1e1880 100644 --- a/module/api/lang/zh-tw.php +++ b/module/api/lang/zh-tw.php @@ -9,7 +9,6 @@ * @version $Id: zh-tw.php 5129 2013-07-15 00:16:07Z zhujinyonging@gmail.com $ * @link http://www.zentao.net */ -$lang->api = new stdclass(); $lang->api->common = 'API介面'; $lang->api->getModel = '超級model調用介面'; $lang->api->sql = 'SQL查詢介面'; diff --git a/module/dev/lang/de.php b/module/dev/lang/de.php index 82c4fb69d0..3a0ed60a73 100644 --- a/module/dev/lang/de.php +++ b/module/dev/lang/de.php @@ -14,7 +14,6 @@ $lang->dev->post = 'POST Parameter'; $lang->dev->modifyValue = 'modifyValue'; $lang->dev->defaultValue = 'defaultValue'; - $lang->dev->paramRange = 'Parameter Range: %s'; $lang->dev->paramDate = 'Date format: YY-mm-dd, e.g 2019-01-01'; $lang->dev->paramColor = 'Color format: #RGB, e.g. #3da7f5'; @@ -23,10 +22,13 @@ $lang->dev->noteEditor = "The editor is disabled for security reasons. To us $lang->dev->noteTranslate = "The translation is disabled for security reasons. To use this feature, please go to the official website to download and install the plugin of translation."; $lang->dev->confirmRestore = 'Do you want to reset?'; -$lang->dev->default = 'Default'; -$lang->dev->change = 'Change'; -$lang->dev->UR = 'Epic'; -$lang->dev->SR = 'Story'; +$lang->dev->language = 'Language: %s'; +$lang->dev->default = 'Default'; +$lang->dev->currentLang = 'Current Language'; +$lang->dev->change = 'Change'; +$lang->dev->UR = 'Epic'; +$lang->dev->SR = 'Story'; +$lang->dev->branch = 'Branch'; $lang->dev->fields = array(); $lang->dev->fields['id'] = 'ID'; diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 520a1ac668..0e75b59582 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -14,7 +14,6 @@ $lang->dev->post = 'POST Parameter'; $lang->dev->modifyValue = 'modifyValue'; $lang->dev->defaultValue = 'defaultValue'; - $lang->dev->paramRange = 'Parameter Range: %s'; $lang->dev->paramDate = 'Date format: YY-mm-dd, e.g 2019-01-01'; $lang->dev->paramColor = 'Color format: #RGB, e.g. #3da7f5'; @@ -23,10 +22,13 @@ $lang->dev->noteEditor = "The editor is disabled for security reasons. To us $lang->dev->noteTranslate = "The translation is disabled for security reasons. To use this feature, please go to the official website to download and install the plugin of translation."; $lang->dev->confirmRestore = 'Do you want to reset?'; -$lang->dev->default = 'Default'; -$lang->dev->change = 'Change'; -$lang->dev->UR = 'Epic'; -$lang->dev->SR = 'Story'; +$lang->dev->language = 'Language: %s'; +$lang->dev->default = 'Default'; +$lang->dev->currentLang = 'Current Language'; +$lang->dev->change = 'Change'; +$lang->dev->UR = 'Epic'; +$lang->dev->SR = 'Story'; +$lang->dev->branch = 'Branch'; $lang->dev->fields = array(); $lang->dev->fields['id'] = 'ID'; diff --git a/module/dev/lang/fr.php b/module/dev/lang/fr.php index 520a1ac668..0e75b59582 100644 --- a/module/dev/lang/fr.php +++ b/module/dev/lang/fr.php @@ -14,7 +14,6 @@ $lang->dev->post = 'POST Parameter'; $lang->dev->modifyValue = 'modifyValue'; $lang->dev->defaultValue = 'defaultValue'; - $lang->dev->paramRange = 'Parameter Range: %s'; $lang->dev->paramDate = 'Date format: YY-mm-dd, e.g 2019-01-01'; $lang->dev->paramColor = 'Color format: #RGB, e.g. #3da7f5'; @@ -23,10 +22,13 @@ $lang->dev->noteEditor = "The editor is disabled for security reasons. To us $lang->dev->noteTranslate = "The translation is disabled for security reasons. To use this feature, please go to the official website to download and install the plugin of translation."; $lang->dev->confirmRestore = 'Do you want to reset?'; -$lang->dev->default = 'Default'; -$lang->dev->change = 'Change'; -$lang->dev->UR = 'Epic'; -$lang->dev->SR = 'Story'; +$lang->dev->language = 'Language: %s'; +$lang->dev->default = 'Default'; +$lang->dev->currentLang = 'Current Language'; +$lang->dev->change = 'Change'; +$lang->dev->UR = 'Epic'; +$lang->dev->SR = 'Story'; +$lang->dev->branch = 'Branch'; $lang->dev->fields = array(); $lang->dev->fields['id'] = 'ID'; diff --git a/module/dev/lang/zh-cn.php b/module/dev/lang/zh-cn.php index b253e9a6b0..32dec004df 100644 --- a/module/dev/lang/zh-cn.php +++ b/module/dev/lang/zh-cn.php @@ -28,6 +28,7 @@ $lang->dev->currentLang = '当前语言'; $lang->dev->change = '修改值'; $lang->dev->UR = '用户需求'; $lang->dev->SR = '软件需求'; +$lang->dev->branch = '平台/分支'; $lang->dev->fields = array(); $lang->dev->fields['id'] = '序号'; diff --git a/module/dev/model.php b/module/dev/model.php index a9505f1e9a..9016b2ac25 100644 --- a/module/dev/model.php +++ b/module/dev/model.php @@ -307,6 +307,7 @@ class devModel extends model if(empty($language)) $language = $this->app->getClientLang(); $originalLangs = array(); $defaultLang = $this->loadDefaultLang($language); + if($type == 'feature' and in_array($module, $this->config->dev->projectMenus)) $module = 'project'; if($type == 'feature') { $this->defaultLang = $defaultLang; @@ -327,8 +328,15 @@ class devModel extends model } elseif($type == 'feature') { - $langKey = 'featureBar-' . $method . '_'; - foreach($defaultLang->$module->featureBar[$method] as $feature => $featureName) + $langKey = 'featureBar-' . $method . '_'; + $featureBars = zget($defaultLang->$module->featureBar, $method, array()); + if(strpos($method, '_') !== false) + { + $langKey = 'featureBar-' . str_replace('_', '-', $method) . '_'; + list($subMethod, $thirdMethod) = explode('_', $method); + $featureBars = $defaultLang->$module->featureBar[$subMethod][$thirdMethod]; + } + foreach($featureBars as $feature => $featureName) { $selectKey = $feature . 'Selects'; if(isset($defaultLang->$module->$selectKey)) @@ -338,7 +346,6 @@ class devModel extends model } $originalLangs[$langKey . $feature] = $featureName; } - } elseif($type == 'first') { @@ -447,6 +454,7 @@ class devModel extends model } elseif($type == 'feature') { + $method = str_replace('_', '-', $method); $customeds = $this->loadModel('custom')->getItems("lang={$language}&module={$module}§ion=featureBar-$method&vision={$this->config->vision}"); $langKey = "featureBar-{$method}_"; } @@ -498,13 +506,7 @@ class devModel extends model $lang->hourCommon = $this->lang->hourCommon; if(!isset($lang->common)) $lang->common = new stdclass(); - $loadedLangs = array(); - foreach($langFilesToLoad as $langFile) - { - if(in_array($langFile, $loadedLangs)) continue; - include $langFile; - $loadedLangs[] = $langFile; - } + foreach($langFilesToLoad as $langFile) include $langFile; return $lang; } @@ -582,33 +584,82 @@ class devModel extends model * @access public * @return array */ - public function getFeatureMenus($menu, $module = '', $method = '', $loadModules = array()) + public function getFeatureMenus($module, $moduleName = '', $methodName = '') { $menus = array(); - $this->app->loadLang($menu); - if(!in_array($menu, $loadModules) and isset($this->lang->$menu->menu)) + foreach(array('homeMenu', 'menu') as $menu) { - $loadModules[] = $menu; - $menuLang = $this->getLinkTitle($this->lang->$menu->menu); - foreach($menuLang as $menuKey => $menuName) $menus += $this->getFeatureMenus($menuKey, $module, $method, $loadModules); - } - - if(isset($this->lang->$menu->featureBar)) - { - $featureBar = $this->lang->$menu->featureBar; - foreach($featureBar as $methodName => $feature) + if(!isset($this->lang->$module->$menu)) continue; + foreach($this->lang->$module->$menu as $menuKey => $menuValue) { - if($methodName == 'caselib') $methodName = 'caseLib'; - if($methodName == 'all') $methodName = 'browse'; + if(is_array($menuValue) and !isset($menuValue['link'])) continue; + $link = is_array($menuValue) ? $menuValue['link'] : $menuValue; + if(strpos($link, '|') === false) continue; + list($label, $thisModule, $thisMethod) = explode('|', $link); - $subMenu = new stdClass(); - $subMenu->title = zget($this->lang->$menu, $methodName); - $subMenu->key = ''; - $subMenu->module = $menu; - $subMenu->method = $methodName; - $subMenu->active = ($method == $methodName and $module == $menu) ? 1 : 0; + $subMenu = new stdclass(); + $subMenu->title = $label; + $subMenu->key = ''; + $subMenu->module = $thisModule; + $subMenu->method = $thisMethod; + $subMenu->active = ($methodName == $thisMethod and $moduleName == $thisModule) ? 1 : 0; + $subMenu->children = array(); - $menus[] = $subMenu; + $this->app->loadLang($thisModule); + $hasFeatureBar = false; + if(isset($this->lang->$thisModule->featureBar[$thisMethod])) $hasFeatureBar = true; + + if(is_array($menuValue)) + { + foreach(array('subMenu', 'dropMenu') as $menu) + { + if(!isset($menuValue[$menu])) continue; + foreach($menuValue[$menu] as $subMenuKey => $subMenuValue) + { + if(is_array($subMenuValue) and !isset($subMenuValue['link'])) continue; + $link = is_array($subMenuValue) ? $subMenuValue['link'] : $subMenuValue; + if(strpos($link, '|') === false) continue; + list($label, $thisModule, $thisMethod) = explode('|', $link); + if($label == '@branch@') $label = $this->lang->dev->branch; + + $this->app->loadLang($thisModule); + if(isset($this->lang->$thisModule->featureBar[$menuKey][$subMenuKey])) + { + $thirdMenu = new stdClass(); + $thirdMenu->title = $label; + $thirdMenu->key = ''; + $thirdMenu->module = $thisModule; + $thirdMenu->method = "{$thisMethod}_{$subMenuKey}"; + $thirdMenu->active = ($methodName == $thirdMenu->method and $moduleName == $thisModule) ? 1 : 0; + + $subMenu->active = 0; + $subMenu->children[] = $thirdMenu; + $hasFeatureBar = true; + } + elseif(isset($this->lang->$thisModule->featureBar[$thisMethod])) + { + if(is_array($this->lang->$thisModule->featureBar[$thisMethod])) + { + $arrayKey = key($this->lang->$thisModule->featureBar[$thisMethod]); + if(is_array($this->lang->$thisModule->featureBar[$thisMethod][$arrayKey])) continue; + } + + $subMenu = new stdClass(); + $subMenu->title = $label; + $subMenu->key = ''; + $subMenu->module = $thisModule; + $subMenu->method = $thisMethod; + $subMenu->active = ($methodName == $thisMethod and $moduleName == $thisModule) ? 1 : 0; + $subMenu->children = array(); + + $menus[$subMenuKey] = $subMenu; + $hasFeatureBar = false; + } + } + } + } + + if($hasFeatureBar) $menus[$menuKey] = $subMenu; } } @@ -648,19 +699,50 @@ class devModel extends model foreach($mainNav as $menuKey => $menu) { $menuItem = new stdclass(); - $menuItem->title = $menu; - $menuItem->module = $menuKey; - $menuItem->method = ''; - $menuItem->active = ($module == $menuKey and $method == '') ? 1 : 0; - $menuItem->key = zget($maimNavPinYin, $menu, ''); + $menuItem->title = $menu; + $menuItem->module = $menuKey; + $menuItem->method = ''; + $menuItem->active = ($module == $menuKey and $method == '') ? 1 : 0; + $menuItem->key = zget($maimNavPinYin, $menu, ''); + $menuItem->children = array(); $childFunc = 'get' . ucfirst($type) . 'Menus'; - $menuItem->children = $this->$childFunc($menuKey, $module, $method); + if($type == 'feature' and in_array($menuKey, $this->config->dev->projectMenus)) + { + if($menuKey != 'project') continue; + foreach($this->config->dev->projectMenus as $projectModule) $menuItem->children += $this->getFeatureMenus($projectModule, $module, $method); + } + else + { + $menuItem->children = $this->$childFunc($menuKey, $module, $method); + } + $menuItem->children = array_values($menuItem->children); + if($type != 'second' and empty($menuItem->children)) continue; $menuTree[] = $menuItem; } + /* Unique menu tree by module and method. */ + if($type == 'feature') + { + $methods = array(); + foreach($menuTree as $index => $menuItem) + { + foreach($menuItem->children as $subIndex => $subMenuItem) + { + $key = "{$subMenuItem->module}|{$subMenuItem->method}"; + if(isset($methods[$key])) + { + unset($menuItem->children[$subIndex]); + continue; + } + $methods[$key] = true; + } + $menuItem->children = array_values($menuItem->children); + } + } + return $menuTree; }