This commit is contained in:
liugang
2019-07-08 10:16:25 +08:00
482 changed files with 13128 additions and 6114 deletions
+93 -87
View File
@@ -10,24 +10,24 @@
* @link http://www.zentao.net
*/
$lang->arrow = '&nbsp;<i class="icon-angle-right"></i>&nbsp;';
$lang->colon = '::';
$lang->colon = '-';
$lang->comma = ',';
$lang->dot = '.';
$lang->at = ' on ';
$lang->downArrow = '↓';
$lang->null = 'null';
$lang->null = 'Null';
$lang->ellipsis = '…';
$lang->percent = '%';
$lang->dash = '-';
$lang->zentaoPMS = 'ZenTao';
$lang->welcome = "%s PMS";
$lang->welcome = "%s ALM";
$lang->logout = 'Logout';
$lang->login = 'Login';
$lang->help = 'Help';
$lang->aboutZenTao = 'ZenTao';
$lang->aboutZenTao = 'About';
$lang->profile = 'Profile';
$lang->changePassword = 'Password';
$lang->changePassword = 'Change Password';
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>Time %s MS, Memory %s KB, Query %s. </div></div>";
$lang->agreement = "I have read and agreed to the terms and conditions of <a href='http://zpl.pub/page/zplv12.html' target='_blank'> Z PUBLIC LICENSE 1.2 </a>. <span class='text-danger'>Without authorization, I should not remove, hide or cover any logos/links of ZenTao.</span>";
$lang->designedByAIUX = "<a href='http://aiuxstudio.com/' class='link-aiux' target='_blank'>Designed by <strong>AIUX</strong></a>";
@@ -54,62 +54,62 @@ $lang->day = 'Day';
$lang->customConfig = 'Custom Config';
$lang->public = 'Public';
$lang->trunk = 'Trunk';
$lang->sort = 'Sort';
$lang->sort = 'Order';
$lang->required = 'Required';
$lang->noData = 'No data.';
$lang->actions = 'Action';
$lang->restore = 'Restore';
$lang->restore = 'Reset';
$lang->comment = 'Note';
$lang->history = 'History';
$lang->attatch = 'File';
$lang->reverse = 'Reverse';
$lang->attatch = 'Files';
$lang->reverse = 'Inverse';
$lang->switchDisplay = 'Toggle';
$lang->expand = 'Expand';
$lang->collapse = 'Collapse';
$lang->saveSuccess = 'Saved';
$lang->fail = 'Fail';
$lang->addFiles = 'Add';
$lang->addFiles = 'Added Files';
$lang->files = 'Files ';
$lang->pasteText = 'Paste';
$lang->uploadImages = 'Upload';
$lang->timeout = 'Timeout. Pease check your connection, or try it again!';
$lang->repairTable = 'Database table might be damaged. Execute phpmyadmin or myisamchk to fix it.';
$lang->duplicate = '%s has the same title as a file title existed.';
$lang->pasteText = 'Paste Multi-Items';
$lang->uploadImages = 'Upload Multi-Images';
$lang->timeout = 'Timeout. Check your newtwork connections, or try it again!';
$lang->repairTable = 'Database table might be damaged. Run phpmyadmin or myisamchk to fix it.';
$lang->duplicate = '%s has the same title as a file existed.';
$lang->ipLimited = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><body>Sorry, your current IP is restricted. PLease contact your Administer to grant your permissions.</body></html>";
$lang->unfold = '+';
$lang->fold = '-';
$lang->homepage = 'Set Home';
$lang->noviceTutorial = 'Rookie Tutorial';
$lang->noviceTutorial = 'ZenTao Tutorial';
$lang->changeLog = 'Change Log';
$lang->manual = 'Manual';
$lang->manual = 'User Manual';
$lang->manualUrl = 'https://www.zentao.pm/book/zentaomanual/zentao-installation-11.html';
$lang->customMenu = 'Custom Menu';
$lang->customField = 'Custom Field';
$lang->lineNumber = 'Line No.';
$lang->tutorialConfirm = 'You are using ZenTao tutorial. Do you want to quit right now?';
$lang->youCould = 'You could ';
$lang->preShortcutKey = '[Shortcut:←]';
$lang->nextShortcutKey = '[Shortcut:→]';
$lang->backShortcutKey = '[Shortcut:Alt+↑]';
$lang->select = 'Select';
$lang->selectAll = 'All';
$lang->selectReverse = 'Reverse';
$lang->selectAll = 'Select All';
$lang->selectReverse = 'Select Inverse';
$lang->loading = 'Loading...';
$lang->notFound = 'Not found!';
$lang->notPage = 'Sorry, the features you are visiting are in development!';
$lang->showAll = '[[Show All]]';
$lang->future = 'Pending';
$lang->future = 'Waiting';
$lang->year = 'Year';
$lang->workingHour = 'Hour';
$lang->workingHour = 'Hours';
$lang->idAB = 'ID';
$lang->priAB = 'P';
$lang->statusAB = 'Status';
$lang->openedByAB = 'Creator';
$lang->assignedToAB = 'Assignee';
$lang->openedByAB = 'CreatedBy';
$lang->assignedToAB = 'AssignedTo';
$lang->typeAB = 'Type';
$lang->common = new stdclass();
@@ -139,8 +139,8 @@ $lang->searchObjects['user'] = 'User';
$lang->searchObjects['build'] = 'Build';
$lang->searchObjects['release'] = 'Release';
$lang->searchObjects['productplan'] = $lang->productCommon . 'Plan';
$lang->searchObjects['testtask'] = 'Test';
$lang->searchObjects['doc'] = 'Doc';
$lang->searchObjects['testtask'] = 'Request';
$lang->searchObjects['doc'] = 'Document';
$lang->searchObjects['testsuite'] = 'Case Library';
$lang->searchObjects['testreport'] = 'Test Report';
$lang->searchTips = 'ID (ctrl+g)';
@@ -155,15 +155,15 @@ $lang->exportFileTypeList['csv'] = 'csv';
$lang->exportFileTypeList['xml'] = 'xml';
$lang->exportFileTypeList['html'] = 'html';
$lang->exportTypeList['all'] = 'All';
$lang->exportTypeList['selected'] = 'Selected';
$lang->exportTypeList['all'] = 'All Data';
$lang->exportTypeList['selected'] = 'Selected Data';
/* Language. */
$lang->lang = 'Language';
/* Theme style. */
$lang->theme = 'Theme';
$lang->themes['default'] = 'ZenTao Blue (default)';
$lang->themes['default'] = 'Default';
$lang->themes['green'] = 'Green';
$lang->themes['red'] = 'Red';
$lang->themes['purple'] = 'Purple';
@@ -183,17 +183,17 @@ $lang->my = new stdclass();
$lang->my->menu = new stdclass();
$lang->my->menu->index = 'Home|my|index';
$lang->my->menu->calendar = array('link' => 'Calendar|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo');
$lang->my->menu->calendar = array('link' => 'Schedule|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo');
$lang->my->menu->task = array('link' => 'Task|my|task|', 'subModule' => 'task');
$lang->my->menu->bug = array('link' => 'Bug|my|bug|', 'subModule' => 'bug');
$lang->my->menu->testtask = array('link' => 'Test Task|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
$lang->my->menu->testtask = array('link' => 'Request|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
$lang->my->menu->story = array('link' => 'Story|my|story|', 'subModule' => 'story');
$lang->my->menu->myProject = "{$lang->projectCommon}|my|project|";
$lang->my->menu->dynamic = 'Dynamic|my|dynamic|';
$lang->my->menu->dynamic = 'Dynamics|my|dynamic|';
$lang->my->menu->profile = array('link' => 'Profile|my|profile', 'alias' => 'editprofile');
$lang->my->menu->changePassword = 'Password|my|changepassword';
$lang->my->menu->manageContacts = 'Contact|my|managecontacts';
$lang->my->menu->score = 'Point|my|score';
$lang->my->menu->score = array('link' => 'Points|my|score', 'subModule' => 'score');
$lang->my->dividerMenu = ',task,myProject,profile,';
@@ -212,7 +212,7 @@ $lang->product->menu->plan = array('link' => 'Plan|productplan|browse|produc
$lang->product->menu->release = array('link' => 'Release|release|browse|productID=%s', 'subModule' => 'release');
$lang->product->menu->roadmap = 'Roadmap|product|roadmap|productID=%s';
$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s";
$lang->product->menu->dynamic = 'Dynamic|product|dynamic|productID=%s';
$lang->product->menu->dynamic = 'Dynamics|product|dynamic|productID=%s';
$lang->product->menu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
$lang->product->menu->branch = '@branch@|branch|manage|productID=%s';
$lang->product->menu->module = 'Module|tree|browse|productID=%s&view=story';
@@ -239,9 +239,9 @@ $lang->project->menu->kanban = array('link' => 'Kanban|project|kanban|projectI
$lang->project->menu->burn = array('link' => 'Burndown|project|burn|projectID=%s');
$lang->project->menu->list = array('link' => 'More|project|grouptask|projectID=%s', 'alias' => 'grouptask,tree', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->story = array('link' => 'Story|project|story|projectID=%s', 'subModule' => 'story', 'alias' => 'linkstory,storykanban');
$lang->project->menu->qa = array('link' => 'Test|project|bug|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->qa = array('link' => 'Request|project|bug|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->doc = array('link' => 'Doc|doc|objectLibs|type=project&objectID=%s&from=project', 'subModule' => 'doc');
$lang->project->menu->action = array('link' => 'Dynamic|project|dynamic|projectID=%s', 'subModule' => 'dynamic', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->action = array('link' => 'Dynamics|project|dynamic|projectID=%s', 'subModule' => 'dynamic', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->product = $lang->productCommon . '|project|manageproducts|projectID=%s';
$lang->project->menu->team = array('link' => 'Team|project|team|projectID=%s', 'alias' => 'managemembers');
$lang->project->menu->view = array('link' => 'Overview|project|view|projectID=%s', 'alias' => 'edit,start,suspend,putoff,close');
@@ -254,7 +254,7 @@ $lang->project->subMenu->list->tree = 'Tree View|project|tree|projectID=%s'
$lang->project->subMenu->qa = new stdclass();
$lang->project->subMenu->qa->bug = 'Bug|project|bug|projectID=%s';
$lang->project->subMenu->qa->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
$lang->project->subMenu->qa->testtask = array('link' => 'Test Task|project|testtask|projectID=%s', 'subModule' => 'testreport,testtask');
$lang->project->subMenu->qa->testtask = array('link' => 'Request|project|testtask|projectID=%s', 'subModule' => 'testreport,testtask');
$lang->project->dividerMenu = ',story,team,product,';
@@ -262,7 +262,6 @@ $lang->task = new stdclass();
$lang->build = new stdclass();
$lang->task->menu = $lang->project->menu;
$lang->build->menu = $lang->project->menu;
$lang->build->menu->qa = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
/* QA menu settings. */
$lang->qa = new stdclass();
@@ -270,7 +269,7 @@ $lang->qa->menu = new stdclass();
$lang->qa->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->qa->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->qa->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->qa->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->qa->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->qa->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->qa->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -280,7 +279,7 @@ $lang->bug->menu = new stdclass();
$lang->bug->menu->bug = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,resolve,close,activate,report,batchedit,batchactivate,confirmbug,assignto', 'subModule' => 'tree');
$lang->bug->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->bug->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->bug->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->bug->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->bug->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->bug->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -289,7 +288,7 @@ $lang->testcase = new stdclass();
$lang->testcase->menu = new stdclass();
$lang->testcase->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testcase->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase,importfromlib', 'subModule' => 'tree');
$lang->testcase->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->testcase->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->testcase->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->testcase->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->testcase->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -298,7 +297,7 @@ $lang->testtask = new stdclass();
$lang->testtask->menu = new stdclass();
$lang->testtask->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testtask->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->testtask->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report');
$lang->testtask->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report');
$lang->testtask->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->testtask->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->testtask->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -307,7 +306,7 @@ $lang->testsuite = new stdclass();
$lang->testsuite->menu = new stdclass();
$lang->testsuite->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testsuite->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->testsuite->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s');
$lang->testsuite->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->testsuite->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'view,create,edit,linkcase');
$lang->testsuite->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->testsuite->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -316,16 +315,16 @@ $lang->testreport = new stdclass();
$lang->testreport->menu = new stdclass();
$lang->testreport->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testreport->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->testreport->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->testreport->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->testreport->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->testreport->menu->report = array('link' => 'Report|testreport|browse|productID=%s', 'alias' => 'view,create,edit');
$lang->testreport->menu->caselib = array('link' => 'Library|testsuite|library');
$lang->testreport->menu->caselib = array('link' => 'Case Library|testsuite|library');
$lang->caselib = new stdclass();
$lang->caselib->menu = new stdclass();
$lang->caselib->menu->bug = array('link' => 'Bug|bug|browse|');
$lang->caselib->menu->testcase = array('link' => 'Case|testcase|browse|');
$lang->caselib->menu->testtask = array('link' => 'Test|testtask|browse|');
$lang->caselib->menu->testtask = array('link' => 'Request|testtask|browse|');
$lang->caselib->menu->testsuite = array('link' => 'Suite|testsuite|browse|');
$lang->caselib->menu->report = array('link' => 'Report|testreport|browse|');
$lang->caselib->menu->caselib = array('link' => 'Case Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase');
@@ -344,11 +343,11 @@ $lang->report->menu = new stdclass();
$lang->report->menu->product = array('link' => $lang->productCommon . '|report|productsummary');
$lang->report->menu->prj = array('link' => $lang->projectCommon . '|report|projectdeviation');
$lang->report->menu->test = array('link' => 'Test|report|bugcreate', 'alias' => 'bugassign');
$lang->report->menu->test = array('link' => 'Request|report|bugcreate', 'alias' => 'bugassign');
$lang->report->menu->staff = array('link' => 'Company|report|workload');
$lang->report->notice = new stdclass();
$lang->report->notice->help = 'Note: Report is generated on search results. Please search the list before you generate a report.';
$lang->report->notice->help = 'Note: The data of a report is based on the data in the List. Click the tab, e.g. All, then click Report to generate a report.';
/* Company menu settings. */
$lang->company = new stdclass();
@@ -356,7 +355,7 @@ $lang->company->menu = new stdclass();
$lang->company->menu->browseUser = array('link' => 'User|company|browse', 'subModule' => 'user');
$lang->company->menu->dept = array('link' => 'Department|dept|browse', 'subModule' => 'dept');
$lang->company->menu->browseGroup = array('link' => 'Privilege|group|browse', 'subModule' => 'group');
$lang->company->menu->dynamic = 'Dynamic|company|dynamic|';
$lang->company->menu->dynamic = 'Dynamics|company|dynamic|';
$lang->company->menu->view = array('link' => 'Company|company|view');
$lang->dept = new stdclass();
@@ -371,11 +370,12 @@ $lang->user->menu = $lang->company->menu;
$lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => 'Message|message|index', 'subModule' => 'message,mail,webhook');
$lang->admin->menu->message = array('link' => 'Notification|message|index', 'subModule' => 'message,mail,webhook');
$lang->admin->menu->custom = array('link' => 'Custom|custom|set', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => 'Integrate|admin|sso');
$lang->admin->menu->sso = array('link' => 'Integration|admin|sso');
$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor,entry');
$lang->admin->menu->translate = array('link' => 'Translate|translate|index', 'subModule' => 'translate');
$lang->admin->menu->data = array('link' => 'Data|backup|index', 'subModule' => 'backup,action');
$lang->admin->menu->safe = array('link' => 'Security|admin|safe', 'alias' => 'checkweak');
$lang->admin->menu->system = array('link' => 'System|cron|index', 'subModule' => 'cron');
@@ -384,7 +384,7 @@ $lang->admin->subMenu = new stdclass();
$lang->admin->subMenu->message = new stdclass();
$lang->admin->subMenu->message->mail = array('link' => 'Mail|mail|index', 'subModule' => 'mail');
$lang->admin->subMenu->message->webhook = array('link' => 'Webhook|webhook|browse', 'subModule' => 'webhook');
$lang->admin->subMenu->message->setting = array('link' => 'Setting|message|setting', 'subModule' => 'message');
$lang->admin->subMenu->message->setting = array('link' => 'Settings|message|setting', 'subModule' => 'message');
$lang->admin->subMenu->sso = new stdclass();
$lang->admin->subMenu->sso->ranzhi = 'Zdoo|admin|sso';
@@ -393,7 +393,7 @@ $lang->admin->subMenu->dev = new stdclass();
$lang->admin->subMenu->dev->api = array('link' => 'API|dev|api');
$lang->admin->subMenu->dev->db = array('link' => 'Database|dev|db');
$lang->admin->subMenu->dev->editor = array('link' => 'Editor|editor|index', 'subModule' => 'editor');
$lang->admin->subMenu->dev->entry = array('link' => 'Entry|entry|browse', 'subModule' => 'entry');
$lang->admin->subMenu->dev->entry = array('link' => 'Application|entry|browse', 'subModule' => 'entry');
$lang->admin->subMenu->data = new stdclass();
$lang->admin->subMenu->data->backup = array('link' => 'Backup|backup|index', 'subModule' => 'backup');
@@ -409,7 +409,6 @@ $lang->action = new stdclass();
$lang->backup = new stdclass();
$lang->extension = new stdclass();
$lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->cron = new stdclass();
$lang->dev = new stdclass();
@@ -417,6 +416,8 @@ $lang->entry = new stdclass();
$lang->webhook = new stdclass();
$lang->message = new stdclass();
$lang->search = new stdclass();
$lang->translate = new stdclass();
$lang->editor = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
@@ -425,12 +426,13 @@ $lang->backup->menu = $lang->admin->menu;
$lang->cron->menu = $lang->admin->menu;
$lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->dev->menu = $lang->admin->menu;
$lang->entry->menu = $lang->admin->menu;
$lang->webhook->menu = $lang->admin->menu;
$lang->message->menu = $lang->admin->menu;
$lang->translate->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
/* Menu group. */
$lang->menugroup = new stdclass();
@@ -446,10 +448,13 @@ $lang->menugroup->user = 'company';
$lang->menugroup->group = 'company';
$lang->menugroup->bug = 'qa';
$lang->menugroup->testcase = 'qa';
$lang->menugroup->case = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
@@ -459,36 +464,37 @@ $lang->menugroup->backup = 'admin';
$lang->menugroup->cron = 'admin';
$lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->dev = 'admin';
$lang->menugroup->entry = 'admin';
$lang->menugroup->webhook = 'admin';
$lang->menugroup->message = 'admin';
$lang->menugroup->translate = 'admin';
$lang->menugroup->editor = 'admin';
/* Error info. */
$lang->error = new stdclass();
$lang->error->companyNotFound = "The domain %s cannot be found!";
$lang->error->length = array("『%s』length error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』.");
$lang->error->reg = "『%s』format error. It should be『%s』.";
$lang->error->unique = "『%s』『%s』exists. Go to Admin->Recycle to restore it, if you are sure it is deleted.";
$lang->error->unique = "『%s』『%s』exists. Go to Admin->Recycle Bin to restore it, if you are sure it is deleted.";
$lang->error->gt = "『%s』should be >『%s』.";
$lang->error->ge = "『%s』should be >=『%s』.";
$lang->error->notempty = "『%s』should not be blank.";
$lang->error->empty = "『%s』should be null.";
$lang->error->equal = "『%s』has to be『%s』.";
$lang->error->int = array("『%s』should be numbers", "『%s』should be 『%s-%s』.");
$lang->error->float = "『%s』should have numbers, decimals.";
$lang->error->float = "『%s』should have numbers, or decimals.";
$lang->error->email = "『%s』should be valid Email.";
$lang->error->URL = "『%s』should be url.";
$lang->error->date = "『%s』should be valid date.";
$lang->error->datetime = "『%s』should be valid date.";
$lang->error->code = "『%s』should be letters or numbers.";
$lang->error->account = "『%s』should be letters or numbers of three or more.";
$lang->error->account = "『%s』should be >= 3 letters or numbers.";
$lang->error->passwordsame = "Passwords should be consistent.";
$lang->error->passwordrule = "Password should abide by rules. It should be at least 6 characters.";
$lang->error->passwordrule = "Password should conform to rules. It should be >= 6 characters.";
$lang->error->accessDenied = 'Access is denied.';
$lang->error->pasteImg = 'Image is not allowed to paste in your browser!';
$lang->error->pasteImg = 'Images are not allowed to be pasted in your browser!';
$lang->error->noData = 'No data.';
$lang->error->editedByOther = 'This record might have been changed. Please refresh and try to edit again!';
$lang->error->tutorialData = 'No data can be imported in tutorial mode. Please quit tutorial first!';
@@ -496,7 +502,7 @@ $lang->error->tutorialData = 'No data can be imported in tutorial mode. Pleas
/* Page info. */
$lang->pager = new stdclass();
$lang->pager->noRecord = "No records.";
$lang->pager->digest = " <strong>%s</strong> in total. %s <strong>%s/%s</strong> &nbsp; ";
$lang->pager->digest = "Total: <strong>%s</strong>. %s <strong>%s/%s</strong> &nbsp; ";
$lang->pager->recPerPage = " <strong>%s</strong> per page";
$lang->pager->first = "<i class='icon-step-backward' title='Home'></i>";
$lang->pager->pre = "<i class='icon-play icon-flip-horizontal' title='Previous Page'></i>";
@@ -509,26 +515,26 @@ $lang->pager->summery = "<strong>%s-%s</strong> of <strong>%s</strong>.";
$lang->proVersion = "<a href='https://www.zentao.pm/book/zentaopromanual/free-open-source-project-management-software-zentaopro-127.html' target='_blank' id='proLink' class='text-important'>ZenTao Pro <i class='text-danger icon-pro-version'></i></a> &nbsp; ";
$lang->downNotify = "Download Desktop Notification";
$lang->downloadClient = "Download Desktop Client";
$lang->downloadClient = "Download ZenTao Desktop";
$lang->clientHelp = "Client Help";
$lang->clientHelpLink = "https://www.zentao.pm/book/zentaomanual/scrum-tool-open-source-client-214.html";
$lang->clientHelpLink = "https://www.zentao.pm/book/zentaomanual/";
$lang->website = "https://www.zentao.pm";
$lang->suhosinInfo = "Warning! Data is reaching the limit. Please change <font color=red>sohusin.post.max_vars</font> and <font color=red>sohusin.request.max_vars</font> (set larger %s value) in php.ini, then save and restart Apache or php-fpm, or some data will not be saved.";
$lang->maxVarsInfo = "Warning! Data is reaching the limit. Please change <font color=red>max_input_vars</font> (set larger %s value) in php.ini, then save and restart Apache or php-fpm, or some data will not be saved.";
$lang->pasteTextInfo = "Paste text here. Each line will be the title of each record. ";
$lang->noticeImport = "Imported data contains something that has already existed in system. Please confirm your actions.";
$lang->importConfirm = "Confirm";
$lang->pasteTextInfo = "Paste the text of items here. Each item will be the title of a story. ";
$lang->noticeImport = "Imported data contains data that has already existed in system. Please confirm you actions on the date.";
$lang->importConfirm = "Import";
$lang->importAndCover = "Override";
$lang->importAndInsert = "Insert";
$lang->noResultsMatch = "No results match found!";
$lang->searchMore = "More results:";
$lang->chooseUsersToMail = "Choose users to be notified";
$lang->browserNotice = 'Your browser might not display the best effect. Use Chrome, Firefox, IE9+, Opera or Safari.';
$lang->noticePasteImg = "Paste images here";
$lang->pasteImgFail = "Pasting image failed. Try again later.";
$lang->chooseUsersToMail = "Choose users that will be notified.";
$lang->browserNotice = 'The browser you currently use might not get the best browsing results. It is recommended that you use Chrome, Firefox, IE9+, Opera or Safari.';
$lang->noticePasteImg = "You can paste images into the editor.";
$lang->pasteImgFail = "Failed to paste images. Try again later.";
$lang->pasteImgUploading = "Uploading...";
/* Time formats settings. */
@@ -558,7 +564,7 @@ $lang->datepicker->dpText->TEXT_TODAY = 'Today';
$lang->datepicker->dpText->TEXT_NEXT_YEAR = 'Next Year';
$lang->datepicker->dpText->TEXT_NEXT_MONTH = 'Next Month';
$lang->datepicker->dpText->TEXT_CLOSE = 'Close';
$lang->datepicker->dpText->TEXT_DATE = 'Choose Time';
$lang->datepicker->dpText->TEXT_DATE = 'Choose Tab';
$lang->datepicker->dpText->TEXT_CHOOSE_DATE = 'Choose Date';
$lang->datepicker->dayNames = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
@@ -737,10 +743,10 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Add bug, testcase and testtask module. */
$lang->menu->bug = 'Bug|bug|index';
$lang->menu->testcase = 'Test Case|testcase|index';
$lang->menu->testsuite = 'Test Suite|testsuite|index';
$lang->menu->testtask = 'Test|testtask|index';
$lang->menu->caselib = 'Case Lib|testsuite|library';
$lang->menu->testcase = 'Case|testcase|index';
$lang->menu->testsuite = 'Suite|testsuite|index';
$lang->menu->testtask = 'Request|testtask|index';
$lang->menu->caselib = 'Case Library|testsuite|library';
$lang->menuOrder[6] = 'bug';
$lang->menuOrder[7] = 'testcase';
@@ -752,22 +758,22 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of bug module. */
$lang->bug->menu = new stdclass();
$lang->bug->menu->all = 'All|bug|browse|productID=%s&branch=%s&browseType=all&param=%s';
$lang->bug->menu->unclosed = 'Open|bug|browse|productID=%s&branch=%s&browseType=unclosed&param=%s';
$lang->bug->menu->openedbyme = 'CreateByMe|bug|browse|productID=%s&branch=%s&browseType=openedbyme&param=%s';
$lang->bug->menu->assigntome = 'AssignToMe|bug|browse|productID=%s&branch=%s&browseType=assigntome&param=%s';
$lang->bug->menu->resolvedbyme = 'ResolveByMe|bug|browse|productID=%s&branch=%s&browseType=resolvedbyme&param=%s';
$lang->bug->menu->unclosed = 'Unclosed|bug|browse|productID=%s&branch=%s&browseType=unclosed&param=%s';
$lang->bug->menu->openedbyme = 'ReportedByMe|bug|browse|productID=%s&branch=%s&browseType=openedbyme&param=%s';
$lang->bug->menu->assigntome = 'AssignedToMe|bug|browse|productID=%s&branch=%s&browseType=assigntome&param=%s';
$lang->bug->menu->resolvedbyme = 'ResolvedByMe|bug|browse|productID=%s&branch=%s&browseType=resolvedbyme&param=%s';
$lang->bug->menu->toclosed = 'ToBeClosed|bug|browse|productID=%s&branch=%s&browseType=toclosed&param=%s';
$lang->bug->menu->unresolved = 'Unresolved|bug|browse|productID=%s&branch=%s&browseType=unresolved&param=%s';
$lang->bug->menu->unresolved = 'Active|bug|browse|productID=%s&branch=%s&browseType=unresolved&param=%s';
$lang->bug->menu->more = array('link' => 'More|bug|browse|productID=%s&branch=%s&browseType=unconfirmed&param=%s', 'class' => 'dropdown dropdown-hover');
$lang->bug->subMenu = new stdclass();
$lang->bug->subMenu->more = new stdclass();
$lang->bug->subMenu->more->unconfirmed = 'Unconfirmed|bug|browse|productID=%s&branch=%s&browseType=unconfirmed&param=%s';
$lang->bug->subMenu->more->assigntonull = 'Unassigned|bug|browse|productID=%s&branch=%s&browseType=assigntonull&param=%s';
$lang->bug->subMenu->more->longlifebugs = 'Pending|bug|browse|productID=%s&branch=%s&browseType=longlifebugs&param=%s';
$lang->bug->subMenu->more->longlifebugs = 'Stalled|bug|browse|productID=%s&branch=%s&browseType=longlifebugs&param=%s';
$lang->bug->subMenu->more->postponedbugs = 'Postponed|bug|browse|productID=%s&branch=%s&browseType=postponedbugs&param=%s';
$lang->bug->subMenu->more->overduebugs = 'Overdue|bug|browse|productID=%s&branch=%s&browseType=overduebugs&param=%s';
$lang->bug->subMenu->more->needconfirm = 'ToConfirm|bug|browse|productID=%s&branch=%s&browseType=needconfirm&param=%s';
$lang->bug->subMenu->more->needconfirm = 'ToBeConfirmed|bug|browse|productID=%s&branch=%s&browseType=needconfirm&param=%s';
$lang->bug->menuOrder[5] = 'product';
$lang->bug->menuOrder[10] = 'all';
@@ -787,8 +793,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of testcase. */
$lang->testcase->menu = new stdclass();
$lang->testcase->menu->all = 'All|testcase|browse|productID=%s&branch=%s&browseType=all';
$lang->testcase->menu->wait = 'Wait|testcase|browse|productID=%s&branch=%s&browseType=wait';
$lang->testcase->menu->bysuite = array('link' => 'Test Suite|testsuite|create|productID=%s', 'class' => 'dropdown dropdown-hover');
$lang->testcase->menu->wait = 'Waiting|testcase|browse|productID=%s&branch=%s&browseType=wait';
$lang->testcase->menu->bysuite = array('link' => 'Suite|testsuite|create|productID=%s', 'class' => 'dropdown dropdown-hover');
$lang->testcase->subMenu = new stdclass();
$lang->testcase->subMenu->bysuite = new stdclass();
@@ -807,7 +813,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of testtask. */
$lang->testtask->menu = new stdclass();
$lang->testtask->menu->totalStatus = 'All|testtask|browse|productID=%s&branch=%s&type=%s,totalStatus';
$lang->testtask->menu->wait = 'Wait|testtask|browse|productID=%s&branch=%s&type=%s,wait';
$lang->testtask->menu->wait = 'Waiting|testtask|browse|productID=%s&branch=%s&type=%s,wait';
$lang->testtask->menu->doing = 'Doing|testtask|browse|productID=%s&branch=%s&type=%s,doing';
$lang->testtask->menu->blocked = 'Blocked|testtask|browse|productID=%s&branch=%s&type=%s,blocked';
$lang->testtask->menu->done = 'Done|testtask|browse|productID=%s&branch=%s&type=%s,done';
@@ -828,7 +834,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of caselib module. */
$lang->caselib->menu = new stdclass();
$lang->caselib->menu->all = 'All|testsuite|library|libID=%s&browseType=all';
$lang->caselib->menu->wait = 'Wait|testsuite|library|libID=%s&browseType=wait';
$lang->caselib->menu->wait = 'Waiting|testsuite|library|libID=%s&browseType=wait';
$lang->caselib->menu->view = 'View|testsuite|libview|libID=%s';
$lang->caselib->menuOrder[5] = 'lib';
+5 -4
View File
@@ -108,9 +108,10 @@ $lang->admin->menuOrder[15] = 'custom';
$lang->admin->menuOrder[20] = 'sso';
$lang->admin->menuOrder[25] = 'extension';
$lang->admin->menuOrder[30] = 'dev';
$lang->admin->menuOrder[35] = 'data';
$lang->admin->menuOrder[40] = 'safe';
$lang->admin->menuOrder[45] = 'system';
$lang->admin->menuOrder[35] = 'translate';
$lang->admin->menuOrder[40] = 'data';
$lang->admin->menuOrder[45] = 'safe';
$lang->admin->menuOrder[50] = 'system';
$lang->admin->subMenuOrder = new stdclass();
$lang->admin->subMenuOrder->message[5] = 'mail';
@@ -133,8 +134,8 @@ $lang->backup->menuOrder = $lang->admin->menuOrder;
$lang->cron->menuOrder = $lang->admin->menuOrder;
$lang->extension->menuOrder = $lang->admin->menuOrder;
$lang->custom->menuOrder = $lang->admin->menuOrder;
$lang->editor->menuOrder = $lang->admin->menuOrder;
$lang->mail->menuOrder = $lang->admin->menuOrder;
$lang->dev->menuOrder = $lang->admin->menuOrder;
$lang->entry->menuOrder = $lang->admin->menuOrder;
$lang->webhook->menuOrder = $lang->admin->menuOrder;
$lang->editor->menuOrder = $lang->admin->menuOrder;
+15 -8
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
$lang->arrow = '&nbsp;<i class="icon-angle-right"></i>&nbsp;';
$lang->colon = '::';
$lang->colon = '-';
$lang->comma = ',';
$lang->dot = '。';
$lang->at = ' 于 ';
@@ -88,7 +88,6 @@ $lang->customMenu = '自定义导航';
$lang->customField = '自定义表单项';
$lang->lineNumber = '行号';
$lang->tutorialConfirm = '检测到你尚未退出新手教程模式,是否现在退出?';
$lang->youCould = '您现在可以 ';
$lang->preShortcutKey = '[快捷键:←]';
$lang->nextShortcutKey = '[快捷键:→]';
@@ -99,6 +98,7 @@ $lang->selectAll = '全选';
$lang->selectReverse = '反选';
$lang->loading = '稍候...';
$lang->notFound = '抱歉,您访问的对象并不存在!';
$lang->notPage = '抱歉,您访问的功能正在开发中!';
$lang->showAll = '[[全部显示]]';
$lang->future = '未来';
@@ -193,7 +193,7 @@ $lang->my->menu->dynamic = '动态|my|dynamic|';
$lang->my->menu->profile = array('link' => '档案|my|profile', 'alias' => 'editprofile');
$lang->my->menu->changePassword = '密码|my|changepassword';
$lang->my->menu->manageContacts = '联系人|my|managecontacts';
$lang->my->menu->score = '积分|my|score';
$lang->my->menu->score = array('link' => '积分|my|score', 'subModule' => 'score');
$lang->my->dividerMenu = ',task,myProject,profile,';
@@ -262,7 +262,6 @@ $lang->task = new stdclass();
$lang->build = new stdclass();
$lang->task->menu = $lang->project->menu;
$lang->build->menu = $lang->project->menu;
$lang->build->menu->qa = array('link' => '版本|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
/* QA视图菜单设置。*/
$lang->qa = new stdclass();
@@ -348,7 +347,7 @@ $lang->report->menu->test = array('link' => '测试|report|bugcreate', 'alias
$lang->report->menu->staff = array('link' => '组织|report|workload');
$lang->report->notice = new stdclass();
$lang->report->notice->help = '注:统计报表的数据,来源于列表页面的检索结果,生成统计报表前请先在列表页面进行检索。';
$lang->report->notice->help = '注:统计报表的数据来源于列表页面的检索结果,生成统计报表前请先在列表页面进行检索。';
/* 组织结构视图菜单设置。*/
$lang->company = new stdclass();
@@ -376,6 +375,7 @@ $lang->admin->menu->custom = array('link' => '自定义|custom|set', 'subModu
$lang->admin->menu->sso = array('link' => '集成|admin|sso');
$lang->admin->menu->extension = array('link' => '插件|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => '二次开发|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor,entry');
$lang->admin->menu->translate = array('link' => '翻译|translate|index', 'subModule' => 'translate');
$lang->admin->menu->data = array('link' => '数据|backup|index', 'subModule' => 'backup,action');
$lang->admin->menu->safe = array('link' => '安全|admin|safe', 'alias' => 'checkweak');
$lang->admin->menu->system = array('link' => '系统|cron|index', 'subModule' => 'cron');
@@ -409,7 +409,6 @@ $lang->action = new stdclass();
$lang->backup = new stdclass();
$lang->extension = new stdclass();
$lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->cron = new stdclass();
$lang->dev = new stdclass();
@@ -417,6 +416,8 @@ $lang->entry = new stdclass();
$lang->webhook = new stdclass();
$lang->message = new stdclass();
$lang->search = new stdclass();
$lang->translate = new stdclass();
$lang->editor = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
@@ -425,12 +426,13 @@ $lang->backup->menu = $lang->admin->menu;
$lang->cron->menu = $lang->admin->menu;
$lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->dev->menu = $lang->admin->menu;
$lang->entry->menu = $lang->admin->menu;
$lang->webhook->menu = $lang->admin->menu;
$lang->message->menu = $lang->admin->menu;
$lang->translate->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
/* 菜单分组。*/
$lang->menugroup = new stdclass();
@@ -446,10 +448,13 @@ $lang->menugroup->user = 'company';
$lang->menugroup->group = 'company';
$lang->menugroup->bug = 'qa';
$lang->menugroup->testcase = 'qa';
$lang->menugroup->case = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
@@ -459,12 +464,13 @@ $lang->menugroup->backup = 'admin';
$lang->menugroup->cron = 'admin';
$lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->dev = 'admin';
$lang->menugroup->entry = 'admin';
$lang->menugroup->webhook = 'admin';
$lang->menugroup->message = 'admin';
$lang->menugroup->translate = 'admin';
$lang->menugroup->editor = 'admin';
/* 错误提示信息。*/
$lang->error = new stdclass();
@@ -859,6 +865,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust menu group. */
$lang->menugroup->bug = 'bug';
$lang->menugroup->testcase = 'testcase';
$lang->menugroup->case = 'testcase';
$lang->menugroup->testtask = 'testtask';
$lang->menugroup->testsuite = 'testsuite';
$lang->menugroup->testreport = 'testtask';
+5 -1
View File
@@ -88,7 +88,6 @@ $lang->customMenu = '自定義導航';
$lang->customField = '自定義表單項';
$lang->lineNumber = '行號';
$lang->tutorialConfirm = '檢測到你尚未退出新手教程模式,是否現在退出?';
$lang->youCould = '您現在可以 ';
$lang->preShortcutKey = '[快捷鍵:←]';
$lang->nextShortcutKey = '[快捷鍵:→]';
@@ -99,6 +98,7 @@ $lang->selectAll = '全選';
$lang->selectReverse = '反選';
$lang->loading = '稍候...';
$lang->notFound = '抱歉,您訪問的對象並不存在!';
$lang->notPage = '抱歉,您訪問的功能正在開發中!';
$lang->showAll = '[[全部顯示]]';
$lang->future = '未來';
@@ -446,10 +446,13 @@ $lang->menugroup->user = 'company';
$lang->menugroup->group = 'company';
$lang->menugroup->bug = 'qa';
$lang->menugroup->testcase = 'qa';
$lang->menugroup->case = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
@@ -858,6 +861,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust menu group. */
$lang->menugroup->bug = 'bug';
$lang->menugroup->testcase = 'testcase';
$lang->menugroup->case = 'testcase';
$lang->menugroup->testtask = 'testtask';
$lang->menugroup->testsuite = 'testsuite';
$lang->menugroup->testreport = 'testtask';
+38 -14
View File
@@ -254,12 +254,12 @@ class commonModel extends model
if(!$isGuest)
{
echo '<li class="user-profile-item">';
echo "<a href='". helper::createLink('my', 'profile', '', '', true) . "' class='iframe" . (!empty($app->user->role) && isset($lang->user->roleList[$app->user->role]) ? '' : ' no-role') . "' data-width='600'>";
echo "<a href='". helper::createLink('my', 'profile') . (!empty($app->user->role) && isset($lang->user->roleList[$app->user->role]) ? '' : ' no-role') . "'>";
echo "<div class='avatar avatar bg-secondary avatar-circle'>" . strtoupper($app->user->account{0}) . "</div>\n";
echo '<div class="user-profile-name">' . (empty($app->user->realname) ? $app->user->account : $app->user->realname) . '</div>';
if(isset($lang->user->roleList[$app->user->role])) echo '<div class="user-profile-role">' . $lang->user->roleList[$app->user->role] . '</div>';
echo '</a></li><li class="divider"></li>';
echo '<li>' . html::a(helper::createLink('my', 'profile', '', '', true), $lang->profile, '', "class='iframe' data-width='600'") . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'profile'), $lang->profile) . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'changepassword', '', '', true), $lang->changePassword, '', "class='iframe' data-width='500'") . '</li>';
echo "<li class='divider'></li>";
@@ -320,7 +320,7 @@ class commonModel extends model
echo '<li>' . html::a($lang->manualUrl, $lang->manual, '_blank', "class='open-help-tab'") . '</li>';
echo '<li>' . html::a(helper::createLink('misc', 'changeLog'), $lang->changeLog, '', "class='iframe' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '</li>';
echo "</ul></li>\n";
echo '<li>' . html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about iframe' data-width='900' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
echo '<li>' . html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about iframe' data-width='950' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
}
/**
@@ -381,11 +381,14 @@ class commonModel extends model
$link['method'] = $subMenuMethod;
$link['vars'] = $subMenuParams;
$menu = new stdclass();
$menu->name = $subMenuKey;
$menu->link = $link;
$menu->text = $subMenuName;
$menu->hidden = false;
$subMenuItem = isset($items->$subMenuKey) ? $items->$subMenuKey : array();
$menu = new stdclass();
$menu->name = $subMenuKey;
$menu->link = $link;
$menu->text = $subMenuName;
$menu->subModule = isset($subMenuItem['subModule']) ? $subMenuItem['subModule'] : '';
$menu->alias = isset($subMenuItem['alias']) ? $subMenuItem['alias'] : '';
$menu->hidden = false;
$subMenu[$subMenuKey] = $menu;
}
@@ -1645,7 +1648,6 @@ EOD;
public function checkEntry()
{
$this->loadModel('entry');
if($this->session->valid_entry)
{
if(!$this->session->entry_code) $this->response('SESSION_CODE_MISSING');
@@ -1661,7 +1663,7 @@ EOD;
if(!$entry->key) $this->response('EMPTY_KEY');
if(empty($entry->account)) $this->response('ACCOUNT_UNBOUND');
if(!$this->checkIP($entry->ip)) $this->response('IP_DENIED');
if(!$this->checkEntryToken($entry->key)) $this->response('INVALID_TOKEN');
if(!$this->checkEntryToken($entry)) $this->response('INVALID_TOKEN');
$this->loadModel('user');
$user = $this->dao->findByAccount($entry->account)->from(TABLE_USER)->fetch();
@@ -1676,6 +1678,14 @@ EOD;
$this->session->set('VALID_ENTRY', md5(md5($this->get->code) . $this->server->remote_addr));
$this->loadModel('entry')->saveLog($entry->id, $this->server->request_uri);
/* Add for task #5384. */
if($_SERVER['REQUEST_METHOD'] == 'POST' and empty($_POST))
{
$post = file_get_contents("php://input");
if(!empty($post)) $post = json_decode($post, true);
if(!empty($post)) $_POST = $post;
}
unset($_GET['code']);
unset($_GET['token']);
}
@@ -1683,16 +1693,30 @@ EOD;
/**
* Check token of an entry.
*
* @param string $key
* @param object $entry
* @access public
* @return void
* @return bool
*/
public function checkEntryToken($key)
public function checkEntryToken($entry)
{
parse_str($this->server->query_String, $queryString);
unset($queryString['token']);
/* Change for task #5384. */
if(isset($queryString['time']))
{
$result = $this->get->token == md5($entry->code . $entry->key . $queryString['time']);
if($result)
{
if($queryString['time'] <= $entry->calledTime) $this->response('CALLED_TIME');
$this->loadModel('entry')->updateTime($entry->code, $queryString['time']);
unset($_GET['time']);
return $result;
}
}
$queryString = http_build_query($queryString);
return $this->get->token == md5(md5($queryString) . $key);
return $this->get->token == md5(md5($queryString) . $entry->key);
}
/**
+1 -1
View File
@@ -6,7 +6,7 @@
$(function()
{
<?php if(!empty($setShowModule)):?>
$('#sidebar .cell .text-center:last').append("<a href='#showModuleModal' data-toggle='modal' class='text-secondary small'><?php echo $lang->datatable->showModule?></a><hr class='space-sm' />");
$('#sidebar .cell .text-center:last').append("<a href='#showModuleModal' data-toggle='modal' class='text-secondary small'><?php echo $lang->datatable->showModuleAB?></a><hr class='space-sm' />");
<?php endif;?>
var $btnToolbar = $('#main .table-header .btn-toolbar:first');
+8 -163
View File
@@ -26,7 +26,7 @@ $uid = uniqid('');
var simpleTools =
[ 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic','underline', '|',
'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|',
'emoticons', 'image', 'code', 'link', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
'emoticons', 'image', 'code', 'link', 'table', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
var fullTools =
[ 'formatblock', 'fontname', 'fontsize', 'lineheight', '|', 'forecolor', 'hilitecolor', '|', 'bold', 'italic','underline', 'strikethrough', '|',
'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', '|',
@@ -37,7 +37,6 @@ $uid = uniqid('');
'table', 'code', '|', 'pagebreak', 'anchor', '|',
'fullscreen', 'source', 'preview', 'about'];
var editorToolsMap = {fullTools: fullTools, simpleTools: simpleTools, bugTools: bugTools};
var imageLoadingEle = '<div class="image-loading-ele small" style="padding: 5px; background: #FFF3E0; width: 300px; border-radius: 2px; border: 1px solid #FF9800; color: #ff5d5d; margin: 10px 0;"><i class="icon icon-spin icon-spinner-indicator muted"></i> <?php echo $this->lang->pasteImgUploading?></div>';
// Kindeditor default options
var editorDefaults =
@@ -51,18 +50,22 @@ $uid = uniqid('');
uploadJson: createLink('file', 'ajaxUpload', 'uid=' + kuid),
allowFileManager: true,
langType: '<?php echo $editorLang?>',
cssData: 'html,body {background: none}.article-content, .article-content table td, .article-content table th {line-height: 1.3846153846; font-size: 13px;}.article-content .table-auto {width: auto!important; max-width: 100%;}',
placeholderStyle: {fontSize: '13px', color: '#888'},
pasteImage: {postUrl: createLink('file', 'ajaxPasteImage', 'uid=' + kuid), placeholder: true},
syncAfterBlur: true,
spellcheck: false
};
window.editor = {};
var nextFormControl = 'input:not([type="hidden"]), textarea:not(.ke-edit-textarea), button[type="submit"], select';
// Init kindeditor
var setKindeditor = function(element, options)
{
var $editor = $(element);
var pasted = false;
options = $.extend({}, editorDefaults, $editor.data(), options);
var editorID = $editor.attr('id');
options = $.extend({}, editorDefaults, $editor.data(), options);
if(editorID === undefined)
{
editorID = 'kindeditor-' + $.zui.uuid();
@@ -70,7 +73,6 @@ $uid = uniqid('');
}
var editorTool = editorToolsMap[options.tools || editor.tools] || simpleTools;
var placeholder = $editor.attr('placeholder') || options.placeholder || '';
/* Remove fullscreen in modal. */
if(config.onlybody == 'yes')
@@ -86,164 +88,7 @@ $uid = uniqid('');
$.extend(options,
{
items: editorTool,
afterChange: function(){$editor.change().hide();},
afterCreate : function()
{
var frame = this.edit;
var doc = this.edit.doc;
var cmd = this.edit.cmd;
pasted = true;
if(!K.WEBKIT && !K.GECKO)
{
var pasted = false;
$(doc.body).bind('paste', function(ev)
{
pasted = true;
return true;
});
setTimeout(function()
{
$(doc.body).bind('keyup', function(ev)
{
if(pasted)
{
pasted = false;
return true;
}
if(ev.keyCode == 86 && ev.ctrlKey) alert('<?php echo $this->lang->error->pasteImg;?>');
})
}, 10);
}
if(pasted && placeholder.indexOf('<?php echo $this->lang->noticePasteImg?>') < 0)
{
if(placeholder) placeholder += '<br />';
placeholder += ' <?php echo $this->lang->noticePasteImg?>';
}
var pasteBegin = function()
{
$.enableForm(false, 0, 1);
$('body').one('click.ke' + kuid, function(){$.enableForm(true);});
cmd.inserthtml(imageLoadingEle);
keditor.readonly(true);
};
var pasteEnd = function(error)
{
if(error)
{
if(error === true) error = '<?php echo $this->lang->pasteImgFail;?>';
$.zui.messager.danger(error, {placement: 'center'});
}
$.enableForm(true, 0, 1);
$('body').off('.ke' + kuid);
$(doc.body).find('.image-loading-ele').remove();
keditor.readonly(false);
};
var pasteUrl = createLink('file', 'ajaxPasteImage', 'uid=' + kuid);
/* Paste in chrome.*/
/* Code reference from http://www.foliotek.com/devblog/copy-images-from-clipboard-in-javascript/. */
if(K.WEBKIT)
{
$(doc.body).bind('paste', function(ev)
{
var $this = $(this);
var original = ev.originalEvent;
var file = original.clipboardData.items[0].getAsFile();
if(file)
{
pasteBegin();
var reader = new FileReader();
reader.onload = function(evt)
{
var result = evt.target.result;
var arr = result.split(",");
var data = arr[1]; // raw base64
var contentType = arr[0].split(";")[0].split(":")[1];
html = '<img src="' + result + '" alt="" />';
$.post(pasteUrl, {editor: html}, function(data)
{
cmd.inserthtml(data);
pasteEnd();
}).error(function()
{
pasteEnd(true);
});
};
reader.readAsDataURL(file);
}
});
}
/* Paste in firefox and other firefox. */
else
{
K(doc.body).bind('paste', function(ev)
{
setTimeout(function()
{
var html = K(doc.body).html();
if(html.search(/<img src="data:.+;base64,/) > -1)
{
pasteBegin();
$.post(pasteUrl, {editor: html}, function(data)
{
if(data.indexOf('<img') === 0) data = '<p>' + data + '</p>';
frame.html(data);
pasteEnd();
}).error(function()
{
pasteEnd(true);
});
}
}, 80);
});
}
/* End */
/* Add for placeholder. */
$(this.edit.doc).find('body').after('<span class="kindeditor-ph" style="width:100%;color:#888; padding:5px 5px 5px 7px; background-color:transparent; position:absolute;z-index:10;top:2px;border:0;overflow:auto;resize:none; font-size:13px;"></span>');
var $placeholder = $(this.edit.doc).find('.kindeditor-ph');
$placeholder.html(placeholder);
$placeholder.css('pointerEvents', 'none');
$placeholder.click(function(){frame.doc.body.focus()});
if(frame.html() != '') $placeholder.hide();
},
afterFocus: function()
{
var frame = this.edit;
var $placeholder = $(frame.doc).find('.kindeditor-ph');
if($placeholder.size() == 0)
{
setTimeout(function(){$(frame.doc).find('.kindeditor-ph').hide();}, 50);
}
else
{
$placeholder.hide();
}
$editor.prev('.ke-container').addClass('focus');
$(document).trigger('mousedown'); // see http://pms.zentao.net/task-view-5115.html
},
afterBlur: function()
{
this.sync();
$editor.prev('.ke-container').removeClass('focus');
var frame = this.edit;
if(K(frame.doc.body).html() == '') $(frame.doc).find('.kindeditor-ph').show();
},
afterTab: function(id)
{
var $next = $editor.next(nextFormControl);
if(!$next.length) $next = $editor.parent().next().find(nextFormControl);
if(!$next.length) $next = $editor.parent().parent().next().find(nextFormControl);
$next = $next.first().focus();
var keditor = $next.data('keditor');
if(keditor) keditor.focus();
else if($next.hasClass('chosen')) $next.trigger('chosen:activate');
}
placeholder: $editor.attr('placeholder') || options.placeholder || ''
});
try
+52
View File
@@ -0,0 +1,52 @@
<style>
#mainMenu #query.btn-group li {position: relative;}
#mainMenu #query.btn-group li a{margin-right:20px;}
#mainMenu #query.btn-group li .btn-delete{
padding:0 7px;
position: absolute;
right: -10px;
top: -5px;
display: block;
width: 20px;
text-align: center;
}
</style>
<?php
if(isset($lang->custom->queryList))
{
echo '<div class="btn-group" id="query">';
$active = '';
$current = $menuItem->text;
$dropdownHtml = "<ul class='dropdown-menu'>";
foreach($lang->custom->queryList as $queryID => $queryTitle)
{
if($isBySearch and $queryID == $param)
{
$active = 'btn-active-text';
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
}
$dropdownHtml .= '<li' . ($param == $queryID ? " class='active'" : '') . '>';
$dropdownHtml .= html::a(sprintf($searchBrowseLink, $queryID), $queryTitle);
$dropdownHtml .= html::a("###", "<i class='icon icon-close'></i>", '', "class='btn-delete' data-id={$queryID} onclick='removeQueryFromMenu(this)'");
$dropdownHtml .= '</li>';
}
$dropdownHtml .= '</ul>';
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
echo $dropdownHtml;
echo '</div>';
}
?>
<script>
function removeQueryFromMenu(obj)
{
var $obj = $(obj);
var link = createLink('search', 'ajaxRemoveMenu', "queryID=" + $obj.data('id'));
$.get(link, function()
{
$obj.closest('li').remove();
if($('#mainMenu #query.btn-group').find('li').length == 0) $('#mainMenu #query.btn-group').remove();
})
return false;
}
</script>