Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -1599,8 +1599,8 @@ class baseRouter
|
||||
$moduleName = isset($_GET[$this->config->moduleVar]) ? strtolower($_GET[$this->config->moduleVar]) : $this->config->default->module;
|
||||
$methodName = isset($_GET[$this->config->methodVar]) ? strtolower($_GET[$this->config->methodVar]) : $this->config->default->method;
|
||||
$this->setModuleName($moduleName);
|
||||
$this->setControlFile();
|
||||
$this->setMethodName($methodName);
|
||||
$this->setControlFile();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,67 @@
|
||||
include dirname(__FILE__) . '/base/control.class.php';
|
||||
class control extends baseControl
|
||||
{
|
||||
/**
|
||||
* 加载指定模块的model文件。
|
||||
* Load the model file of one module.
|
||||
*
|
||||
* Extension: set appName as empty.
|
||||
*
|
||||
* @param string $moduleName 模块名,如果为空,使用当前模块。The module name, if empty, use current module's name.
|
||||
* @param string $appName The app name, if empty, use current app's name.
|
||||
* @access public
|
||||
* @return object|bool 如果没有model文件,返回false,否则返回model对象。If no model file, return false, else return the model object.
|
||||
*/
|
||||
public function loadModel($moduleName = '', $appName = '')
|
||||
{
|
||||
$appName = '';
|
||||
|
||||
if(empty($moduleName)) $moduleName = $this->moduleName;
|
||||
if(empty($appName)) $appName = $this->appName;
|
||||
|
||||
global $loadedModels;
|
||||
if(isset($loadedModels[$appName][$moduleName]))
|
||||
{
|
||||
$this->$moduleName = $loadedModels[$appName][$moduleName];
|
||||
$this->dao = $this->$moduleName->dao;
|
||||
return $this->$moduleName;
|
||||
}
|
||||
|
||||
$modelFile = $this->app->setModelFile($moduleName, $appName);
|
||||
|
||||
/**
|
||||
* 如果没有model文件,尝试加载config配置信息。
|
||||
* If no model file, try load config.
|
||||
*/
|
||||
if(!helper::import($modelFile))
|
||||
{
|
||||
$this->app->loadModuleConfig($moduleName, $appName);
|
||||
$this->app->loadLang($moduleName, $appName);
|
||||
$this->dao = new dao();
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果没有扩展文件,model类名是$moduleName + 'model',如果有扩展,还需要增加ext前缀。
|
||||
* If no extension file, model class name is $moduleName + 'model', else with 'ext' as the prefix.
|
||||
*/
|
||||
$modelClass = class_exists('ext' . $appName . $moduleName. 'model') ? 'ext' . $appName . $moduleName . 'model' : $appName . $moduleName . 'model';
|
||||
if(!class_exists($modelClass))
|
||||
{
|
||||
$modelClass = class_exists('ext' . $moduleName. 'model') ? 'ext' . $moduleName . 'model' : $moduleName . 'model';
|
||||
if(!class_exists($modelClass)) $this->app->triggerError(" The model $modelClass not found", __FILE__, __LINE__, $exit = true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化model对象,在control对象中可以通过$this->$moduleName来引用。同时将dao对象赋为control对象的成员变量,方便引用。
|
||||
* Init the model object thus you can try $this->$moduleName to access it. Also assign the $dao object as a member of control object.
|
||||
*/
|
||||
$loadedModels[$appName][$moduleName] = new $modelClass($appName);
|
||||
$this->$moduleName = $loadedModels[$appName][$moduleName];
|
||||
$this->dao = $this->$moduleName->dao;
|
||||
return $this->$moduleName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置视图文件:主视图文件,扩展视图文件, 站点扩展视图文件,以及钩子脚本。
|
||||
* Set view files: the main file, extension view file, site extension view file and hook files.
|
||||
|
||||
@@ -20,10 +20,51 @@
|
||||
include dirname(__FILE__) . '/base/model.class.php';
|
||||
class model extends baseModel
|
||||
{
|
||||
/**
|
||||
* 加载一个模块的model。加载完成后,使用$this->$moduleName来访问这个model对象。
|
||||
* 比如:loadModel('user')引入user模块的model实例对象,可以通过$this->user来访问它。
|
||||
*
|
||||
* Load the model of one module. After loaded, can use $this->$moduleName to visit the model object.
|
||||
*
|
||||
* Extension: set appName as empty.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @access public
|
||||
* @return object|bool the model object or false if model file not exists.
|
||||
*/
|
||||
public function loadModel($moduleName, $appName = '')
|
||||
{
|
||||
$appName = '';
|
||||
|
||||
if(empty($moduleName)) return false;
|
||||
if(empty($appName)) $appName = $this->appName;
|
||||
|
||||
global $loadedModels;
|
||||
if(isset($loadedModels[$appName][$moduleName]))
|
||||
{
|
||||
$this->$moduleName = $loadedModels[$appName][$moduleName];
|
||||
return $this->$moduleName;
|
||||
}
|
||||
|
||||
$modelFile = $this->app->setModelFile($moduleName, $appName);
|
||||
|
||||
if(!helper::import($modelFile)) return false;
|
||||
$modelClass = class_exists('ext' . $appName . $moduleName. 'model') ? 'ext' . $appName . $moduleName . 'model' : $appName . $moduleName . 'model';
|
||||
if(!class_exists($modelClass))
|
||||
{
|
||||
$modelClass = class_exists('ext' . $moduleName. 'model') ? 'ext' . $moduleName . 'model' : $moduleName . 'model';
|
||||
if(!class_exists($modelClass)) $this->app->triggerError(" The model $modelClass not found", __FILE__, __LINE__, $exit = true);
|
||||
}
|
||||
|
||||
$loadedModels[$appName][$moduleName] = new $modelClass($appName);
|
||||
$this->$moduleName = $loadedModels[$appName][$moduleName];
|
||||
return $this->$moduleName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
* Delete one record.
|
||||
*
|
||||
*
|
||||
* @param string $table the table name
|
||||
* @param string $id the id value of the record to be deleted
|
||||
* @access public
|
||||
|
||||
+146
-10
@@ -20,6 +20,24 @@
|
||||
include dirname(__FILE__) . '/base/router.class.php';
|
||||
class router extends baseRouter
|
||||
{
|
||||
/**
|
||||
* 工作流模块名。
|
||||
* The module name of a flow.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $workflowModule;
|
||||
|
||||
/**
|
||||
* 工作流方法名。
|
||||
* The method name of a flow.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $workflowMethod;
|
||||
|
||||
/**
|
||||
* Add custom langs when set client lang.
|
||||
*
|
||||
@@ -38,7 +56,7 @@ class router extends baseRouter
|
||||
/**
|
||||
* 加载语言文件,返回全局$lang对象。
|
||||
* Load lang and return it as the global lang object.
|
||||
*
|
||||
*
|
||||
* @param string $moduleName the module name
|
||||
* @param string $appName the app name
|
||||
* @access public
|
||||
@@ -49,6 +67,8 @@ class router extends baseRouter
|
||||
global $lang;
|
||||
if(!is_object($lang)) $lang = new language();
|
||||
|
||||
$appName = '';
|
||||
|
||||
/* Set productCommon and projectCommon for flow. */
|
||||
if($moduleName == 'common')
|
||||
{
|
||||
@@ -123,11 +143,11 @@ class router extends baseRouter
|
||||
|
||||
/**
|
||||
* Save error info.
|
||||
*
|
||||
* @param int $level
|
||||
* @param string $message
|
||||
* @param string $file
|
||||
* @param int $line
|
||||
*
|
||||
* @param int $level
|
||||
* @param string $message
|
||||
* @param string $file
|
||||
* @param int $line
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -141,22 +161,83 @@ class router extends baseRouter
|
||||
parent::saveError($level, $message, $file, $line);
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载模块的config文件,返回全局$config对象。
|
||||
* 如果该模块是common,加载$configRoot的配置文件,其他模块则加载其模块的配置文件。
|
||||
*
|
||||
* Load config and return it as the global config object.
|
||||
* If the module is common, search in $configRoot, else in $modulePath.
|
||||
*
|
||||
* Extension: set appName as empty.
|
||||
*
|
||||
* @param string $moduleName module name
|
||||
* @param string $appName app name
|
||||
* @param bool $exitIfNone exit or not
|
||||
* @access public
|
||||
* @return object|bool the config object or false.
|
||||
*/
|
||||
public function loadModuleConfig($moduleName, $appName = '')
|
||||
{
|
||||
global $config;
|
||||
|
||||
$appName = '';
|
||||
|
||||
if($config and (!isset($config->$moduleName) or !is_object($config->$moduleName))) $config->$moduleName = new stdclass();
|
||||
|
||||
/* 初始化数组。Init the variables. */
|
||||
$extConfigFiles = array();
|
||||
$commonExtConfigFiles = array();
|
||||
$siteExtConfigFiles = array();
|
||||
|
||||
/* 先获得模块的主配置文件。Get the main config file for current module first. */
|
||||
$mainConfigFile = $this->getModulePath($appName, $moduleName) . 'config.php';
|
||||
|
||||
/* 查找扩展配置文件。Get extension config files. */
|
||||
if($config->framework->extensionLevel > 0) $extConfigPath = $this->getModuleExtPath($appName, $moduleName, 'config');
|
||||
if($config->framework->extensionLevel >= 1 and !empty($extConfigPath['common'])) $commonExtConfigFiles = helper::ls($extConfigPath['common'], '.php');
|
||||
if($config->framework->extensionLevel == 2 and !empty($extConfigPath['site'])) $siteExtConfigFiles = helper::ls($extConfigPath['site'], '.php');
|
||||
$extConfigFiles = array_merge($commonExtConfigFiles, $siteExtConfigFiles);
|
||||
|
||||
/* 将主配置文件和扩展配置文件合并在一起。Put the main config file and extension config files together. */
|
||||
$configFiles = array_merge(array($mainConfigFile), $extConfigFiles);
|
||||
|
||||
/* 加载每一个配置文件。Load every config file. */
|
||||
static $loadedConfigs = array();
|
||||
foreach($configFiles as $configFile)
|
||||
{
|
||||
if(in_array($configFile, $loadedConfigs)) continue;
|
||||
if(file_exists($configFile)) include $configFile;
|
||||
$loadedConfigs[] = $configFile;
|
||||
}
|
||||
|
||||
/* 加载数据库中与本模块相关的配置项。Merge from the db configs. */
|
||||
if($moduleName != 'common')
|
||||
{
|
||||
if(isset($config->system->$moduleName)) $this->mergeConfig($config->system->$moduleName, $moduleName);
|
||||
if(isset($config->personal->$moduleName)) $this->mergeConfig($config->personal->$moduleName, $moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias load module config.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $appName
|
||||
*
|
||||
* Extension: set appName as empty.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $appName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function loadConfig($moduleName, $appName = '')
|
||||
{
|
||||
$appName = '';
|
||||
|
||||
return parent::loadModuleConfig($moduleName, $appName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Export config.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -173,6 +254,46 @@ class router extends baseRouter
|
||||
echo json_encode($view);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置要被调用的控制器文件。
|
||||
* Set the control file of the module to be called.
|
||||
*
|
||||
* Extension: If the module and method is defined in workflow, run workflow engine.
|
||||
*
|
||||
* @param bool $exitIfNone 没有找到该控制器文件的情况:如果该参数为true,则终止程序;如果为false,则打印错误日志
|
||||
* If control file not foundde, how to do. True, die the whole app. false, log error.
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function setControlFile($exitIfNone = true)
|
||||
{
|
||||
/* If the module and method is defined in workflow, run workflow engine. */
|
||||
if(defined('TABLE_WORKFLOW'))
|
||||
{
|
||||
$flow = $this->dbh->query("SELECT * FROM " . TABLE_WORKFLOW . " WHERE `module` = '$this->moduleName'")->fetch();
|
||||
if($flow)
|
||||
{
|
||||
$action = $this->dbh->query("SELECT * FROM " . TABLE_WORKFLOWACTION . " WHERE `module` = '$this->moduleName' AND `action` = '$this->methodName'")->fetch();
|
||||
if($action)
|
||||
{
|
||||
$this->workflowModule = $this->moduleName;
|
||||
$this->workflowMethod = $this->methodName;
|
||||
|
||||
$this->loadModuleConfig('workflowaction');
|
||||
|
||||
$moduleName = 'flow';
|
||||
$methodName = in_array($this->methodName, $this->config->workflowaction->default->actions) ? $this->methodName : 'operate';
|
||||
|
||||
$this->setModuleName($moduleName);
|
||||
$this->setMethodName($methodName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Call method of parent. */
|
||||
return parent::setControlFile($exitIfNone);
|
||||
}
|
||||
|
||||
/**
|
||||
* PATH_INFO方式解析,获取$URI和$viewType。
|
||||
* Parse PATH_INFO, get the $URI and $viewType.
|
||||
@@ -205,6 +326,8 @@ class router extends baseRouter
|
||||
* 合并请求的参数和默认参数,这样就可以省略已经有默认值的参数了。
|
||||
* Merge the params passed in and the default params. Thus the params which have default values needn't pass value, just like a function.
|
||||
*
|
||||
* Extension: If the workflowmodule and workflowmethod is not empty, reset the passed params.
|
||||
*
|
||||
* @param array $defaultParams the default params defined by the method.
|
||||
* @param array $passedParams the params passed in through url.
|
||||
* @access public
|
||||
@@ -212,6 +335,19 @@ class router extends baseRouter
|
||||
*/
|
||||
public function mergeParams($defaultParams, $passedParams)
|
||||
{
|
||||
/* If the workflowmodule and workflowmethod is not empty, reset the passed params. */
|
||||
if($this->workflowModule && $this->workflowMethod)
|
||||
{
|
||||
$passedParams = array_reverse($passedParams);
|
||||
if(!in_array($this->workflowMethod, $this->config->workflowaction->default->actions))
|
||||
{
|
||||
$passedParams['method'] = $this->workflowMethod;
|
||||
}
|
||||
$passedParams['module'] = $this->workflowModule;
|
||||
|
||||
$passedParams = array_reverse($passedParams);
|
||||
}
|
||||
|
||||
unset($passedParams['display']);
|
||||
return parent::mergeParams($defaultParams, $passedParams);
|
||||
}
|
||||
|
||||
+11
-11
@@ -53,15 +53,15 @@ $lang->admin->bind->success = "Account is linked!";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = 'Security Policy';
|
||||
$lang->admin->safe->set = 'Strong Password';
|
||||
$lang->admin->safe->password = 'Strong Password';
|
||||
$lang->admin->safe->weak = 'Weak Password';
|
||||
$lang->admin->safe->set = 'Password Settings';
|
||||
$lang->admin->safe->password = 'Password Strength';
|
||||
$lang->admin->safe->weak = 'Common Weak Password';
|
||||
$lang->admin->safe->reason = 'Type';
|
||||
$lang->admin->safe->checkWeak = 'Weak Password';
|
||||
$lang->admin->safe->changeWeak = 'Require to change weak password';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Require to change password after first login';
|
||||
$lang->admin->safe->checkWeak = 'Weak Password Scan';
|
||||
$lang->admin->safe->changeWeak = 'Force to change weak password';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Force to change password after first login';
|
||||
|
||||
$lang->admin->safe->modeList[0] = 'N/A';
|
||||
$lang->admin->safe->modeList[0] = 'I don\'t care.';
|
||||
$lang->admin->safe->modeList[1] = 'Medium';
|
||||
$lang->admin->safe->modeList[2] = 'Strong';
|
||||
|
||||
@@ -69,10 +69,10 @@ $lang->admin->safe->modeRuleList[1] = ' >= 6 upper and lower case, and numbers';
|
||||
$lang->admin->safe->modeRuleList[2] = ' >= 10 upper and lower case, numbers and special characters.';
|
||||
|
||||
$lang->admin->safe->reasonList['weak'] = 'Common Weak Password';
|
||||
$lang->admin->safe->reasonList['account'] = 'Same as your account';
|
||||
$lang->admin->safe->reasonList['mobile'] = 'Same as your cellphone number';
|
||||
$lang->admin->safe->reasonList['phone'] = 'Same as your phone number';
|
||||
$lang->admin->safe->reasonList['birthday'] = 'Same as your DOB';
|
||||
$lang->admin->safe->reasonList['account'] = 'Same as account';
|
||||
$lang->admin->safe->reasonList['mobile'] = 'Same as mobilephone number';
|
||||
$lang->admin->safe->reasonList['phone'] = 'Same as phone number';
|
||||
$lang->admin->safe->reasonList['birthday'] = 'Same as DOB';
|
||||
|
||||
$lang->admin->safe->modifyPasswordList[1] = 'Yes';
|
||||
$lang->admin->safe->modifyPasswordList[0] = 'No';
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<form method='post' id='dataform'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='rowhead w-120px'><?php echo $lang->sso->turnon; ?></th>
|
||||
<th class='rowhead w-150px'><?php echo $lang->sso->turnon; ?></th>
|
||||
<td><?php echo html::radio('turnon', $lang->sso->turnonList, $turnon);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -59,7 +59,7 @@ $lang->bug->plan = 'Plan';
|
||||
$lang->bug->closedBy = 'ClosedBy';
|
||||
$lang->bug->closedDate = 'ClosedDate';
|
||||
$lang->bug->duplicateBug = 'Duplicated Bug ID';
|
||||
$lang->bug->lastEditedBy = 'ModifiedBy';
|
||||
$lang->bug->lastEditedBy = 'EditedBy';
|
||||
$lang->bug->linkBug = 'Linked Bugs';
|
||||
$lang->bug->linkBugs = 'Link Bug';
|
||||
$lang->bug->unlinkBug = 'Unlink';
|
||||
@@ -137,7 +137,7 @@ $lang->bug->delayWarning = " <strong class='text-danger'> Delay %s days </strong
|
||||
/* 页面标签。*/
|
||||
$lang->bug->lblAssignedTo = 'AssignTo';
|
||||
$lang->bug->lblMailto = 'Mailto';
|
||||
$lang->bug->lblLastEdited = 'ModifiedBy';
|
||||
$lang->bug->lblLastEdited = 'EditedBy';
|
||||
$lang->bug->lblResolved = 'ResolvedBy';
|
||||
$lang->bug->allUsers = 'Load All Users';
|
||||
$lang->bug->allBuilds = 'All Builds';
|
||||
@@ -276,7 +276,7 @@ $lang->bug->report->charts['openedBugsPerUser'] = 'Reported Bugs Per User';
|
||||
$lang->bug->report->charts['resolvedBugsPerUser'] = 'Resolved Bugs Per User';
|
||||
$lang->bug->report->charts['closedBugsPerUser'] = 'Closed Bugs Per User';
|
||||
$lang->bug->report->charts['bugsPerSeverity'] = 'Bug Severity Report';
|
||||
$lang->bug->report->charts['bugsPerResolution'] = 'Bug Solution Report';
|
||||
$lang->bug->report->charts['bugsPerResolution'] = 'Bug Resolution Report';
|
||||
$lang->bug->report->charts['bugsPerStatus'] = 'Bug Status Report';
|
||||
$lang->bug->report->charts['bugsPerActivatedCount'] = 'Bug Activation Times Report';
|
||||
$lang->bug->report->charts['bugsPerPri'] = 'Bug Priority Report';
|
||||
|
||||
@@ -71,8 +71,8 @@ $lang->saveSuccess = 'Saved';
|
||||
$lang->fail = 'Fail';
|
||||
$lang->addFiles = 'Added Files';
|
||||
$lang->files = 'Files ';
|
||||
$lang->pasteText = 'Paste Multi-Items';
|
||||
$lang->uploadImages = 'Upload Multi-Images';
|
||||
$lang->pasteText = 'Multi-lines Paste';
|
||||
$lang->uploadImages = 'Multi-images Upload';
|
||||
$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.';
|
||||
@@ -347,7 +347,7 @@ $lang->report->menu->test = array('link' => 'Request|report|bugcreate', 'alia
|
||||
$lang->report->menu->staff = array('link' => 'Company|report|workload');
|
||||
|
||||
$lang->report->notice = new stdclass();
|
||||
$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.';
|
||||
$lang->report->notice->help = 'Note: The report is generated on the results of browsing the list. Click the tab, e.g. AssignedToMe, then click Report to generate a report based on AssignedToMe list.';
|
||||
|
||||
/* Company menu settings. */
|
||||
$lang->company = new stdclass();
|
||||
@@ -486,6 +486,7 @@ $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, 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.";
|
||||
|
||||
@@ -486,6 +486,7 @@ $lang->error->equal = "『%s』必须为『%s』。";
|
||||
$lang->error->int = array("『%s』应当是数字。", "『%s』应当介于『%s-%s』之间。");
|
||||
$lang->error->float = "『%s』应当是数字,可以是小数。";
|
||||
$lang->error->email = "『%s』应当为合法的EMAIL。";
|
||||
$lang->error->URL = "『%s』应当为合法的URL。";
|
||||
$lang->error->date = "『%s』应当为合法的日期。";
|
||||
$lang->error->datetime = "『%s』应当为合法的日期。";
|
||||
$lang->error->code = "『%s』应当为字母或数字的组合。";
|
||||
|
||||
@@ -126,14 +126,14 @@ $lang->custom->productProject->relation['0_0'] = 'Product - Project';
|
||||
$lang->custom->productProject->relation['0_1'] = 'Product - Sprint';
|
||||
$lang->custom->productProject->relation['1_1'] = 'Project - Sprint';
|
||||
|
||||
$lang->custom->productProject->notice = 'Select according to your team';
|
||||
$lang->custom->productProject->notice = 'Select the work mode that fits your team.';
|
||||
|
||||
$lang->custom->workingList['full'] = 'Application Lifecycle Management';
|
||||
$lang->custom->workingList['onlyTest'] = 'Test Management';
|
||||
$lang->custom->workingList['onlyStory'] = 'Story Management';
|
||||
$lang->custom->workingList['onlyTask'] = 'Task Management';
|
||||
|
||||
$lang->custom->menuTip = 'Click to show/hide the navigation bar. Drag to swtich display order.';
|
||||
$lang->custom->menuTip = 'Click to show/hide the menu. Drag to switch display order.';
|
||||
$lang->custom->saveFail = 'Failed to save!';
|
||||
|
||||
$lang->custom->scoreStatus[0] = 'Off';
|
||||
|
||||
@@ -16,7 +16,7 @@ $lang->doc->product = $lang->productCommon;
|
||||
$lang->doc->project = $lang->projectCommon;
|
||||
$lang->doc->lib = 'Library';
|
||||
$lang->doc->module = 'Category';
|
||||
$lang->doc->title = 'Documents';
|
||||
$lang->doc->title = 'Name';
|
||||
$lang->doc->digest = 'Summary';
|
||||
$lang->doc->comment = 'Comment';
|
||||
$lang->doc->type = 'Type';
|
||||
@@ -26,8 +26,8 @@ $lang->doc->url = 'URL';
|
||||
$lang->doc->files = 'Files';
|
||||
$lang->doc->addedBy = 'Author';
|
||||
$lang->doc->addedDate = 'Added';
|
||||
$lang->doc->editedBy = 'EditBy';
|
||||
$lang->doc->editedDate = 'EditedDate';
|
||||
$lang->doc->editedBy = 'UpdatedBy';
|
||||
$lang->doc->editedDate = 'UpdatedDate';
|
||||
$lang->doc->version = 'Version';
|
||||
$lang->doc->basicInfo = 'Basic Info';
|
||||
$lang->doc->deleted = 'Deleted';
|
||||
@@ -56,9 +56,9 @@ $lang->doc->fast = 'Qucik Entry';
|
||||
$lang->doc->allDoc = 'All Documents';
|
||||
$lang->doc->openedByMe = 'My';
|
||||
$lang->doc->orderByOpen = 'Recent Added';
|
||||
$lang->doc->orderByEdit = 'Recent Edited';
|
||||
$lang->doc->orderByEdit = 'Recent Updated';
|
||||
$lang->doc->orderByVisit = 'Last Visited';
|
||||
$lang->doc->todayEdited = 'Update Today';
|
||||
$lang->doc->todayEdited = 'Updated Today';
|
||||
$lang->doc->pastEdited = 'Total Updated';
|
||||
$lang->doc->myDoc = 'My Documents';
|
||||
$lang->doc->myCollection = 'My Favorites';
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<h2 title='<?php echo $group->name;?>'>
|
||||
<span id='groupName'><i class='icon-lock'> <?php echo $group->name;?></i></span>
|
||||
<span id='groupName'><i class='icon-lock'></i> <?php echo $group->name;?></span>
|
||||
<small> <?php echo $lang->arrow . $lang->group->manageView;?></small>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<?php else:?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<span id='groupName'><i class='icon-lock'> <?php echo $group->name;?></i><i class="icon icon-chevron-right"></i></span>
|
||||
<span id='groupName'><i class='icon-lock'></i> <?php echo $group->name;?> <i class="icon icon-chevron-right"></i></span>
|
||||
<?php $params = "type=byGroup¶m=$groupID&menu=%s&version=$version";?>
|
||||
<?php $active = empty($menu) ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a(inlink('managePriv', sprintf($params, '')), "<span class='text'>{$lang->group->all}</span>", '', "class='btn btn-link $active'")?>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.table-group-btns {width: 200px;}
|
||||
.group-menu {padding: 1px 5px!important;}
|
||||
.group-menu .btn {font-size: 15px; color: #3C4353;}
|
||||
.group-menu .btn {font-size: 14px; color: #3C4353;}
|
||||
.fixed-header-copy .group-menu .btn {background-color: transparent; color: #fff;}
|
||||
.fixed-header-copy .group-menu .btn .icon {background: transparent!important; color: #fff; opacity: .5;}
|
||||
.icon-caret-right.text-muted {color: #CBD0DB;}
|
||||
@@ -23,4 +23,4 @@
|
||||
.c-side-lg .group-header {display: flex; flex-direction: column; position: absolute; top: 0; right: 0; left: 0; bottom: 0; justify-content: space-between;}
|
||||
.is-firefox .group-header:before {content: ' '; position: absolute; top: 0; right: 0; left: 0; bottom: 0; background: #fff; z-index: 0;}
|
||||
.is-firefox .group-header > a,
|
||||
.is-firefox .group-header > .groupSummary {position: relative; z-index: 1;}
|
||||
.is-firefox .group-header > .groupSummary {position: relative; z-index: 1;}
|
||||
|
||||
@@ -180,12 +180,12 @@ $lang->project->groups['finishedBy'] = 'Group by FinishedBy';
|
||||
$lang->project->groups['closedBy'] = 'Group by ClosedBy';
|
||||
$lang->project->groups['type'] = 'Group by Type';
|
||||
|
||||
$lang->project->groupFilter['story']['all'] = $lang->project->all;
|
||||
$lang->project->groupFilter['story']['linked'] = 'LinkedtoStory Task';
|
||||
$lang->project->groupFilter['pri']['all'] = $lang->project->all;
|
||||
$lang->project->groupFilter['story']['all'] = 'All';
|
||||
$lang->project->groupFilter['story']['linked'] = 'Tasks of linked story';
|
||||
$lang->project->groupFilter['pri']['all'] = 'All';
|
||||
$lang->project->groupFilter['pri']['noset'] = 'Not Set';
|
||||
$lang->project->groupFilter['assignedTo']['undone'] = 'Unfinished';
|
||||
$lang->project->groupFilter['assignedTo']['all'] = $lang->project->all;
|
||||
$lang->project->groupFilter['assignedTo']['all'] = 'All';
|
||||
|
||||
$lang->project->byQuery = 'Search';
|
||||
|
||||
@@ -210,7 +210,7 @@ $lang->project->countSummary = '<div class="table-col"><div class="clearf
|
||||
$lang->project->timeSummary = '<div class="table-col"><div class="clearfix segments"><div class="segment"><div class="segment-title">Estimates</div><div class="segment-value">%s</div></div><div class="segment"><div class="segment-title">Cost</div><div class="segment-value text-red">%s</div></div><div class="segment"><div class="segment-title">Left</div><div class="segment-value">%s</div></div></div></div>';
|
||||
$lang->project->groupSummaryAB = "<div>Tasks <strong>%s :</strong><span class='text-muted'>Waiting</span> %s <span class='text-muted'>Doing</span> %s</div><div>Estimates <strong>%s :</strong><span class='text-muted'>Cost</span> %s <span class='text-muted'>Left</span> %s</div>";
|
||||
$lang->project->wbs = "Create Task";
|
||||
$lang->project->batchWBS = "Batch Create";
|
||||
$lang->project->batchWBS = "Batch Create Tasks";
|
||||
$lang->project->howToUpdateBurn = "<a href='https://api.zentao.pm/goto.php?item=burndown' target='_blank' title='How to update the Burndown Chart?' class='btn btn-link'>Help <i class='icon icon-help'></i></a>";
|
||||
$lang->project->whyNoStories = "No story can be linked. Please check whether there is any story in {$lang->projectCommon} which is linked to {$lang->productCommon} and make sure it has been reviewed.";
|
||||
$lang->project->productStories = "Stories linked to {$lang->projectCommon} are the subeset of stories linked to {$lang->productCommon}. Stories can only be linked after they pass the review. <a href='%s'> Link Stories</a> now.";
|
||||
@@ -247,7 +247,7 @@ $lang->project->goback = "Go Back";
|
||||
$lang->project->noweekend = 'Exclude Weekend';
|
||||
$lang->project->withweekend = 'Include Weekend';
|
||||
$lang->project->interval = 'Intervals';
|
||||
$lang->project->fixFirstWithLeft = 'Update hours left';
|
||||
$lang->project->fixFirstWithLeft = 'Update hours left too';
|
||||
|
||||
$lang->project->action = new stdclass();
|
||||
$lang->project->action->opened = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
@@ -271,7 +271,7 @@ $lang->project->charts->burn->graph->actuality = 'Actual';
|
||||
|
||||
$lang->project->placeholder = new stdclass();
|
||||
$lang->project->placeholder->code = "Abbreviation of {$lang->projectCommon} name";
|
||||
$lang->project->placeholder->totalLeft = "Estimates at the beginning of the {$lang->projectCommon}.";
|
||||
$lang->project->placeholder->totalLeft = "Hours estimated on the first day of the {$lang->projectCommon}.";
|
||||
|
||||
$lang->project->selectGroup = new stdclass();
|
||||
$lang->project->selectGroup->done = '(Done)';
|
||||
@@ -319,8 +319,8 @@ $lang->project->featureBar['task']['status'] = $lang->project->statusSelec
|
||||
$lang->project->treeLevel = array();
|
||||
$lang->project->treeLevel['all'] = 'Expand All';
|
||||
$lang->project->treeLevel['root'] = 'Collapse All';
|
||||
$lang->project->treeLevel['task'] = 'Show All';
|
||||
$lang->project->treeLevel['story'] = 'Show Story';
|
||||
$lang->project->treeLevel['task'] = 'Stories&Tasks';
|
||||
$lang->project->treeLevel['story'] = 'Only Stories';
|
||||
|
||||
global $config;
|
||||
if($config->global->flow == 'onlyTask')
|
||||
|
||||
@@ -180,12 +180,12 @@ $lang->project->groups['finishedBy'] = '完成者分组';
|
||||
$lang->project->groups['closedBy'] = '关闭者分组';
|
||||
$lang->project->groups['type'] = '类型分组';
|
||||
|
||||
$lang->project->groupFilter['story']['all'] = $lang->project->all;
|
||||
$lang->project->groupFilter['story']['all'] = '所有';
|
||||
$lang->project->groupFilter['story']['linked'] = '已关联需求的任务';
|
||||
$lang->project->groupFilter['pri']['all'] = $lang->project->all;
|
||||
$lang->project->groupFilter['pri']['all'] = '所有';
|
||||
$lang->project->groupFilter['pri']['noset'] = '未设置';
|
||||
$lang->project->groupFilter['assignedTo']['undone'] = '未完成';
|
||||
$lang->project->groupFilter['assignedTo']['all'] = $lang->project->all;
|
||||
$lang->project->groupFilter['assignedTo']['all'] = '所有';
|
||||
|
||||
$lang->project->byQuery = '搜索';
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
<th class="w-60px"><?php echo $lang->task->estimateAB;?></th>
|
||||
<th class="w-50px"><?php echo $lang->task->consumedAB;?></th>
|
||||
<th class="w-50px"><?php echo $lang->task->leftAB;?></th>
|
||||
<th class="w-50px"><?php echo $lang->task->progress;?></th>
|
||||
<th class="w-50px"><?php echo $lang->task->progressAB;?></th>
|
||||
<th class="c-type"><?php echo $lang->typeAB;?></th>
|
||||
<th class="c-date"><?php echo $lang->task->deadlineAB;?></th>
|
||||
<th class="c-actions-3"><?php echo $lang->actions;?></th>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<input type='hidden' name='accounts[]' value='<?php echo $member->account;?>' />
|
||||
</td>
|
||||
<td><?php echo html::radio("limited[$i]", $lang->team->limitedList, $member->limited);?></td>
|
||||
<td class='c-actions'>
|
||||
<td class='c-actions text-center'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
@@ -73,7 +73,7 @@
|
||||
<input type='text' name='hours[]' id='hours<?php echo $i;?>' class='form-control' value='<?php echo $member2Import->hours;?>' />
|
||||
</td>
|
||||
<td><?php echo html::radio("limited[$i]", $lang->team->limitedList, 'no');?></td>
|
||||
<td class='c-actions'>
|
||||
<td class='c-actions text-center'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
@@ -91,7 +91,7 @@
|
||||
<input type='text' name='hours[]' id='hours<?php echo $i;?>' class='form-control' value='<?php echo $config->project->defaultWorkhours?>' />
|
||||
</td>
|
||||
<td><?php echo html::radio("limited[$i]", $lang->team->limitedList, 'no');?></td>
|
||||
<td class='c-actions'>
|
||||
<td class='c-actions text-center'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
@@ -109,7 +109,7 @@
|
||||
<input type='text' name='hours[]' id='hours<?php echo ($i);?>' class='form-control' value='<?php echo $config->project->defaultWorkhours?>' />
|
||||
</td>
|
||||
<td><?php echo html::radio("limited[$i]", $lang->team->limitedList, 'no');?></td>
|
||||
<td class='c-actions'>
|
||||
<td class='c-actions text-center'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
@@ -133,7 +133,7 @@
|
||||
<input type='text' name='hours[]' id='hours<?php echo ($i);?>' class='form-control' value='<?php echo $config->project->defaultWorkhours?>' />
|
||||
</td>
|
||||
<td><?php echo html::radio("limited[$i]", $lang->team->limitedList, $member->realname ? $member->limited : 'no');?></td>
|
||||
<td class='c-actions'>
|
||||
<td class='c-actions text-center'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
|
||||
@@ -45,10 +45,10 @@ $lang->release->unlinkStory = 'Unlink Story';
|
||||
$lang->release->unlinkBug = 'Unlink Bug';
|
||||
$lang->release->stories = 'Finished Story';
|
||||
$lang->release->bugs = 'Resolved Bug';
|
||||
$lang->release->leftBugs = 'Unresolved Bug';
|
||||
$lang->release->generatedBugs = 'Unresolved Bug';
|
||||
$lang->release->finishStories = 'Finished %s Story';
|
||||
$lang->release->resolvedBugs = 'Resolved %s Bug';
|
||||
$lang->release->leftBugs = 'Active Bug';
|
||||
$lang->release->generatedBugs = 'Active Bug';
|
||||
$lang->release->finishStories = 'Finished %s Stories';
|
||||
$lang->release->resolvedBugs = 'Resolved %s Bugs';
|
||||
$lang->release->createdBugs = 'Unresolved %s Bug';
|
||||
$lang->release->export = 'Export as HTML';
|
||||
$lang->release->yesterday = 'Released Yesterday';
|
||||
@@ -59,7 +59,7 @@ $lang->release->scmPath = 'SCM Path : ';
|
||||
$lang->release->exportTypeList['all'] = 'All';
|
||||
$lang->release->exportTypeList['story'] = 'Story';
|
||||
$lang->release->exportTypeList['bug'] = 'Bug';
|
||||
$lang->release->exportTypeList['leftbug'] = 'Unresolved Bug';
|
||||
$lang->release->exportTypeList['leftbug'] = 'Active Bug';
|
||||
|
||||
$lang->release->statusList[''] = '';
|
||||
$lang->release->statusList['normal'] = 'Normal';
|
||||
|
||||
@@ -69,7 +69,7 @@ $lang->report->to = 'to';
|
||||
$lang->report->taskTotal = "Total Tasks";
|
||||
$lang->report->manhourTotal = "Total Hours";
|
||||
$lang->report->validRate = "Valid Rate";
|
||||
$lang->report->validRateTips = "Solution is Resolved/Postponed or status is Resolved/Closed.";
|
||||
$lang->report->validRateTips = "Resolution is Resolved/Postponed or status is Resolved/Closed.";
|
||||
$lang->report->unplanned = 'Unplanned';
|
||||
$lang->report->workday = 'Hours/Day';
|
||||
$lang->report->diffDays = 'days';
|
||||
|
||||
@@ -23,7 +23,7 @@ $lang->search->setQueryTitle = 'Enter a title. Search then the query is saved.';
|
||||
$lang->search->select = 'Story/Task Filter';
|
||||
$lang->search->me = 'Me';
|
||||
$lang->search->noQuery = 'No query is saved yet!';
|
||||
$lang->search->onMenuBar = 'Show in the Menu';
|
||||
$lang->search->onMenuBar = 'Show in Menu';
|
||||
$lang->search->custom = 'Custom';
|
||||
|
||||
$lang->search->account = 'Account';
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
$lang->sso = new stdclass();
|
||||
$lang->sso->settings = 'Settings';
|
||||
$lang->sso->turnon = 'Zdoo';
|
||||
$lang->sso->redirect = 'Back to Zdoo';
|
||||
$lang->sso->redirect = 'Auto Jump to Zdoo';
|
||||
$lang->sso->code = 'Code';
|
||||
$lang->sso->key = 'Secret Key';
|
||||
$lang->sso->addr = 'Address';
|
||||
|
||||
@@ -41,7 +41,7 @@ $lang->story->linkStory = 'Link Story';
|
||||
$lang->story->unlinkStory = 'UnLinked';
|
||||
$lang->story->export = "Export";
|
||||
$lang->story->zeroCase = "Stories without cases";
|
||||
$lang->story->zeroTask = "Stories without tasks";
|
||||
$lang->story->zeroTask = "Only list stories without tasks";
|
||||
$lang->story->reportChart = "Report";
|
||||
$lang->story->copyTitle = "Copy Title";
|
||||
$lang->story->batchChangePlan = "Batch Change Plans";
|
||||
@@ -77,8 +77,8 @@ $lang->story->openedBy = 'CreatedBy';
|
||||
$lang->story->openedDate = 'CreatedDate';
|
||||
$lang->story->assignedTo = 'AssignTo';
|
||||
$lang->story->assignedDate = 'AssignedDate';
|
||||
$lang->story->lastEditedBy = 'ModifiedBy';
|
||||
$lang->story->lastEditedDate = 'ModifiedDate';
|
||||
$lang->story->lastEditedBy = 'EditedBy';
|
||||
$lang->story->lastEditedDate = 'EditedDate';
|
||||
$lang->story->closedBy = 'ClosedBy';
|
||||
$lang->story->closedDate = 'ClosedDate';
|
||||
$lang->story->closedReason = 'Reason';
|
||||
@@ -179,7 +179,7 @@ $lang->story->legendBugs = 'Linked Bugs';
|
||||
$lang->story->legendFromBug = 'From Bug';
|
||||
$lang->story->legendCases = 'Linked Cases';
|
||||
$lang->story->legendLinkStories = 'Linked Stories';
|
||||
$lang->story->legendChildStories = 'Children Stories';
|
||||
$lang->story->legendChildStories = 'Child Stories';
|
||||
$lang->story->legendSpec = 'Description';
|
||||
$lang->story->legendVerify = 'Acceptance';
|
||||
$lang->story->legendMisc = 'Misc.';
|
||||
|
||||
@@ -62,7 +62,7 @@ $lang->task->estimate = 'Estimates';
|
||||
$lang->task->estimateAB = 'Est.';
|
||||
$lang->task->left = 'Hours Left';
|
||||
$lang->task->leftAB = 'Left';
|
||||
$lang->task->consumed = 'Hours Cost';
|
||||
$lang->task->consumed = 'Total Cost';
|
||||
$lang->task->currentConsumed = 'Current Cost';
|
||||
$lang->task->myConsumed = 'My Cost';
|
||||
$lang->task->consumedAB = 'Cost';
|
||||
@@ -96,9 +96,9 @@ $lang->task->canceledDate = 'CancelledDate';
|
||||
$lang->task->closedBy = 'ClosedBy';
|
||||
$lang->task->closedDate = 'ClosedDate';
|
||||
$lang->task->closedReason = 'CloseReason';
|
||||
$lang->task->lastEditedBy = 'ModifiedBy';
|
||||
$lang->task->lastEditedDate = 'ModifiedDate';
|
||||
$lang->task->lastEdited = 'Last Edited';
|
||||
$lang->task->lastEditedBy = 'EditedBy';
|
||||
$lang->task->lastEditedDate = 'EditedDate';
|
||||
$lang->task->lastEdited = 'EditedBy';
|
||||
$lang->task->recordEstimate = 'Effort';
|
||||
$lang->task->editEstimate = 'Edit Estimates';
|
||||
$lang->task->deleteEstimate = 'Delete Estimates';
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
<?php $team = array_keys($task->team);?>
|
||||
<?php js::set('confirmRecord', (!empty($team) && $task->assignedTo != end($team)) ? $lang->task->confirmTransfer : $lang->task->confirmRecord);?>
|
||||
<?php js::set('noticeSaveRecord', $lang->task->noticeSaveRecord);?>
|
||||
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-90px' : 'w-70px';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
@@ -41,7 +42,6 @@
|
||||
<tr class='text-center'>
|
||||
<th class="w-id"><?php echo $lang->idAB;?></th>
|
||||
<th class="w-120px"><?php echo $lang->task->date;?></th>
|
||||
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-90px' : 'w-70px';?>
|
||||
<th class="<?php echo $colWidth;?>"><?php echo $lang->task->consumed;?></th>
|
||||
<th class="<?php echo $colWidth;?>"><?php echo $lang->task->left;?></th>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
|
||||
@@ -130,7 +130,7 @@ $lang->testcase->bySearch = 'Search';
|
||||
$lang->testcase->unexecuted = 'Pending';
|
||||
|
||||
$lang->testcase->lblStory = 'Linked Story';
|
||||
$lang->testcase->lblLastEdited = 'Last Edited';
|
||||
$lang->testcase->lblLastEdited = 'EditedBy';
|
||||
$lang->testcase->lblTypeValue = 'Type Value';
|
||||
$lang->testcase->lblStageValue = 'Phase Value';
|
||||
$lang->testcase->lblStatusValue = 'Status Value';
|
||||
|
||||
@@ -66,8 +66,8 @@ $lang->testcase->fromModule = '来源模块';
|
||||
$lang->testcase->fromCase = '来源用例';
|
||||
$lang->testcase->sync = '同步';
|
||||
$lang->testcase->ignore = '忽略';
|
||||
$lang->testcase->fromTesttask = '测试单用例';
|
||||
$lang->testcase->fromCaselib = '用例库用例';
|
||||
$lang->testcase->fromTesttask = '来自测试单用例';
|
||||
$lang->testcase->fromCaselib = '来自用例库用例';
|
||||
$lang->case = $lang->testcase; // 用于DAO检查时使用。因为case是系统关键字,所以无法定义该模块为case,只能使用testcase,但表还是使用的case。
|
||||
|
||||
$lang->testcase->stepID = '编号';
|
||||
|
||||
@@ -1397,11 +1397,11 @@ class testcaseModel extends model
|
||||
case 'status':
|
||||
if($case->needconfirm)
|
||||
{
|
||||
print("<span class='status-story status-changed' title={$this->lang->testcase->fromTesttask}>{$this->lang->story->changed}</span>");
|
||||
print("<span class='status-story status-changed' title='{$this->lang->testcase->fromTesttask}'>{$this->lang->story->changed}</span>");
|
||||
}
|
||||
elseif(isset($case->fromCaseVersion) and $case->fromCaseVersion > $case->version and !$case->needconfirm)
|
||||
{
|
||||
print("<span class='status-story status-changed' title={$this->lang->testcase->fromCaselib}>{$this->lang->testcase->changed}</span>");
|
||||
print("<span class='status-story status-changed' title='{$this->lang->testcase->fromCaselib}'>{$this->lang->testcase->changed}</span>");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -36,7 +36,7 @@ $lang->testreport->all = 'All Reports';
|
||||
$lang->testreport->deleted = 'Deleted';
|
||||
$lang->testreport->selectTask = 'Create report by request';
|
||||
|
||||
$lang->testreport->legendBasic = 'Basic Info.';
|
||||
$lang->testreport->legendBasic = 'Basic Info';
|
||||
$lang->testreport->legendStoryAndBug = 'Test Scope';
|
||||
$lang->testreport->legendBuild = 'Test Rounds';
|
||||
$lang->testreport->legendCase = 'Linked Cases';
|
||||
@@ -62,9 +62,9 @@ $lang->testreport->confirmDelete = 'Do you want to delete this report?';
|
||||
$lang->testreport->moreNotice = 'More features can be extended with reference to the ZenTao extension manual, or you can contact us at renee@easysoft.ltd for customization.';
|
||||
$lang->testreport->exportNotice = "Exported By <a href='https://www.zentao.net' target='_blank' style='color:grey'>ZenTao</a>";
|
||||
$lang->testreport->noReport = "No report has been generated. Please check it later.";
|
||||
$lang->testreport->foundBugTip = "Bugs generated in this build and generated in the test period.";
|
||||
$lang->testreport->foundBugTip = "Bugs found in this build period and the affected build is in this test period.";
|
||||
$lang->testreport->legacyBugTip = "Active bugs, or resolved bugs that are not in the test period.";
|
||||
$lang->testreport->fromCaseBugTip = "Bugs generated due to the failed case run in the test period.";
|
||||
$lang->testreport->fromCaseBugTip = "Bugs found from the running of cases in the test period.";
|
||||
$lang->testreport->errorTrunk = "You cannot create a Testing report for the trunk. Please modify the linked build!";
|
||||
$lang->testreport->noTestTask = "No test requests for this {$lang->productCommon}, so no reports can be generated. Please go to {$lang->productCommon} which has test requests and then generate the report.";
|
||||
$lang->testreport->noObjectID = "No test request or {$lang->projectCommon} is selected, so no report can be generated.";
|
||||
@@ -73,6 +73,6 @@ $lang->testreport->moreProduct = "Testing reports can only be generated for t
|
||||
$lang->testreport->bugSummary = <<<EOD
|
||||
Total <strong>%s</strong> Bugs reported <a data-toggle='tooltip' class='text-warning' title='{$lang->testreport->foundBugTip}'><i class='icon-help'></i></a>,
|
||||
<strong>%s</strong> Bugs remained unresolved <a data-toggle='tooltip' class='text-warning' title='{$lang->testreport->legacyBugTip}'><i class='icon-help'></i></a>,
|
||||
<strong>%s</strong> Bugs generated due to the failure of case run <a data-toggle='tooltip' class='text-warning' title='{$lang->testreport->fromCaseBugTip}'><i class='icon-help'></i></a>.
|
||||
Bug Effective Rate <a data-toggle='tooltip' class='text-warning' title='Resolution is resolved or delayed / status is resolved or closed'><i class='icon-help'></i></a>: <strong>%s</strong>,Bugs reported from case rate<a data-toggle='tooltip' class='text-warning' title='Bugs created from cases / bugs'><i class='icon-help'></i></a>: <strong>%s</strong>
|
||||
<strong>%s</strong> Bugs found from the running of cases<a data-toggle='tooltip' class='text-warning' title='{$lang->testreport->fromCaseBugTip}'><i class='icon-help'></i></a>.
|
||||
Bug Effective Rate <a data-toggle='tooltip' class='text-warning' title='Resolution is resolved or delayed / status is resolved or closed'><i class='icon-help'></i></a>: <strong>%s</strong>,Bugs-reported-from-cases rate<a data-toggle='tooltip' class='text-warning' title='Bugs created from cases / bugs'><i class='icon-help'></i></a>: <strong>%s</strong>
|
||||
EOD;
|
||||
|
||||
@@ -32,7 +32,7 @@ $lang->tree->manageBugChild = 'Manage Child Bugs';
|
||||
$lang->tree->manageCaseChild = 'Manage Child Cases';
|
||||
$lang->tree->manageCaselibChild = 'Manage Child Libraries';
|
||||
$lang->tree->manageTaskChild = "Manage Child {$lang->projectCommon} Modules";
|
||||
$lang->tree->syncFromProduct = 'Copy Other Product Modules';
|
||||
$lang->tree->syncFromProduct = 'Copy from Other Products';
|
||||
$lang->tree->dragAndSort = "Drag to order";
|
||||
$lang->tree->sort = "Order";
|
||||
$lang->tree->addChild = "Add Child Module";
|
||||
|
||||
@@ -27,6 +27,6 @@ $lang->chat->info = "ZenTao client is powered by <a href='https://xua
|
||||
$lang->chat->xxClientConfirm = 'Click Download ZenTao Client at the right bottom to download it!';
|
||||
$lang->chat->xxServerConfirm = 'Go to Admin-ZT Client to download the ZenTao Client Server!';
|
||||
|
||||
$lang->chat->xxdServerTip = 'XXD server address contains protocol, host and port,such as http://192.168.1.35 or http://pms.zentao.com. It should not be 127.0.0.1.';
|
||||
$lang->chat->xxdServerTip = 'XXD server address contains protocol, host and port,such as http://192.168.1.35 or http://domain. It should not be 127.0.0.1.';
|
||||
$lang->chat->xxdServerEmpty = 'XXD server address is empty.';
|
||||
$lang->chat->xxdServerError = 'XXD server address should not be 127.0.0.1.';
|
||||
|
||||
@@ -20,8 +20,8 @@ $position[] = $this->lang->client->browse;
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='main-header'>
|
||||
<div class='pull-right'>
|
||||
<?php common::printLink('client', 'create', '', $lang->client->create, '', "class='btn' data-toggle='modal'");?>
|
||||
<?php common::printLink('client', 'checkUpgrade', '', $lang->client->checkUpgrade, '', "class='btn btn-primary'");?>
|
||||
<?php common::printLink('client', 'create', '', $lang->client->create, '', "class='btn btn-primary' data-toggle='modal'");?>
|
||||
</div>
|
||||
<div class='heading'>
|
||||
<h4><?php echo $lang->client->browseVersion;?></h4>
|
||||
|
||||
Reference in New Issue
Block a user