diff --git a/config/zentaopms.php b/config/zentaopms.php index 5e2bfcc752..170afc14b9 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -429,6 +429,7 @@ $config->maxPriValue = '256'; $config->importWhiteList = array('user', 'task', 'story', 'bug', 'testcase', 'feedback', 'ticket'); $config->featureGroup = new stdclass(); +$config->featureGroup->my = array('score'); $config->featureGroup->product = array('roadmap', 'track', 'UR'); $config->featureGroup->scrum = array(); $config->featureGroup->waterfall = array(); diff --git a/extension/lite/common/ext/lang/de/lite.php b/extension/lite/common/ext/lang/de/lite.php index 0a74146ca0..ef7b1da49c 100644 --- a/extension/lite/common/ext/lang/de/lite.php +++ b/extension/lite/common/ext/lang/de/lite.php @@ -143,81 +143,6 @@ $lang->doc->menuOrder[30] = 'custom'; $lang->doc->menu->project['subMenu'] = new stdclass(); $lang->doc->menu->custom['subMenu'] = new stdclass(); -if(isset($lang->admin->menu->xuanxuan)) $xuanxuanMenu = $lang->admin->menu->xuanxuan; -/* Admin menu. */ -$lang->admin->menu = new stdclass(); -$lang->admin->menu->index = array('link' => "$lang->indexPage|admin|index", 'alias' => 'register,certifytemail,certifyztmobile,ztcompany'); -if(isset($xuanxuanMenu)) $lang->admin->menu->xuanxuan = $xuanxuanMenu; -$lang->admin->menu->company = array('link' => "{$lang->personnel->common}|company|browse|", 'subModule' => ',user,dept,group,'); -$lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|index", 'exclude' => 'custom-browsestoryconcept,custom-timezone,custom-estimate'); -$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,sms'); -$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin,search,ldap', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany'); - -if($config->vision != 'lite') $lang->admin->menu->xuanxuan['link'] = 'Chat|admin|xuanxuan'; - -/* Admin menu order. */ -$lang->admin->menuOrder = array(); -$lang->admin->menuOrder[5] = 'index'; -$lang->admin->menuOrder[6] = 'xuanxuan'; -$lang->admin->menuOrder[10] = 'company'; -$lang->admin->menuOrder[15] = 'custom'; -$lang->admin->menuOrder[20] = 'message'; -$lang->admin->menuOrder[25] = 'extension'; -$lang->admin->menuOrder[30] = 'dev'; -$lang->admin->menuOrder[35] = 'system'; - -$lang->admin->menu->message['subMenu'] = new stdclass(); -$lang->admin->menu->message['subMenu']->message = array(); -$lang->admin->menu->message['subMenu']->mail = array('link' => "{$lang->mail->common}|mail|index", 'subModule' => 'mail'); -$lang->admin->menu->message['subMenu']->webhook = array('link' => "Webhook|webhook|browse", 'subModule' => 'webhook'); - -if($config->edition != 'open') $lang->admin->menu->message['subMenu']->sms = array('link' => "Message|sms|index"); - -$lang->admin->menu->message['subMenu']->browser = array('link' => "$lang->browser|message|browser"); -$lang->admin->menu->message['subMenu']->setting = array('link' => "$lang->settings|message|setting"); - -$lang->admin->menu->message['menuOrder'][5] = 'mail'; -$lang->admin->menu->message['menuOrder'][10] = 'webhook'; -$lang->admin->menu->message['menuOrder'][11] = 'sms'; -$lang->admin->menu->message['menuOrder'][15] = 'browser'; -$lang->admin->menu->message['menuOrder'][20] = 'setting'; - -$lang->admin->menu->company['subMenu'] = new stdclass(); -$lang->admin->menu->company['subMenu']->browseUser = array('link' => "{$lang->user->common}|company|browse", 'subModule' => 'user'); -$lang->admin->menu->company['subMenu']->dept = array('link' => "{$lang->dept->common}|dept|browse", 'subModule' => 'dept'); -$lang->admin->menu->company['subMenu']->browseGroup = array('link' => "{$lang->priv}|group|browse", 'subModule' => 'group'); - -$lang->admin->menu->dev['subMenu'] = new stdclass(); -$lang->admin->menu->dev['subMenu']->api = array('link' => "API|dev|api"); -$lang->admin->menu->dev['subMenu']->db = array('link' => "$lang->db|dev|db"); -$lang->admin->menu->dev['subMenu']->editor = array('link' => "$lang->editor|dev|editor"); -$lang->admin->menu->dev['subMenu']->entry = array('link' => "{$lang->admin->entry}|entry|browse", 'subModule' => 'entry'); - -$lang->admin->menu->dev['menuOrder'][5] = 'api'; -$lang->admin->menu->dev['menuOrder'][10] = 'db'; -$lang->admin->menu->dev['menuOrder'][15] = 'editor'; -$lang->admin->menu->dev['menuOrder'][20] = 'entry'; - -$lang->admin->menu->system['subMenu'] = new stdclass(); -$lang->admin->menu->system['subMenu']->data = array('link' => "{$lang->admin->data}|backup|index", 'subModule' => 'action'); -$lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->security|admin|safe", 'alias' => 'checkweak'); -$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|"); - -if($config->visions == ',lite,' and $config->edition != 'open') $lang->admin->menu->system['subMenu']->license = array('link' => "License|admin|license'", 'alias' => 'license'); -if($config->visions != ',lite,') unset($lang->admin->menu->system['subMenu']->buildIndex); - -if($config->edition != 'open') -{ - $lang->admin->menu->system['subMenu']->ldap = array('link' => 'LDAP|ldap|set', 'subModule' => 'ldap'); - $lang->admin->menu->system['subMenu']->libreoffice = array('link' => 'Office|custom|libreoffice'); -} - -$lang->admin->dividerMenu = ',company,message,system,'; - /* adjust items of search. */ $lang->searchObjects['all'] = 'All'; $lang->searchObjects['todo'] = 'Todo'; @@ -275,25 +200,6 @@ global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); - $lang->admin->menu->xuanxuan = array('link' => 'Chat|admin|xuanxuan', 'subModule' => 'client,setting'); - $lang->admin->menuOrder[6] = 'xuanxuan'; - - $lang->admin->menu->xuanxuan['subMenu'] = new stdclass(); - $lang->admin->menu->xuanxuan['subMenu']->index = array('link' => 'Home|admin|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => 'Parameter|setting|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->update = array('link' => 'Update|client|browse', 'subModule' => 'client'); - - $lang->admin->menu->xuanxuan['menuOrder'][0] = 'index'; - $lang->admin->menu->xuanxuan['menuOrder'][5] = 'setting'; - $lang->admin->menu->xuanxuan['menuOrder'][10] = 'update'; - - if($config->edition != 'open') - { - $lang->admin->menu->xuanxuan['subModule'] = 'client,setting,conference'; - $lang->admin->menu->xuanxuan['subMenu']->conference = array('link' => 'Conference|conference|admin'); - $lang->admin->menu->xuanxuan['menuOrder'][7] = 'conference'; - $lang->navGroup->conference = 'admin'; - } $lang->navGroup->im = 'admin'; $lang->navGroup->setting = 'admin'; diff --git a/extension/lite/common/ext/lang/en/lite.php b/extension/lite/common/ext/lang/en/lite.php index 0a74146ca0..ef7b1da49c 100644 --- a/extension/lite/common/ext/lang/en/lite.php +++ b/extension/lite/common/ext/lang/en/lite.php @@ -143,81 +143,6 @@ $lang->doc->menuOrder[30] = 'custom'; $lang->doc->menu->project['subMenu'] = new stdclass(); $lang->doc->menu->custom['subMenu'] = new stdclass(); -if(isset($lang->admin->menu->xuanxuan)) $xuanxuanMenu = $lang->admin->menu->xuanxuan; -/* Admin menu. */ -$lang->admin->menu = new stdclass(); -$lang->admin->menu->index = array('link' => "$lang->indexPage|admin|index", 'alias' => 'register,certifytemail,certifyztmobile,ztcompany'); -if(isset($xuanxuanMenu)) $lang->admin->menu->xuanxuan = $xuanxuanMenu; -$lang->admin->menu->company = array('link' => "{$lang->personnel->common}|company|browse|", 'subModule' => ',user,dept,group,'); -$lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|index", 'exclude' => 'custom-browsestoryconcept,custom-timezone,custom-estimate'); -$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,sms'); -$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin,search,ldap', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany'); - -if($config->vision != 'lite') $lang->admin->menu->xuanxuan['link'] = 'Chat|admin|xuanxuan'; - -/* Admin menu order. */ -$lang->admin->menuOrder = array(); -$lang->admin->menuOrder[5] = 'index'; -$lang->admin->menuOrder[6] = 'xuanxuan'; -$lang->admin->menuOrder[10] = 'company'; -$lang->admin->menuOrder[15] = 'custom'; -$lang->admin->menuOrder[20] = 'message'; -$lang->admin->menuOrder[25] = 'extension'; -$lang->admin->menuOrder[30] = 'dev'; -$lang->admin->menuOrder[35] = 'system'; - -$lang->admin->menu->message['subMenu'] = new stdclass(); -$lang->admin->menu->message['subMenu']->message = array(); -$lang->admin->menu->message['subMenu']->mail = array('link' => "{$lang->mail->common}|mail|index", 'subModule' => 'mail'); -$lang->admin->menu->message['subMenu']->webhook = array('link' => "Webhook|webhook|browse", 'subModule' => 'webhook'); - -if($config->edition != 'open') $lang->admin->menu->message['subMenu']->sms = array('link' => "Message|sms|index"); - -$lang->admin->menu->message['subMenu']->browser = array('link' => "$lang->browser|message|browser"); -$lang->admin->menu->message['subMenu']->setting = array('link' => "$lang->settings|message|setting"); - -$lang->admin->menu->message['menuOrder'][5] = 'mail'; -$lang->admin->menu->message['menuOrder'][10] = 'webhook'; -$lang->admin->menu->message['menuOrder'][11] = 'sms'; -$lang->admin->menu->message['menuOrder'][15] = 'browser'; -$lang->admin->menu->message['menuOrder'][20] = 'setting'; - -$lang->admin->menu->company['subMenu'] = new stdclass(); -$lang->admin->menu->company['subMenu']->browseUser = array('link' => "{$lang->user->common}|company|browse", 'subModule' => 'user'); -$lang->admin->menu->company['subMenu']->dept = array('link' => "{$lang->dept->common}|dept|browse", 'subModule' => 'dept'); -$lang->admin->menu->company['subMenu']->browseGroup = array('link' => "{$lang->priv}|group|browse", 'subModule' => 'group'); - -$lang->admin->menu->dev['subMenu'] = new stdclass(); -$lang->admin->menu->dev['subMenu']->api = array('link' => "API|dev|api"); -$lang->admin->menu->dev['subMenu']->db = array('link' => "$lang->db|dev|db"); -$lang->admin->menu->dev['subMenu']->editor = array('link' => "$lang->editor|dev|editor"); -$lang->admin->menu->dev['subMenu']->entry = array('link' => "{$lang->admin->entry}|entry|browse", 'subModule' => 'entry'); - -$lang->admin->menu->dev['menuOrder'][5] = 'api'; -$lang->admin->menu->dev['menuOrder'][10] = 'db'; -$lang->admin->menu->dev['menuOrder'][15] = 'editor'; -$lang->admin->menu->dev['menuOrder'][20] = 'entry'; - -$lang->admin->menu->system['subMenu'] = new stdclass(); -$lang->admin->menu->system['subMenu']->data = array('link' => "{$lang->admin->data}|backup|index", 'subModule' => 'action'); -$lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->security|admin|safe", 'alias' => 'checkweak'); -$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|"); - -if($config->visions == ',lite,' and $config->edition != 'open') $lang->admin->menu->system['subMenu']->license = array('link' => "License|admin|license'", 'alias' => 'license'); -if($config->visions != ',lite,') unset($lang->admin->menu->system['subMenu']->buildIndex); - -if($config->edition != 'open') -{ - $lang->admin->menu->system['subMenu']->ldap = array('link' => 'LDAP|ldap|set', 'subModule' => 'ldap'); - $lang->admin->menu->system['subMenu']->libreoffice = array('link' => 'Office|custom|libreoffice'); -} - -$lang->admin->dividerMenu = ',company,message,system,'; - /* adjust items of search. */ $lang->searchObjects['all'] = 'All'; $lang->searchObjects['todo'] = 'Todo'; @@ -275,25 +200,6 @@ global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); - $lang->admin->menu->xuanxuan = array('link' => 'Chat|admin|xuanxuan', 'subModule' => 'client,setting'); - $lang->admin->menuOrder[6] = 'xuanxuan'; - - $lang->admin->menu->xuanxuan['subMenu'] = new stdclass(); - $lang->admin->menu->xuanxuan['subMenu']->index = array('link' => 'Home|admin|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => 'Parameter|setting|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->update = array('link' => 'Update|client|browse', 'subModule' => 'client'); - - $lang->admin->menu->xuanxuan['menuOrder'][0] = 'index'; - $lang->admin->menu->xuanxuan['menuOrder'][5] = 'setting'; - $lang->admin->menu->xuanxuan['menuOrder'][10] = 'update'; - - if($config->edition != 'open') - { - $lang->admin->menu->xuanxuan['subModule'] = 'client,setting,conference'; - $lang->admin->menu->xuanxuan['subMenu']->conference = array('link' => 'Conference|conference|admin'); - $lang->admin->menu->xuanxuan['menuOrder'][7] = 'conference'; - $lang->navGroup->conference = 'admin'; - } $lang->navGroup->im = 'admin'; $lang->navGroup->setting = 'admin'; diff --git a/extension/lite/common/ext/lang/fr/lite.php b/extension/lite/common/ext/lang/fr/lite.php index 0a74146ca0..ef7b1da49c 100644 --- a/extension/lite/common/ext/lang/fr/lite.php +++ b/extension/lite/common/ext/lang/fr/lite.php @@ -143,81 +143,6 @@ $lang->doc->menuOrder[30] = 'custom'; $lang->doc->menu->project['subMenu'] = new stdclass(); $lang->doc->menu->custom['subMenu'] = new stdclass(); -if(isset($lang->admin->menu->xuanxuan)) $xuanxuanMenu = $lang->admin->menu->xuanxuan; -/* Admin menu. */ -$lang->admin->menu = new stdclass(); -$lang->admin->menu->index = array('link' => "$lang->indexPage|admin|index", 'alias' => 'register,certifytemail,certifyztmobile,ztcompany'); -if(isset($xuanxuanMenu)) $lang->admin->menu->xuanxuan = $xuanxuanMenu; -$lang->admin->menu->company = array('link' => "{$lang->personnel->common}|company|browse|", 'subModule' => ',user,dept,group,'); -$lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|index", 'exclude' => 'custom-browsestoryconcept,custom-timezone,custom-estimate'); -$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,sms'); -$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin,search,ldap', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany'); - -if($config->vision != 'lite') $lang->admin->menu->xuanxuan['link'] = 'Chat|admin|xuanxuan'; - -/* Admin menu order. */ -$lang->admin->menuOrder = array(); -$lang->admin->menuOrder[5] = 'index'; -$lang->admin->menuOrder[6] = 'xuanxuan'; -$lang->admin->menuOrder[10] = 'company'; -$lang->admin->menuOrder[15] = 'custom'; -$lang->admin->menuOrder[20] = 'message'; -$lang->admin->menuOrder[25] = 'extension'; -$lang->admin->menuOrder[30] = 'dev'; -$lang->admin->menuOrder[35] = 'system'; - -$lang->admin->menu->message['subMenu'] = new stdclass(); -$lang->admin->menu->message['subMenu']->message = array(); -$lang->admin->menu->message['subMenu']->mail = array('link' => "{$lang->mail->common}|mail|index", 'subModule' => 'mail'); -$lang->admin->menu->message['subMenu']->webhook = array('link' => "Webhook|webhook|browse", 'subModule' => 'webhook'); - -if($config->edition != 'open') $lang->admin->menu->message['subMenu']->sms = array('link' => "Message|sms|index"); - -$lang->admin->menu->message['subMenu']->browser = array('link' => "$lang->browser|message|browser"); -$lang->admin->menu->message['subMenu']->setting = array('link' => "$lang->settings|message|setting"); - -$lang->admin->menu->message['menuOrder'][5] = 'mail'; -$lang->admin->menu->message['menuOrder'][10] = 'webhook'; -$lang->admin->menu->message['menuOrder'][11] = 'sms'; -$lang->admin->menu->message['menuOrder'][15] = 'browser'; -$lang->admin->menu->message['menuOrder'][20] = 'setting'; - -$lang->admin->menu->company['subMenu'] = new stdclass(); -$lang->admin->menu->company['subMenu']->browseUser = array('link' => "{$lang->user->common}|company|browse", 'subModule' => 'user'); -$lang->admin->menu->company['subMenu']->dept = array('link' => "{$lang->dept->common}|dept|browse", 'subModule' => 'dept'); -$lang->admin->menu->company['subMenu']->browseGroup = array('link' => "{$lang->priv}|group|browse", 'subModule' => 'group'); - -$lang->admin->menu->dev['subMenu'] = new stdclass(); -$lang->admin->menu->dev['subMenu']->api = array('link' => "API|dev|api"); -$lang->admin->menu->dev['subMenu']->db = array('link' => "$lang->db|dev|db"); -$lang->admin->menu->dev['subMenu']->editor = array('link' => "$lang->editor|dev|editor"); -$lang->admin->menu->dev['subMenu']->entry = array('link' => "{$lang->admin->entry}|entry|browse", 'subModule' => 'entry'); - -$lang->admin->menu->dev['menuOrder'][5] = 'api'; -$lang->admin->menu->dev['menuOrder'][10] = 'db'; -$lang->admin->menu->dev['menuOrder'][15] = 'editor'; -$lang->admin->menu->dev['menuOrder'][20] = 'entry'; - -$lang->admin->menu->system['subMenu'] = new stdclass(); -$lang->admin->menu->system['subMenu']->data = array('link' => "{$lang->admin->data}|backup|index", 'subModule' => 'action'); -$lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->security|admin|safe", 'alias' => 'checkweak'); -$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|"); - -if($config->visions == ',lite,' and $config->edition != 'open') $lang->admin->menu->system['subMenu']->license = array('link' => "License|admin|license'", 'alias' => 'license'); -if($config->visions != ',lite,') unset($lang->admin->menu->system['subMenu']->buildIndex); - -if($config->edition != 'open') -{ - $lang->admin->menu->system['subMenu']->ldap = array('link' => 'LDAP|ldap|set', 'subModule' => 'ldap'); - $lang->admin->menu->system['subMenu']->libreoffice = array('link' => 'Office|custom|libreoffice'); -} - -$lang->admin->dividerMenu = ',company,message,system,'; - /* adjust items of search. */ $lang->searchObjects['all'] = 'All'; $lang->searchObjects['todo'] = 'Todo'; @@ -275,25 +200,6 @@ global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); - $lang->admin->menu->xuanxuan = array('link' => 'Chat|admin|xuanxuan', 'subModule' => 'client,setting'); - $lang->admin->menuOrder[6] = 'xuanxuan'; - - $lang->admin->menu->xuanxuan['subMenu'] = new stdclass(); - $lang->admin->menu->xuanxuan['subMenu']->index = array('link' => 'Home|admin|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => 'Parameter|setting|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->update = array('link' => 'Update|client|browse', 'subModule' => 'client'); - - $lang->admin->menu->xuanxuan['menuOrder'][0] = 'index'; - $lang->admin->menu->xuanxuan['menuOrder'][5] = 'setting'; - $lang->admin->menu->xuanxuan['menuOrder'][10] = 'update'; - - if($config->edition != 'open') - { - $lang->admin->menu->xuanxuan['subModule'] = 'client,setting,conference'; - $lang->admin->menu->xuanxuan['subMenu']->conference = array('link' => 'Conference|conference|admin'); - $lang->admin->menu->xuanxuan['menuOrder'][7] = 'conference'; - $lang->navGroup->conference = 'admin'; - } $lang->navGroup->im = 'admin'; $lang->navGroup->setting = 'admin'; diff --git a/extension/lite/common/ext/lang/zh-cn/lite.php b/extension/lite/common/ext/lang/zh-cn/lite.php index bf296cab43..dd43e3aeca 100644 --- a/extension/lite/common/ext/lang/zh-cn/lite.php +++ b/extension/lite/common/ext/lang/zh-cn/lite.php @@ -53,7 +53,6 @@ else $lang->task->common = '任务'; $lang->dashboard = isset($lang->dashboard->common) ? $lang->dashboard->common : $lang->dashboard; - /* Ticket. */ if($config->edition != 'open') $lang->feedback->menu->ticket = array('link' => '工单|ticket|browse|browseType=unclosed'); @@ -144,82 +143,6 @@ $lang->doc->menuOrder[30] = 'custom'; $lang->doc->menu->project['subMenu'] = new stdclass(); $lang->doc->menu->custom['subMenu'] = new stdclass(); -if(isset($lang->admin->menu->xuanxuan)) $xuanxuanMenu = $lang->admin->menu->xuanxuan; -/* Admin menu. */ -$lang->admin->menu = new stdclass(); -$lang->admin->menu->index = array('link' => "$lang->indexPage|admin|index", 'alias' => 'register,certifytemail,certifyztmobile,ztcompany'); -if(isset($xuanxuanMenu)) $lang->admin->menu->xuanxuan = $xuanxuanMenu; -$lang->admin->menu->company = array('link' => "{$lang->personnel->common}|company|browse|", 'subModule' => ',user,dept,group,'); -$lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|index", 'exclude' => 'custom-browsestoryconcept,custom-timezone,custom-estimate'); -$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,sms'); -$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin,search,ldap', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany'); - -if($config->vision != 'lite') $lang->admin->menu->xuanxuan['link'] = '聊天|admin|xuanxuan'; - -/* Admin menu order. */ -$lang->admin->menuOrder = array(); -$lang->admin->menuOrder[5] = 'index'; -$lang->admin->menuOrder[6] = 'xuanxuan'; -$lang->admin->menuOrder[10] = 'company'; -$lang->admin->menuOrder[15] = 'custom'; -$lang->admin->menuOrder[20] = 'message'; -$lang->admin->menuOrder[25] = 'extension'; -$lang->admin->menuOrder[30] = 'dev'; -$lang->admin->menuOrder[35] = 'system'; - -$lang->admin->menu->message['subMenu'] = new stdclass(); -$lang->admin->menu->message['subMenu']->message = array(); -$lang->admin->menu->message['subMenu']->mail = array('link' => "{$lang->mail->common}|mail|index", 'subModule' => 'mail'); -$lang->admin->menu->message['subMenu']->webhook = array('link' => "Webhook|webhook|browse", 'subModule' => 'webhook'); - -if($config->edition != 'open') $lang->admin->menu->message['subMenu']->sms = array('link' => "短信|sms|index"); - -$lang->admin->menu->message['subMenu']->browser = array('link' => "$lang->browser|message|browser"); -$lang->admin->menu->message['subMenu']->setting = array('link' => "$lang->settings|message|setting"); - -$lang->admin->menu->message['menuOrder'][5] = 'mail'; -$lang->admin->menu->message['menuOrder'][10] = 'webhook'; -$lang->admin->menu->message['menuOrder'][11] = 'sms'; -$lang->admin->menu->message['menuOrder'][15] = 'browser'; -$lang->admin->menu->message['menuOrder'][20] = 'setting'; - -$lang->admin->menu->company['subMenu'] = new stdclass(); -$lang->admin->menu->company['subMenu']->browseUser = array('link' => "{$lang->user->common}|company|browse", 'subModule' => 'user'); -$lang->admin->menu->company['subMenu']->dept = array('link' => "{$lang->dept->common}|dept|browse", 'subModule' => 'dept'); -$lang->admin->menu->company['subMenu']->browseGroup = array('link' => "{$lang->priv}|group|browse", 'subModule' => 'group'); - -$lang->admin->menu->dev['subMenu'] = new stdclass(); -$lang->admin->menu->dev['subMenu']->api = array('link' => "API|dev|api"); -$lang->admin->menu->dev['subMenu']->db = array('link' => "$lang->db|dev|db"); -$lang->admin->menu->dev['subMenu']->editor = array('link' => "$lang->editor|dev|editor"); -$lang->admin->menu->dev['subMenu']->entry = array('link' => "{$lang->admin->entry}|entry|browse", 'subModule' => 'entry'); - -$lang->admin->menu->dev['menuOrder'][5] = 'api'; -$lang->admin->menu->dev['menuOrder'][10] = 'db'; -$lang->admin->menu->dev['menuOrder'][15] = 'editor'; -$lang->admin->menu->dev['menuOrder'][20] = 'entry'; - -$lang->admin->menu->system['subMenu'] = new stdclass(); -$lang->admin->menu->system['subMenu']->backup = array('link' => "{$lang->backup->common}|backup|index"); -$lang->admin->menu->system['subMenu']->trash = array('link' => "{$lang->action->trash}|action|trash"); -$lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->security|admin|safe", 'alias' => 'checkweak'); -$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|"); - -if($config->visions == ',lite,' and $config->edition != 'open') $lang->admin->menu->system['subMenu']->license = array('link' => "授权信息|admin|license'", 'alias' => 'license'); -if($config->visions != ',lite,') unset($lang->admin->menu->system['subMenu']->buildIndex); - -if($config->edition != 'open') -{ - $lang->admin->menu->system['subMenu']->ldap = array('link' => 'LDAP|ldap|set', 'subModule' => 'ldap'); - $lang->admin->menu->system['subMenu']->libreoffice = array('link' => 'Office|custom|libreoffice'); -} - -$lang->admin->dividerMenu = ',company,message,system,'; - /* adjust items of search. */ $lang->searchObjects['all'] = '全部'; $lang->searchObjects['todo'] = '待办'; @@ -277,25 +200,6 @@ global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); - $lang->admin->menu->xuanxuan = array('link' => '聊天|admin|xuanxuan', 'subModule' => 'client,setting'); - $lang->admin->menuOrder[6] = 'xuanxuan'; - - $lang->admin->menu->xuanxuan['subMenu'] = new stdclass(); - $lang->admin->menu->xuanxuan['subMenu']->index = array('link' => '首页|admin|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => '参数|setting|xuanxuan'); - $lang->admin->menu->xuanxuan['subMenu']->update = array('link' => '更新|client|browse', 'subModule' => 'client'); - - $lang->admin->menu->xuanxuan['menuOrder'][0] = 'index'; - $lang->admin->menu->xuanxuan['menuOrder'][5] = 'setting'; - $lang->admin->menu->xuanxuan['menuOrder'][10] = 'update'; - - if($config->edition != 'open') - { - $lang->admin->menu->xuanxuan['subModule'] = 'client,setting,conference'; - $lang->admin->menu->xuanxuan['subMenu']->conference = array('link' => '音视频|conference|admin'); - $lang->admin->menu->xuanxuan['menuOrder'][7] = 'conference'; - $lang->navGroup->conference = 'admin'; - } $lang->navGroup->im = 'admin'; $lang->navGroup->setting = 'admin'; diff --git a/extension/lite/custom/ext/lang/de/lite.php b/extension/lite/custom/ext/lang/de/lite.php index 7b4a6e67f3..5d0451d9c9 100644 --- a/extension/lite/custom/ext/lang/de/lite.php +++ b/extension/lite/custom/ext/lang/de/lite.php @@ -5,27 +5,13 @@ $lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on $lang->custom->moduleName['execution'] = $lang->custom->execution; -$lang->custom->object = array(); -$lang->custom->object['execution'] = $lang->custom->execution; -$lang->custom->object['story'] = $lang->SRCommon; -$lang->custom->object['task'] = 'Task'; -$lang->custom->object['todo'] = 'Todo'; -$lang->custom->object['user'] = 'User'; -$lang->custom->object['block'] = 'Block'; - -$lang->custom->menuOrder = array(); -$lang->custom->menuOrder[10] = 'execution'; -$lang->custom->menuOrder[15] = 'story'; -$lang->custom->menuOrder[20] = 'task'; -$lang->custom->menuOrder[25] = 'todo'; -$lang->custom->menuOrder[30] = 'user'; -$lang->custom->menuOrder[35] = 'block'; - $lang->custom->task = new stdClass(); +$lang->custom->task->fields['required'] = $lang->custom->required; $lang->custom->task->fields['priList'] = 'Priority'; $lang->custom->task->fields['typeList'] = 'Type'; $lang->custom->story = new stdClass(); +$lang->custom->story->fields['required'] = $lang->custom->required; $lang->custom->story->fields['priList'] = 'Priority'; $lang->custom->story->fields['reasonList'] = 'Close Reason'; $lang->custom->story->fields['statusList'] = 'Status'; diff --git a/extension/lite/custom/ext/lang/en/lite.php b/extension/lite/custom/ext/lang/en/lite.php index 7b4a6e67f3..5d0451d9c9 100644 --- a/extension/lite/custom/ext/lang/en/lite.php +++ b/extension/lite/custom/ext/lang/en/lite.php @@ -5,27 +5,13 @@ $lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on $lang->custom->moduleName['execution'] = $lang->custom->execution; -$lang->custom->object = array(); -$lang->custom->object['execution'] = $lang->custom->execution; -$lang->custom->object['story'] = $lang->SRCommon; -$lang->custom->object['task'] = 'Task'; -$lang->custom->object['todo'] = 'Todo'; -$lang->custom->object['user'] = 'User'; -$lang->custom->object['block'] = 'Block'; - -$lang->custom->menuOrder = array(); -$lang->custom->menuOrder[10] = 'execution'; -$lang->custom->menuOrder[15] = 'story'; -$lang->custom->menuOrder[20] = 'task'; -$lang->custom->menuOrder[25] = 'todo'; -$lang->custom->menuOrder[30] = 'user'; -$lang->custom->menuOrder[35] = 'block'; - $lang->custom->task = new stdClass(); +$lang->custom->task->fields['required'] = $lang->custom->required; $lang->custom->task->fields['priList'] = 'Priority'; $lang->custom->task->fields['typeList'] = 'Type'; $lang->custom->story = new stdClass(); +$lang->custom->story->fields['required'] = $lang->custom->required; $lang->custom->story->fields['priList'] = 'Priority'; $lang->custom->story->fields['reasonList'] = 'Close Reason'; $lang->custom->story->fields['statusList'] = 'Status'; diff --git a/extension/lite/custom/ext/lang/fr/lite.php b/extension/lite/custom/ext/lang/fr/lite.php index 7b4a6e67f3..5d0451d9c9 100644 --- a/extension/lite/custom/ext/lang/fr/lite.php +++ b/extension/lite/custom/ext/lang/fr/lite.php @@ -5,27 +5,13 @@ $lang->custom->notice->readOnlyOfExecution = "If Change Forbidden, any change on $lang->custom->moduleName['execution'] = $lang->custom->execution; -$lang->custom->object = array(); -$lang->custom->object['execution'] = $lang->custom->execution; -$lang->custom->object['story'] = $lang->SRCommon; -$lang->custom->object['task'] = 'Task'; -$lang->custom->object['todo'] = 'Todo'; -$lang->custom->object['user'] = 'User'; -$lang->custom->object['block'] = 'Block'; - -$lang->custom->menuOrder = array(); -$lang->custom->menuOrder[10] = 'execution'; -$lang->custom->menuOrder[15] = 'story'; -$lang->custom->menuOrder[20] = 'task'; -$lang->custom->menuOrder[25] = 'todo'; -$lang->custom->menuOrder[30] = 'user'; -$lang->custom->menuOrder[35] = 'block'; - $lang->custom->task = new stdClass(); +$lang->custom->task->fields['required'] = $lang->custom->required; $lang->custom->task->fields['priList'] = 'Priority'; $lang->custom->task->fields['typeList'] = 'Type'; $lang->custom->story = new stdClass(); +$lang->custom->story->fields['required'] = $lang->custom->required; $lang->custom->story->fields['priList'] = 'Priority'; $lang->custom->story->fields['reasonList'] = 'Close Reason'; $lang->custom->story->fields['statusList'] = 'Status'; diff --git a/extension/lite/custom/ext/lang/zh-cn/lite.php b/extension/lite/custom/ext/lang/zh-cn/lite.php index 4380e13b6e..5e687e8001 100644 --- a/extension/lite/custom/ext/lang/zh-cn/lite.php +++ b/extension/lite/custom/ext/lang/zh-cn/lite.php @@ -5,27 +5,13 @@ $lang->custom->notice->readOnlyOfExecution = "禁止修改后,已关闭{$lang- $lang->custom->moduleName['execution'] = $lang->custom->execution; -$lang->custom->object = array(); -$lang->custom->object['execution'] = $lang->custom->execution; -$lang->custom->object['story'] = $lang->SRCommon; -$lang->custom->object['task'] = '任务'; -$lang->custom->object['todo'] = '待办'; -$lang->custom->object['user'] = '用户'; -$lang->custom->object['block'] = '区块'; - -$lang->custom->menuOrder = array(); -$lang->custom->menuOrder[10] = 'execution'; -$lang->custom->menuOrder[15] = 'story'; -$lang->custom->menuOrder[20] = 'task'; -$lang->custom->menuOrder[25] = 'todo'; -$lang->custom->menuOrder[30] = 'user'; -$lang->custom->menuOrder[35] = 'block'; - $lang->custom->task = new stdClass(); +$lang->custom->task->fields['required'] = $lang->custom->required; $lang->custom->task->fields['priList'] = '优先级'; $lang->custom->task->fields['typeList'] = '类型'; $lang->custom->story = new stdClass(); +$lang->custom->story->fields['required'] = $lang->custom->required; $lang->custom->story->fields['priList'] = '优先级'; $lang->custom->story->fields['reasonList'] = '关闭原因'; $lang->custom->story->fields['statusList'] = '状态'; diff --git a/extension/lite/group/ext/lang/resource.php b/extension/lite/group/ext/lang/resource.php index dfd7f33092..3ba031f0f2 100644 --- a/extension/lite/group/ext/lang/resource.php +++ b/extension/lite/group/ext/lang/resource.php @@ -648,8 +648,9 @@ $lang->mail->methodOrder[65] = 'ztCloud'; $lang->resource->custom = new stdclass(); $lang->resource->custom->index = 'index'; $lang->resource->custom->set = 'set'; -$lang->resource->custom->product = 'product'; +$lang->resource->custom->product = 'productName'; $lang->resource->custom->execution = 'execution'; +$lang->resource->custom->required = 'required'; $lang->resource->custom->restore = 'restore'; $lang->resource->custom->flow = 'flow'; $lang->resource->custom->working = 'working'; @@ -666,17 +667,18 @@ $lang->custom->methodOrder[5] = 'index'; $lang->custom->methodOrder[10] = 'set'; $lang->custom->methodOrder[15] = 'product'; $lang->custom->methodOrder[20] = 'execution'; -$lang->custom->methodOrder[25] = 'restore'; -$lang->custom->methodOrder[30] = 'flow'; -$lang->custom->methodOrder[35] = 'working'; -$lang->custom->methodOrder[40] = 'setPublic'; -$lang->custom->methodOrder[45] = 'timezone'; -$lang->custom->methodOrder[50] = 'setStoryConcept'; -$lang->custom->methodOrder[55] = 'editStoryConcept'; -$lang->custom->methodOrder[60] = 'browseStoryConcept'; -$lang->custom->methodOrder[65] = 'setDefaultConcept'; -$lang->custom->methodOrder[70] = 'deleteStoryConcept'; -$lang->custom->methodOrder[75] = 'libreoffice'; +$lang->custom->methodOrder[25] = 'required'; +$lang->custom->methodOrder[30] = 'restore'; +$lang->custom->methodOrder[35] = 'flow'; +$lang->custom->methodOrder[40] = 'working'; +$lang->custom->methodOrder[45] = 'setPublic'; +$lang->custom->methodOrder[50] = 'timezone'; +$lang->custom->methodOrder[55] = 'setStoryConcept'; +$lang->custom->methodOrder[60] = 'editStoryConcept'; +$lang->custom->methodOrder[65] = 'browseStoryConcept'; +$lang->custom->methodOrder[70] = 'setDefaultConcept'; +$lang->custom->methodOrder[75] = 'deleteStoryConcept'; +$lang->custom->methodOrder[80] = 'libreoffice'; $lang->resource->datatable = new stdclass(); $lang->resource->datatable->setGlobal = 'setGlobal'; diff --git a/framework/helper.class.php b/framework/helper.class.php index 38b42bf5b6..a69af8d858 100644 --- a/framework/helper.class.php +++ b/framework/helper.class.php @@ -305,6 +305,49 @@ class helper extends baseHelper { throw EndResponseException::create($content); } + + /** + * Get date interval. + * + * @param string|int $begin + * @param string|int $end + * @param string $format %Y-%m-%d %H:%i:%s + * @static + * @access public + * @return object|string + */ + public static function getDateInterval($begin, $end = '', $format = '') + { + if(empty($end)) $end = time(); + if(is_int($begin)) $begin = date('Y-m-d H:i:s', $begin); + if(is_int($end)) $end = date('Y-m-d H:i:s', $end); + + $begin = date_create($begin); + $end = date_create($end); + $interval = date_diff($begin, $end); + + if($format) + { + $dateInterval = $interval->format($format); + } + else + { + $dateInterval = new stdClass(); + $dateInterval->year = $interval->format('%y'); + $dateInterval->month = $interval->format('%m'); + $dateInterval->day = $interval->format('%d'); + $dateInterval->hour = $interval->format('%H'); + $dateInterval->minute = $interval->format('%i'); + $dateInterval->secound = $interval->format('%s'); + $dateInterval->year = trim($dateInterval->year, '0'); + $dateInterval->month = trim($dateInterval->month, '0'); + $dateInterval->day = trim($dateInterval->day, '0'); + $dateInterval->hour = trim($dateInterval->hour, '0'); + $dateInterval->minute = trim($dateInterval->minute, '0'); + $dateInterval->secound = trim($dateInterval->secound, '0'); + } + return $dateInterval; + } } /** diff --git a/module/admin/config.php b/module/admin/config.php old mode 100644 new mode 100755 index 8fa6c10599..a90737592c --- a/module/admin/config.php +++ b/module/admin/config.php @@ -6,3 +6,91 @@ $config->admin->log->saveDays = 30; if(!isset($config->safe)) $config->safe = new stdclass(); if(!isset($config->safe->weak)) $config->safe->weak = '123456,password,12345,12345678,qwerty,123456789,1234,1234567,abc123,111111,123123'; + +$config->admin->menuGroup['system'] = array('custom|mode', 'backup', 'cron', 'action|trash', 'admin|xuanxuan', 'setting|xuanxuan', 'admin|license', 'admin|checkweak', 'admin|resetpwdsetting', 'admin|safe', 'custom|timezone', 'search|buildindex', 'admin|tableengine', 'ldap', 'custom|libreoffice', 'conference', 'client'); +$config->admin->menuGroup['user'] = array('dept', 'company', 'user', 'group'); +$config->admin->menuGroup['switch'] = array('admin|setmodule'); +$config->admin->menuGroup['model'] = array('auditcl', 'stage', 'design', 'cmcl', 'reviewcl', 'custom|required', 'custom|set', 'custom|flow', 'custom|code', 'custom|estimate', 'custom|hours', 'subject', 'process', 'activity', 'zoutput', 'classify', 'holiday', 'reviewsetting'); +$config->admin->menuGroup['feature'] = array('custom|set', 'custom|product', 'custom|execution', 'custom|required', 'custom|kanban', 'approvalflow', 'measurement', 'meetingroom', 'custom|browsestoryconcept', 'custom|kanban', 'sqlbuilder', 'report'); +$config->admin->menuGroup['template'] = array('custom|set', 'baseline'); +$config->admin->menuGroup['message'] = array('mail', 'webhook', 'sms', 'message'); +$config->admin->menuGroup['dev'] = array('dev', 'entry'); +$config->admin->menuGroup['extension'] = array('extension'); +$config->admin->menuGroup['convert'] = array('convert'); + +$config->admin->menuModuleGroup['model']['custom|set'] = array('project', 'issue', 'risk', 'opportunity', 'nc'); +$config->admin->menuModuleGroup['model']['custom|required'] = array('project', 'build'); +$config->admin->menuModuleGroup['feature']['custom|set'] = array('todo', 'block', 'story', 'task', 'bug', 'testcase', 'testtask', 'feedback', 'user', 'ticket'); +$config->admin->menuModuleGroup['feature']['custom|required'] = array('bug', 'doc', 'product', 'story', 'productplan', 'release', 'task', 'testcase', 'testsuite', 'testtask', 'testreport', 'caselib', 'doc', 'feedback', 'user'); +$config->admin->menuModuleGroup['template']['custom|set'] = array('baseline'); +if($config->vision == 'lite') +{ + $config->admin->menuModuleGroup['model']['custom|set'] = array(); + $config->admin->menuModuleGroup['model']['custom|required'] = array('build'); + $config->admin->menuModuleGroup['feature']['custom|set'] = array('todo', 'block', 'task', 'story', 'user'); + $config->admin->menuModuleGroup['feature']['custom|required'] = array('project', 'task', 'story', 'doc', 'user'); +} + +$config->admin->plugins[203] = new stdClass(); +$config->admin->plugins[203]->name = '人力资源日历'; +$config->admin->plugins[203]->abstract = '禅道人力资源日历插件可以帮助项目管理者查看不同维度下的消耗工时、未完成工作量、并行工作量及负载率,同时组织维度待处理状态下实现了模拟负载的功能,帮助管理者详细了解成员的工作负载情况,更好的进行项目人力资源调度。'; +$config->admin->plugins[203]->viewLink = 'https://www.zentao.net/extension-viewExt-203.html'; + +$config->admin->plugins[198] = new stdClass(); +$config->admin->plugins[198]->name = '需求池插件'; +$config->admin->plugins[198]->abstract = '本插件为禅道需求池管理插件,包括:创建需求池 需求池权限管理 收集需求并向需求池录入需求 记录需求提出人信息 评审需求 拆分用户需求、研发需求 需求跟踪矩阵'; +$config->admin->plugins[198]->viewLink = 'https://www.zentao.net/extension-viewExt-198.html'; + +$config->admin->plugins[27] = new stdClass(); +$config->admin->plugins[27]->name = 'Excel导出/导入'; +$config->admin->plugins[27]->abstract = '安装该插件可以支持Excel导出和任务、需求、Bug、用例导入功能。更新提示:新增任务、需求、Bug的excel导入功能。'; +$config->admin->plugins[27]->viewLink = 'https://www.zentao.net/extension-viewExt-27.html'; + +$config->admin->plugins[26] = new stdClass(); +$config->admin->plugins[26]->name = '甘特图'; +$config->admin->plugins[26]->abstract = '禅道甘特图插件 运用此插件可以查看甘特图,维护任务关系。'; +$config->admin->plugins[26]->viewLink = 'https://www.zentao.net/extension-viewExt-26.html'; + +$config->admin->plugins[30] = new stdClass(); +$config->admin->plugins[30]->name = '日志日历'; +$config->admin->plugins[30]->abstract = '运用此插件可以实现工作日志的添加、编辑、查看、删除、导出等功能,方便用户管理工作日志。'; +$config->admin->plugins[30]->viewLink = 'https://www.zentao.net/extension-viewExt-30.html'; + +$config->admin->plugins[194] = new stdClass(); +$config->admin->plugins[194]->name = '应用巡检报告'; +$config->admin->plugins[194]->abstract = '每日生成公司级禅道应用巡检报告,促进项目管理持续改进。'; +$config->admin->plugins[194]->viewLink = 'https://www.zentao.net/extension-viewExt-194.html'; + +$config->admin->apiRoot = 'https://www.zentao.net'; +$config->admin->cdnRoot = 'https://cdn.easycorp.cn/web'; +$config->admin->classURL = 'https://www.zentao.net/publicclass.html'; +$config->admin->dynamicURL = 'https://www.zentao.net/download.html'; +$config->admin->extensionURL = 'https://www.zentao.net/extension-browse.html'; +$config->admin->patchURL = 'https://www.zentao.net/extension-browse-byModule-1218.html'; +$config->admin->apiSite = 'https://api.zentao.net/'; +$config->admin->extAPIURL = $config->admin->apiSite . 'extension-apiGetExtensions-'; +$config->admin->patchAPIURL = $config->admin->apiSite . 'extension-apiGetExtensions-bymodule-MTIxOA==-0-100-1.json'; +$config->admin->downloadAPIURL = $config->admin->apiSite . 'download.json'; +$config->admin->videoAPIURL = $config->admin->apiSite . 'publicclass.json'; +$config->admin->liteMenuList = array('system', 'user', 'feature', 'message', 'extension', 'dev'); + +$config->admin->helpURL['system'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['user'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['switch'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['model'] = 'https://www.zentao.net/book/zentaopms/533.html'; +$config->admin->helpURL['feature'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['template'] = 'https://www.zentao.net/book/zentaopms/538.html'; +$config->admin->helpURL['message'] = 'https://www.zentao.net/book/zentaopms/email-notification-541.html'; +$config->admin->helpURL['extension'] = 'https://www.zentao.net/book/zentaopms/536.html'; +$config->admin->helpURL['dev'] = 'https://www.zentao.net/book/zentaopms/537.html'; +$config->admin->helpURL['convert'] = 'https://www.zentao.net/book/zentaopms/656.html'; + +$config->admin->navsGroup['feature']['my'] = ',todo,block,'; +$config->admin->navsGroup['feature']['product'] = ',product,story,productplan,release,'; +$config->admin->navsGroup['feature']['project'] = ',project,'; +$config->admin->navsGroup['feature']['execution'] = ',execution,task,'; +$config->admin->navsGroup['feature']['project'] = ',project,story,'; +$config->admin->navsGroup['feature']['qa'] = ',bug,testcase,testsuite,testtask,testreport,caselib,'; +$config->admin->navsGroup['model']['common'] = ',project,build,issue,risk,opportunity,nc,'; +$config->admin->navsGroup['template']['type'] = ',baseline,'; +if($config->vision == 'lite') $config->admin->navsGroup['feature']['my'] .= 'task,'; diff --git a/module/admin/control.php b/module/admin/control.php old mode 100644 new mode 100755 index 0d6bd79bb6..dba531df46 --- a/module/admin/control.php +++ b/module/admin/control.php @@ -34,8 +34,20 @@ class admin extends control $this->loadModel('misc'); - $this->view->title = $this->lang->admin->common; - $this->view->position[] = $this->lang->admin->index; + $hasInternet = $this->admin->checkInternet(); + $clientLang = $this->app->getClientLang(); + $langNotCN = common::checkNotCN(); + $dateUsed = $this->admin->genDateUsed(); + + $this->view->title = $this->lang->admin->common; + $this->view->position[] = $this->lang->admin->index; + $this->view->plugins = $this->admin->getExtensionsByAPI('plugin', $langNotCN ? 5 : 6, $hasInternet); + $this->view->patches = $this->admin->getExtensionsByAPI('patch', 5, $hasInternet); + $this->view->dateUsed = $dateUsed; + $this->view->hasInternet = $hasInternet; + $this->view->dynamics = ($hasInternet and !$langNotCN) ? $this->admin->getDynamicsByAPI(3) : array(); + $this->view->publicClass = ($hasInternet and !$langNotCN) ? $this->admin->getPublicClassByAPI(3) : array(); + $this->view->langNotCN = $langNotCN; $this->display(); } @@ -235,7 +247,7 @@ class admin extends control /** * Set closed features config. - * + * * @access public * @return void */ @@ -248,17 +260,21 @@ class admin extends control { foreach($this->post->module as $module => $options) { + if($module == 'myScore') continue; $checked = reset($options); if(!$checked) $closedFeatures .= "$module,"; } } $closedFeatures = rtrim($closedFeatures, ','); $this->loadModel('setting')->setItem('system.common.closedFeatures', $closedFeatures); + $this->loadModel('setting')->setItem('system.common.global.scoreStatus', $this->post->module['myScore'][0]); + $this->loadModel('setting')->setItem('system.custom.URAndSR', $this->post->module['productUR'][0]); $this->loadModel('custom')->processMeasrecordCron(); $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'top')); } $this->view->title = $this->lang->admin->setModuleIndex; $this->view->closedFeatures = $this->loadModel('setting')->getItem('owner=system&module=common§ion=&key=closedFeatures'); + $this->view->useScore = $this->setting->getItem('owner=system&module=common&global&key=scoreStatus'); $this->view->disabledFeatures = $this->setting->getItem('owner=system&module=common§ion=&key=disabledFeatures'); $this->display(); } diff --git a/module/admin/css/index.css b/module/admin/css/index.css old mode 100644 new mode 100755 index e954c9c911..fd06878df7 --- a/module/admin/css/index.css +++ b/module/admin/css/index.css @@ -1,3 +1,95 @@ +/* atomic class */ +.flex {display: flex;} +.align-center {align-items: center;} +.justify-between {justify-content: space-between;} +.title-color {color: #313C52} +.font-13 {font-size: 13px;} +.border-gray {border: 1px solid #E3E4E9;} +.h-56 {height: 56px;} +.h-40 {height: 40px;} +.pl-16 {padding-left: 16px;} +.px-16 {padding: 0 16px;} +.mb-16 {margin-bottom: 16px;} +.mr-16 {margin-right: 16px;} +.mx-16 {margin: 0 16px;} +.pd-3 {padding: 3px;} +.pb-3 {padding-bottom: 3px;} +.pr-4 {padding-right: 4px;} +.mt-6 {margin-top: 6px;} +.font-18 {font-size: 18px;} +.font-20 {font-size: 20px;} +.font-24 {font-size: 24px;} +.radius-4 {border-radius: 4px;} + #notice {margin: -20px -20px 20px; padding: 20px;} #zentaoLinks {margin-top: 20px;} #zentaoLinks .panel .panel-heading {padding: 6px 10px;} +.main-content.admin {padding: 0;} +.admin {display: flex; background: unset; box-shadow: none;} +.admin h4 {color: #0B0F18;} +.admin > .main {flex: 1 1 70%;} +.admin > .side {flex: 1 1 30%; margin-left: 16px; padding-right: 16px;} +.panel-title {padding: 10px 0px;} +.panel {padding-left: 16px;} +.settings.panel, .plug.panel {margin-bottom: 16px;} +.main > .panel {padding-right: 8px;} + +.settings-list {display: flex; flex-wrap: wrap; padding: 0 4px 16px 4px;} +.settings-list > .setting-box {border: unset; flex: 0 1 20%; padding: 8px;} +.settings-list > .setting-box > button.btn {padding: 5px 10px; height: 100%; width: 100%; display: flex; flex-direction: column; justify-content: space-between; cursor: pointer; white-space: unset; text-align: unset; border: 1px solid rgba(227, 228, 233, 0.6)} +.settings-list > .setting-box > .btn:hover {background: unset;} +.settings-list > .setting-box > .btn[disabled] {cursor: not-allowed; pointer-events: unset;} +.settings-list > .setting-box > .btn[disabled] > a {pointer-events: none;} +.settings-list > .setting-box > .btn > h4 > img {padding-right: 8px; padding-bottom: 3px; width: 32px; height: 27px;} +.settings-list > .setting-box > .btn > .setting-desc {padding-bottom: 16px; color: #5E626D; line-height: 25px; height: 50px;} +.settings-list.lite-setting > .setting-box {flex: 1 1 30%;} + +.plugin-list {display: flex; flex-wrap: wrap; padding: 12px 4px 4px 4px;} +.plugin-list > .plugin-item {flex: 1 1 26%; padding: 16px 10px; border: 1px solid #EDEEF2; border-radius: 4px; margin-right: 10px; margin-bottom: 16px; width: 0px; cursor: pointer;} +.plugin-list > .plugin-item .ext-download {float: right; padding: 6px 0px;} +.plugin-list > .plugin-item > .plug-title {height: 16px; overflow: hidden;} +.plugin-list > .plugin-item .extension-desc {overflow: hidden; height: 16px;} + +.bottom.flex > .panel, .side.panel {margin-bottom: 0;} +.bottom.flex > .official {flex: 1 1 30%; margin-right: 16px; padding: 40px 16px 16px 16px; display: flex; flex-direction: column; position: relative;} +.bottom.flex > .publicClass {flex: 1 1 60%;} + +.official {justify-content: center;} +.official > .panel-title {position: absolute; top: 0px;} +.official-img {background-image: url('/static/images/wechat.jpg'); background-repeat: no-repeat; background-size: contain; flex: 1 1 30%; aspect-ratio: 1 / 1; background-position: center;} +.official-content {flex: 0 0 60%; display: flex; flex-direction: column; justify-content: center; padding-left: 10px;} +.official-content > .content {color: #838A9D; font-size: 12px; line-height: 22px; padding-top: 6px;} +.official-content > .title {color: #313C52; font-size: 13px; line-height: 14px;} + +.classList > .classItem {flex: 1 1 30%; margin: 5px 5px 16px 5px; border: 1px solid rgba(227, 228, 233, 0.6); border-radius: 4px; padding-bottom: 5px; align-items: center;} +.classItem > .imgBack {flex: 1 1 50%;} +.classItem > .imgBack > .classImg {background-repeat: no-repeat; background-size: contain; aspect-ratio: 16 / 9; background-position: center; margin: 0; border-top-left-radius: 4px; border-top-right-radius: 4px;} +.classItem > .classContent {flex: 1 1 50%; padding: 5px; font-size: 14px; color: #0B0F18; text-align: center; overflow: hidden; height: 24px; margin-bottom: 6px; font-weight: 700;} +.more {float: right; padding-right: 12px; font-weight: normal; color: #9EA3B0;} +.panel.publicClass {padding: 0 10px;} +.icon.follow-us {font-size: 20px; padding-left: 10px;} + +.setting-help {width: 45px; color: #9EA3B0; padding-top: 15px;} +[lang^='zh'] .setting-help {padding-top: 0;} +.pointer-none {pointer-events: none;} + +/* css for without internet */ +.main.without-internet {display: flex; flex-wrap: wrap;} +.main.without-internet > .plug.panel {flex: 1 1 60%; margin-bottom: unset; margin-right: 16px;} +.main.without-internet > .bottom > .official.panel {margin-right: unset;} +.main.without-internet > .bottom > .official.panel > .main-panel {flex-direction: row-reverse;} + +/* css in side */ +#mainContent > .side.panel {height: 100%;} +.time-block {background: #EDEEF2; padding:2px 4px; border-radius: 4px; color: #0B0F18; font-size: 15px; margin: 0 4px;} +.dynamic-block {height: 74px; padding: 12px 16px; display: flex; justify-content: space-between; position: relative; line-height: 20px; border-top: 1px solid #E3E4E9;} +.dynamic-content {height: 50px; line-height: 25px; overflow: hidden;} +.dynamic-time {white-space: nowrap; position: absolute; right: 12px; bottom: 10px; padding-right: 12px; background: white; color: #5E626D;} +.time-count {letter-spacing: 1px;} + +.patch-block {padding: 10px 16px 12px; line-height: 20px; border-top: 1px solid #E3E4E9;} +.patch-content {height: 40px; overflow: hidden;} + +.upgrade-block {padding: 6px 16px; line-height: 20px; border-top: 1px solid #E3E4E9;} +.upgrade-content {height: 20px; padding-left: 20px; position: relative; margin: 5px 0;} +.upgrade-content:before {content: ' '; width: 8px; height: 8px; background: #E3E4E9; border-radius: 50%; position: absolute; left: 0px; top: 5px;} diff --git a/module/admin/css/safe.en.css b/module/admin/css/safe.en.css old mode 100644 new mode 100755 diff --git a/module/admin/css/safe.vi.css b/module/admin/css/safe.vi.css old mode 100644 new mode 100755 diff --git a/module/admin/css/safe.zh-cn.css b/module/admin/css/safe.zh-cn.css old mode 100644 new mode 100755 diff --git a/module/admin/css/safe.zh-tw.css b/module/admin/css/safe.zh-tw.css old mode 100644 new mode 100755 diff --git a/module/admin/css/setmodule.css b/module/admin/css/setmodule.css old mode 100644 new mode 100755 diff --git a/module/admin/js/checkweak.js b/module/admin/js/checkweak.js old mode 100644 new mode 100755 diff --git a/module/admin/js/index.js b/module/admin/js/index.js new file mode 100644 index 0000000000..f97411945c --- /dev/null +++ b/module/admin/js/index.js @@ -0,0 +1,13 @@ +$(function() +{ + $(document).on('click', '.setting-box > button', function() + { + location.href = $(this).attr('data-link'); + }).on('click', '.setting-box a', function(e) + { + e.stopPropagation(); + }).on('click', '.plugin-item', function() + { + window.open($(this).data('link')); + }); +}); diff --git a/module/admin/js/log.js b/module/admin/js/log.js old mode 100644 new mode 100755 diff --git a/module/admin/js/safe.js b/module/admin/js/safe.js old mode 100644 new mode 100755 diff --git a/module/admin/js/setmodule.js b/module/admin/js/setmodule.js old mode 100644 new mode 100755 diff --git a/module/admin/lang/de.php b/module/admin/lang/de.php old mode 100644 new mode 100755 index 7e8b99e72c..115ee795ec --- a/module/admin/lang/de.php +++ b/module/admin/lang/de.php @@ -25,11 +25,24 @@ $lang->admin->resetPWDSetting = 'Reset password Setting'; $lang->admin->tableEngine = 'Table Engine'; $lang->admin->setModuleIndex = 'Set Module'; -$lang->admin->api = 'API'; -$lang->admin->log = 'Log'; -$lang->admin->setting = 'Einstellungen'; -$lang->admin->days = 'Gültige Tage'; -$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->mon = 'month'; +$lang->admin->day = 'day'; +$lang->admin->updateDynamics = 'updateDynamics'; +$lang->admin->updatePatch = 'updatePatch'; +$lang->admin->upgradeRecommend = 'upgradeRecommend'; +$lang->admin->zentaoUsed = ''; + +$lang->admin->api = 'API'; +$lang->admin->log = 'Log'; +$lang->admin->setting = 'Einstellungen'; +$lang->admin->pluginRecommendation = 'Recommended plug-ins'; +$lang->admin->zentaoInfo = 'ZenTao information'; +$lang->admin->officialAccount = 'WeChat Official Account'; +$lang->admin->publicClass = 'Public class'; +$lang->admin->days = 'Gültige Tage'; +$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->followUs = 'Follow Us'; +$lang->admin->followUsContent = 'Check out ZenTao news, events, and support at any time'; $lang->admin->changeEngine = "Change to InnoDB"; $lang->admin->changingTable = 'Replacing data table %s engine...'; @@ -72,12 +85,14 @@ $lang->admin->setModule->optional = 'Optional'; $lang->admin->setModule->opened = 'Opened'; $lang->admin->setModule->closed = 'Closed'; +$lang->admin->setModule->my = 'My'; $lang->admin->setModule->product = 'Product'; $lang->admin->setModule->scrum = 'Scrum Project'; $lang->admin->setModule->waterfall = 'Waterfall Project'; $lang->admin->setModule->assetlib = 'Assetlib'; $lang->admin->setModule->other = 'Other'; +$lang->admin->setModule->score = 'Score'; $lang->admin->setModule->repo = 'Repo'; $lang->admin->setModule->issue = 'Issue'; $lang->admin->setModule->risk = 'Risk'; @@ -142,3 +157,47 @@ $lang->admin->safe->noticeMode = 'The password will be checked when creating $lang->admin->safe->noticeWeakMode = 'The password will be checked when logging into the system, creating and modifying user information, and changing passwords.'; $lang->admin->safe->noticeStrong = 'The longer the password, the more letters, numbers, or special characters it contains, and the less repetitive the password, the more secure it is!'; $lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.'; + +$lang->admin->menuSetting['system']['name'] = 'System'; +$lang->admin->menuSetting['system']['desc'] = 'System elements configuration, such as backup, chat, security etc.'; +$lang->admin->menuSetting['user']['name'] = 'User'; +$lang->admin->menuSetting['user']['desc'] = 'Manage departments,add members and group configuration permissions.'; +$lang->admin->menuSetting['switch']['name'] = 'Switch'; +$lang->admin->menuSetting['switch']['desc'] = 'Turn on and off some functions of the system.'; +$lang->admin->menuSetting['model']['name'] = 'Model'; +$lang->admin->menuSetting['model']['desc'] = 'Configure different project management models and project common elements.'; +$lang->admin->menuSetting['feature']['name'] = 'Feature'; +$lang->admin->menuSetting['feature']['desc'] = 'Configure the elements of the system according to the function menu.'; +$lang->admin->menuSetting['template']['name'] = 'Template'; +$lang->admin->menuSetting['template']['desc'] = 'Configure the template type and template content of the document.'; +$lang->admin->menuSetting['message']['name'] = 'Message'; +$lang->admin->menuSetting['message']['desc'] = 'Configure notification paths and customize the actions to be notified.'; +$lang->admin->menuSetting['extension']['name'] = 'Extension'; +$lang->admin->menuSetting['extension']['desc'] = 'Browse and install plugins.'; +$lang->admin->menuSetting['dev']['name'] = 'Develop'; +$lang->admin->menuSetting['dev']['desc'] = 'Support for secondary development of the system.'; +$lang->admin->menuSetting['convert']['name'] = 'Data Import'; +$lang->admin->menuSetting['convert']['desc'] = 'Data import from third-party systems.'; + +$lang->admin->updateDynamics = 'Dynamics'; +$lang->admin->updatePatch = 'Patch'; +$lang->admin->upgradeRecommend = 'Recommend Upgrade'; +$lang->admin->zentaoUsed = 'You have used ZenTao'; + +$lang->admin->openTag = 'ZenTao Opensource '; +$lang->admin->bizTag = 'ZenTao Biz '; +$lang->admin->maxTag = 'ZenTao Max '; + +$lang->admin->bizInfoURL = 'https://www.zentao.net/page/enterprise.html'; +$lang->admin->maxInfoURL = 'https://www.zentao.net/page/max.html'; +$lang->admin->productDetail = 'Detail'; +$lang->admin->productFeature['biz'][] = 'Feedback Management'; +$lang->admin->productFeature['biz'][] = 'Task Gantt Charts/Calendar/Effort'; +$lang->admin->productFeature['biz'][] = 'MS Word/Excel Import & Export'; +$lang->admin->productFeature['biz'][] = 'LDAP Support'; +$lang->admin->productFeature['max'][] = 'Project Metrics'; +$lang->admin->productFeature['max'][] = 'Asset Library'; +$lang->admin->productFeature['max'][] = 'QA Plan'; +$lang->admin->productFeature['max'][] = 'Opportunity/Risk/Issues Management'; + +include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php old mode 100644 new mode 100755 index ef713be1f4..f377b35bad --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -25,19 +25,32 @@ $lang->admin->resetPWDSetting = 'Reset password Setting'; $lang->admin->tableEngine = 'Table Engine'; $lang->admin->setModuleIndex = 'Set Module'; -$lang->admin->api = 'API'; -$lang->admin->log = 'Log'; -$lang->admin->setting = 'Setting'; -$lang->admin->days = 'Valid Day'; -$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->mon = 'month'; +$lang->admin->day = 'day'; +$lang->admin->updateDynamics = 'updateDynamics'; +$lang->admin->updatePatch = 'updatePatch'; +$lang->admin->upgradeRecommend = 'upgradeRecommend'; +$lang->admin->zentaoUsed = ''; -$lang->admin->changeEngine = "Change to InnoDB"; -$lang->admin->changingTable = 'Replacing data table %s engine...'; -$lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.'; -$lang->admin->changeFail = "Failed to replace table %s engine. Reason: %s。"; -$lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.'; -$lang->admin->changeFinished = "Database engine replacement completed."; -$lang->admin->engineInfo = "The %s table engine is %s."; +$lang->admin->api = 'API'; +$lang->admin->log = 'Log'; +$lang->admin->setting = 'Setting'; +$lang->admin->pluginRecommendation = 'Recommended plug-ins'; +$lang->admin->zentaoInfo = 'ZenTao information'; +$lang->admin->officialAccount = 'WeChat Official Account'; +$lang->admin->publicClass = 'Public class'; +$lang->admin->days = 'Valid Day'; +$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->followUs = 'Follow Us'; +$lang->admin->followUsContent = 'Check out ZenTao news, events, and support at any time'; + +$lang->admin->changeEngine = "Change to InnoDB"; +$lang->admin->changingTable = 'Replacing data table %s engine...'; +$lang->admin->changeSuccess = 'The data table %s engine has been changed to InnoDB.'; +$lang->admin->changeFail = "Failed to replace table %s engine. Reason: %s。"; +$lang->admin->errorInnodb = 'Your MySQL does not support InnoDB data table engine.'; +$lang->admin->changeFinished = "Database engine replacement completed."; +$lang->admin->engineInfo = "The %s table engine is %s."; $lang->admin->engineSummary['hasMyISAM'] = "There are %s tables that are not InnoDB engines"; $lang->admin->engineSummary['allInnoDB'] = "All tables are InnoDB engines"; @@ -72,12 +85,14 @@ $lang->admin->setModule->optional = 'Optional'; $lang->admin->setModule->opened = 'Opened'; $lang->admin->setModule->closed = 'Closed'; +$lang->admin->setModule->my = 'My'; $lang->admin->setModule->product = 'Product'; $lang->admin->setModule->scrum = 'Scrum Project'; $lang->admin->setModule->waterfall = 'Waterfall Project'; $lang->admin->setModule->assetlib = 'Assetlib'; $lang->admin->setModule->other = 'Other'; +$lang->admin->setModule->score = 'Score'; $lang->admin->setModule->repo = 'Repo'; $lang->admin->setModule->issue = 'Issue'; $lang->admin->setModule->risk = 'Risk'; @@ -142,3 +157,47 @@ $lang->admin->safe->noticeMode = 'The password will be checked when creating $lang->admin->safe->noticeWeakMode = 'The password will be checked when logging into the system, creating and modifying user information, and changing passwords.'; $lang->admin->safe->noticeStrong = 'The longer the password, the more letters, numbers, or special characters it contains, and the less repetitive the password, the more secure it is!'; $lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.'; + +$lang->admin->menuSetting['system']['name'] = 'System'; +$lang->admin->menuSetting['system']['desc'] = 'System elements configuration, such as backup, chat, security etc.'; +$lang->admin->menuSetting['user']['name'] = 'User'; +$lang->admin->menuSetting['user']['desc'] = 'Manage departments,add members and group configuration permissions.'; +$lang->admin->menuSetting['switch']['name'] = 'Switch'; +$lang->admin->menuSetting['switch']['desc'] = 'Turn on and off some functions of the system.'; +$lang->admin->menuSetting['model']['name'] = 'Model'; +$lang->admin->menuSetting['model']['desc'] = 'Configure different project management models and project common elements.'; +$lang->admin->menuSetting['feature']['name'] = 'Feature'; +$lang->admin->menuSetting['feature']['desc'] = 'Configure the elements of the system according to the function menu.'; +$lang->admin->menuSetting['template']['name'] = 'Template'; +$lang->admin->menuSetting['template']['desc'] = 'Configure the template type and template content of the document.'; +$lang->admin->menuSetting['message']['name'] = 'Message'; +$lang->admin->menuSetting['message']['desc'] = 'Configure notification paths and customize the actions to be notified.'; +$lang->admin->menuSetting['extension']['name'] = 'Extension'; +$lang->admin->menuSetting['extension']['desc'] = 'Browse and install plugins.'; +$lang->admin->menuSetting['dev']['name'] = 'Develop'; +$lang->admin->menuSetting['dev']['desc'] = 'Support for secondary development of the system.'; +$lang->admin->menuSetting['convert']['name'] = 'Data Import'; +$lang->admin->menuSetting['convert']['desc'] = 'Data import from third-party systems.'; + +$lang->admin->updateDynamics = 'Dynamics'; +$lang->admin->updatePatch = 'Patch'; +$lang->admin->upgradeRecommend = 'Recommend Upgrade'; +$lang->admin->zentaoUsed = 'You have used ZenTao'; + +$lang->admin->openTag = 'ZenTao Opensource '; +$lang->admin->bizTag = 'ZenTao Biz '; +$lang->admin->maxTag = 'ZenTao Max '; + +$lang->admin->bizInfoURL = 'https://www.zentao.net/page/enterprise.html'; +$lang->admin->maxInfoURL = 'https://www.zentao.net/page/max.html'; +$lang->admin->productDetail = 'Detail'; +$lang->admin->productFeature['biz'][] = 'Feedback Management'; +$lang->admin->productFeature['biz'][] = 'Task Gantt Charts/Calendar/Effort'; +$lang->admin->productFeature['biz'][] = 'MS Word/Excel Import & Export'; +$lang->admin->productFeature['biz'][] = 'LDAP Support'; +$lang->admin->productFeature['max'][] = 'Project Metrics'; +$lang->admin->productFeature['max'][] = 'Asset Library'; +$lang->admin->productFeature['max'][] = 'QA Plan'; +$lang->admin->productFeature['max'][] = 'Opportunity/Risk/Issues Management'; + +include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/fr.php b/module/admin/lang/fr.php old mode 100644 new mode 100755 index 7b9455f538..416bdc6965 --- a/module/admin/lang/fr.php +++ b/module/admin/lang/fr.php @@ -25,11 +25,24 @@ $lang->admin->resetPWDSetting = 'Reset password Setting'; $lang->admin->tableEngine = 'Table Engine'; $lang->admin->setModuleIndex = 'Set Module'; -$lang->admin->api = 'API'; -$lang->admin->log = 'Log'; -$lang->admin->setting = 'Paramétrage'; -$lang->admin->days = 'Durée de conservation'; -$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->mon = 'month'; +$lang->admin->day = 'day'; +$lang->admin->updateDynamics = 'updateDynamics'; +$lang->admin->updatePatch = 'updatePatch'; +$lang->admin->upgradeRecommend = 'upgradeRecommend'; +$lang->admin->zentaoUsed = ''; + +$lang->admin->api = 'API'; +$lang->admin->log = 'Log'; +$lang->admin->setting = 'Paramétrage'; +$lang->admin->pluginRecommendation = 'Recommended plug-ins'; +$lang->admin->zentaoInfo = 'ZenTao information'; +$lang->admin->officialAccount = 'WeChat Official Account'; +$lang->admin->publicClass = 'Public class'; +$lang->admin->days = 'Durée de conservation'; +$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->followUs = 'Follow Us'; +$lang->admin->followUsContent = 'Check out ZenTao news, events, and support at any time'; $lang->admin->changeEngine = "Change to InnoDB"; $lang->admin->changingTable = 'Replacing data table %s engine...'; @@ -72,12 +85,14 @@ $lang->admin->setModule->optional = 'Optional'; $lang->admin->setModule->opened = 'Opened'; $lang->admin->setModule->closed = 'Closed'; +$lang->admin->setModule->my = 'My'; $lang->admin->setModule->product = 'Product'; $lang->admin->setModule->scrum = 'Scrum Project'; $lang->admin->setModule->waterfall = 'Waterfall Project'; $lang->admin->setModule->assetlib = 'Assetlib'; $lang->admin->setModule->other = 'Other'; +$lang->admin->setModule->score = 'Score'; $lang->admin->setModule->repo = 'Repo'; $lang->admin->setModule->issue = 'Issue'; $lang->admin->setModule->risk = 'Risk'; @@ -142,3 +157,47 @@ $lang->admin->safe->noticeMode = "Le mot de passe sera vérifié lors de la $lang->admin->safe->noticeWeakMode = "Le mot de passe sera vérifié lors de la connexion au système, de la création et de la modification des coordonnées de l'utilisateur, et du changement de mot de passe."; $lang->admin->safe->noticeStrong = "Le mot de passe est d'autant plus sécurisé qu'il est long, qu'il contient plus de lettres, de chiffres ou de caractères spéciaux, et que les lettres du mot de passe sont peu répétitives !"; $lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.'; + +$lang->admin->menuSetting['system']['name'] = 'System'; +$lang->admin->menuSetting['system']['desc'] = 'System elements configuration, such as backup, chat, security etc.'; +$lang->admin->menuSetting['user']['name'] = 'User'; +$lang->admin->menuSetting['user']['desc'] = 'Manage departments,add members and group configuration permissions.'; +$lang->admin->menuSetting['switch']['name'] = 'Switch'; +$lang->admin->menuSetting['switch']['desc'] = 'Turn on and off some functions of the system.'; +$lang->admin->menuSetting['model']['name'] = 'Model'; +$lang->admin->menuSetting['model']['desc'] = 'Configure different project management models and project common elements.'; +$lang->admin->menuSetting['feature']['name'] = 'Feature'; +$lang->admin->menuSetting['feature']['desc'] = 'Configure the elements of the system according to the function menu.'; +$lang->admin->menuSetting['template']['name'] = 'Template'; +$lang->admin->menuSetting['template']['desc'] = 'Configure the template type and template content of the document.'; +$lang->admin->menuSetting['message']['name'] = 'Message'; +$lang->admin->menuSetting['message']['desc'] = 'Configure notification paths and customize the actions to be notified.'; +$lang->admin->menuSetting['extension']['name'] = 'Extension'; +$lang->admin->menuSetting['extension']['desc'] = 'Browse and install plugins.'; +$lang->admin->menuSetting['dev']['name'] = 'Develop'; +$lang->admin->menuSetting['dev']['desc'] = 'Support for secondary development of the system.'; +$lang->admin->menuSetting['convert']['name'] = 'Data Import'; +$lang->admin->menuSetting['convert']['desc'] = 'Data import from third-party systems.'; + +$lang->admin->updateDynamics = 'Dynamics'; +$lang->admin->updatePatch = 'Patch'; +$lang->admin->upgradeRecommend = 'Recommend Upgrade'; +$lang->admin->zentaoUsed = 'You have used ZenTao'; + +$lang->admin->openTag = 'ZenTao Opensource '; +$lang->admin->bizTag = 'ZenTao Biz '; +$lang->admin->maxTag = 'ZenTao Max '; + +$lang->admin->bizInfoURL = 'https://www.zentao.net/page/enterprise.html'; +$lang->admin->maxInfoURL = 'https://www.zentao.net/page/max.html'; +$lang->admin->productDetail = 'Detail'; +$lang->admin->productFeature['biz'][] = 'Feedback Management'; +$lang->admin->productFeature['biz'][] = 'Task Gantt Charts/Calendar/Effort'; +$lang->admin->productFeature['biz'][] = 'MS Word/Excel Import & Export'; +$lang->admin->productFeature['biz'][] = 'LDAP Support'; +$lang->admin->productFeature['max'][] = 'Project Metrics'; +$lang->admin->productFeature['max'][] = 'Asset Library'; +$lang->admin->productFeature['max'][] = 'QA Plan'; +$lang->admin->productFeature['max'][] = 'Opportunity/Risk/Issues Management'; + +include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/menu.php b/module/admin/lang/menu.php new file mode 100644 index 0000000000..d3cf02f789 --- /dev/null +++ b/module/admin/lang/menu.php @@ -0,0 +1,215 @@ +admin->menuList = new stdclass(); +$lang->admin->menuList->system['name'] = $lang->admin->menuSetting['system']['name']; +$lang->admin->menuList->system['desc'] = $lang->admin->menuSetting['system']['desc']; +$lang->admin->menuList->system['order'] = 1; + +$lang->admin->menuList->user['name'] = $lang->admin->menuSetting['user']['name']; +$lang->admin->menuList->user['desc'] = $lang->admin->menuSetting['user']['desc']; +$lang->admin->menuList->user['order'] = 2; + +$lang->admin->menuList->switch['name'] = $lang->admin->menuSetting['switch']['name']; +$lang->admin->menuList->switch['desc'] = $lang->admin->menuSetting['switch']['desc']; +$lang->admin->menuList->switch['order'] = 3; + +$lang->admin->menuList->model['name'] = $lang->admin->menuSetting['model']['name']; +$lang->admin->menuList->model['desc'] = $lang->admin->menuSetting['model']['desc']; +$lang->admin->menuList->model['order'] = 4; + +$lang->admin->menuList->feature['name'] = $lang->admin->menuSetting['feature']['name']; +$lang->admin->menuList->feature['desc'] = $lang->admin->menuSetting['feature']['desc']; +$lang->admin->menuList->feature['order'] = 5; + +$lang->admin->menuList->template['name'] = $lang->admin->menuSetting['template']['name']; +$lang->admin->menuList->template['desc'] = $lang->admin->menuSetting['template']['desc']; +$lang->admin->menuList->template['order'] = 6; + +$lang->admin->menuList->message['name'] = $lang->admin->menuSetting['message']['name']; +$lang->admin->menuList->message['desc'] = $lang->admin->menuSetting['message']['desc']; +$lang->admin->menuList->message['order'] = 7; + +$lang->admin->menuList->extension['name'] = $lang->admin->menuSetting['extension']['name']; +$lang->admin->menuList->extension['desc'] = $lang->admin->menuSetting['extension']['desc']; +$lang->admin->menuList->extension['link'] = 'extension|browse'; +$lang->admin->menuList->extension['order'] = 8; + +$lang->admin->menuList->dev['name'] = $lang->admin->menuSetting['dev']['name']; +$lang->admin->menuList->dev['desc'] = $lang->admin->menuSetting['dev']['desc']; +$lang->admin->menuList->dev['order'] = 9; + +$lang->admin->menuList->convert['name'] = $lang->admin->menuSetting['convert']['name']; +$lang->admin->menuList->convert['desc'] = $lang->admin->menuSetting['convert']['desc']; +$lang->admin->menuList->convert['link'] = 'convert|convertjira'; +$lang->admin->menuList->convert['order'] = 10; + +$lang->admin->menuList->system['subMenu']['mode'] = array('link' => "{$lang->custom->mode}|custom|mode|"); +$lang->admin->menuList->system['subMenu']['backup'] = array('link' => "{$lang->backup->common}|backup|index|"); +$lang->admin->menuList->system['subMenu']['trash'] = array('link' => "{$lang->action->trash}|action|trash|"); +$lang->admin->menuList->system['subMenu']['safe'] = array('link' => "{$lang->security}|admin|safe|", 'alias' => 'checkweak,resetpwdsetting', 'links' => array('admin|resetpwdsetting|', 'admin|checkweak|')); +$lang->admin->menuList->system['subMenu']['cron'] = array('link' => "{$lang->admin->cron}|cron|index|", 'subModule' => 'cron'); +$lang->admin->menuList->system['subMenu']['timezone'] = array('link' => "{$lang->timezone}|custom|timezone|"); +$lang->admin->menuList->system['subMenu']['buildindex'] = array('link' => "{$lang->admin->buildIndex}|search|buildindex|"); +$lang->admin->menuList->system['subMenu']['tableengine'] = array('link' => "{$lang->admin->tableEngine}|admin|tableengine|"); + +$lang->admin->menuList->system['menuOrder']['5'] = 'mode'; +$lang->admin->menuList->system['menuOrder']['10'] = 'backup'; +$lang->admin->menuList->system['menuOrder']['15'] = 'trash'; +$lang->admin->menuList->system['menuOrder']['30'] = 'safe'; +$lang->admin->menuList->system['menuOrder']['35'] = 'cron'; +$lang->admin->menuList->system['menuOrder']['40'] = 'timezone'; +$lang->admin->menuList->system['menuOrder']['45'] = 'buildindex'; +$lang->admin->menuList->system['menuOrder']['50'] = 'tableengine'; + +$lang->admin->menuList->system['dividerMenu'] = ',safe,'; + +$lang->admin->menuList->user['subMenu']['dept'] = array('link' => "{$lang->dept->common}|dept|browse|", 'subModule' => 'dept'); +$lang->admin->menuList->user['subMenu']['user'] = array('link' => "{$lang->user->common}|company|browse|", 'subModule' => 'user'); +$lang->admin->menuList->user['subMenu']['group'] = array('link' => "{$lang->priv}|group|browse|", 'subModule' => 'group'); + +$lang->admin->menuList->user['menuOrder']['5'] = 'dept'; +$lang->admin->menuList->user['menuOrder']['10'] = 'user'; +$lang->admin->menuList->user['menuOrder']['15'] = 'group'; + +$lang->admin->menuList->switch['subMenu']['setmodule'] = array('link' => "{$lang->admin->module}|admin|setmodule|"); + +$lang->admin->menuList->switch['menuOrder']['5'] = 'setmodule'; + +$lang->admin->menuList->model['subMenu']['common'] = array('link' => "{$lang->globalSetting}|custom|required|module=project", 'subModule' => 'custom,subject,holiday'); +$lang->admin->menuList->model['subMenu']['scrum'] = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|", 'subModule' => 'auditcl'); +$lang->admin->menuList->model['subMenu']['waterfall'] = array('link' => "{$lang->waterfallModel}|stage|settype|", 'subModule' => 'stage'); + +$lang->admin->menuList->model['menuOrder']['5'] = 'common'; +$lang->admin->menuList->model['menuOrder']['10'] = 'scrum'; +$lang->admin->menuList->model['menuOrder']['15'] = 'waterfall'; + +$lang->admin->menuList->model['tabMenu']['common']['project'] = array('link' => "{$lang->project->common}|custom|required|module=project", 'alias' => 'set', 'exclude' => 'custom', 'links' => array('custom|set|')); +$lang->admin->menuList->model['tabMenu']['common']['build'] = array('link' => "{$lang->build->common}|custom|required|module=build", 'alias' => 'set', 'exclude' => 'custom'); +$lang->admin->menuList->model['tabMenu']['common']['flow'] = array('link' => "{$lang->custom->flow}|custom|flow|", 'divider' => true); +$lang->admin->menuList->model['tabMenu']['common']['code'] = array('link' => "{$lang->code}|custom|code|"); +$lang->admin->menuList->model['tabMenu']['common']['hours'] = array('link' => "{$lang->workingHour}|custom|hours|", 'subModule' => 'holiday', 'links' => array('holiday|browse|')); +$lang->admin->menuList->model['tabMenu']['waterfall']['stage'] = array('link' => "{$lang->stage->common}|stage|settype|", 'subModule' => 'stage', 'links' => array('stage|browse|')); +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['5'] = 'project'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['10'] = 'build'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['35'] = 'flow'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['40'] = 'code'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['45'] = 'hours'; +$lang->admin->menuList->model['tabMenu']['menuOrder']['waterfall']['5'] = 'stage'; + +$lang->admin->menuList->feature['subMenu']['my'] = array('link' => "{$lang->my->common}|custom|set|module=todo&field=priList", 'exclude' => 'set,required'); +$lang->admin->menuList->feature['subMenu']['product'] = array('link' => "{$lang->productCommon}|custom|required|module=product", 'exclude' => 'set,required', 'alias' => 'browsestoryconcept,product'); +$lang->admin->menuList->feature['subMenu']['execution'] = array('link' => "{$lang->execution->common}|custom|execution|"); +$lang->admin->menuList->feature['subMenu']['qa'] = array('link' => "{$lang->qa->common}|custom|required|module=bug", 'exclude' => 'set,required'); +$lang->admin->menuList->feature['subMenu']['kanban'] = array('link' => "{$lang->kanban->common}|custom|kanban|"); +$lang->admin->menuList->feature['subMenu']['doc'] = array('link' => "{$lang->doc->common}|custom|required|module=doc", 'exclude' => 'required'); +$lang->admin->menuList->feature['subMenu']['user'] = array('link' => "{$lang->user->common}|custom|required|module=user", 'links' => array('custom|set|module=user&field=roleList'), 'exclude' => 'set,required'); + +$lang->admin->menuList->feature['tabMenu']['my']['todo'] = array('link' => "{$lang->todo->common}|custom|set|module=todo&field=priList", 'exclude' => 'custom-set'); +$lang->admin->menuList->feature['tabMenu']['my']['block'] = array('link' => "{$lang->block->common}|custom|set|module=block&field=closed", 'exclude' => 'custom-set'); + +$lang->admin->menuList->feature['tabMenu']['product']['product'] = array('link' => "{$lang->productCommon}|custom|required|module=product", 'links' => array("custom|browsestoryconcept|", 'custom|product|'), 'alias' => 'browsestoryconcept,product', 'exclude' => 'custom-required'); +$lang->admin->menuList->feature['tabMenu']['product']['story'] = array('link' => "{$lang->SRCommon}|custom|required|module=story", 'links' => array("custom|set|module=story&field=categoryList"), 'exclude' => 'custom-required,custom-set'); +$lang->admin->menuList->feature['tabMenu']['product']['productplan'] = array('link' => "{$lang->productplan->shortCommon}|custom|required|module=productplan", 'exclude' => 'custom-required'); +$lang->admin->menuList->feature['tabMenu']['product']['release'] = array('link' => "{$lang->release->common}|custom|required|module=release", 'exclude' => 'custom-required'); + +$lang->admin->menuList->feature['tabMenu']['execution']['execution'] = array('link' => "{$lang->execution->common}|custom|execution|"); +$lang->admin->menuList->feature['tabMenu']['execution']['task'] = array('link' => "{$lang->task->common}|custom|required|module=task", 'links' => array('custom|set|module=task&field=priList')); + +$lang->admin->menuList->feature['tabMenu']['qa']['bug'] = array('link' => "{$lang->bug->common}|custom|required|module=bug", 'links' => array("custom|set|module=bug&field=priList"), 'exclude' => 'custom-required,custom-set'); +$lang->admin->menuList->feature['tabMenu']['qa']['testcase'] = array('link' => "{$lang->testcase->common}|custom|required|module=testcase", 'links' => array("custom|set|module=testcase&field=priList"), 'exclude' => 'custom-required,custom-set'); +$lang->admin->menuList->feature['tabMenu']['qa']['testsuite'] = array('link' => "{$lang->testcase->testsuite}|custom|required|module=testsuite", 'exclude' => 'custom-required'); +$lang->admin->menuList->feature['tabMenu']['qa']['testtask'] = array('link' => "{$lang->testtask->common}|custom|required|module=testtask", 'links' => array('custom|set|module=testtask&field=statusList'), 'exclude' => 'custom-required,custom-set'); +$lang->admin->menuList->feature['tabMenu']['qa']['testreport'] = array('link' => "{$lang->testreport->common}|custom|required|module=testreport", 'exclude' => 'custom-required'); +$lang->admin->menuList->feature['tabMenu']['qa']['caselib'] = array('link' => "{$lang->testcase->caselib}|custom|required|module=caselib", 'exclude' => 'custom-required'); + +$lang->admin->menuList->feature['tabMenu']['menuOrder']['my']['5'] = 'todo'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['my']['10'] = 'block'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['product']['5'] = 'product'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['product']['10'] = 'story'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['product']['15'] = 'productplan'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['product']['20'] = 'release'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['execution']['5'] = 'execution'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['execution']['10'] = 'task'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['qa']['5'] = 'bug'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['qa']['10'] = 'testcase'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['qa']['15'] = 'testsuite'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['qa']['20'] = 'testtask'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['qa']['25'] = 'testreport'; +$lang->admin->menuList->feature['tabMenu']['menuOrder']['qa']['30'] = 'caselib'; + +$lang->admin->menuList->feature['menuOrder']['5'] = 'my'; +$lang->admin->menuList->feature['menuOrder']['10'] = 'product'; +$lang->admin->menuList->feature['menuOrder']['15'] = 'execution'; +$lang->admin->menuList->feature['menuOrder']['20'] = 'qa'; +$lang->admin->menuList->feature['menuOrder']['25'] = 'kanban'; +$lang->admin->menuList->feature['menuOrder']['30'] = 'doc'; +$lang->admin->menuList->feature['menuOrder']['50'] = 'user'; + +$lang->admin->menuList->feature['dividerMenu'] = ',user,'; + +$lang->admin->menuList->message['subMenu']['mail'] = array('link' => "{$lang->mail->common}|mail|edit|", 'subModule' => 'mail'); +$lang->admin->menuList->message['subMenu']['webhook'] = array('link' => "Webhook|webhook|browse|", 'subModule' => 'webhook'); +$lang->admin->menuList->message['subMenu']['browser'] = array('link' => "{$lang->browser}|message|browser|"); +$lang->admin->menuList->message['subMenu']['setting'] = array('link' => "{$lang->settings}|message|setting|"); + +$lang->admin->menuList->message['menuOrder']['5'] = 'mail'; +$lang->admin->menuList->message['menuOrder']['10'] = 'webhook'; +$lang->admin->menuList->message['menuOrder']['20'] = 'browser'; +$lang->admin->menuList->message['menuOrder']['25'] = 'setting'; + +$lang->admin->menuList->dev['subMenu']['api'] = array('link' => "API|dev|api|module=index"); +$lang->admin->menuList->dev['subMenu']['db'] = array('link' => "{$lang->database}|dev|db|table=" . trim(TABLE_EFFORT, '`')); +$lang->admin->menuList->dev['subMenu']['editor'] = array('link' => "{$lang->editor}|dev|editor|"); +$lang->admin->menuList->dev['subMenu']['entry'] = array('link' => "{$lang->admin->entry}|entry|browse|", 'subModule' => 'entry'); + +$lang->admin->menuList->dev['menuOrder']['5'] = 'api'; +$lang->admin->menuList->dev['menuOrder']['10'] = 'db'; +$lang->admin->menuList->dev['menuOrder']['15'] = 'editor'; +$lang->admin->menuList->dev['menuOrder']['20'] = 'entry'; + +if($config->edition != 'max') unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10'], $lang->admin->menuList->template); +if(!helper::hasFeature('waterfall')) +{ + unset($lang->admin->menuList->model['subMenu']['waterfall']); + unset($lang->admin->menuList->model['menuOrder']['15']); +} +if($config->edition == 'max' and !helper::hasFeature('scrum_auditplan')) +{ + if(!helper::hasFeature('scrum_process')) unset($lang->admin->menuList->model['subMenu']['scrum'], $lang->admin->menuList->model['menuOrder']['10']); +} + +if($config->vision == 'lite') +{ + unset($lang->admin->menuList->system['subMenu']['mode']); + unset($lang->admin->menuList->system['subMenu']['buildindex']); + unset($lang->admin->menuList->system['subMenu']['tableengine']); + unset($lang->admin->menuList->system['menuOrder']['5']); + unset($lang->admin->menuList->system['menuOrder']['45']); + unset($lang->admin->menuList->system['menuOrder']['50']); + + unset($lang->admin->menuList->model['subMenu']['scrum']); + unset($lang->admin->menuList->model['subMenu']['waterfall']); + unset($lang->admin->menuList->model['menuOrder']['10']); + unset($lang->admin->menuList->model['menuOrder']['15']); + + unset($lang->admin->menuList->feature['subMenu']['product']); + unset($lang->admin->menuList->feature['subMenu']['execution']); + unset($lang->admin->menuList->feature['subMenu']['qa']); + unset($lang->admin->menuList->feature['subMenu']['kanban']); + unset($lang->admin->menuList->feature['menuOrder']['10']); + unset($lang->admin->menuList->feature['menuOrder']['15']); + unset($lang->admin->menuList->feature['menuOrder']['20']); + unset($lang->admin->menuList->feature['menuOrder']['25']); + + $lang->admin->menuList->feature['subMenu']['project'] = array('link' => "{$lang->projectCommon}|custom|execution|", 'exclude' => 'set,required', 'alias' => 'execution'); + $lang->admin->menuList->feature['tabMenu']['my']['task'] = array('link' => "{$lang->task->common}|custom|required|module=task", 'links' => array('custom|set|module=task&field=priList'), 'exclude' => 'custom-required,custom-set'); + $lang->admin->menuList->feature['tabMenu']['project']['project'] = array('link' => "{$lang->projectCommon}|custom|required|module=project", 'exclude' => 'custom-required'); + $lang->admin->menuList->feature['tabMenu']['project']['execution'] = array('link' => "{$lang->execution->common}|custom|execution|"); + $lang->admin->menuList->feature['tabMenu']['project']['story'] = array('link' => "{$lang->SRCommon}|custom|required|module=story", 'links' => array("custom|set|module=story&field=priList"), 'exclude' => 'custom-required,custom-set'); + $lang->admin->menuList->feature['tabMenu']['menuOrder']['my']['15'] = 'task'; + $lang->admin->menuList->feature['tabMenu']['menuOrder']['project']['5'] = 'project'; + $lang->admin->menuList->feature['tabMenu']['menuOrder']['project']['10'] = 'execution'; + $lang->admin->menuList->feature['tabMenu']['menuOrder']['project']['15'] = 'story'; + + $lang->admin->menuList->feature['menuOrder']['15'] = 'project'; +} diff --git a/module/admin/lang/vi.php b/module/admin/lang/vi.php old mode 100644 new mode 100755 index a51563ca2f..feff21edda --- a/module/admin/lang/vi.php +++ b/module/admin/lang/vi.php @@ -22,10 +22,17 @@ $lang->admin->captcha = 'Mã xác thực'; $lang->admin->getCaptcha = 'Gửi Mã xác thực'; $lang->admin->register = 'Register'; -$lang->admin->api = 'API'; -$lang->admin->log = 'Nhật ký'; -$lang->admin->setting = 'Thiết lập'; -$lang->admin->days = 'Ngày hợp lệ'; +$lang->admin->api = 'API'; +$lang->admin->log = 'Nhật ký'; +$lang->admin->setting = 'Thiết lập'; +$lang->admin->pluginRecommendation = 'Recommended plug-ins'; +$lang->admin->zentaoInfo = 'ZenTao information'; +$lang->admin->officialAccount = 'WeChat Official Account'; +$lang->admin->publicClass = 'Public class'; +$lang->admin->days = 'Ngày hợp lệ'; +$lang->admin->resetPWDByMail = 'Reset the password via the email'; +$lang->admin->followUs = 'Follow Us'; +$lang->admin->followUsContent = 'Check out ZenTao news, events, and support at any time'; $lang->admin->info = new stdclass(); $lang->admin->info->version = 'Phiên bản hiện tại là %s. '; @@ -84,4 +91,12 @@ $lang->admin->safe->loginCaptchaList[0] = 'No'; $lang->admin->safe->noticeMode = 'Mật khẩu sẽ được kiểm tra khi người dùng đăng nhập hoặc người dùng thêm hoặc sửa.'; $lang->admin->safe->noticeStrong = ''; -$lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.'; \ No newline at end of file +$lang->admin->safe->noticeGd = 'Your server does not have GD module installed, you cannot use the Captcha function, Please use it after installation.'; + +$lang->admin->mon = 'month'; +$lang->admin->day = 'day'; +$lang->admin->updateDynamics = 'updateDynamics'; +$lang->admin->updatePatch = 'updatePatch'; +$lang->admin->upgradeRecommend = 'upgradeRecommend'; + +include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php old mode 100644 new mode 100755 index e824152939..926dede079 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -25,19 +25,32 @@ $lang->admin->resetPWDSetting = '重置密码设置'; $lang->admin->tableEngine = '表引擎'; $lang->admin->setModuleIndex = '系统功能配置'; -$lang->admin->api = '接口'; -$lang->admin->log = '日志'; -$lang->admin->setting = '设置'; -$lang->admin->days = '日志保存天数'; -$lang->admin->resetPWDByMail = '通过邮箱重置密码'; +$lang->admin->mon = '月'; +$lang->admin->day = '天'; +$lang->admin->updateDynamics = '更新动态'; +$lang->admin->updatePatch = '补丁更新'; +$lang->admin->upgradeRecommend = '推荐升级'; +$lang->admin->zentaoUsed = '您已使用禅道'; -$lang->admin->changeEngine = "更换到InnoDB"; -$lang->admin->changingTable = '正在更换数据表%s引擎...'; -$lang->admin->changeSuccess = '已经更换数据表%s引擎为InnoDB。'; -$lang->admin->changeFail = "更换数据表%s引擎失败,原因:%s。"; -$lang->admin->errorInnodb = '您当前的数据库不支持使用InnoDB数据表引擎。'; -$lang->admin->changeFinished = "更换数据库引擎完毕。"; -$lang->admin->engineInfo = "表%s的引擎是%s。"; +$lang->admin->api = '接口'; +$lang->admin->log = '日志'; +$lang->admin->setting = '设置'; +$lang->admin->pluginRecommendation = '插件推荐'; +$lang->admin->zentaoInfo = '禅道信息'; +$lang->admin->officialAccount = '官方公众号'; +$lang->admin->publicClass = '公开课'; +$lang->admin->days = '日志保存天数'; +$lang->admin->resetPWDByMail = '通过邮箱重置密码'; +$lang->admin->followUs = '扫码关注公众号'; +$lang->admin->followUsContent = '随时查看禅道动态、活动信息、也可获取帮助支持'; + +$lang->admin->changeEngine = "更换到InnoDB"; +$lang->admin->changingTable = '正在更换数据表%s引擎...'; +$lang->admin->changeSuccess = '已经更换数据表%s引擎为InnoDB。'; +$lang->admin->changeFail = "更换数据表%s引擎失败,原因:%s。"; +$lang->admin->errorInnodb = '您当前的数据库不支持使用InnoDB数据表引擎。'; +$lang->admin->changeFinished = "更换数据库引擎完毕。"; +$lang->admin->engineInfo = "表%s的引擎是%s。"; $lang->admin->engineSummary['hasMyISAM'] = "有%s个表不是InnoDB引擎"; $lang->admin->engineSummary['allInnoDB'] = "所有的表都是InnoDB引擎了"; @@ -72,12 +85,14 @@ $lang->admin->setModule->optional = '可选功能'; $lang->admin->setModule->opened = '已开启'; $lang->admin->setModule->closed = '已关闭'; +$lang->admin->setModule->my = '地盘'; $lang->admin->setModule->product = '产品'; $lang->admin->setModule->scrum = '敏捷项目'; $lang->admin->setModule->waterfall = '瀑布项目'; $lang->admin->setModule->assetlib = '资产库'; $lang->admin->setModule->other = '通用功能'; +$lang->admin->setModule->score = '积分'; $lang->admin->setModule->repo = '代码'; $lang->admin->setModule->issue = '问题'; $lang->admin->setModule->risk = '风险'; @@ -142,3 +157,47 @@ $lang->admin->safe->noticeMode = '系统会在创建和修改用户、修改 $lang->admin->safe->noticeWeakMode = '系统会在登录、创建和修改用户、修改密码的时候检查用户口令。'; $lang->admin->safe->noticeStrong = '密码长度越长,含有大写字母或数字或特殊符号越多,密码字母越不重复,安全度越强!'; $lang->admin->safe->noticeGd = '系统检测到您的服务器未安装GD模块,无法使用验证码功能,请安装后使用。'; + +$lang->admin->menuSetting['system']['name'] = '系统设置'; +$lang->admin->menuSetting['system']['desc'] = '备份、聊天、安全等系统各要素配置。'; +$lang->admin->menuSetting['user']['name'] = '人员管理'; +$lang->admin->menuSetting['user']['desc'] = '维护部门、添加人员、分组配置权限。'; +$lang->admin->menuSetting['switch']['name'] = '功能开关'; +$lang->admin->menuSetting['switch']['desc'] = '打开、关闭系统部分功能。'; +$lang->admin->menuSetting['model']['name'] = '模型配置'; +$lang->admin->menuSetting['model']['desc'] = '不同项目管理模型和项目通用要素配置。'; +$lang->admin->menuSetting['feature']['name'] = '功能配置'; +$lang->admin->menuSetting['feature']['desc'] = '按照功能菜单进行系统的要素配置。'; +$lang->admin->menuSetting['template']['name'] = '文档模板'; +$lang->admin->menuSetting['template']['desc'] = '配置文档的模板类型和模板内容。'; +$lang->admin->menuSetting['message']['name'] = '通知设置'; +$lang->admin->menuSetting['message']['desc'] = '配置通知路径,自定义需要通知的动作。'; +$lang->admin->menuSetting['extension']['name'] = '插件管理'; +$lang->admin->menuSetting['extension']['desc'] = '浏览、安装插件。'; +$lang->admin->menuSetting['dev']['name'] = '二次开发'; +$lang->admin->menuSetting['dev']['desc'] = '支持对系统进行二次开发。'; +$lang->admin->menuSetting['convert']['name'] = '数据导入'; +$lang->admin->menuSetting['convert']['desc'] = '第三方系统的数据导入。'; + +$lang->admin->updateDynamics = '更新动态'; +$lang->admin->updatePatch = '补丁更新'; +$lang->admin->upgradeRecommend = '推荐升级'; +$lang->admin->zentaoUsed = '您已使用禅道'; + +$lang->admin->openTag = '禅道'; +$lang->admin->bizTag = '禅道企业版'; +$lang->admin->maxTag = '禅道旗舰版'; + +$lang->admin->bizInfoURL = 'https://www.zentao.net/page/enterprise.html'; +$lang->admin->maxInfoURL = 'https://www.zentao.net/page/max.html'; +$lang->admin->productDetail = '查看详情'; +$lang->admin->productFeature['biz'][] = '工时管理、甘特图、导入导出'; +$lang->admin->productFeature['biz'][] = '40+内置统计报表、自定义报表功能'; +$lang->admin->productFeature['biz'][] = '强大的自定义工作流、反馈管理功能'; +$lang->admin->productFeature['biz'][] = '价格厚道,专属技术支持服务'; +$lang->admin->productFeature['max'][] = '120+概念,全面覆盖瀑布管理模型'; +$lang->admin->productFeature['max'][] = '项目管理可视化,精准掌控项目进度'; +$lang->admin->productFeature['max'][] = '资产库管理,为项目提供数据支撑'; +$lang->admin->productFeature['max'][] = '严格权限控制,方式灵活安全'; + +include dirname(__FILE__) . '/menu.php'; diff --git a/module/admin/lang/zh-tw.php b/module/admin/lang/zh-tw.php old mode 100644 new mode 100755 diff --git a/module/admin/model.php b/module/admin/model.php old mode 100644 new mode 100755 index 17a6d6a63b..9c8585eebf --- a/module/admin/model.php +++ b/module/admin/model.php @@ -13,6 +13,11 @@ birthday and $user->password == md5($user->birthday)) return true; return false; } + + /** + * Set admin menu. + * + * @access public + * @return void + */ + public function setMenu() + { + $this->checkPrivMenu(); + + $menuKey = $this->getMenuKey(); + if(empty($menuKey)) return; + + $this->setSwitcher($menuKey); + if(isset($this->lang->admin->menuList->$menuKey)) + { + if(isset($this->lang->admin->menuList->$menuKey['subMenu'])) + { + $moduleName = $this->app->rawModule; + $methodName = $this->app->rawMethod; + $firstParam = $this->app->rawParams ? reset($this->app->rawParams) : ''; + + foreach($this->lang->admin->menuList->$menuKey['subMenu'] as $subMenuKey => $subMenu) + { + $subModule = ''; + if($moduleName == 'custom' and strpos(',required,set,', $methodName) !== false) + { + if(isset($this->config->admin->navsGroup[$menuKey][$subMenuKey]) and strpos($this->config->admin->navsGroup[$menuKey][$subMenuKey], ",$firstParam,") !== false) $subModule = 'custom'; + if($firstParam == $subMenuKey) $subModule = 'custom'; + } + + if(!empty($subModule)) $subMenu['subModule'] = $subModule; + if(isset($this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey])) + { + if(!empty($subModule)) + { + $this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey][$firstParam]['subModule'] = $subModule; + unset($this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey][$firstParam]['exclude']); + } + $subMenu['subMenu'] = $this->lang->admin->menuList->$menuKey['tabMenu'][$subMenuKey]; + } + if(isset($this->lang->admin->menuList->$menuKey['tabMenu']['menuOrder'][$subMenuKey])) $subMenu['menuOrder'] = $this->lang->admin->menuList->$menuKey['tabMenu']['menuOrder'][$subMenuKey]; + if(isset($this->lang->admin->menuList->$menuKey['tabMenu']['dividerMenu'][$subMenuKey])) $subMenu['dividerMenu'] = $this->lang->admin->menuList->$menuKey['tabMenu']['dividerMenu'][$subMenuKey]; + + $this->lang->admin->menu->$subMenuKey = $subMenu; + } + } + + if(isset($this->lang->admin->menuList->$menuKey['menuOrder'])) $this->lang->admin->menuOrder = $this->lang->admin->menuList->$menuKey['menuOrder']; + if(isset($this->lang->admin->menuList->$menuKey['dividerMenu'])) $this->lang->admin->dividerMenu = $this->lang->admin->menuList->$menuKey['dividerMenu']; + if(isset($this->lang->admin->menuList->$menuKey['tabMenu'])) $this->lang->admin->tabMenu = $this->lang->admin->menuList->$menuKey['tabMenu']; + } + } + + /** + * Check priv menu. + * + * @access public + * @return void + */ + public function checkPrivMenu() + { + $orders = array(); + foreach($this->lang->admin->menuList as $menuKey => $menu) + { + $menu['disabled'] = true; + if(!isset($menu['link'])) $menu['link'] = ''; + + /* Set links to authorized navigation. */ + if(isset($menu['subMenu'])) + { + /* Reorder secondary navigation. */ + $subMenuList = array(); + $subMenuOrders = $menu['menuOrder']; + ksort($subMenuOrders); + foreach($subMenuOrders as $value) $subMenuList[$value] = $menu['subMenu'][$value]; + + /* Check sub menu priv. */ + foreach($subMenuList as $subMenuKey => $subMenu) + { + $link = array(); + if(isset($menu['tabMenu'][$subMenuKey])) + { + /* Reorder tertiary navigation. */ + $tabMenuList = $menu['tabMenu'][$subMenuKey]; + if(isset($menu['tabMenu']['menuOrder'][$subMenuKey])) + { + $tabMenuOrders = $menu['tabMenu']['menuOrder'][$subMenuKey]; + ksort($tabMenuOrders); + foreach($tabMenuOrders as $value) $tabMenuList[$value] = $menu['tabMenu'][$subMenuKey][$value]; + } + + /* Check tab menu priv. */ + foreach($tabMenuList as $tabMenuKey => $tabMenu) + { + $tabMenuLink = $this->getHasPrivLink($tabMenu); + if(!empty($tabMenuLink)) + { + /* Updated tertiary navigation links. */ + list($module, $method, $params) = $tabMenuLink; + $tabMenuLabel = $tabMenu['link']; + $menu['tabMenu'][$subMenuKey][$tabMenuKey]['link'] = substr($tabMenuLabel, 0, strpos($tabMenuLabel, '|') + 1) . $module . '|' . $method . '|' . $params; + + if(empty($link)) $link = $tabMenuLink; + } + } + } + else + { + if($menuKey == 'message' and $subMenuKey == 'mail') + { + $this->loadModel('mail'); + if(!$this->config->mail->turnon and !$this->session->mailConfig) $subMenu['link'] = $this->lang->mail->common . '|mail|detect|'; + } + + $link = $this->getHasPrivLink($subMenu); + } + + if(!empty($link)) + { + /* Updated secondary navigation link. */ + list($module, $method, $params) = $link; + $subMenuLabel = $subMenu['link']; + $menu['subMenu'][$subMenuKey]['link'] = substr($subMenuLabel, 0, strpos($subMenuLabel, '|') + 1) . $module . '|' . $method . '|' . $params; + + /* Update the level 1 navigation link. */ + if(empty($menu['link'])) $menu['link'] = helper::createLink($module, $method, $params); + $menu['disabled'] = false; + } + } + } + elseif(!empty($menu['link']) and strpos($menu['link'], '|') !== false) + { + list($module, $method) = explode('|', $menu['link']); + $menu['link'] = helper::createLink($module, $method); + if(common::hasPriv($module, $method)) $menu['disabled'] = false; + } + + $order = $menu['order']; + $orders[$order] = $menuKey; + + $this->lang->admin->menuList->$menuKey = $menu; + } + + ksort($orders); + $menuList = new stdclass(); + foreach($orders as $index => $menuKey) + { + $menuList->$menuKey = $this->lang->admin->menuList->$menuKey; + $menuList->$menuKey['order'] = $index; + } + + $this->lang->admin->menuList = $menuList; + } + + /** + * Get the authorized link. + * + * @param array $menu + * @access public + * @return array + */ + public function getHasPrivLink($menu) + { + $link = array(); + if(!empty($menu['link'])) + { + list($label, $module, $method, $params) = explode('|', $menu['link']); + if(common::hasPriv($module, $method)) + { + $link = array($module, $method, $params); + } + elseif(!empty($menu['links'])) + { + foreach($menu['links'] as $menuLink) + { + list($module, $method, $params) = explode('|', $menuLink); + if(common::hasPriv($module, $method)) + { + $link = array($module, $method, $params); + break; + } + } + } + } + + return $link; + } + + /** + * Get menu key + * + * @access public + * @return string + */ + public function getMenuKey() + { + $moduleName = $this->app->rawModule; + $methodName = $this->app->rawMethod; + $firstParam = $this->app->rawParams ? reset($this->app->rawParams) : ''; + $secondParam = $this->app->rawParams ? next($this->app->rawParams) : ''; + + foreach($this->config->admin->menuGroup as $menuKey => $menuGroup) + { + if(in_array($moduleName, $menuGroup)) + { + return $menuKey; + } + elseif(in_array("$moduleName|$methodName", $menuGroup)) + { + if($moduleName == 'custom' and ($methodName == 'required' or $methodName == 'set')) + { + if(in_array($firstParam, $this->config->admin->menuModuleGroup[$menuKey]["custom|$methodName"])) return $menuKey; + } + else + { + return $menuKey; + } + } + } + return null; + } + + /** + * Set switcher. + * + * @param string $currentMenuKey + * @access public + * @return string + */ + public function setSwitcher($currentMenuKey = 'system') + { + if(empty($currentMenuKey)) return null; + + $currentMenu = $this->lang->admin->menuList->$currentMenuKey; + $output = "