Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
+21
-21
@@ -113,7 +113,7 @@ $lang->typeAB = 'Type';
|
||||
$lang->common = new stdclass();
|
||||
$lang->common->common = 'Common Module';
|
||||
|
||||
/* 主导航菜单。*/
|
||||
/* Main menu. */
|
||||
$lang->menu = new stdclass();
|
||||
$lang->menu->my = '<span>Dashboard</span>|my|index';
|
||||
$lang->menu->product = $lang->productCommon . '|product|index|locate=no';
|
||||
@@ -126,7 +126,7 @@ $lang->menu->admin = 'Admin|admin|index';
|
||||
|
||||
$lang->dividerMenu = ',qa,';
|
||||
|
||||
/* 查询条中可以选择的对象列表。*/
|
||||
/* Object list in search form. */
|
||||
$lang->searchObjects['bug'] = 'Bug';
|
||||
$lang->searchObjects['story'] = 'Story';
|
||||
$lang->searchObjects['task'] = 'Task';
|
||||
@@ -143,12 +143,12 @@ $lang->searchObjects['testsuite'] = 'Case Library';
|
||||
$lang->searchObjects['testreport'] = 'Test Report';
|
||||
$lang->searchTips = 'ID (ctrl+g)';
|
||||
|
||||
/* 导入支持的编码格式。*/
|
||||
/* Code formats for import. */
|
||||
$lang->importEncodeList['gbk'] = 'GBK';
|
||||
$lang->importEncodeList['big5'] = 'BIG5';
|
||||
$lang->importEncodeList['utf-8'] = 'UTF-8';
|
||||
|
||||
/* 导出文件的类型列表。*/
|
||||
/* File type list for export. */
|
||||
$lang->exportFileTypeList['csv'] = 'csv';
|
||||
$lang->exportFileTypeList['xml'] = 'xml';
|
||||
$lang->exportFileTypeList['html'] = 'html';
|
||||
@@ -156,10 +156,10 @@ $lang->exportFileTypeList['html'] = 'html';
|
||||
$lang->exportTypeList['all'] = 'All';
|
||||
$lang->exportTypeList['selected'] = 'Selected';
|
||||
|
||||
/* 语言 */
|
||||
/* Language. */
|
||||
$lang->lang = 'Language';
|
||||
|
||||
/* 风格列表。*/
|
||||
/* Theme style. */
|
||||
$lang->theme = 'Theme';
|
||||
$lang->themes['default'] = 'ZenTao Blue (default)';
|
||||
$lang->themes['green'] = 'Green';
|
||||
@@ -169,14 +169,14 @@ $lang->themes['pink'] = 'Pink';
|
||||
$lang->themes['blackberry'] = 'Blackberry';
|
||||
$lang->themes['classic'] = 'Classic';
|
||||
|
||||
/* 首页菜单设置。*/
|
||||
/* Index menu settings. */
|
||||
$lang->index = new stdclass();
|
||||
$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. */
|
||||
$lang->my = new stdclass();
|
||||
$lang->my->menu = new stdclass();
|
||||
|
||||
@@ -199,7 +199,7 @@ $lang->todo->menu = $lang->my->menu;
|
||||
$lang->score = new stdclass();
|
||||
$lang->score->menu = $lang->my->menu;
|
||||
|
||||
/* 产品视图设置。*/
|
||||
/* Product menu settings. */
|
||||
$lang->product = new stdclass();
|
||||
$lang->product->menu = new stdclass();
|
||||
|
||||
@@ -224,7 +224,7 @@ $lang->story->menu = $lang->product->menu;
|
||||
$lang->productplan->menu = $lang->product->menu;
|
||||
$lang->release->menu = $lang->product->menu;
|
||||
|
||||
/* 项目视图菜单设置。*/
|
||||
/* Project menu settings. */
|
||||
$lang->project = new stdclass();
|
||||
$lang->project->menu = new stdclass();
|
||||
|
||||
@@ -261,7 +261,7 @@ $lang->task->menu = $lang->project->menu;
|
||||
$lang->build->menu = $lang->project->menu;
|
||||
$lang->build->menu->qa = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
|
||||
|
||||
/* QA视图菜单设置。*/
|
||||
/* QA menu settings. */
|
||||
$lang->qa = new stdclass();
|
||||
$lang->qa->menu = new stdclass();
|
||||
|
||||
@@ -327,12 +327,12 @@ $lang->caselib->menu->testsuite = array('link' => 'Suite|testsuite|browse|');
|
||||
$lang->caselib->menu->report = array('link' => 'Report|testreport|browse|');
|
||||
$lang->caselib->menu->caselib = array('link' => 'Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase');
|
||||
|
||||
/* 文档视图菜单设置。*/
|
||||
/* Doc menu settings. */
|
||||
$lang->doc = new stdclass();
|
||||
$lang->doc->menu = new stdclass();
|
||||
//$lang->doc->menu->createLib = array('link' => '<i class="icon icon-folder-plus"></i> Add Doc Lib|doc|createLib', 'float' => 'right');
|
||||
|
||||
/* 统计视图菜单设置。*/
|
||||
/* Report menu settings. */
|
||||
$lang->report = new stdclass();
|
||||
$lang->report->menu = new stdclass();
|
||||
|
||||
@@ -344,7 +344,7 @@ $lang->report->menu->staff = array('link' => 'Company|report|workload');
|
||||
$lang->report->notice = new stdclass();
|
||||
$lang->report->notice->help = 'Note: Report is generated from search results. Please search in the list page before you generate a report.';
|
||||
|
||||
/* 组织结构视图菜单设置。*/
|
||||
/* Company menu settings. */
|
||||
$lang->company = new stdclass();
|
||||
$lang->company->menu = new stdclass();
|
||||
$lang->company->menu->browseUser = array('link' => 'User|company|browse', 'subModule' => 'user');
|
||||
@@ -361,7 +361,7 @@ $lang->dept->menu = $lang->company->menu;
|
||||
$lang->group->menu = $lang->company->menu;
|
||||
$lang->user->menu = $lang->company->menu;
|
||||
|
||||
/* 后台管理菜单设置。*/
|
||||
/* Admin menu settings. */
|
||||
$lang->admin = new stdclass();
|
||||
$lang->admin->menu = new stdclass();
|
||||
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
|
||||
@@ -405,7 +405,7 @@ $lang->entry->menu = $lang->admin->menu;
|
||||
$lang->webhook->menu = $lang->admin->menu;
|
||||
$lang->message->menu = $lang->admin->menu;
|
||||
|
||||
/* 菜单分组。*/
|
||||
/* Menu group. */
|
||||
$lang->menugroup = new stdclass();
|
||||
$lang->menugroup->release = 'product';
|
||||
$lang->menugroup->story = 'product';
|
||||
@@ -439,7 +439,7 @@ $lang->menugroup->entry = 'admin';
|
||||
$lang->menugroup->webhook = 'admin';
|
||||
$lang->menugroup->message = 'admin';
|
||||
|
||||
/* 错误提示信息。*/
|
||||
/* Error info. */
|
||||
$lang->error = new stdclass();
|
||||
$lang->error->companyNotFound = "The domain %s cannot be found!";
|
||||
$lang->error->length = array("『%s』Length Error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』.");
|
||||
@@ -465,7 +465,7 @@ $lang->error->noData = 'No Data';
|
||||
$lang->error->editedByOther = 'This record might have been changed. Please refresh and try to edit again!';
|
||||
$lang->error->tutorialData = 'No data can be imported in tutorial mode. Please exit tutorial first!';
|
||||
|
||||
/* 分页信息。*/
|
||||
/* Page info. */
|
||||
$lang->pager = new stdclass();
|
||||
$lang->pager->noRecord = "No Records";
|
||||
$lang->pager->digest = " <strong>%s</strong> in total. %s <strong>%s/%s</strong> ";
|
||||
@@ -498,7 +498,7 @@ $lang->chooseUsersToMail = "Choose users that will be notified.";
|
||||
$lang->browserNotice = 'Your current browser might not show the best effect. Please use Chrome, Firefox, IE9+, Opera or Safari.';
|
||||
$lang->noticePasteImg = "Paste images here";
|
||||
|
||||
/* 时间格式设置。*/
|
||||
/* Time formats settings. */
|
||||
if(!defined('DT_DATETIME1')) define('DT_DATETIME1', 'Y-m-d H:i:s');
|
||||
if(!defined('DT_DATETIME2')) define('DT_DATETIME2', 'y-m-d H:i');
|
||||
if(!defined('DT_MONTHTIME1'))define('DT_MONTHTIME1', 'n/d H:i');
|
||||
@@ -510,7 +510,7 @@ if(!defined('DT_DATE4')) define('DT_DATE4', 'n/j');
|
||||
if(!defined('DT_TIME1')) define('DT_TIME1', 'H:i:s');
|
||||
if(!defined('DT_TIME2')) define('DT_TIME2', 'H:i');
|
||||
|
||||
/* datepicker 时间*/
|
||||
/* Datepicker. */
|
||||
$lang->datepicker = new stdclass();
|
||||
|
||||
$lang->datepicker->dpText = new stdclass();
|
||||
@@ -532,7 +532,7 @@ $lang->datepicker->dayNames = array('Sunday', 'Monday', 'Tuesday', 'Wednesda
|
||||
$lang->datepicker->abbrDayNames = array('Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat');
|
||||
$lang->datepicker->monthNames = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
|
||||
|
||||
/* Common action icons 通用动作图标 */
|
||||
/* Common action icons. */
|
||||
$lang->icons['todo'] = 'check';
|
||||
$lang->icons['product'] = 'cube';
|
||||
$lang->icons['bug'] = 'bug';
|
||||
|
||||
@@ -470,9 +470,9 @@ class custom extends control
|
||||
{
|
||||
if($this->server->request_method == 'POST')
|
||||
{
|
||||
$data = fixer::input('post')->join('showLibs', ',')->get();
|
||||
if(isset($data->showLibs)) $data = $data->showLibs;
|
||||
$this->loadModel('setting')->setItem("{$this->app->user->account}.doc.custom.showLibs", $data);
|
||||
$data = fixer::input('post')->get();
|
||||
$this->loadModel('setting')->deleteItems("owner={$this->app->user->account}&module=doc§ion=custom");
|
||||
$this->setting->setItems("{$this->app->user->account}.doc.custom", $data);
|
||||
die(js::reload('parent.parent'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,10 +13,12 @@ $config->doc->create->requiredFields = 'title';
|
||||
$config->doc->edit->requiredFields = 'title';
|
||||
|
||||
$config->doc->customObjectLibs = 'files,customFiles';
|
||||
$config->doc->notArticleType = '';
|
||||
|
||||
$config->doc->custom = new stdclass();
|
||||
$config->doc->custom->objectLibs = $config->doc->customObjectLibs;
|
||||
$config->doc->custom->showLibs = 'zero,unclosed';
|
||||
$config->doc->custom->objectLibs = $config->doc->customObjectLibs;
|
||||
$config->doc->custom->showProjects = 'all';
|
||||
$config->doc->custom->showNullLib = false;
|
||||
|
||||
$config->doc->editor = new stdclass();
|
||||
$config->doc->editor->create = array('id' => 'content', 'tools' => 'fullTools');
|
||||
|
||||
+12
-5
@@ -100,8 +100,12 @@ $lang->doc->libTypeList['product'] = $lang->productCommon . ' Library';
|
||||
$lang->doc->libTypeList['project'] = $lang->projectCommon . ' Library';
|
||||
$lang->doc->libTypeList['custom'] = 'Custom Library';
|
||||
|
||||
$lang->doc->systemLibs['product'] = $lang->productCommon . 'Doc Lib';
|
||||
$lang->doc->systemLibs['project'] = $lang->projectCommon . 'Doc Lib';
|
||||
$lang->doc->libIconList['product'] = 'icon-cube';
|
||||
$lang->doc->libIconList['project'] = 'icon-stack';
|
||||
$lang->doc->libIconList['custom'] = 'icon-folder-o';
|
||||
|
||||
$lang->doc->systemLibs['product'] = $lang->productCommon;
|
||||
$lang->doc->systemLibs['project'] = $lang->projectCommon;
|
||||
|
||||
global $config;
|
||||
if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->systemLibs['project']);
|
||||
@@ -136,9 +140,10 @@ $lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star';
|
||||
$lang->doc->customObjectLibs['files'] = 'Show File Library';
|
||||
$lang->doc->customObjectLibs['customFiles'] = 'Show Custom Library';
|
||||
|
||||
$lang->doc->customShowLibs = 'Library display settings';
|
||||
$lang->doc->customShowLibsList['zero'] = 'Display zero document library';
|
||||
$lang->doc->customShowLibsList['unclosed'] = 'Show only projects that are not closed.';
|
||||
$lang->doc->customShowLibs = 'Library display settings';
|
||||
$lang->doc->customShowNullLib = 'Display empty library';
|
||||
$lang->doc->customShowLibProjects['unclosed'] = 'Display projects that are not closed';
|
||||
$lang->doc->customShowLibProjects['all'] = 'Display all projects';
|
||||
|
||||
$lang->doc->confirmDelete = "Do you want to delete this document?";
|
||||
$lang->doc->confirmDeleteLib = "Do you want to delete this Doc Lib?";
|
||||
@@ -174,3 +179,5 @@ $lang->doclib->main['project'] = 'Main Library';
|
||||
$lang->doclib->tabList['product'] = $lang->productCommon;
|
||||
$lang->doclib->tabList['project'] = $lang->projectCommon;
|
||||
$lang->doclib->tabList['custom'] = 'Custom';
|
||||
|
||||
$lang->doclib->nameList['custom'] = 'Doc lib name';
|
||||
|
||||
@@ -140,9 +140,10 @@ $lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star';
|
||||
$lang->doc->customObjectLibs['files'] = '显示附件库';
|
||||
$lang->doc->customObjectLibs['customFiles'] = '显示自定义文档库';
|
||||
|
||||
$lang->doc->customShowLibs = '文档库显示设置';
|
||||
$lang->doc->customShowLibsList['zero'] = '显示零文档的库';
|
||||
$lang->doc->customShowLibsList['unclosed'] = '只显示未关闭的项目';
|
||||
$lang->doc->customShowLibs = '文档库显示设置';
|
||||
$lang->doc->customShowNullLib = '显示空文档的库';
|
||||
$lang->doc->customShowLibProjects['unclosed'] = '显示未关闭的项目';
|
||||
$lang->doc->customShowLibProjects['all'] = '显示所有的项目';
|
||||
|
||||
$lang->doc->confirmDelete = "您确定删除该文档吗?";
|
||||
$lang->doc->confirmDeleteLib = "您确定删除该文档库吗?";
|
||||
|
||||
+16
-11
@@ -103,7 +103,6 @@ class docModel extends model
|
||||
|
||||
$actions = $this->setFastMenu($fastLib);
|
||||
$actions .= common::hasPriv('doc', 'createLib') ? html::a(helper::createLink('doc', 'createLib', "type={$type}&objectID={$currentLib}"), "<i class='icon icon-folder-plus'></i> " . $this->lang->doc->createLib, '', "class='btn btn-secondary iframe'") : '';
|
||||
if($libID and common::hasPriv('doc', 'create')) $actions .= html::a(helper::createLink('doc', 'create', "libID=$libID"), "<i class='icon icon-plus'></i> " . $this->lang->doc->create, '', "class='btn btn-primary'");
|
||||
|
||||
$this->lang->modulePageActions = $actions;
|
||||
}
|
||||
@@ -138,7 +137,7 @@ class docModel extends model
|
||||
$stmt = $this->dao->select('t1.*')->from(TABLE_DOCLIB)->alias('t1')
|
||||
->leftJoin($table)->alias('t2')->on("t1.$type=t2.id")
|
||||
->where("t1.$type")->ne(0)
|
||||
->beginIF($type == 'project' and strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->beginIF($type == 'project' and $this->config->doc->custom->showProjects == 'unclosed')->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->orderBy("t2.order desc, t1.order, t1.id")
|
||||
->query();
|
||||
@@ -284,6 +283,7 @@ class docModel extends model
|
||||
->beginIF($this->config->global->flow == 'onlyStory' || $this->config->global->flow == 'onlyTest')->andWhere('project')->eq(0)->fi()
|
||||
->beginIF($libID)->andWhere('lib')->in($libID)->fi()
|
||||
->andWhere('lib')->in($allLibs)
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->andWhere('addedBy')->eq($this->app->user->account)
|
||||
->orderBy($sort)
|
||||
->page($pager)
|
||||
@@ -296,6 +296,7 @@ class docModel extends model
|
||||
->beginIF($this->config->global->flow == 'onlyTask')->andWhere('product')->eq(0)->fi()
|
||||
->beginIF($this->config->global->flow == 'onlyStory' || $this->config->global->flow == 'onlyTest')->andWhere('project')->eq(0)->fi()
|
||||
->andWhere('id')->in($docIdList)
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->andWhere('lib')->in($allLibs)
|
||||
->orderBy('editedDate_desc')
|
||||
->page($pager)
|
||||
@@ -309,6 +310,7 @@ class docModel extends model
|
||||
->beginIF($this->config->global->flow == 'onlyStory' || $this->config->global->flow == 'onlyTest')->andWhere('project')->eq(0)->fi()
|
||||
->beginIF($libID)->andWhere('lib')->in($libID)->fi()
|
||||
->andWhere('lib')->in($allLibs)
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->andWhere('collector')->like("%,{$this->app->user->account},%")
|
||||
->orderBy($sort)
|
||||
->page($pager)
|
||||
@@ -353,6 +355,7 @@ class docModel extends model
|
||||
|
||||
$docs = $this->dao->select('*')->from(TABLE_DOC)->where($docQuery)
|
||||
->beginIF(!$libCond)->andWhere("lib")->eq($libID)->fi()
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchAll('id');
|
||||
foreach($docs as $docID => $doc)
|
||||
@@ -377,6 +380,7 @@ class docModel extends model
|
||||
->beginIF($this->config->global->flow == 'onlyStory' || $this->config->global->flow == 'onlyTest')->andWhere('project')->eq(0)->fi()
|
||||
->beginIF(!empty($docIdList))->andWhere('t1.id')->in($docIdList)->fi()
|
||||
->andWhere('t1.title', true)->like("%{$this->session->searchDoc}%")
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->orWhere('t2.content')->like("%{$this->session->searchDoc}%")->markRight(1)
|
||||
->andWhere('t1.lib')->in($allLibs)
|
||||
->orderBy($sort)
|
||||
@@ -454,6 +458,7 @@ class docModel extends model
|
||||
{
|
||||
$stmt = $this->dao->select('*')->from(TABLE_DOC)
|
||||
->where('deleted')->eq(0)
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->beginIF($libID)->andWhere('lib')->in($libID)->fi()
|
||||
->beginIF(!empty($module))->andWhere('module')->in($module)->fi()
|
||||
->query();
|
||||
@@ -906,7 +911,7 @@ class docModel extends model
|
||||
$fields = $type == 'product' ? "createdBy, createdDate" : "openedBy AS createdBy, openedDate AS createdDate";
|
||||
$libs = $this->dao->select("id, name, `order`, {$fields}")->from($table)
|
||||
->where('id')->in($idList)
|
||||
->beginIF($type == 'project' and strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('status')->notin('done,closed')->fi()
|
||||
->beginIF($type == 'project' and $this->config->doc->custom->showProjects == 'unclosed')->andWhere('status')->notin('done,closed')->fi()
|
||||
->orderBy('`order` desc, id desc')
|
||||
->page($pager, 'id')
|
||||
->fetchAll('id');
|
||||
@@ -966,7 +971,7 @@ class docModel extends model
|
||||
$hasProject = $this->dao->select('DISTINCT product')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t1.product')->in($productIdList)
|
||||
->beginIF(strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->beginIF($this->config->doc->custom->showProjects == 'unclosed')->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->fetchPairs('product', 'product');
|
||||
}
|
||||
@@ -990,7 +995,7 @@ class docModel extends model
|
||||
}
|
||||
$projects = $this->dao->select('id,name,status')->from(TABLE_PROJECT)
|
||||
->where('id')->in(array_keys($projectLibs))
|
||||
->beginIF(strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('status')->notin('done,closed')->fi()
|
||||
->beginIF($this->config->doc->custom->showProjects == 'unclosed')->andWhere('status')->notin('done,closed')->fi()
|
||||
->andWhere('deleted')->eq('0')
|
||||
->orderBy('`order`_desc')
|
||||
->fetchAll();
|
||||
@@ -1028,7 +1033,7 @@ class docModel extends model
|
||||
if($type == 'product' or $type == 'project')
|
||||
{
|
||||
$nonzeroLibs = array();
|
||||
if(strpos($this->config->doc->custom->showLibs, 'zero') === false)
|
||||
if($this->config->doc->custom->showNullLib)
|
||||
{
|
||||
$nonzeroLibs = $this->dao->select('lib,count(*) as count')->from(TABLE_DOC)->where('deleted')->eq('0')->groupBy('lib')->having('count')->ne(0)->fetchPairs('lib', 'lib');
|
||||
}
|
||||
@@ -1037,8 +1042,8 @@ class docModel extends model
|
||||
$stmt = $this->dao->select('t1.*')->from(TABLE_DOCLIB)->alias('t1')
|
||||
->leftJoin($table)->alias('t2')->on("t1.$type=t2.id")
|
||||
->where('t1.deleted')->eq(0)->andWhere("t1.$type")->ne(0)
|
||||
->beginIF($type == 'project' and strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->beginIF(strpos($this->config->doc->custom->showLibs, 'zero') === false)->andWhere('t1.id')->in($nonzeroLibs)->fi()
|
||||
->beginIF($type == 'project' and $this->config->doc->custom->showProjects == 'unclosed')->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->beginIF($this->config->doc->custom->showNullLib)->andWhere('t1.id')->in($nonzeroLibs)->fi()
|
||||
->orderBy("t2.`order` desc, t1.`order` asc, id desc")
|
||||
->query();
|
||||
}
|
||||
@@ -1089,7 +1094,7 @@ class docModel extends model
|
||||
$hasProject = $this->dao->select('DISTINCT product')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t1.product')->in($idList)
|
||||
->beginIF(strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->beginIF($this->config->doc->custom->showProjects == 'unclosed')->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->fetchPairs('product', 'product');
|
||||
}
|
||||
@@ -1132,7 +1137,7 @@ class docModel extends model
|
||||
$hasProject = $this->dao->select('DISTINCT product, count(project) as projectCount')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t1.product')->eq($objectID)
|
||||
->beginIF(strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->beginIF($this->config->doc->custom->showProjects == 'unclosed')->andWhere('t2.status')->notin('done,closed')->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->groupBy('product')
|
||||
->fetchPairs('product', 'projectCount');
|
||||
@@ -1398,7 +1403,7 @@ class docModel extends model
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.root=t2.project')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t3')->on('t1.root=t3.id')
|
||||
->where('t2.product')->eq($objectID)
|
||||
->beginIF(strpos($this->config->doc->custom->showLibs, 'unclosed') !== false)->andWhere('t3.status')->notin('done,closed')->fi()
|
||||
->beginIF($this->config->doc->custom->showProjects == 'unclosed')->andWhere('t3.status')->notin('done,closed')->fi()
|
||||
->andWhere('t1.type')->eq('project')
|
||||
->andWhere('t3.deleted')->eq('0')
|
||||
->fetchPairs('account', 'account');
|
||||
|
||||
@@ -38,16 +38,23 @@ var browseType = '<?php echo $browseType;?>';
|
||||
<i class="icon icon-search text-muted"></i>
|
||||
<?php endif;?>
|
||||
<?php echo $breadTitle;?>
|
||||
|
||||
</div>
|
||||
<nav class="panel-actions btn-toolbar">
|
||||
<div class="btn-group">
|
||||
<?php echo html::a('javascript:setBrowseType("bylist")', "<i class='icon icon-bars'></i>", '', "title='{$lang->doc->browseTypeList['list']}' class='btn btn-icon text-primary'");?>
|
||||
<?php echo html::a('javascript:setBrowseType("bygrid")', "<i class='icon icon-cards-view'></i>", '', "title='{$lang->doc->browseTypeList['grid']}' class='btn btn-icon'");?>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="panel-actions btn-toolbar">
|
||||
<div class="btn-group">
|
||||
<?php echo html::a(helper::createLink('tree', 'browse', "libID=$libID&viewType=doc"), "<i class='icon icon-cog'></i>" . $lang->doc->manageType, '',"class='btn btn-link'");?>
|
||||
<?php if($libID):?>
|
||||
<div class="dropdown">
|
||||
<button class="btn" type="button" data-toggle="dropdown"><i class='icon-cog'></i> <span class="caret"></span></button>
|
||||
<ul class='dropdown-menu'>
|
||||
<li><?php common::printLink('tree', 'browse', "libID=$libID&viewType=doc", "<i class='icon icon-cog'></i>" . $lang->doc->manageType);?></li>
|
||||
<li><?php common::printLink('doc', 'editLib', "libID=$libID", "<i class='icon icon-edit'></i>" . $lang->edit, '', "class='iframe'");?></li>
|
||||
<li><?php common::printLink('doc', 'delete', "libID=$libID", "<i class='icon icon-remove'></i>" . $lang->delete, 'hiddenwin');?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php common::printLink('doc', 'create', "libID=$libID", "<i class='icon icon-plus'></i> " . $this->lang->doc->create, '', "class='btn btn-primary'");?>
|
||||
<?php endif;?>
|
||||
</nav>
|
||||
</div>
|
||||
<?php if(empty($docs) and empty($modules) and empty($libs) and empty($attachLibs)):?>
|
||||
|
||||
@@ -4,14 +4,22 @@
|
||||
<div class="panel-title font-normal">
|
||||
<i class="icon icon-folder-open-o text-muted"></i>
|
||||
<?php echo $breadTitle;?>
|
||||
<div class="btn-group">
|
||||
<?php echo html::a('javascript:setBrowseType("bylist")', "<i class='icon icon-bars'></i>", '', "title='{$lang->doc->browseTypeList['list']}' class='btn btn-icon'");?>
|
||||
<?php echo html::a('javascript:setBrowseType("bygrid")', "<i class='icon icon-cards-view'></i>", '', "title='{$lang->doc->browseTypeList['grid']}' class='btn btn-icon text-primary'");?>
|
||||
</div>
|
||||
<nav class="panel-actions btn-toolbar">
|
||||
<div class="btn-group">
|
||||
<?php echo html::a(helper::createLink('tree', 'browse', "libID=$libID&viewType=doc"), "<i class='icon icon-cog'></i>" . $lang->doc->manageType, '',"class='btn btn-link'");?>
|
||||
<?php echo html::a('javascript:setBrowseType("bylist")', "<i class='icon icon-bars'></i>", '', "title='{$lang->doc->browseTypeList['list']}' class='btn btn-icon'");?>
|
||||
<?php echo html::a('javascript:setBrowseType("bygrid")', "<i class='icon icon-cards-view'></i>", '', "title='{$lang->doc->browseTypeList['grid']}' class='btn btn-icon text-primary'");?>
|
||||
</div>
|
||||
<?php if($libID):?>
|
||||
<div class="dropdown">
|
||||
<button class="btn" type="button" data-toggle="dropdown"><i class='icon-cog'></i> <span class="caret"></span></button>
|
||||
<ul class='dropdown-menu'>
|
||||
<li><?php common::printLink('tree', 'browse', "libID=$libID&viewType=doc", "<i class='icon icon-cog'></i>" . $lang->doc->manageType);?></li>
|
||||
<li><?php common::printLink('doc', 'editLib', "libID=$libID", "<i class='icon icon-edit'></i>" . $lang->edit, '', "class='iframe'");?></li>
|
||||
<li><?php common::printLink('doc', 'delete', "libID=$libID", "<i class='icon icon-remove'></i>" . $lang->delete, 'hiddenwin');?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php common::printLink('doc', 'create', "libID=$libID", "<i class='icon icon-plus'></i> " . $this->lang->doc->create, '', "class='btn btn-primary'");?>
|
||||
<?php endif;?>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -144,7 +144,7 @@ if(empty($type)) $type = 'product';
|
||||
</div>
|
||||
<div class='side-footer'><?php echo html::a('###', "<i class='icon-cog'></i> {$lang->doc->customShowLibs}", '', "class='setting text-secondary small' data-target='#settingModal' data-toggle='modal'");?></div>
|
||||
<div class='modal fade' id='settingModal' aria-hidden="true">
|
||||
<div class='modal-dialog'>
|
||||
<div class='modal-dialog mw-400px'>
|
||||
<div class='modal-content'>
|
||||
<div class='modal-header'>
|
||||
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only"><?php echo $lang->close;?></span></button>
|
||||
@@ -154,7 +154,15 @@ if(empty($type)) $type = 'product';
|
||||
<form action='<?php echo $this->createLink('custom', 'ajaxSetDoc');?>' target='hiddenwin' method='post'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td><?php echo html::checkbox('showLibs', $lang->doc->customShowLibsList, $config->doc->custom->showLibs);?></td>
|
||||
<td>
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" name="showNullLib" value="1" id="showNullLib1" <?php if($config->doc->custom->showNullLib) echo 'checked';?>>
|
||||
<label for="showNullLib1"><?php echo $lang->doc->customShowNullLib;?></label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo html::radio('showProjects', $lang->doc->customShowLibProjects, $config->doc->custom->showProjects);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo html::submitButton();?></td>
|
||||
|
||||
@@ -163,7 +163,7 @@ class file extends control
|
||||
if($file->extension == 'txt')
|
||||
{
|
||||
$extension = 'txt';
|
||||
if(($postion = strrpos($file->title, '.')) !== false)$extension = substr($file->title, $postion + 1);
|
||||
if(($postion = strrpos($file->title, '.')) !== false) $extension = substr($file->title, $postion + 1);
|
||||
if($extension != 'txt') $mode = 'down';
|
||||
$file->extension = $extension;
|
||||
}
|
||||
@@ -367,7 +367,7 @@ class file extends control
|
||||
$this->app->loadLang('action');
|
||||
$file = $this->file->getByID($fileID);
|
||||
$data = fixer::input('post')->get();
|
||||
$fileName = $data->fileName . '.' . $file->extension;
|
||||
$fileName = $data->fileName . '.' . $data->extension;
|
||||
$this->dao->update(TABLE_FILE)->set('title')->eq($fileName)->where('id')->eq($fileID)->exec();
|
||||
|
||||
$extension = "." . $file->extension;
|
||||
|
||||
@@ -31,12 +31,24 @@ function closeWindow()
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->file->inputFileName;?></h2>
|
||||
</div>
|
||||
<?php
|
||||
if(strrpos($file->title, '.') !== false)
|
||||
{
|
||||
/* Fix the file name exe.exe */
|
||||
$title = explode('.', $file->title);
|
||||
$extension = end($title);
|
||||
if($file->extension == 'txt' && $extension != $file->extension) $file->extension = $extension;
|
||||
array_pop($title);
|
||||
$file->title = join('.', $title);
|
||||
}
|
||||
?>
|
||||
<form class='main-form' method='post' target='hiddenwin' onsubmit='setFileName();'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('fileName', rtrim($file->title, '.' . $file->extension), "class='form-control' size='40' autocomplete='off'");?>
|
||||
<?php echo html::input('fileName', $file->title, "class='form-control' size='40' autocomplete='off'");?>
|
||||
<input type="hidden" name="extension" value="<?php echo $file->extension;?>"/>
|
||||
<strong class='input-group-addon'>.<?php echo $file->extension;?></strong>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -9,9 +9,8 @@ $sessionString .= session_name() . '=' . session_id();
|
||||
<div class="detail-content">
|
||||
<?php endif;?>
|
||||
<style>
|
||||
.files-list>li>a {display: inline;}
|
||||
.files-list>li>a {display: inline; word-wrap: break-word;}
|
||||
.files-list>li>.right-icon {opacity: 1;}
|
||||
.files-list>li>a{word-wrap: break-word;}
|
||||
</style>
|
||||
<script>
|
||||
/* Delete a file. */
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<ul>
|
||||
<?php $api = $app->getClientLang() == 'en' ? $lang->misc->enApi : $lang->misc->api;?>
|
||||
<?php $api = empty($config->isINT) ? $lang->misc->api : $lang->misc->enApi;?>
|
||||
<?php foreach($groupItems as $item => $label):?>
|
||||
<li><?php echo html::a($api . "/goto.php?item=$item&from=about", $label, '_blank', "id='$item'");;?></li>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -141,6 +141,7 @@ $lang->testcase->dittoNotice = 'This Case does not belong to the Product
|
||||
$lang->testcase->reviewList[0] = 'NO';
|
||||
$lang->testcase->reviewList[1] = 'YES';
|
||||
|
||||
$lang->testcase->priList[0] = '';
|
||||
$lang->testcase->priList[3] = 3;
|
||||
$lang->testcase->priList[1] = 1;
|
||||
$lang->testcase->priList[2] = 2;
|
||||
|
||||
@@ -141,6 +141,7 @@ $lang->testcase->dittoNotice = '该用例与上一用例不属于同一
|
||||
$lang->testcase->reviewList[0] = '否';
|
||||
$lang->testcase->reviewList[1] = '是';
|
||||
|
||||
$lang->testcase->priList[0] = '';
|
||||
$lang->testcase->priList[3] = 3;
|
||||
$lang->testcase->priList[1] = 1;
|
||||
$lang->testcase->priList[2] = 2;
|
||||
|
||||
@@ -74,12 +74,23 @@
|
||||
<?php if($config->global->flow != 'onlyTest'):?>
|
||||
<tr>
|
||||
<th class='w-60px'><?php echo $lang->testtask->project;?></th>
|
||||
<td><?php echo html::a($this->createLink('project', 'story', "projectID=$task->project"), $task->projectName, '', "title='{$task->projectName}'" . ($isOnlybody ? ' target="_blank"' : ''));?></td>
|
||||
<td><?php echo $isOnlybody ? $task->projectName : html::a($this->createLink('project', 'story', "projectID=$task->project"), $task->projectName, '', "title='{$task->projectName}'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->testtask->build;?></th>
|
||||
<td><?php $task->build == 'trunk' ? print($lang->trunk) : print(html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', "title='{$task->buildName}'" . ($isOnlybody ? ' target="_blank"' : '')));?></td>
|
||||
<td>
|
||||
<?php
|
||||
if($task->build == 'trunk')
|
||||
{
|
||||
print($lang->trunk);
|
||||
}
|
||||
else
|
||||
{
|
||||
$isOnlybody ? print($task->buildName) : print(html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', "title='{$task->buildName}'"));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testtask->owner;?></th>
|
||||
|
||||
Reference in New Issue
Block a user