This commit is contained in:
Catouse
2019-08-12 16:07:53 +08:00
348 changed files with 1771 additions and 827 deletions
+92 -19
View File
@@ -445,44 +445,114 @@ class baseControl
*/
public function getCSS($moduleName, $methodName)
{
$moduleName = strtolower(trim($moduleName));
$methodName = strtolower(trim($methodName));
$moduleName = strtolower(trim($moduleName));
$methodName = strtolower(trim($methodName));
$modulePath = $this->app->getModulePath($this->appName, $moduleName);
$cssExtPath = $this->app->getModuleExtPath($this->appName, $moduleName, 'css') ;
$modulePath = $this->app->getModulePath($this->appName, $moduleName);
$cssExtPath = $this->app->getModuleExtPath($this->appName, $moduleName, 'css') ;
$css = '';
$mainCssFile = $modulePath . 'css' . DS . $this->devicePrefix . 'common.css';
$methodCssFile = $modulePath . 'css' . DS . $this->devicePrefix . $methodName . '.css';
if(file_exists($mainCssFile)) $css .= file_get_contents($mainCssFile);
if(is_file($methodCssFile)) $css .= file_get_contents($methodCssFile);
$clientLang = $this->app->getClientLang();
$notCNLang = strpos('|zh-cn|zh-tw|', "|{$clientLang}|") === false;
$css = '';
$devicePrefix = $this->devicePrefix;
$mainCssPath = $modulePath . 'css' . DS;
/* Common css file. like module/story/css/common.css. */
$mainCssFile = $mainCssPath . $devicePrefix . 'common.css';
if(is_file($mainCssFile)) $css .= file_get_contents($mainCssFile);
/* Common css file with lang. like module/story/css/common.en.css. */
$mainCssLangFile = $mainCssPath . $devicePrefix . "common.{$clientLang}.css";
if(!file_exists($mainCssLangFile) and $notCNLang) $mainCssLangFile = $mainCssPath . $devicePrefix . "common.en.css";
if(is_file($mainCssLangFile)) $css .= file_get_contents($mainCssLangFile);
/* Method css file. like module/story/css/create.css. */
$methodCssFile = $mainCssPath . $devicePrefix . $methodName . '.css';
if(is_file($methodCssFile)) $css .= file_get_contents($methodCssFile);
/* Method css file with lang. like module/story/css/create.en.css. */
$methodCssLangFile = $mainCssPath . $devicePrefix . "{$methodName}.{$clientLang}.css";
if(!file_exists($methodCssLangFile) and $notCNLang) $methodCssLangFile = $mainCssPath . $devicePrefix . "{$methodName}.en.css";
if(is_file($methodCssLangFile)) $css .= file_get_contents($methodCssLangFile);
if(!empty($cssExtPath))
{
$cssMethodExt = $cssExtPath['common'] . $methodName . DS;
$cssCommonExt = $cssExtPath['common'] . 'common' . DS;
$cssExtFiles = glob($cssCommonExt . $this->devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) foreach($cssExtFiles as $cssFile) $css .= file_get_contents($cssFile);
$cssExtFiles = glob($cssCommonExt . $devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) $css .= $this->getExtCSS($cssExtFiles);
$cssExtFiles = glob($cssMethodExt . $this->devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) foreach($cssExtFiles as $cssFile) $css .= file_get_contents($cssFile);
$cssExtFiles = glob($cssMethodExt . $devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) $css .= $this->getExtCSS($cssExtFiles);
if(!empty($cssExtPath['site']))
{
$cssMethodExt = $cssExtPath['site'] . $methodName . DS;
$cssCommonExt = $cssExtPath['site'] . 'common' . DS;
$cssExtFiles = glob($cssCommonExt . $this->devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) foreach($cssExtFiles as $cssFile) $css .= file_get_contents($cssFile);
$cssExtFiles = glob($cssCommonExt . $devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) $css .= $this->getExtCSS($cssExtFiles);
$cssExtFiles = glob($cssMethodExt . $this->devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) foreach($cssExtFiles as $cssFile) $css .= file_get_contents($cssFile);
$cssExtFiles = glob($cssMethodExt . $devicePrefix . '*.css');
if(!empty($cssExtFiles) and is_array($cssExtFiles)) $css .= $this->getExtCSS($cssExtFiles);
}
}
return $css;
}
/**
* Get extension css and extension css with lang.
*
* @param array $files
* @access public
* @return string
*/
public function getExtCSS($files)
{
$clientLang = $this->app->getClientLang();
$notCNLang = strpos('|zh-cn|zh-tw|', "|{$clientLang}|") === false;
$filePairs = array();
foreach($files as $cssFile)
{
$fileName = basename($cssFile);
$filePairs[$fileName] = $cssFile;
}
$css = '';
$usedCodes = array();
foreach($filePairs as $fileName => $cssFile)
{
if(preg_match('/^\w+\.css$/', $fileName))
{
/* Method extension css file. like module/story/ext/css/create/effort.css. */
$css .= file_get_contents($cssFile);
list($code) = explode('.', $fileName);
}
else
{
list($code) = explode('.', $fileName);
if(isset($usedCodes[$code])) continue;
}
/* Method extension css file. like module/story/ext/css/create/effort.zh-cn.css. */
if(isset($filePairs["{$code}.{$clientLang}.css"]))
{
$css .= file_get_contents($filePairs["{$code}.{$clientLang}.css"]);
}
elseif($notCNLang and isset($filePairs["{$code}.en.css"]))
{
$css .= file_get_contents($filePairs["{$code}.en.css"]);
}
$usedCodes[$code] = $code;
}
return $css;
}
/**
* 获取适用于当前方法的js:该模块公用的js + 当前方法的js + 扩展的js。
* Get js codes applied to current method: module common js + method js + extension js.
@@ -739,8 +809,11 @@ class baseControl
* Load the control file.
*/
if(!is_file($file2Included)) $this->app->triggerError("The control file $file2Included not found", __FILE__, __LINE__, $exit = true);
chdir(dirname($file2Included));
if(!class_exists($moduleName)) helper::import($file2Included);
if(!class_exists($moduleName))
{
chdir(dirname($file2Included));
helper::import($file2Included);
}
/**
* 设置调用的类名。
+10 -55
View File
@@ -21,10 +21,10 @@ include dirname(__FILE__) . '/base/control.class.php';
class control extends baseControl
{
/**
* 加载指定模块的model文件。
* Load the model file of one module.
*
* Extension: set appName as empty.
* 企业版部分功能是从然之合并过来的。然之代码中调用loadModel方法时传递了一个非空的appName,在禅道中会导致错误。
* 调用父类的loadModel方法来避免这个错误。
* Some codes merged from ranzhi called the function loadModel with a non-empty appName which causes an error in zentao.
* Call the parent function with empty appName to avoid this error.
*
* @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.
@@ -33,52 +33,7 @@ class control extends baseControl
*/
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;
return parent::loadModel($moduleName);
}
/**
@@ -198,7 +153,7 @@ class control extends baseControl
/**
* Execute hooks of a method.
*
* @param int $objectID
* @param int $objectID The id of an object. The object maybe a bug | build | feedback | product | productplan | project | release | story | task | testcase | testsuite | testtask.
* @access public
* @return void
*/
@@ -214,7 +169,7 @@ class control extends baseControl
/**
* Build operate menu of a method.
*
* @param object $object product|project|productplan|release|build|story|task|bug|testtask|testcase|testsuite
* @param object $object product|project|productplan|release|build|story|task|bug|testtask|testcase|testsuite
* @param string $displayOn view|browse
* @access public
* @return void
@@ -230,9 +185,9 @@ class control extends baseControl
/**
* Print extend fields.
*
* @param object $object
* @param string $type
* @param string $extras
* @param object $object bug | build | feedback | product | productplan | project | release | story | task | testcase | testsuite | testtask
* @param string $type table | div
* @param string $extras columns=1,mode=value,position=right|right|all
* @access public
* @return void
*/
+5 -31
View File
@@ -21,12 +21,10 @@ 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.
* 企业版部分功能是从然之合并过来的。然之代码中调用loadModel方法时传递了一个非空的appName,在禅道中会导致错误。
* 调用父类的loadModel方法来避免这个错误。
* Some codes merged from ranzhi called the function loadModel with a non-empty appName which causes an error in zentao.
* Call the parent function with empty appName to avoid this error.
*
* @param string $moduleName
* @access public
@@ -34,31 +32,7 @@ class model extends baseModel
*/
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;
return parent::loadModel($moduleName);
}
/**
+35 -20
View File
@@ -39,9 +39,18 @@ class router extends baseRouter
public $rawMethod;
/**
* Add custom langs when set client lang.
* 标记是否是工作流
* Whether the tag is a workflow
*
* @param string $lang zh-cn|zh-tw|zh-hk|en
* @var bool
* @access public
*/
public $isFlow = false;
/**
* Merge system and translated langs.
*
* @param string $lang zh-cn|zh-tw|en
* @access public
* @return void
*/
@@ -57,8 +66,10 @@ class router extends baseRouter
}
/**
* 加载语言文件,返回全局$lang对象。
* Load lang and return it as the global lang object.
* 企业版部分功能是从然之合并过来的。然之代码中调用loadLang方法时传递了一个非空的appName,在禅道中会导致错误。
* 把appName设置为空来避免这个错误。
* Some codes merged from ranzhi called the function loadLang with a non-empty appName which causes an error in zentao.
* Set the value of appName to empty to avoid this error.
*
* @param string $moduleName the module name
* @param string $appName the app name
@@ -112,8 +123,10 @@ class router extends baseRouter
$productProject = $productProject->value;
list($productCommon, $projectCommon) = explode('_', $productProject);
}
$lang->productCommon = isset($this->config->productCommonList[$this->clientLang][(int)$productCommon]) ? $this->config->productCommonList[$this->clientLang][(int)$productCommon] : $this->config->productCommonList['en'][0];
$lang->projectCommon = isset($this->config->projectCommonList[$this->clientLang][(int)$projectCommon]) ? $this->config->projectCommonList[$this->clientLang][(int)$projectCommon] : $this->config->projectCommonList['en'][0];
/* Set productCommon and projectCommon. Default english lang. */
$lang->productCommon = isset($this->config->productCommonList[$this->clientLang][(int)$productCommon]) ? $this->config->productCommonList[$this->clientLang][(int)$productCommon] : $this->config->productCommonList['en'][(int)$productCommon];
$lang->projectCommon = isset($this->config->projectCommonList[$this->clientLang][(int)$projectCommon]) ? $this->config->projectCommonList[$this->clientLang][(int)$projectCommon] : $this->config->projectCommonList['en'][(int)$projectCommon];
}
parent::loadLang($moduleName, $appName);
@@ -165,13 +178,10 @@ class router extends baseRouter
}
/**
* 加载模块的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.
* 企业版部分功能是从然之合并过来的。然之代码中调用loadModuleConfig方法时传递了一个非空的appName,在禅道中会导致错误。
* 把appName设置为空来避免这个错误。
* Some codes merged from ranzhi called the function loadModuleConfig with a non-empty appName which causes an error in zentao.
* Set the value of appName to empty to avoid this error.
*
* @param string $moduleName module name
* @param string $appName app name
@@ -222,8 +232,7 @@ class router extends baseRouter
}
/**
* 调用父类方法时不传递$appName参数,保证父类方法中$appName值为空。
* The $appName parameter is not passed when calling the parent class method, ensuring that the $appName value in the parent class method is null.
* The alias for loadModuleConfig.
*
* @param string $moduleName
* @param string $appName
@@ -286,6 +295,10 @@ class router extends baseRouter
*/
public function setControlFile($exitIfNone = true)
{
/* Set raw module and method name for fetch control. */
if(empty($this->rawModule)) $this->rawModule = $this->moduleName;
if(empty($this->rawMethod)) $this->rawMethod = $this->methodName;
/* If is not a biz version or is in install mode or in in upgrade mode, call parent method. */
if(!isset($this->config->bizVersion) or defined('IN_INSTALL') or defined('IN_UPGRADE')) return parent::setControlFile($exitIfNone);
@@ -305,6 +318,7 @@ class router extends baseRouter
{
$this->rawModule = $this->moduleName;
$this->rawMethod = 'browse';
$this->isFlow = true;
$moduleName = 'flow';
$methodName = 'browse';
@@ -318,6 +332,7 @@ class router extends baseRouter
{
$this->rawModule = $this->moduleName;
$this->rawMethod = $this->methodName;
$this->isFlow = true;
$this->loadModuleConfig('workflowaction');
@@ -434,8 +449,8 @@ class router extends baseRouter
}
/**
* 如果$this->rawModule和$this->rawMethod的值不为空,说明这个请求需要工作流引擎来处理,则要根据工作流引擎的需要重新设置参数。
* If the values of $this->rawModule and $this->rawMethod are not empty, indicating that the request needs to be processed
* 如果$this->isFlow的值为true,说明这个请求需要工作流引擎来处理,则要根据工作流引擎的需要重新设置参数。
* If the values of $this->isFlow is true, indicating that the request needs to be processed
* by the workflow engine, the parameters are reset according to the needs of the workflow engine.
*
* @param array $defaultParams the default params defined by the method.
@@ -445,14 +460,14 @@ class router extends baseRouter
*/
public function mergeParams($defaultParams, $passedParams)
{
/* If the rawModule and rawMethod is not empty, reset the passed params. */
if($this->rawModule && $this->rawMethod)
/* If the isFlow is true, reset the passed params. */
if($this->isFlow)
{
$passedParams = array_reverse($passedParams);
/* 如果请求的方法名不是browse、create、edit、view、delete、export中的任何一个,则需要添加action参数来传递请求的方法名。 */
/* If the requested method name is not any of browse, create, edit, view, delete, or export, you need to add an action parameter to pass the requested method name. */
if(!in_array($this->rawMethod, $this->config->workflowaction->default->actions)) $passedParams['action'] = $this->rawMethod;
if(isset($this->config->workflowaction->default->actions) and !in_array($this->rawMethod, $this->config->workflowaction->default->actions)) $passedParams['action'] = $this->rawMethod;
/* 添加module参数来传递请求的模块名。 */
/* Add the module parameter to pass the requested module name. */
$passedParams['module'] = $this->rawModule;
+1
View File
@@ -1075,6 +1075,7 @@ EOT;
$jsLang = new stdclass();
$jsLang->submitting = isset($lang->loading) ? $lang->loading : '';
$jsLang->save = $jsConfig->save;
$jsLang->expand = isset($lang->expand) ? $lang->expand : '';
$jsLang->timeout = isset($lang->timeout) ? $lang->timeout : '';
$js = self::start(false);
+16 -2
View File
@@ -34,6 +34,7 @@ class fixer extends baseFixer
{
$fields = str_replace(' ', '', trim($fields));
/* Get extend field by flow. */
global $config;
$flowFields = array();
if(isset($config->bizVersion))
@@ -45,14 +46,27 @@ class fixer extends baseFixer
}
foreach($this->data as $field => $value)
{
if(isset($flowFields[$field]) and is_array($value)) $this->data->$field = implode(',', $value);
/* Implode array when form has array. */
if(isset($flowFields[$field]) and is_array($value))
{
$canImplode = true;
foreach($value as $k => $v)
{
if(is_object($v) or is_array($v))
{
$canImplode = false;
break;
}
}
if($canImplode) $this->data->$field = implode(',', $value);
}
$this->specialChars($field);
}
if(empty($fields)) return $this->data;
if(strpos($fields, ',') === false) return $this->data->$fields;
/* Process fields for check by key. */
$fields = array_flip(explode(',', $fields));
foreach($this->data as $field => $value)
{
+8 -7
View File
@@ -126,11 +126,12 @@ class SMTP {
}
// connect to the smtp server
$this->smtp_conn = fsockopen($host, // the host of the server
$port, // the port to use
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs
// Replace fsockopen for don't validate remote hosts
$contextOptions['ssl']['verify_host'] = false;
$contextOptions['ssl']['verify_peer'] = false;
$contextOptions['ssl']['verify_peer_name'] = false;
$context = stream_context_create($contextOptions);
$this->smtp_conn = stream_socket_client($host . ':' . $port, $errno, $errstr, $tval, STREAM_CLIENT_CONNECT, $context);
// verify we connected properly
if(empty($this->smtp_conn)) {
$this->error = array("error" => "Failed to connect to server",
@@ -616,7 +617,7 @@ class SMTP {
protected function parseHelloFields($type)
{
$this->server_caps = [];
$this->server_caps = array();
$lines = explode("\n", $this->helo_rply);
foreach ($lines as $n => $s) {
@@ -638,7 +639,7 @@ class SMTP {
break;
case 'AUTH':
if (!is_array($fields)) {
$fields = [];
$fields = array();
}
break;
default:
+8 -7
View File
@@ -19,6 +19,7 @@ $lang->action->actor = 'User';
$lang->action->action = 'Action';
$lang->action->actionID = 'Action ID';
$lang->action->date = 'Date';
$lang->action->extra = 'Extra';
$lang->action->trash = 'Recycle';
$lang->action->undelete = 'Restore';
@@ -87,7 +88,7 @@ $lang->action->objectTypes['testreport'] = 'Report';
$lang->action->objectTypes['entry'] = 'Entry';
$lang->action->objectTypes['webhook'] = 'Webhook';
/* 用来描述操作历史记录。*/
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
@@ -129,7 +130,7 @@ $lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. Th
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
/* 子任务修改父任务的历史操作记录 */
/* Used to describe the history of operations related to parent-child tasks. */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, <strong>$actor</strong> linked a child task <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, <strong>$actor</strong> linked a child task <strong>$extra</strong>。' . "\n";
@@ -137,11 +138,11 @@ $lang->action->desc->unlinkchildrentask = '$date, <strong>$actor</strong> unlink
$lang->action->desc->linkparenttask = '$date, <strong>$actor</strong> linked to a parent task <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkparenttask = '$date, <strong>$actor</strong> unlinked a parent task <strong>$extra</strong>。' . "\n";
/* 关联用例和移除用例时的历史操作记录。*/
/* Historical record of actions when associating and removing cases. */
$lang->action->desc->linkrelatedcase = '$date, <strong>$actor</strong> linked a case <strong>$extra</strong>.' . "\n";
$lang->action->desc->unlinkrelatedcase = '$date, <strong>$actor</strong> unlinked a case <strong>$extra</strong>.' . "\n";
/* 用来显示动态信息。*/
/* Used to display dynamic information. */
$lang->action->label = new stdclass();
$lang->action->label->created = 'created ';
$lang->action->label->opened = 'opened ';
@@ -209,7 +210,7 @@ $lang->action->label->batchcreate = "batch created tasks";
$lang->action->label->createchildren = "create child tasks";
$lang->action->label->managed = "managed";
/* 动态信息按照对象分组 */
/* Dynamic information is grouped by object. */
$lang->action->dynamicAction = new stdclass;
$lang->action->dynamicAction->todo['opened'] = 'Create Todo';
$lang->action->dynamicAction->todo['edited'] = 'Edit Todo';
@@ -357,7 +358,7 @@ $lang->action->dynamicAction->user['loginxuanxuan'] = 'Login Desktop';
$lang->action->dynamicAction->entry['created'] = 'Add Application';
$lang->action->dynamicAction->entry['edited'] = 'Edit Application';
/* 用来生成相应对象的链接。*/
/* Generate the corresponding object link. */
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
$lang->action->label->productplan = 'Plan|productplan|view|productID=%s';
$lang->action->label->release = 'Release|release|view|productID=%s';
@@ -402,7 +403,7 @@ $lang->action->search->objectTypeList['testsuite'] = 'Suite';
$lang->action->search->objectTypeList['caselib'] = 'Library';
$lang->action->search->objectTypeList['testreport'] = 'Report';
/* 用来在动态显示中显示动作 */
/* Used to display actions in dynamic method. */
$lang->action->search->label[''] = '';
$lang->action->search->label['created'] = $lang->action->label->created;
$lang->action->search->label['opened'] = $lang->action->label->opened;
+2 -1
View File
@@ -19,6 +19,7 @@ $lang->action->actor = '操作者';
$lang->action->action = '动作';
$lang->action->actionID = '记录ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->trash = '回收站';
$lang->action->undelete = '还原';
@@ -129,7 +130,7 @@ $lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
/* 子任务修改父任务的历史操作记录 */
/* 用来描述和父子任务相关的操作历史记录。*/
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 关联子任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 关联子任务 <strong>$extra</strong>。' . "\n";
+2 -1
View File
@@ -19,6 +19,7 @@ $lang->action->actor = '操作者';
$lang->action->action = '動作';
$lang->action->actionID = '記錄ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->trash = '資源回收筒';
$lang->action->undelete = '還原';
@@ -129,7 +130,7 @@ $lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
/* 子任務修改父任務的歷史操作記錄 */
/* 用來描述和父子任務相關的操作歷史記錄。*/
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 創建子任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 關聯子任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 關聯子任務 <strong>$extra</strong>。' . "\n";
+10 -2
View File
@@ -45,9 +45,11 @@ class actionModel extends model
$action->actor = $actor;
$action->action = $actionType;
$action->date = helper::now();
$action->comment = trim(strip_tags($comment, $this->config->allowedTags));
$action->extra = $extra;
$_POST['comment'] = $comment;
$action->comment = fixer::input('post')->stripTags('comment')->get('comment');
/* Process action. */
$action = $this->loadModel('file')->processImgURL($action, 'comment', $this->post->uid);
if($autoDelete) $this->file->autoDelete($this->post->uid);
@@ -978,6 +980,12 @@ class actionModel extends model
{
$this->dao->update(TABLE_DOCLIB)->set('deleted')->eq(0)->where($action->objectType)->eq($action->objectID)->exec();
}
/* Revert productplan project status */
if($action->objectType == 'productplan')
{
$plan = $this->loadModel('productplan')->getById($action->objectID);
$this->loadModel('productplan')->updatePlanParentStatus($plan->parent);
}
/* Update action record in action table. */
$this->dao->update(TABLE_ACTION)->set('extra')->eq(ACTIONMODEL::BE_UNDELETED)->where('id')->eq($actionID)->exec();
@@ -1059,7 +1067,7 @@ class actionModel extends model
if($dateGroup)
{
$lastDateActions = $this->dao->select('*')->from(TABLE_ACTION)->where($this->session->actionQueryCondition)->andWhere('`date`')->like(substr($action->originalDate, 0, 10) . '%')->orderBy($this->session->actionOrderBy)->fetchAll('id');
$lastDateActions = $this->dao->select('*')->from(TABLE_ACTION)->where($this->session->actionQueryCondition)->andWhere("(LEFT(`date`, 10) = '" . substr($action->originalDate, 0, 10) . "')")->orderBy($this->session->actionOrderBy)->fetchAll('id');
if(count($dateGroup[$date]) < count($lastDateActions))
{
unset($dateGroup[$date]);
+2 -2
View File
@@ -53,7 +53,7 @@
$flow = $config->action->customFlows[$action->objectType];
$module = $flow->module;
}
if(strpos(',doclib,module,webhook,workflowdatasource,workflowfield,workflowlabel,workflowlayout,workflowrule,', ",{$module},") !== false)
if(strpos(',doclib,module,webhook,', ",{$module},") !== false)
{
echo $action->objectName;
}
@@ -63,7 +63,7 @@
}
?>
</td>
<td><?php echo $users[$action->actor];?></td>
<td><?php echo zget($users, $action->actor);?></td>
<td><?php echo $action->date;?></td>
<td>
<?php
-2
View File
@@ -1,2 +0,0 @@
.thWidth{width:300px !important;}
html[lang^='zh-'] .thWidth{width:130px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:300px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:130px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:130px !important;}
-2
View File
@@ -1,2 +0,0 @@
.actionWidth{width:140px !important;}
html[lang^='zh-'] .actionWidth{width:110px !important;}
+1
View File
@@ -0,0 +1 @@
.actionWidth{width:140px !important;}
+1
View File
@@ -0,0 +1 @@
.actionWidth{width:110px !important;}
+1
View File
@@ -0,0 +1 @@
.actionWidth{width:110px !important;}
+1
View File
@@ -0,0 +1 @@
.checkbox-primary label{height:auto;}
+1 -1
View File
@@ -53,7 +53,7 @@ $lang->block->params->value = '参数值';
$lang->block->createBlock = '添加区块';
$lang->block->editBlock = '编辑区块';
$lang->block->ordersSaved = '排序已保存';
$lang->block->confirmRemoveBlock = '确定移除区块吗?';
$lang->block->confirmRemoveBlock = '确定隐藏区块吗?';
$lang->block->noticeNewBlock = '10.0版本以后各个视图主页提供了全新的视图,您要启用新的视图布局吗?';
$lang->block->confirmReset = '是否恢复默认布局?';
$lang->block->closeForever = '永久关闭';
+1 -1
View File
@@ -53,7 +53,7 @@ $lang->block->params->value = '參數值';
$lang->block->createBlock = '添加區塊';
$lang->block->editBlock = '編輯區塊';
$lang->block->ordersSaved = '排序已保存';
$lang->block->confirmRemoveBlock = '確定移除區塊嗎?';
$lang->block->confirmRemoveBlock = '確定隱藏區塊嗎?';
$lang->block->noticeNewBlock = '10.0版本以後各個視圖主頁提供了全新的視圖,您要啟用新的視圖佈局嗎?';
$lang->block->confirmReset = '是否恢復預設佈局?';
$lang->block->closeForever = '永久關閉';
+1 -1
View File
@@ -11,7 +11,7 @@
$i = 0;
foreach($actions as $action)
{
$user = isset($users[$action->actor]) ? $users[$action->actor] : $action->actor;
$user = zget($users, $action->actor);
if($action->action == 'login' or $action->action == 'logout' or empty($action->objectLink)) $action->objectName = $action->objectLabel = '';
$class = $action->major ? "class='active'" : '';
echo "<li $class><div>";
@@ -26,7 +26,7 @@
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 90px;}
.product-info .type-value,
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.product-info .type-label {font-size: 12px; overflow: visible; text-overflow: ellipsis; white-space: nowrap;}
.product-info .type-value {font-size: 14px;}
.product-info .type-value > strong {font-size: 20px; color: #3C4353;}
.product-info .actions {position: absolute; left: 10px; top: 14px;}
+1 -1
View File
@@ -19,7 +19,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
.block-todoes .todoes-input .form-control:-ms-input-placeholder {font-size: 12px; line-height: 20px;color: #a4a8b6;}
.block-todoes .todoes-input .form-control::placeholder {font-size: 12px; line-height: 20px; color: #a4a8b6;}
.block-todoes .todoes {padding: 0 10px 10px 10px; margin: 0 -20px; max-height: 350px; overflow: auto; overflow-x:hidden}
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden;}
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden; max-width: 820px;}
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
.block-todoes .todo-title {padding: 5px 15px 5px 5px;}
.block-todoes .todo-pri {margin: 0 5px;}
+1
View File
@@ -12,6 +12,7 @@ $lang->branch->id = 'ID';
$lang->branch->product = 'Product';
$lang->branch->name = 'Name';
$lang->branch->order = 'Order';
$lang->branch->deleted = 'Delete';
$lang->branch->confirmDelete = 'Do you want to delete this @branch@?';
$lang->branch->canNotDelete = 'There is data in @branch@. It cannot be deleted.';
+1
View File
@@ -12,6 +12,7 @@ $lang->branch->id = '编号';
$lang->branch->product = '所属产品';
$lang->branch->name = '名称';
$lang->branch->order = '排序';
$lang->branch->deleted = '已删除';
$lang->branch->confirmDelete = '是否删除该@branch@?';
$lang->branch->canNotDelete = '该@branch@下已经有数据,不能删除!';
+1
View File
@@ -12,6 +12,7 @@ $lang->branch->id = '編號';
$lang->branch->product = '所屬產品';
$lang->branch->name = '名稱';
$lang->branch->order = '排序';
$lang->branch->deleted = '已刪除';
$lang->branch->confirmDelete = '是否刪除該@branch@?';
$lang->branch->canNotDelete = '該@branch@下已經有數據,不能刪除!';
+1
View File
@@ -1591,6 +1591,7 @@ class bug extends control
}
if(!(in_array('platform', $productsType) or in_array('branch', $productsType))) unset($fields['branch']);// If products's type are normal, unset branch field.
if(isset($this->config->bizVersion)) list($fields, $bugs) = $this->loadModel('workflowfield')->appendDataFromFlow($fields, $bugs);
$this->post->set('fields', $fields);
$this->post->set('rows', $bugs);
+2 -2
View File
@@ -1,8 +1,8 @@
.closed, .closed a{color:gray; text-decoration:line-through;}
.resolved, .resolved a{color:#8EC21F; text-decoration:none;}
.tree .closed, .tree .closed a{color:#003366; text-decoration:none;}
.confirm0 {color:gray; font-size:9px}
.confirm1 {color:green; font-size:9px}
.confirm0 {color:gray;}
.confirm1 {color:green;}
td.delayed{color:#fff; background: #e84e0f!important;}
.datatable-wrapper .table-datatable .datatable-row td {height:37px;}
+1
View File
@@ -38,6 +38,7 @@ html[lang='en'] #deadlineTd .input-group-addon{padding: 5px 18px}
.title-group #severity + .chosen-container > .chosen-single {border-radius: 0!important;}
.title-group #pri + .chosen-container > .chosen-single {border-top-left-radius: 0!important; border-bottom-left-radius: 0!important;}
.title-group .has-icon-right{min-width:700px}
#mainContent .center-block{padding-bottom:40px;}
#typeBox {width:180px;}
#osBox {width:190px;}
-3
View File
@@ -4,6 +4,3 @@
.col-side .chosen-container[id^="resolvedBuild"] {width: 172px!important}
.chosen-choices li.search-choice{word-break: break-all;}
#linkBugBox > li {margin-left:-56px}
.thWidth{width:100px !important;}
html[lang^='zh-'] .thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:100px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
-3
View File
@@ -1,4 +1 @@
.chosen-container[id^="buildProject"] {max-width: 160px; border-radius: 0}
.thWidth{width:130px !important;}
html[lang^='zh-'] .thWidth{width:100px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:130px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:100px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:100px !important;}
-5
View File
@@ -3,8 +3,3 @@
.table-data tr > td{word-break: break-all; word-wrap: break-word;}
.side-col .cell{padding:0px;}
.tab-pane table {border: 1px solid #ddd; border-top: none;}
#legendBasicInfo .thWidth{width:110px !important;}
#legendLife .thWidth{width:100px !important;}
html[lang^='zh-'] #legendBasicInfo .thWidth{width:70px !important;}
html[lang^='zh-'] #legendLife .thWidth{width:90px !important;}
+2
View File
@@ -0,0 +1,2 @@
#legendBasicInfo .thWidth{width:110px !important;}
#legendLife .thWidth{width:100px !important;}
+2
View File
@@ -0,0 +1,2 @@
#legendBasicInfo .thWidth{width:70px !important;}
#legendLife .thWidth{width:90px !important;}
+2
View File
@@ -0,0 +1,2 @@
#legendBasicInfo .thWidth{width:70px !important;}
#legendLife .thWidth{width:90px !important;}
+14 -10
View File
@@ -19,6 +19,8 @@ $lang->bug->module = 'Module';
$lang->bug->moduleAB = 'Module';
$lang->bug->project = $lang->projectCommon;
$lang->bug->story = 'Story';
$lang->bug->storyVersion = 'Story Version';
$lang->bug->color = 'Color';
$lang->bug->task = 'Task';
$lang->bug->title = 'Title';
$lang->bug->severity = 'Severity';
@@ -65,6 +67,8 @@ $lang->bug->linkBug = 'Linked Bugs';
$lang->bug->linkBugs = 'Link Bug';
$lang->bug->unlinkBug = 'Unlink';
$lang->bug->case = 'Cases';
$lang->bug->caseVersion = 'Case Version';
$lang->bug->testtask = 'Request';
$lang->bug->files = 'Files';
$lang->bug->keywords = 'Tags';
$lang->bug->lastEditedByAB = 'EditedBy';
@@ -74,7 +78,7 @@ $lang->bug->fromCase = 'From Case';
$lang->bug->toCase = 'To Case';
$lang->bug->colorTag = 'Color';
/* 方法列表。*/
/* Method list. */
$lang->bug->index = 'Bug Home';
$lang->bug->create = 'Report Bug';
$lang->bug->batchCreate = 'Batch Report';
@@ -110,7 +114,7 @@ $lang->bug->confirmStoryChange = 'Confirm Story Change';
$lang->bug->copy = 'Copy';
$lang->bug->search = 'Search';
/* 查询条件列表。*/
/* Query condition list. */
$lang->bug->assignToMe = 'AssignedToMe';
$lang->bug->openedByMe = 'ReportedByMe';
$lang->bug->resolvedByMe = 'ResolvedByMe';
@@ -143,7 +147,7 @@ $lang->bug->noBug = 'No bugs yet.';
$lang->bug->noModule = '<div>You have no modules.</div><div>Manage now</div>';
$lang->bug->delayWarning = " <strong class='text-danger'> Delay %s days </strong>";
/* 页面标签。*/
/* Page tags. */
$lang->bug->lblAssignedTo = 'AssignTo';
$lang->bug->lblMailto = 'Mailto';
$lang->bug->lblLastEdited = 'EditedBy';
@@ -152,7 +156,7 @@ $lang->bug->allUsers = 'Load All Users';
$lang->bug->allBuilds = 'All Builds';
$lang->bug->createBuild = 'New';
/* legend列表。*/
/* Legend list。*/
$lang->bug->legendBasicInfo = 'Basic Info';
$lang->bug->legendAttatch = 'Files';
$lang->bug->legendPrjStoryTask = $lang->projectCommon . '/Story/Task';
@@ -164,22 +168,22 @@ $lang->bug->legendLife = 'Bug Life';
$lang->bug->legendMisc = 'Misc.';
$lang->bug->legendRelated = 'Related Info';
/* 功能按钮。*/
/* Button. */
$lang->bug->buttonConfirm = 'Confirm';
/* 交互提示。*/
/* Interactive prompt. */
$lang->bug->summary = "Total <strong>%s</strong> bugs on this page, and <strong>%s</strong> Active.";
$lang->bug->confirmChangeProduct = "Any change to {$lang->productCommon} will cause linked {$lang->projectCommon}s, stories and tasks change. Do you want to do this?";
$lang->bug->confirmDelete = 'Do you want to delete this bug?';
$lang->bug->remindTask = 'This bug has been converted to a task. Do you want to update the status of Task(ID %s)?';
$lang->bug->skipClose = 'Bug %s is active. You cannot close it.';
/* 模板。*/
/* Template. */
$lang->bug->tplStep = "<p>[Steps]</p><br/>";
$lang->bug->tplResult = "<p>[Results]</p><br/>";
$lang->bug->tplExpect = "<p>[Expectations]</p><br/>";
/* 各个字段取值列表。*/
/* Value list for each field. */
$lang->bug->severityList[1] = '1';
$lang->bug->severityList[2] = '2';
$lang->bug->severityList[3] = '3';
@@ -269,7 +273,7 @@ $lang->bug->resolutionList['postponed'] = 'Postponed';
$lang->bug->resolutionList['willnotfix'] = "Won't Fix";
$lang->bug->resolutionList['tostory'] = 'Convert to Story';
/* 统计报表。*/
/* Statistical statement. */
$lang->bug->report = new stdclass();
$lang->bug->report->common = 'Report';
$lang->bug->report->select = 'Select Report Type';
@@ -365,7 +369,7 @@ $lang->bug->report->bugsPerAssignedTo->graph->xAxisName = 'AssignTo';
$lang->bug->report->bugLiveDays->graph->xAxisName = 'Handling Time';
$lang->bug->report->bugHistories->graph->xAxisName = 'Handling Steps';
/* 操作记录。*/
/* Operating record. */
$lang->bug->action = new stdclass();
$lang->bug->action->resolved = array('main' => '$date, resolved by <strong>$actor</strong> and the resolution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
$lang->bug->action->tostory = array('main' => '$date, converted by <strong>$actor</strong> to <strong>Story</strong> with ID <strong>$extra</strong>.');
+5 -1
View File
@@ -19,6 +19,8 @@ $lang->bug->module = '所属模块';
$lang->bug->moduleAB = '模块';
$lang->bug->project = '所属' . $lang->projectCommon;
$lang->bug->story = '相关需求';
$lang->bug->storyVersion = '需求版本';
$lang->bug->color = '标题颜色';
$lang->bug->task = '相关任务';
$lang->bug->title = 'Bug标题';
$lang->bug->severity = '严重程度';
@@ -30,7 +32,7 @@ $lang->bug->browser = '浏览器';
$lang->bug->steps = '重现步骤';
$lang->bug->status = 'Bug状态';
$lang->bug->statusAB = '状态';
$lang->bug->subStatus = 'Bug子状态';
$lang->bug->subStatus = '子状态';
$lang->bug->activatedCount = '激活次数';
$lang->bug->activatedCountAB = '激活次数';
$lang->bug->activatedDate = '激活日期';
@@ -65,6 +67,8 @@ $lang->bug->linkBug = '相关Bug';
$lang->bug->linkBugs = '关联相关Bug';
$lang->bug->unlinkBug = '移除相关Bug';
$lang->bug->case = '相关用例';
$lang->bug->caseVersion = '用例版本';
$lang->bug->testtask = '测试单';
$lang->bug->files = '附件';
$lang->bug->keywords = '关键词';
$lang->bug->lastEditedByAB = '修改者';
+5
View File
@@ -19,6 +19,8 @@ $lang->bug->module = '所屬模組';
$lang->bug->moduleAB = '模組';
$lang->bug->project = '所屬' . $lang->projectCommon;
$lang->bug->story = '相關需求';
$lang->bug->storyVersion = '需求版本';
$lang->bug->color = '標題顏色';
$lang->bug->task = '相關任務';
$lang->bug->title = 'Bug標題';
$lang->bug->severity = '嚴重程度';
@@ -30,6 +32,7 @@ $lang->bug->browser = '瀏覽器';
$lang->bug->steps = '重現步驟';
$lang->bug->status = 'Bug狀態';
$lang->bug->statusAB = '狀態';
$lang->bug->subStatus = '子狀態';
$lang->bug->activatedCount = '激活次數';
$lang->bug->activatedCountAB = '激活次數';
$lang->bug->activatedDate = '激活日期';
@@ -64,6 +67,8 @@ $lang->bug->linkBug = '相關Bug';
$lang->bug->linkBugs = '關聯相關Bug';
$lang->bug->unlinkBug = '移除相關Bug';
$lang->bug->case = '相關用例';
$lang->bug->caseVersion = '用例版本';
$lang->bug->testtask = '測試單';
$lang->bug->files = '附件';
$lang->bug->keywords = '關鍵詞';
$lang->bug->lastEditedByAB = '修改者';
+6 -2
View File
@@ -27,14 +27,18 @@
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
<table class='table table-form'>
<tr>
<th class='w-70px'><?php echo $lang->bug->assignedTo;?></th>
<th class='w-80px'><?php echo $lang->bug->assignedTo;?></th>
<td class='w-p25-f'><?php echo html::select('assignedTo', $users, $bug->resolvedBy, "class='form-control chosen'");?></td><td></td>
</tr>
<tr class='hide'>
<th><?php echo $lang->bug->status;?></th>
<td><?php echo html::hidden('status', 'active');?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=1');?>
<tr>
<th><?php echo $lang->bug->openedBuild;?></th>
<td colspan='2'><?php echo html::select('openedBuild[]', $builds, $bug->openedBuild, 'size=4 multiple=multiple class="form-control chosen"');?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=2');?>
<tr>
<th><?php echo $lang->comment;?></th>
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='form-control'");?></td>
+5 -1
View File
@@ -34,11 +34,15 @@ js::set('page', 'assignedto');
<th class='w-80px'><?php echo $lang->bug->assignBug;?></th>
<td class='w-p25-f'><?php echo html::select('assignedTo', $users, $bug->assignedTo, "class='form-control chosen'");?></td><td></td>
</tr>
<tr class='hide'>
<th><?php echo $lang->bug->status;?></th>
<td><?php echo html::hidden('status', $bug->status);?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=1');?>
<tr>
<th><?php echo $lang->bug->mailto;?></th>
<td colspan='2'><?php echo html::select('mailto[]', $users, str_replace(' ', '', $bug->mailto), 'class="form-control chosen" multiple');?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=2');?>
<tr>
<th><?php echo $lang->comment;?></th>
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='form-control'");?></td>
+4
View File
@@ -26,6 +26,10 @@
</div>
<form method='post' target='hiddenwin'>
<table class='table table-form'>
<tr class='hide'>
<th class='w-60px'><?php echo $lang->bug->status;?></th>
<td><?php echo html::hidden('status', 'closed');?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=1');?>
<tr>
<th class='w-60px'><?php echo $lang->comment;?></th>
+6 -1
View File
@@ -45,11 +45,16 @@ js::set('page', 'confirmbug');
<td><?php echo html::select('pri', $lang->bug->priList, $bug->pri, "class='form-control chosen'");?></td>
<td></td>
</tr>
<tr class='hide'>
<th><?php echo $lang->bug->status;?></th>
<td><?php echo html::hidden('status', $bug->status);?></td>
<td></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=1');?>
<tr>
<th><?php echo $lang->bug->mailto;?></th>
<td colspan='2'><?php echo html::select('mailto[]', $users, str_replace(' ' , '', $bug->mailto), 'class="form-control chosen" multiple');?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=2');?>
<tr>
<th><?php echo $lang->comment;?></th>
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='w-p94'");?></td>
+5 -1
View File
@@ -288,7 +288,11 @@ js::set('flow', $config->global->flow);
<?php endif;?>
</tr>
<?php endif;?>
<?php $this->printExtendFields('', 'table', 'columns=2');?>
<tr class='hide'>
<th><?php echo $lang->bug->status;?></th>
<td><?php echo html::hidden('status');?></td>
</tr>
<?php $this->printExtendFields('', 'table', 'columns=1');?>
<tr>
<th><?php echo $lang->bug->files;?></th>
<td colspan='2'><?php echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');?></td>
+1 -1
View File
@@ -213,7 +213,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
<tbody>
<tr>
<th class='thWidth'><?php echo $lang->bug->openedBy;?></th>
<td><?php echo $users[$bug->openedBy];?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
</tr>
<tr>
<th><?php echo $lang->bug->openedBuild;?></th>
+4
View File
@@ -73,6 +73,10 @@ js::set('productID' , $bug->product);
<th><?php echo $lang->bug->assignedTo;?></th>
<td><?php echo html::select('assignedTo', $users, $assignedTo, "class='form-control chosen'");?></td>
</tr>
<tr class='hide'>
<th><?php echo $lang->bug->status;?></th>
<td><?php echo html::hidden('status', 'resolved');?></td>
</tr>
<?php $this->printExtendFields($bug, 'table', 'columns=1');?>
<tr>
<th><?php echo $lang->bug->files;?></th>
+3 -3
View File
@@ -199,7 +199,7 @@
</tr>
<tr>
<th><?php echo $lang->bug->lblAssignedTo;?></th>
<td><?php if($bug->assignedTo) echo $users[$bug->assignedTo] . $lang->at . $bug->assignedDate;?></td>
<td><?php if($bug->assignedTo) echo zget($users, $bug->assignedTo) . $lang->at . $bug->assignedDate;?></td>
</tr>
<tr>
<th><?php echo $lang->bug->deadline;?></th>
@@ -224,7 +224,7 @@
</tr>
<tr>
<th><?php echo $lang->bug->mailto;?></th>
<td><?php $mailto = explode(',', str_replace(' ', '', $bug->mailto)); foreach($mailto as $account) echo ' ' . $users[$account]; ?></td>
<td><?php $mailto = explode(',', str_replace(' ', '', $bug->mailto)); foreach($mailto as $account) echo ' ' . zget($users, $account); ?></td>
</tr>
</tbody>
</table>
@@ -376,7 +376,7 @@
</div>
</div>
</div>
<?php $this->printExtendFields($bug, 'div', "position=right&divCell=true");?>
<?php $this->printExtendFields($bug, 'div', "position=right&mode=value");?>
</div>
</div>
+2 -2
View File
@@ -45,8 +45,8 @@
</td>
<td><span class='label-pri label-pri-<?php echo $bug->pri;?>' title='<?php echo zget($lang->bug->priList, $bug->pri, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri, $bug->pri)?></span></td>
<td class='text-left nobr' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', true), $bug->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo $users[$bug->openedBy];?></td>
<td style='overflow:visible;padding-top:1px;padding-bottom:1px;'><?php echo ($bug->status == 'resolved' or $bug->status == 'closed') ? $users[$bug->resolvedBy] : html::select("resolvedBy[{$bug->id}]", $users, $this->app->user->account, "class='form-control chosen'");?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
<td style='overflow:visible;padding-top:1px;padding-bottom:1px;'><?php echo ($bug->status == 'resolved' or $bug->status == 'closed') ? zget($users, $bug->resolvedBy) : html::select("resolvedBy[{$bug->id}]", $users, $this->app->user->account, "class='form-control chosen'");?></td>
<td>
<span class='status-bug status-<?php echo $bug->status?>'>
<?php echo $this->processStatus('bug', $bug);?>
+2 -2
View File
@@ -47,8 +47,8 @@
</td>
<td><span class='label-pri label-pri-<?php echo $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></span></td>
<td class='text-left nobr' title='<?php echo $story->title?>'><?php echo html::a($this->createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'");?></td>
<td><?php echo $users[$story->openedBy];?></td>
<td><?php echo $users[$story->assignedTo];?></td>
<td><?php echo zget($users, $story->openedBy);?></td>
<td><?php echo zget($users, $story->assignedTo);?></td>
<td><?php echo $story->estimate;?></td>
<td>
<span class='status-story status-<?php echo $story->status?>'>
+6 -6
View File
@@ -131,7 +131,7 @@ tbody tr td:first-child input{display:none;}
</td>
<td><span class='label-pri label-pri-<?php echo $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri, $story->pri);?></span></td>
<td class='text-left nobr' title='<?php echo $story->title?>'><?php echo html::a($storyLink,$story->title, '', "class='iframe' data-width='1000'");?></td>
<td><?php echo $users[$story->openedBy];?></td>
<td><?php echo zget($users, $story->openedBy);?></td>
<td><?php echo $story->estimate;?></td>
<td>
<span class='status-story status-<?php echo $story->status;?>'>
@@ -209,9 +209,9 @@ tbody tr td:first-child input{display:none;}
<?php echo $this->processStatus('bug', $bug);?>
</span>
</td>
<td><?php echo $users[$bug->openedBy];?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
<td><?php echo substr($bug->openedDate, 5, 11)?></td>
<td><?php echo $users[$bug->resolvedBy];?></td>
<td><?php echo zget($users, $bug->resolvedBy);?></td>
<td><?php echo substr($bug->resolvedDate, 5, 11)?></td>
<td class='c-actions'>
<?php
@@ -284,9 +284,9 @@ tbody tr td:first-child input{display:none;}
<?php echo $this->processStatus('bug', $bug);?>
</span>
</td>
<td><?php echo $users[$bug->openedBy];?></td>
<td><?php echo zget($users, $bug->openedBy);?></td>
<td><?php echo substr($bug->openedDate, 5, 11)?></td>
<td><?php echo $users[$bug->resolvedBy];?></td>
<td><?php echo zget($users, $bug->resolvedBy);?></td>
<td><?php echo substr($bug->resolvedDate, 5, 11)?></td>
</tr>
<?php endforeach;?>
@@ -321,7 +321,7 @@ tbody tr td:first-child input{display:none;}
</tr>
<tr>
<th><?php echo $lang->build->builder;?></th>
<td><?php echo $users[$build->builder];?></td>
<td><?php echo zget($users, $build->builder);?></td>
</tr>
<tr>
<th><?php echo $lang->build->date;?></th>
+2 -1
View File
@@ -21,6 +21,7 @@ $lang->percent = '%';
$lang->dash = '-';
$lang->zentaoPMS = 'ZenTao';
$lang->logoImg = 'zt-logo-en.png';
$lang->welcome = "%s PMS";
$lang->logout = 'Abmelden';
$lang->login = 'Anmelden';
@@ -477,7 +478,7 @@ $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』existed. Please go to Admin->Recycle to restore it, if you are sure it is deleted.";
$lang->error->unique = "『%s』『%s』existed. Please go to Admin->Data->Recycle 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.";
+3 -2
View File
@@ -21,6 +21,7 @@ $lang->percent = '%';
$lang->dash = '-';
$lang->zentaoPMS = 'ZenTao';
$lang->logoImg = 'zt-logo-en.png';
$lang->welcome = "%s ALM";
$lang->logout = 'Logout';
$lang->login = 'Login';
@@ -178,7 +179,7 @@ $lang->index->menu = new stdclass();
$lang->index->menu->product = "{$lang->productCommon}|product|browse";
$lang->index->menu->project = "{$lang->projectCommon}|project|browse";
/* my dashboard menu settings. */
/* My dashboard menu settings. */
$lang->my = new stdclass();
$lang->my->menu = new stdclass();
@@ -477,7 +478,7 @@ $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 Bin to restore it, if you are sure it is deleted.";
$lang->error->unique = "『%s』『%s』exists. Go to Admin->Data->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.";
+2 -1
View File
@@ -21,6 +21,7 @@ $lang->percent = '%';
$lang->dash = '-';
$lang->zentaoPMS = '禅道';
$lang->logoImg = 'zt-logo.png';
$lang->welcome = "%s项目管理系统";
$lang->logout = '退出';
$lang->login = '登录';
@@ -477,7 +478,7 @@ $lang->error = new stdclass();
$lang->error->companyNotFound = "您访问的域名 %s 没有对应的公司。";
$lang->error->length = array("『%s』长度错误,应当为『%s』", "『%s』长度应当不超过『%s』,且大于『%s』。");
$lang->error->reg = "『%s』不符合格式,应当为:『%s』。";
$lang->error->unique = "『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台管理-回收站还原。";
$lang->error->unique = "『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台-数据-回收站还原。";
$lang->error->gt = "『%s』应当大于『%s』。";
$lang->error->ge = "『%s』应当不小于『%s』。";
$lang->error->notempty = "『%s』不能为空。";
+2 -1
View File
@@ -21,6 +21,7 @@ $lang->percent = '%';
$lang->dash = '-';
$lang->zentaoPMS = '禪道';
$lang->logoImg = 'zt-logo.png';
$lang->welcome = "%s項目管理系統";
$lang->logout = '退出';
$lang->login = '登錄';
@@ -477,7 +478,7 @@ $lang->error = new stdclass();
$lang->error->companyNotFound = "您訪問的域名 %s 沒有對應的公司。";
$lang->error->length = array("『%s』長度錯誤,應當為『%s』", "『%s』長度應當不超過『%s』,且大於『%s』。");
$lang->error->reg = "『%s』不符合格式,應當為:『%s』。";
$lang->error->unique = "『%s』已經有『%s』這條記錄了。如果您確定該記錄已刪除,請到後台管理-資源回收筒還原。";
$lang->error->unique = "『%s』已經有『%s』這條記錄了。如果您確定該記錄已刪除,請到後台-數據-資源回收筒還原。";
$lang->error->gt = "『%s』應當大於『%s』。";
$lang->error->ge = "『%s』應當不小於『%s』。";
$lang->error->notempty = "『%s』不能為空。";
+22 -6
View File
@@ -553,6 +553,13 @@ class commonModel extends model
$menu = customModel::getModuleMenu($moduleName);
$isMobile = $app->viewType === 'mhtml';
/* If this is not workflow then use rawModule and rawMethod to judge highlight. */
if(!$app->isFlow)
{
$currentModule = $app->rawModule;
$currentMethod = $app->rawMethod;
}
/* The beginning of the menu. */
echo $isMobile ? '' : "<ul class='nav nav-default'>\n";
@@ -1078,23 +1085,32 @@ EOD;
global $app, $config;
/**
* 当主状态改变并且未设置子状态的值时把子状态的值置空并记录日志。
* 当主状态改变并且未设置子状态的值时把子状态的值设置为默认值并记录日志。
* Change sub status when status is changed and sub status is not set, and record the changes.
*/
if(isset($config->bizVersion))
{
$oldID = zget($old, 'id', '');
$oldStatus = zget($old, 'status', '');
$oldSubStatus = zget($old, 'subStatus', '');
$newStatus = zget($new, 'status', '');
$newSubStatus = zget($new, 'subStatus', '');
if($oldID && $oldStatus && $oldSubStatus && $newStatus && !$newSubStatus && $oldStatus != $newStatus)
if($oldID && $oldStatus && $newStatus && !$newSubStatus && $oldStatus != $newStatus)
{
$table = zget($config->objectTables, $app->getModuleName());
$app->dbh->exec("UPDATE $table SET `subStatus` = '' WHERE `id` = $oldID");
$moduleName = $app->getModuleName();
$new->subStatus = '';
$field = $app->dbh->query('SELECT options FROM ' . TABLE_WORKFLOWFIELD . " WHERE `module` = '$moduleName' AND `field` = 'subStatus'")->fetch();
if(!empty($field->options)) $field->options = json_decode($field->options, true);
if(!empty($field->options[$newStatus]['default']))
{
$flow = $app->dbh->query('SELECT `table` FROM ' . TABLE_WORKFLOW . " WHERE `module`='$moduleName'")->fetch();
$default = $field->options[$newStatus]['default'];
$app->dbh->exec("UPDATE `$flow->table` SET `subStatus` = '$default' WHERE `id` = '$oldID'");
$new->subStatus = $default;
}
}
}
+2 -2
View File
@@ -50,8 +50,8 @@
<?php $canEditComment = (end($actions) == $action and $action->comment and $this->methodName == 'view' and $action->actor == $this->app->user->account and common::hasPriv('action', 'editComment'));?>
<li value='<?php echo $i ++;?>'>
<?php
if(isset($users[$action->actor])) $action->actor = $users[$action->actor];
if($action->action == 'assigned' and isset($users[$action->extra]) ) $action->extra = $users[$action->extra];
$action->actor = zget($users, $action->actor);
if($action->action == 'assigned') $action->extra = zget($users, $action->extra);
if(strpos($action->actor, ':') !== false) $action->actor = substr($action->actor, strpos($action->actor, ':') + 1);
?>
<?php $this->action->printAction($action);?>
+2 -2
View File
@@ -19,8 +19,8 @@ if(file_exists($extViewFile))
<?php endif;?>
<tr>
<td style='padding: 10px; background-color: #FFF0D5'>
<?php if(isset($users[$action->actor])) $action->actor = $users[$action->actor];?>
<?php if(isset($users[$action->extra])) $action->extra = $users[$action->extra];?>
<?php $action->actor = zget($users, $action->actor);?>
<?php $action->extra = zget($users, $action->extra);?>
<span style='font-size: 16px; color: #F1A325'>●</span> &nbsp;<span><?php $this->action->printAction($action);?></span>
</td>
</tr>
-2
View File
@@ -1,2 +0,0 @@
.thWidth{width:120px !important;}
html[lang^='zh-'] .thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:120px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
-2
View File
@@ -1,2 +0,0 @@
.thWidth{width:250px !important;}
html[lang^='zh-'] .thWidth{width:120px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:250px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:120px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:120px !important;}
-2
View File
@@ -1,2 +0,0 @@
.thWidth{width:140px !important;}
html[lang^='zh-'] .thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:140px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
-2
View File
@@ -1,2 +0,0 @@
.thWidth{width:130px !important;}
html[lang^='zh-'] .thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:130px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:80px !important;}
+2
View File
@@ -20,6 +20,8 @@ $lang->dept->browse = "Manage Department";
$lang->dept->manage = "Manage Department";
$lang->dept->updateOrder = "Rank Department";
$lang->dept->add = "Add Department";
$lang->dept->grade = "Department Grade";
$lang->dept->order = "Department Order";
$lang->dept->dragAndSort = "Drag to order";
$lang->dept->confirmDelete = " Do you want to delete this department?";
+2
View File
@@ -20,6 +20,8 @@ $lang->dept->browse = "部门维护";
$lang->dept->manage = "维护部门";
$lang->dept->updateOrder = "更新排序";
$lang->dept->add = "添加部门";
$lang->dept->grade = "部门级别";
$lang->dept->order = "排序";
$lang->dept->dragAndSort = "拖动排序";
$lang->dept->confirmDelete = " 您确定删除该部门吗?";
+2
View File
@@ -20,6 +20,8 @@ $lang->dept->browse = "部門維護";
$lang->dept->manage = "維護部門";
$lang->dept->updateOrder = "更新排序";
$lang->dept->add = "添加部門";
$lang->dept->grade = "部門級別";
$lang->dept->order = "排序";
$lang->dept->dragAndSort = "拖動排序";
$lang->dept->confirmDelete = " 您確定刪除該部門嗎?";
+1
View File
@@ -45,6 +45,7 @@ class doc extends control
$this->lang->modulePageActions = $this->doc->setFastMenu($this->lang->doc->fast);
$this->lang->modulePageActions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib'), "<i class='icon icon-plus'></i> " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe' data-width='70%'") : '';
$this->lang->modulePageActions .= common::hasPriv('doc', 'create') ? $this->doc->setCreateDocMenu() : '';
$actionURL = $this->createLink('doc', 'browse', "lib=0&browseType=bySearch&queryID=myQueryID");
$this->doc->buildSearchForm(0, array(), 0, $actionURL, 'index');
-1
View File
@@ -52,7 +52,6 @@ $(document).ready(function()
$('#module').trigger('chosen:close');
});
$('#pageActions ul.dropdown-menu').css('left', '67px');
$('.libs-group.sort').sortable(
{
trigger: '.lib',
+2 -2
View File
@@ -63,7 +63,7 @@ $lang->doc->pastEdited = 'Total Updated';
$lang->doc->myDoc = 'My Documents';
$lang->doc->myCollection = 'My Favorites';
/* 方法列表。*/
/* Methods list */
$lang->doc->index = 'Document Home';
$lang->doc->create = 'Create Document';
$lang->doc->edit = 'Edit Document';
@@ -96,7 +96,7 @@ $lang->doc->fixedMenu = 'Fix to Menu';
$lang->doc->removeMenu = 'Remove from Menu';
$lang->doc->search = 'Search';
/* 查询条件列表 */
/* Query condition list. */
$lang->doc->allProduct = 'All' . $lang->productCommon . 's';
$lang->doc->allProject = 'All' . $lang->projectCommon . 's';
+38 -3
View File
@@ -147,7 +147,13 @@ class docModel extends model
}
elseif($type == 'all')
{
$stmt = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->orderBy('`order`, id desc')->query();
/* Associated display Settings -> shows only unclosed projects.*/
$stmt = $this->dao->select('distinct t1.*')->from(TABLE_DOCLIB)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on("t1.project = '' || t1.project = t2.id")
->where('t1.deleted')->eq(0)
->beginIF(strpos($this->config->doc->custom->showLibs,'unclosed') !== false)->andWhere('t2.status')->notin('done,closed')->fi()
->orderBy('t1.order,t1.id desc')
->query();
}
else
{
@@ -174,7 +180,7 @@ class docModel extends model
if($lib->project != 0) $lib->name = zget($projects, $lib->project, '') . '/' . $lib->name;
}
$libPairs[$lib->id] = $lib->name;
$libPairs[$lib->id] = '/' . $lib->name;
}
}
@@ -183,7 +189,7 @@ class docModel extends model
$stmt = $this->dao->select('*')->from(TABLE_DOCLIB)->where('id')->in($appendLibs)->orderBy('`order`, id desc')->query();
while($lib = $stmt->fetch())
{
if(!isset($libPairs[$lib->id]) and $this->checkPrivLib($lib, $extra)) $libPairs[$lib->id] = $lib->name;
if(!isset($libPairs[$lib->id]) and $this->checkPrivLib($lib, $extra)) $libPairs[$lib->id] = '/' . $lib->name;
}
}
@@ -653,6 +659,8 @@ class docModel extends model
$now = helper::now();
$doc = fixer::input('post')->setDefault('module', 0)
->stripTags($this->config->doc->editor->edit['id'], $this->config->allowedTags)
->setIF(!$this->post->users, 'users', '')
->setIF(!$this->post->groups, 'groups', '')
->add('editedBy', $this->app->user->account)
->add('editedDate', $now)
->cleanInt('module')
@@ -1601,6 +1609,33 @@ class docModel extends model
return $title;
}
/**
* Set document module index page create document button.
*
* @access public
* @return void
*/
public function setCreateDocMenu()
{
$libID = $this->dao->select('id')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->orderBy('id desc')->limit('1')->fetch('id');
$actions = "";
if($libID)
{
$actions .= "<div class='dropdown' id='createDropdown'>";
$actions .= "<button class='btn btn-primary' type='button' data-toggle='dropdown'><i class='icon icon-plus'></i>" . $this->lang->doc->create . "<span class='caret'></span></button>";
$actions .= "<ul class='dropdown-menu' style='left:0px'>";
foreach($this->lang->doc->typeList as $typeKey => $typeName)
{
$class = strpos($this->config->doc->officeTypes, $typeKey) !== false ? 'iframe' : '';
$actions .= "<li>";
$actions .= html::a(helper::createLink('doc', 'create', "libID=$libID&moduleID=0&type=$typeKey"), $typeName, '', "class='$class'");
$actions .= "</li>";
}
$actions .="</ul></div>";
}
return $actions;
}
public function setFastMenu($fastLib)
{
$actions = '';
+5 -4
View File
@@ -29,10 +29,11 @@ $lang->extension->eraseAction = 'Erase Extension';
$lang->extension->upgrade = 'Erweiterung Upgraden';
$lang->extension->agreeLicense = 'Lizenz';
$lang->extension->structure = 'Struktur';
$lang->extension->installed = 'Installiert';
$lang->extension->deactivated = 'Deaktiviert';
$lang->extension->available = 'Heruntergeladen';
$lang->extension->structure = 'Struktur';
$lang->extension->extstructure = 'Struktur';
$lang->extension->installed = 'Installiert';
$lang->extension->deactivated = 'Deaktiviert';
$lang->extension->available = 'Heruntergeladen';
$lang->extension->name = 'Erweiterungsname';
$lang->extension->code = 'Code';
+5 -4
View File
@@ -29,10 +29,11 @@ $lang->extension->eraseAction = 'Erase Extension';
$lang->extension->upgrade = 'Upgrade Extension';
$lang->extension->agreeLicense = 'I agree to the license.';
$lang->extension->structure = 'Extension Structure';
$lang->extension->installed = 'Installed';
$lang->extension->deactivated = 'Deactivated';
$lang->extension->available = 'Downloaded';
$lang->extension->structure = 'Structure';
$lang->extension->extstructure = 'Extension Structure';
$lang->extension->installed = 'Installed';
$lang->extension->deactivated = 'Deactivated';
$lang->extension->available = 'Downloaded';
$lang->extension->name = 'Extension Name';
$lang->extension->code = 'Code';
+5 -4
View File
@@ -29,10 +29,11 @@ $lang->extension->eraseAction = '清除插件';
$lang->extension->upgrade = '升级插件';
$lang->extension->agreeLicense = '我同意该授权';
$lang->extension->structure = '目录结构';
$lang->extension->installed = '已安装';
$lang->extension->deactivated = '被禁用';
$lang->extension->available = '已下载';
$lang->extension->structure = '目录结构';
$lang->extension->extstructure = '目录结构';
$lang->extension->installed = '已安装';
$lang->extension->deactivated = '被禁用';
$lang->extension->available = '已下载';
$lang->extension->name = '插件名称';
$lang->extension->code = '代号';
+5 -4
View File
@@ -29,10 +29,11 @@ $lang->extension->eraseAction = '清除插件';
$lang->extension->upgrade = '升級插件';
$lang->extension->agreeLicense = '我同意該授權';
$lang->extension->structure = '目錄結構';
$lang->extension->installed = '已安裝';
$lang->extension->deactivated = '被禁用';
$lang->extension->available = '已下載';
$lang->extension->structure = '目錄結構';
$lang->extension->extstructure = '目錄結構';
$lang->extension->installed = '已安裝';
$lang->extension->deactivated = '被禁用';
$lang->extension->available = '已下載';
$lang->extension->name = '插件名稱';
$lang->extension->code = '代號';
+1 -1
View File
@@ -626,7 +626,7 @@ class extensionModel extends model
rsort($dirs); // remove from the lower level directory.
foreach($dirs as $dir)
{
if(!@rmdir($appRoot . $dir)) $removeCommands[] = "rmdir $appRoot$dir";
if(!is_writable($appRoot . $dir) or !rmdir($appRoot . $dir)) $removeCommands[] = "rmdir $appRoot$dir";
}
}
+2 -2
View File
@@ -502,10 +502,10 @@ class file extends control
$mime = in_array($file->extension, $this->config->file->imageExtensions) ? "image/{$file->extension}" : $this->config->file->mimes['default'];
header("Content-type: $mime");
$cacheMaxAge = $this->config->cookieLife - time();
$cacheMaxAge = 10 * 365 * 24 * 3600;
header("Cache-Control: private");
header("Pragma: cache");
header("Expires:" . gmdate("D, d M Y H:i:s", $this->config->cookieLife) . " GMT");
header("Expires:" . gmdate("D, d M Y H:i:s", time() + $cacheMaxAge) . " GMT");
header("Cache-Control: max-age=$cacheMaxAge");
$handle = fopen($file->realPath, "r");
-3
View File
@@ -6,6 +6,3 @@
#mainMenu #groupName{line-height:33px; float: left}
.checkbox-right{padding-left:0px !important;}
.thWidth{width:180px !important;}
html[lang^='zh-'] .thWidth{width:150px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:180px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:150px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:150px !important;}
-3
View File
@@ -4,6 +4,3 @@
.checkbox-primary>label{padding-left:20px;}
.pl-0px {padding-left:0px !important;}
.pt-0px {padding-top:0px !important;}
.thWidth{width:130px !important;}
html[lang^='zh-'] .thWidth{width:100px !important;}
+1
View File
@@ -0,0 +1 @@
.thWidth{width:130px !important;}

Some files were not shown because too many files have changed in this diff Show More