Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -609,6 +609,9 @@ class baseControl
|
||||
unset($this->view->header);
|
||||
unset($this->view->position);
|
||||
unset($this->view->moduleTree);
|
||||
unset($this->view->common);
|
||||
unset($this->view->pager->app);
|
||||
unset($this->view->pager->lang);
|
||||
|
||||
$output['status'] = is_object($this->view) ? 'success' : 'fail';
|
||||
$output['data'] = json_encode($this->view);
|
||||
@@ -752,7 +755,7 @@ class baseControl
|
||||
if($type != 'json') die();
|
||||
|
||||
$data = (array) $data;
|
||||
if(helper::isAjaxRequest()) print(json_encode($data)) && die(helper::removeUTF8Bom(ob_get_clean()));
|
||||
if(helper::isAjaxRequest()) print(json_encode($data)) and die(helper::removeUTF8Bom(ob_get_clean()));
|
||||
|
||||
/**
|
||||
* 响应非ajax的请求。
|
||||
|
||||
@@ -1961,8 +1961,8 @@ class baseRouter
|
||||
$errorFile = $this->getLogRoot() . 'php.' . date('Ymd') . '.log.php';
|
||||
if(!is_file($errorFile)) file_put_contents($errorFile, "<?php\n die();\n?>\n");
|
||||
|
||||
$fh = @fopen($errorFile, 'a');
|
||||
if($fh) fwrite($fh, strip_tags($errorLog)) && fclose($fh);
|
||||
$fh = fopen($errorFile, 'a');
|
||||
if($fh) fwrite($fh, strip_tags($errorLog)) and fclose($fh);
|
||||
|
||||
/*
|
||||
* 如果debug > 1,显示warning, notice级别的错误。
|
||||
|
||||
@@ -17,7 +17,6 @@ $lang->action->objectID = 'ID';
|
||||
$lang->action->objectName = 'Name';
|
||||
$lang->action->actor = 'Actor';
|
||||
$lang->action->action = 'Action';
|
||||
$lang->action->actionID = 'ActionID';
|
||||
$lang->action->date = 'Date';
|
||||
|
||||
$lang->action->trash = 'Trash';
|
||||
@@ -99,6 +98,10 @@ $lang->action->desc->diff1 = 'changed <strong><i>%s</i></strong>, old i
|
||||
$lang->action->desc->diff2 = 'changed <strong><i>%s</i></strong>, the diff is:' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff3 = "changed file's name %s to %s.";
|
||||
|
||||
/* The desc of actions for link and unlink related case. */
|
||||
$lang->action->desc->linkrelatedcase = '$date, linked related case <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->unlinkrelatedcase = '$date, unlinked related case <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
|
||||
|
||||
/* The action labels. */
|
||||
$lang->action->label = new stdclass();
|
||||
$lang->action->label->created = 'created';
|
||||
@@ -131,6 +134,14 @@ $lang->action->label->changestatus = 'change status';
|
||||
$lang->action->label->marked = 'edited';
|
||||
$lang->action->label->linked2project = "link to {$lang->projectCommon}";
|
||||
$lang->action->label->unlinkedfromproject = "unlik from {$lang->projectCommon}";
|
||||
$lang->action->label->linkrelatedbug = "linked related Bug";
|
||||
$lang->action->label->unlinkrelatedbug = "unlinked related Bug";
|
||||
$lang->action->label->linkrelatedcase = "linked related case";
|
||||
$lang->action->label->unlinkrelatedcase = "unlinked related case";
|
||||
$lang->action->label->linkrelatedstory = "linked related story";
|
||||
$lang->action->label->unlinkrelatedstory = "unlinked related story";
|
||||
$lang->action->label->subdividestory = "subdivided story";
|
||||
$lang->action->label->unlinkchildstory = "unlinked child story";
|
||||
$lang->action->label->started = 'started';
|
||||
$lang->action->label->restarted = 'continued';
|
||||
$lang->action->label->recordestimate = 'Hours';
|
||||
|
||||
@@ -17,7 +17,6 @@ $lang->action->objectID = '对象ID';
|
||||
$lang->action->objectName = '对象名称';
|
||||
$lang->action->actor = '操作者';
|
||||
$lang->action->action = '动作';
|
||||
$lang->action->actionID = '记录ID';
|
||||
$lang->action->date = '日期';
|
||||
|
||||
$lang->action->trash = '回收站';
|
||||
@@ -99,6 +98,10 @@ $lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote>%s</blockquote>" . "\n<div class='hidden'>%s</div>";
|
||||
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
|
||||
|
||||
/* 关联用例和移除用例时的历史操作记录。*/
|
||||
$lang->action->desc->linkrelatedcase = '$date, 由 <strong>$actor</strong> 关联相关用例 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->unlinkrelatedcase = '$date, 由 <strong>$actor</strong> 移除相关用例 <strong>$extra</strong>。' . "\n";
|
||||
|
||||
/* 用来显示动态信息。*/
|
||||
$lang->action->label = new stdclass();
|
||||
$lang->action->label->created = '创建';
|
||||
@@ -131,6 +134,14 @@ $lang->action->label->changestatus = '修改状态';
|
||||
$lang->action->label->marked = '编辑了';
|
||||
$lang->action->label->linked2project = "关联{$lang->projectCommon}";
|
||||
$lang->action->label->unlinkedfromproject = "移除{$lang->projectCommon}";
|
||||
$lang->action->label->linkrelatedbug = "关联了相关Bug";
|
||||
$lang->action->label->unlinkrelatedbug = "移除了相关Bug";
|
||||
$lang->action->label->linkrelatedcase = "关联了相关用例";
|
||||
$lang->action->label->unlinkrelatedcase = "移除了相关用例";
|
||||
$lang->action->label->linkrelatedstory = "关联了相关需求";
|
||||
$lang->action->label->unlinkrelatedstory = "移除了相关需求";
|
||||
$lang->action->label->subdividestory = "细分了需求";
|
||||
$lang->action->label->unlinkchildstory = "移除了细分需求";
|
||||
$lang->action->label->started = '开始了';
|
||||
$lang->action->label->restarted = '继续了';
|
||||
$lang->action->label->recordestimate = '记录了工时';
|
||||
|
||||
@@ -12,18 +12,11 @@
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->admin->index = 'Index';
|
||||
$lang->admin->checkDB = 'Repair data';
|
||||
$lang->admin->company = 'Company';
|
||||
$lang->admin->user = 'User';
|
||||
$lang->admin->group = 'Group';
|
||||
$lang->admin->sso = 'Integrate RanZhi';
|
||||
$lang->admin->safeIndex = 'Safe';
|
||||
$lang->admin->checkWeak = 'Check weak';
|
||||
$lang->admin->welcome = 'Welcome to ZenTaoPMS.';
|
||||
|
||||
$lang->admin->browseCompany = 'Browse Company';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->caption = 'zentao information';
|
||||
$lang->admin->info->version = 'The current version of the system is %s,';
|
||||
$lang->admin->info->links = 'You can visit the following link:';
|
||||
$lang->admin->info->account = 'Your account in zentao community is %s. ';
|
||||
@@ -43,7 +36,6 @@ $lang->admin->register->success = "Register success";
|
||||
|
||||
$lang->admin->bind = new stdclass();
|
||||
$lang->admin->bind->caption = 'Bind with community account';
|
||||
$lang->admin->bind->action = 'bind';
|
||||
$lang->admin->bind->success = "Bind success";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
|
||||
@@ -12,18 +12,11 @@
|
||||
$lang->admin->common = '后台管理';
|
||||
$lang->admin->index = '后台管理首页';
|
||||
$lang->admin->checkDB = '检查数据库';
|
||||
$lang->admin->company = '公司管理';
|
||||
$lang->admin->user = '用户管理';
|
||||
$lang->admin->group = '分组管理';
|
||||
$lang->admin->sso = '然之集成';
|
||||
$lang->admin->safeIndex = '安全';
|
||||
$lang->admin->checkWeak = '弱口令检查';
|
||||
$lang->admin->welcome = '欢迎使用禅道管理软件后台管理系统';
|
||||
|
||||
$lang->admin->browseCompany = '浏览公司';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->caption = '禅道系统信息';
|
||||
$lang->admin->info->version = '当前系统的版本是%s,';
|
||||
$lang->admin->info->links = '您可以访问以下链接:';
|
||||
$lang->admin->info->account = "您的禅道社区账户为%s。";
|
||||
@@ -42,7 +35,6 @@ $lang->admin->register->bind = "如果您已经拥有社区账号,%s关
|
||||
$lang->admin->register->success = "登记账户成功";
|
||||
|
||||
$lang->admin->bind = new stdclass();
|
||||
$lang->admin->bind->caption = '关联社区账号';
|
||||
$lang->admin->bind->action = '关联';
|
||||
$lang->admin->bind->success = "关联账户成功";
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ $lang->backup->restore = 'Restore';
|
||||
$lang->backup->change = 'Change hold days';
|
||||
$lang->backup->changeAB = 'change';
|
||||
|
||||
$lang->backup->name = 'Name';
|
||||
$lang->backup->time = 'Time';
|
||||
$lang->backup->files = 'Files';
|
||||
$lang->backup->size = 'Size';
|
||||
|
||||
@@ -8,7 +8,6 @@ $lang->backup->restore = '还原';
|
||||
$lang->backup->change = '修改保留时间';
|
||||
$lang->backup->changeAB = '修改';
|
||||
|
||||
$lang->backup->name = '文件名称';
|
||||
$lang->backup->time = '备份时间';
|
||||
$lang->backup->files = '备份文件';
|
||||
$lang->backup->size = '大小';
|
||||
|
||||
@@ -13,8 +13,6 @@ $lang->block = new stdclass();
|
||||
$lang->block->num = 'Number';
|
||||
$lang->block->type = 'Type';
|
||||
$lang->block->orderBy = 'Order';
|
||||
$lang->block->status = 'Status';
|
||||
$lang->block->actions = 'Action';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
|
||||
|
||||
@@ -13,8 +13,6 @@ $lang->block = new stdclass();
|
||||
$lang->block->num = '数量';
|
||||
$lang->block->type = '类型';
|
||||
$lang->block->orderBy = '排序';
|
||||
$lang->block->status = '状态';
|
||||
$lang->block->actions = '操作';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
|
||||
|
||||
+28
-43
@@ -88,7 +88,7 @@ class bug extends control
|
||||
$pager = pager::init($recTotal, $recPerPage, $pageID);
|
||||
|
||||
/* Get projects. */
|
||||
$projects = $this->loadModel('project')->getPairs() + array('0' => '');
|
||||
$projects = $this->loadModel('project')->getPairs('empty');
|
||||
|
||||
/* Get bugs. */
|
||||
$bugs = $this->bug->getBugs($productID, $projects, $branch, $browseType, $moduleID, $queryID, $sort, $pager);
|
||||
@@ -105,7 +105,6 @@ class bug extends control
|
||||
/* Build the search form. */
|
||||
$actionURL = $this->createLink('bug', 'browse', "productID=$productID&branch=$branch&browseType=bySearch&queryID=myQueryID");
|
||||
$this->bug->buildSearchForm($productID, $this->products, $queryID, $actionURL);
|
||||
$this->loadModel('search')->setSearchParams($this->config->bug->search);
|
||||
|
||||
/* Set view. */
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->common;
|
||||
@@ -882,72 +881,66 @@ class bug extends control
|
||||
* Link related bugs.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param string $bugs
|
||||
* @param string $browseType
|
||||
* @param int $param
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function linkBugs($bugID, $bugs = '', $browseType = '', $param = 0)
|
||||
public function linkBugs($bugID, $browseType = '', $param = 0)
|
||||
{
|
||||
/* Link bugs. */
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$bugs = $this->bug->linkBugs($bugID, $bugs);
|
||||
if(isonlybody()) die(js::closeModal('parent.parent', '', "function(){parent.parent.loadLinkedBugs('$bugID', '$bugs')}"));
|
||||
$this->bug->linkBugs($bugID);
|
||||
if(isonlybody()) die(js::closeModal('parent.parent', '', "function(){parent.parent.loadLinkBugs('$bugID')}"));
|
||||
die(js::locate($this->createLink('bug', 'edit', "bugID=$bugID"), 'parent'));
|
||||
}
|
||||
|
||||
/* Get bug, productID and queryID. */
|
||||
$bug = $this->bug->getById($bugID);
|
||||
$productID = $this->product->saveState($bug->product, $this->products);
|
||||
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
|
||||
/* Get bug and queryID. */
|
||||
$bug = $this->bug->getById($bugID);
|
||||
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
|
||||
|
||||
/* Set the menu. */
|
||||
$this->bug->setMenu($this->products, $productID, $bug->branch);
|
||||
$this->bug->setMenu($this->products, $bug->product, $bug->branch);
|
||||
|
||||
/* Build the search form. */
|
||||
$actionURL = $this->createLink('bug', 'linkBugs', "bugID=$bugID&bugs=$bugs&browseType=bySearch&queryID=myQueryID", '', true);
|
||||
$this->bug->buildSearchForm($productID, $this->products, $queryID, $actionURL);
|
||||
$this->loadModel('search')->setSearchParams($this->config->bug->search);
|
||||
$actionURL = $this->createLink('bug', 'linkBugs', "bugID=$bugID&browseType=bySearch&queryID=myQueryID", '', true);
|
||||
$this->bug->buildSearchForm($bug->product, $this->products, $queryID, $actionURL);
|
||||
|
||||
/* Get bugs to link. */
|
||||
$allBugs = array();
|
||||
if($browseType == 'bySearch') $allBugs = $this->bug->getBySearch($bug->product, $quueryID, 'id', null);
|
||||
$bugs2Link = $this->bug->getBugs2Link($bugID, $browseType, $queryID);
|
||||
|
||||
/* Assign. */
|
||||
$this->view->title = $this->lang->bug->linkBugs . "BUG #$bug->id $bug->title - " . $this->products[$productID];
|
||||
$this->view->position[] = html::a($this->createLink('product', 'view', "productID=$productID"), $this->products[$productID]);
|
||||
$this->view->title = $this->lang->bug->linkBugs . "BUG #$bug->id $bug->title - " . $this->products[$bug->product];
|
||||
$this->view->position[] = html::a($this->createLink('product', 'view', "productID=$bug->product"), $this->products[$bug->product]);
|
||||
$this->view->position[] = html::a($this->createLink('bug', 'view', "bugID=$bugID"), $bug->title);
|
||||
$this->view->position[] = $this->lang->bug->linkBugs;
|
||||
$this->view->bug = $bug;
|
||||
$this->view->allBugs = $allBugs;
|
||||
$this->view->bugs2Link = $bugs2Link;
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX: get linked bugs.
|
||||
* AJAX: get linkBugs.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param string $linkedBugs
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function ajaxGetLinkedBugs($bugID, $linkedBugs = '')
|
||||
public function ajaxGetLinkBugs($bugID)
|
||||
{
|
||||
/* Get bug and linked bugs. */
|
||||
$bug = $this->bug->getById($bugID);
|
||||
$bugs = $this->bug->getLinkedBugs($linkedBugs);
|
||||
/* Get linkbugs. */
|
||||
$bugs = $this->bug->getLinkBugs($bugID);
|
||||
|
||||
/* Build linkBug list.*/
|
||||
$output = '';
|
||||
foreach($bugs as $bugId => $title)
|
||||
$output = '';
|
||||
foreach($bugs as $bugId => $bugTitle)
|
||||
{
|
||||
$output .= '<li>';
|
||||
$output .= html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $title);
|
||||
$output .= html::a("javascript:deleteLinkedBug($bugID, $bugId)", '<i class="icon-remove"></i>', '', "title='{$this->lang->unlink}' style='float:right'");
|
||||
$output .= html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $bugTitle, '_blank');
|
||||
$output .= html::a("javascript:unlinkBug($bugID, $bugId)", '<i class="icon-remove"></i>', '', "title='{$this->lang->unlink}' style='float:right'");
|
||||
$output .= '</li>';
|
||||
}
|
||||
|
||||
@@ -955,27 +948,19 @@ class bug extends control
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX: delete a linked bug.
|
||||
* Unlink related bug.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param int $deleteBug
|
||||
* @param int $bug2Unlink
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function ajaxDeleteLinkedBug($bugID, $deleteBug)
|
||||
public function unlinkBug($bugID, $bug2Unlink = 0)
|
||||
{
|
||||
/* Get bug and bugs. */
|
||||
$bug = $this->bug->getById($bugID);
|
||||
$bugs = $this->bug->deleteLinkedBug($bugID, $deleteBug);
|
||||
/* Unlink related bug. */
|
||||
$this->bug->unlinkBug($bugID, $bug2Unlink);
|
||||
|
||||
/* Build linkBug list. */
|
||||
$output = '';
|
||||
foreach($bugs as $bugId => $title)
|
||||
{
|
||||
$output .= '<li>' . html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $title) . html::a("javascript:deleteLinkedBug($bugID, $bugId)", '<i class="icon-remove"></i>', '', "style='float:right'");
|
||||
}
|
||||
|
||||
die($output);
|
||||
die('success');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,6 +28,5 @@
|
||||
#keywordsAddonLabel:before {content: '空'; color: transparent}
|
||||
|
||||
#contactListGroup .input-group-btn > .btn {margin-left: -1px!important;}
|
||||
#contactListGroup .input-group-btn > .btn:first-child {border-left: none}
|
||||
|
||||
.minw-80px {min-width: 80px;}
|
||||
|
||||
@@ -1 +1 @@
|
||||
#linkBugsForm {min-height: 200px}
|
||||
#linkBugsForm {min-height: 300px}
|
||||
|
||||
+11
-9
@@ -56,29 +56,31 @@ function loadModuleRelated()
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a linked bug.
|
||||
* Unlink related bug.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param int $deleteBug
|
||||
* @param int $bug2Unlink
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function deleteLinkedBug(bugID, deleteBug)
|
||||
function unlinkBug(bugID, bug2Unlink)
|
||||
{
|
||||
deleteLink = createLink('bug', 'ajaxDeleteLinkedBug', 'bugID=' + bugID + '&deleteBug=' + deleteBug);
|
||||
$('#linkBugBox').load(deleteLink);
|
||||
link = createLink('bug', 'unlinkBug', 'bugID=' + bugID + '&bug2Unlink=' + bug2Unlink);
|
||||
$.get(link, function(data)
|
||||
{
|
||||
if(data == 'success') $('#linkBugBox').load(createLink('bug', 'ajaxGetLinkBugs', 'bugID=' + bugID));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load linked bugs.
|
||||
* Load linkBugs.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param string $linkedBugs
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function loadLinkedBugs(bugID, linkedBugs)
|
||||
function loadLinkBugs(bugID)
|
||||
{
|
||||
bugLink = createLink('bug', 'ajaxGetLinkedBugs', 'bugID=' + bugID + '&linkedBugs=' + linkedBugs);
|
||||
bugLink = createLink('bug', 'ajaxGetLinkBugs', 'bugID=' + bugID);
|
||||
$('#linkBugBox').load(bugLink);
|
||||
}
|
||||
|
||||
+4
-39
@@ -15,10 +15,8 @@ $lang->bug->id = 'ID';
|
||||
$lang->bug->product = $lang->productCommon;
|
||||
$lang->bug->productplan = 'Plan';
|
||||
$lang->bug->module = 'Module';
|
||||
$lang->bug->path = 'Path';
|
||||
$lang->bug->project = $lang->projectCommon;
|
||||
$lang->bug->story = 'Story';
|
||||
$lang->bug->storyVersion = 'Story Version';
|
||||
$lang->bug->task = 'Task';
|
||||
$lang->bug->title = 'Title';
|
||||
$lang->bug->severity = 'Severity';
|
||||
@@ -26,22 +24,16 @@ $lang->bug->severityAB = 'S';
|
||||
$lang->bug->pri = 'Priority';
|
||||
$lang->bug->type = 'Type';
|
||||
$lang->bug->os = 'OS';
|
||||
$lang->bug->plan = 'Plan';
|
||||
$lang->bug->hardware = 'Hardware';
|
||||
$lang->bug->browser = 'Browser';
|
||||
$lang->bug->machine = 'Machine';
|
||||
$lang->bug->found = 'How found';
|
||||
$lang->bug->steps = 'Steps';
|
||||
$lang->bug->status = 'Status';
|
||||
$lang->bug->statusAB = 'Status';
|
||||
$lang->bug->activatedCount = 'Activated count';
|
||||
$lang->bug->activatedCountAB = 'Activated count';
|
||||
$lang->bug->confirmed = 'Confirmed';
|
||||
$lang->bug->toTask = 'To task';
|
||||
$lang->bug->toStory = 'To story';
|
||||
$lang->bug->mailto = 'Mailto';
|
||||
$lang->bug->openedBy = 'Opened By';
|
||||
$lang->bug->openedByAB = 'Opened';
|
||||
$lang->bug->openedDate = 'Opened date';
|
||||
$lang->bug->openedDateAB = 'Date';
|
||||
$lang->bug->openedBuild = 'Opened Build';
|
||||
@@ -58,9 +50,9 @@ $lang->bug->closedBy = 'Closed By';
|
||||
$lang->bug->closedDate = 'Closed Date';
|
||||
$lang->bug->duplicateBug = 'Duplicate';
|
||||
$lang->bug->lastEditedBy = 'Last Edited By';
|
||||
$lang->bug->lastEditedDate = 'Last Edited Date';
|
||||
$lang->bug->linkBug = 'Related';
|
||||
$lang->bug->linkBugs = 'Link bugs';
|
||||
$lang->bug->linkBugs = 'Link related bugs';
|
||||
$lang->bug->unlinkBug = 'Unlink related bug';
|
||||
$lang->bug->case = 'Case';
|
||||
$lang->bug->files = 'Files';
|
||||
$lang->bug->keywords = 'Keywords';
|
||||
@@ -92,15 +84,9 @@ $lang->bug->delete = 'Delete Bug';
|
||||
$lang->bug->deleted = 'Deleted';
|
||||
$lang->bug->saveTemplate = 'Save template';
|
||||
$lang->bug->deleteTemplate = 'Delete template';
|
||||
$lang->bug->customFields = 'Custom';
|
||||
$lang->bug->restoreDefault = 'Default';
|
||||
$lang->bug->ajaxGetUserBugs = 'API: My Bugs';
|
||||
$lang->bug->ajaxGetModuleOwner = 'API: Get module default owner';
|
||||
$lang->bug->confirmStoryChange = 'Confirm Story Change';
|
||||
|
||||
/* Browse tabs. */
|
||||
$lang->bug->selectProduct = "Select {$lang->productCommon}";
|
||||
$lang->bug->byModule = 'ByModule';
|
||||
$lang->bug->assignToMe = 'MyBugs';
|
||||
$lang->bug->openedByMe = 'MyOpen';
|
||||
$lang->bug->resolvedByMe = 'MyResolve';
|
||||
@@ -112,51 +98,30 @@ $lang->bug->unclosed = 'Unclosed';
|
||||
$lang->bug->longLifeBugs = 'Longlife';
|
||||
$lang->bug->postponedBugs = 'Postponed';
|
||||
$lang->bug->allBugs = 'Allbug';
|
||||
$lang->bug->moduleBugs = 'ByModule';
|
||||
$lang->bug->byQuery = 'Search';
|
||||
$lang->bug->needConfirm = 'StoryChanged';
|
||||
$lang->bug->allProduct = "All {$lang->productCommon}s";
|
||||
$lang->bug->ditto = 'Ditto';
|
||||
|
||||
/* Labels. */
|
||||
$lang->bug->lblProductAndModule = "{$lang->productCommon}&Module";
|
||||
$lang->bug->lblProjectAndTask = "{$lang->projectCommon}&Task";
|
||||
$lang->bug->lblStory = 'Story';
|
||||
$lang->bug->lblTypeAndSeverity = 'Type&Severity';
|
||||
$lang->bug->lblSystemBrowserAndHardware = 'OS&Browser';
|
||||
$lang->bug->lblAssignedTo = 'Assigned to';
|
||||
$lang->bug->lblMailto = 'Mailto';
|
||||
$lang->bug->lblLastEdited = 'Last edited';
|
||||
$lang->bug->lblResolved = 'Resolved';
|
||||
$lang->bug->lblAllFields = 'All Fields';
|
||||
$lang->bug->lblCustomFields = 'Custom Fields';
|
||||
$lang->bug->allUsers = 'All users';
|
||||
$lang->bug->allBuilds = 'All';
|
||||
|
||||
/* Legends. */
|
||||
$lang->bug->legendBasicInfo = 'Basic info';
|
||||
$lang->bug->legendMailto = 'Mailto';
|
||||
$lang->bug->legendAttatch = 'Files';
|
||||
$lang->bug->legendLinkBugs = 'Related bug';
|
||||
$lang->bug->legendPrjStoryTask = "{$lang->projectCommon}, story & task";
|
||||
$lang->bug->legendCases = 'Related case';
|
||||
$lang->bug->legendSteps = 'Steps';
|
||||
$lang->bug->legendAction = 'Action';
|
||||
$lang->bug->legendHistory = 'History';
|
||||
$lang->bug->legendComment = 'Comment';
|
||||
$lang->bug->legendLife = 'Lifetime';
|
||||
$lang->bug->legendMisc = 'Misc';
|
||||
|
||||
/* Action buttons. */
|
||||
$lang->bug->buttonConfirm = 'Confirm';
|
||||
$lang->bug->buttonCopy = 'Copy';
|
||||
$lang->bug->buttonAssign = 'Assgin';
|
||||
$lang->bug->buttonEdit = 'Edit';
|
||||
$lang->bug->buttonActivate = 'Activate';
|
||||
$lang->bug->buttonResolve = 'Resolve';
|
||||
$lang->bug->buttonClose = 'Close';
|
||||
$lang->bug->buttonToList = 'Back';
|
||||
$lang->bug->buttonCreateTestcase = 'Create Case';
|
||||
|
||||
/* Confirm messags. */
|
||||
$lang->bug->confirmChangeProduct = "Change {$lang->productCommon} will change {$lang->projectCommon}, task and story also, are you sure?";
|
||||
@@ -360,8 +325,8 @@ $lang->bug->action->tostory = array('main' => '$date, To story by <stro
|
||||
$lang->bug->action->totask = array('main' => '$date, To task by <strong>$actor</strong>, ID is <strong>$extra</strong>.');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, Link to plan by <strong>$actor</strong>,ID is <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, Unlink from plan <strong>$extra</strong> by <strong>$actor</strong>.');
|
||||
$lang->bug->action->linked2bug = array('main' => '$date, linked related bugs <strong>$extra</strong> by <strong>$actor</strong>.');
|
||||
$lang->bug->action->unlinkedbug = array('main' => '$date, removed related bugs <strong>$extra</strong> by <strong>$actor</strong>.');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, link related bug <strong>$extra</strong> by <strong>$actor</strong>.');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, unlink related bug <strong>$extra</strong> by <strong>$actor</strong>.');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = 'Choose builds...';
|
||||
|
||||
@@ -15,10 +15,8 @@ $lang->bug->id = 'Bug编号';
|
||||
$lang->bug->product = '所属' . $lang->productCommon;
|
||||
$lang->bug->productplan = '所属计划';
|
||||
$lang->bug->module = '所属模块';
|
||||
$lang->bug->path = '模块路径';
|
||||
$lang->bug->project = '所属' . $lang->projectCommon;
|
||||
$lang->bug->story = '相关需求';
|
||||
$lang->bug->storyVersion = '需求版本';
|
||||
$lang->bug->task = '相关任务';
|
||||
$lang->bug->title = 'Bug标题';
|
||||
$lang->bug->severity = '严重程度';
|
||||
@@ -26,22 +24,16 @@ $lang->bug->severityAB = '级别';
|
||||
$lang->bug->pri = '优先级';
|
||||
$lang->bug->type = 'Bug类型';
|
||||
$lang->bug->os = '操作系统';
|
||||
$lang->bug->plan = '所属计划';
|
||||
$lang->bug->hardware = '硬件平台';
|
||||
$lang->bug->browser = '浏览器';
|
||||
$lang->bug->machine = '机器硬件';
|
||||
$lang->bug->found = '如何发现';
|
||||
$lang->bug->steps = '重现步骤';
|
||||
$lang->bug->status = 'Bug状态';
|
||||
$lang->bug->statusAB = '状态';
|
||||
$lang->bug->activatedCount = '激活次数';
|
||||
$lang->bug->activatedCountAB = '激活次数';
|
||||
$lang->bug->confirmed = '是否确认';
|
||||
$lang->bug->toTask = '转任务';
|
||||
$lang->bug->toStory = '转需求';
|
||||
$lang->bug->mailto = '抄送给';
|
||||
$lang->bug->openedBy = '由谁创建';
|
||||
$lang->bug->openedByAB = '创建';
|
||||
$lang->bug->openedDate = '创建日期';
|
||||
$lang->bug->openedDateAB = '创建日期';
|
||||
$lang->bug->openedBuild = '影响版本';
|
||||
@@ -58,9 +50,9 @@ $lang->bug->closedBy = '由谁关闭';
|
||||
$lang->bug->closedDate = '关闭日期';
|
||||
$lang->bug->duplicateBug = '重复ID';
|
||||
$lang->bug->lastEditedBy = '最后修改者';
|
||||
$lang->bug->lastEditedDate = '最后修改日期';
|
||||
$lang->bug->linkBug = '相关Bug';
|
||||
$lang->bug->linkBugs = '关联Bug';
|
||||
$lang->bug->linkBugs = '关联相关Bug';
|
||||
$lang->bug->unlinkBug = '移除相关Bug';
|
||||
$lang->bug->case = '相关用例';
|
||||
$lang->bug->files = '附件';
|
||||
$lang->bug->keywords = '关键词';
|
||||
@@ -92,15 +84,9 @@ $lang->bug->delete = '删除';
|
||||
$lang->bug->deleted = '已删除';
|
||||
$lang->bug->saveTemplate = '保存模板';
|
||||
$lang->bug->deleteTemplate = '删除模板';
|
||||
$lang->bug->customFields = '自定义字段';
|
||||
$lang->bug->restoreDefault = '恢复默认';
|
||||
$lang->bug->ajaxGetUserBugs = '接口:我的Bug';
|
||||
$lang->bug->ajaxGetModuleOwner = '接口:获得模块的默认指派人';
|
||||
$lang->bug->confirmStoryChange = '确认需求变动';
|
||||
|
||||
/* 查询条件列表。*/
|
||||
$lang->bug->selectProduct = '请选择' . $lang->productCommon;
|
||||
$lang->bug->byModule = '按模块';
|
||||
$lang->bug->assignToMe = '指派给我';
|
||||
$lang->bug->openedByMe = '由我创建';
|
||||
$lang->bug->resolvedByMe = '由我解决';
|
||||
@@ -112,51 +98,30 @@ $lang->bug->unclosed = '未关闭';
|
||||
$lang->bug->longLifeBugs = '久未处理';
|
||||
$lang->bug->postponedBugs = '被延期';
|
||||
$lang->bug->allBugs = '所有';
|
||||
$lang->bug->moduleBugs = '按模块';
|
||||
$lang->bug->byQuery = '搜索';
|
||||
$lang->bug->needConfirm = '需求变动';
|
||||
$lang->bug->allProduct = '所有' . $lang->productCommon;
|
||||
$lang->bug->ditto = '同上';
|
||||
|
||||
/* 页面标签。*/
|
||||
$lang->bug->lblProductAndModule = $lang->productCommon . '模块';
|
||||
$lang->bug->lblProjectAndTask = $lang->projectCommon . '任务';
|
||||
$lang->bug->lblStory = '相关需求';
|
||||
$lang->bug->lblTypeAndSeverity = '类型/严重程度';
|
||||
$lang->bug->lblSystemBrowserAndHardware = '系统/浏览器';
|
||||
$lang->bug->lblAssignedTo = '当前指派';
|
||||
$lang->bug->lblMailto = '抄送给';
|
||||
$lang->bug->lblLastEdited = '最后修改';
|
||||
$lang->bug->lblResolved = '由谁解决';
|
||||
$lang->bug->lblAllFields = '所有字段';
|
||||
$lang->bug->lblCustomFields = '自定义字段';
|
||||
$lang->bug->allUsers = '所有用户';
|
||||
$lang->bug->allBuilds = '所有';
|
||||
|
||||
/* legend列表。*/
|
||||
$lang->bug->legendBasicInfo = '基本信息';
|
||||
$lang->bug->legendMailto = '抄送给';
|
||||
$lang->bug->legendAttatch = '附件';
|
||||
$lang->bug->legendLinkBugs = '相关Bug';
|
||||
$lang->bug->legendPrjStoryTask = $lang->projectCommon . '/需求/任务';
|
||||
$lang->bug->legendCases = '相关用例';
|
||||
$lang->bug->legendSteps = '重现步骤';
|
||||
$lang->bug->legendAction = '操作';
|
||||
$lang->bug->legendHistory = '历史记录';
|
||||
$lang->bug->legendComment = '备注';
|
||||
$lang->bug->legendLife = 'BUG的一生';
|
||||
$lang->bug->legendMisc = '其他相关';
|
||||
|
||||
/* 功能按钮。*/
|
||||
$lang->bug->buttonConfirm = '确认';
|
||||
$lang->bug->buttonCopy = '复制';
|
||||
$lang->bug->buttonAssign = '指派';
|
||||
$lang->bug->buttonEdit = '编辑';
|
||||
$lang->bug->buttonActivate = '激活';
|
||||
$lang->bug->buttonResolve = '解决';
|
||||
$lang->bug->buttonClose = '关闭';
|
||||
$lang->bug->buttonToList = '返回';
|
||||
$lang->bug->buttonCreateTestcase = '转用例';
|
||||
|
||||
/* 交互提示。*/
|
||||
$lang->bug->confirmChangeProduct = "修改{$lang->productCommon}会导致相应的{$lang->projectCommon}、需求和任务发生变化,确定吗?";
|
||||
@@ -360,8 +325,8 @@ $lang->bug->action->tostory = array('main' => '$date, 由 <strong>$acto
|
||||
$lang->bug->action->totask = array('main' => '$date, 由 <strong>$actor</strong> 导入为<strong>任务</strong>,编号为 <strong>$extra</strong>。');
|
||||
$lang->bug->action->linked2plan = array('main' => '$date, 由 <strong>$actor</strong> 关联到计划 <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedfromplan = array('main' => '$date, 由 <strong>$actor</strong> 从计划 <strong>$extra</strong> 移除。');
|
||||
$lang->bug->action->linked2bug = array('main' => '$date, 由 <strong>$actor</strong> 关联相关Bug <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkedbug = array('main' => '$date, 由 <strong>$actor</strong> 移除相关Bug <strong>$extra</strong>。');
|
||||
$lang->bug->action->linkrelatedbug = array('main' => '$date, 由 <strong>$actor</strong> 关联相关Bug <strong>$extra</strong>。');
|
||||
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, 由 <strong>$actor</strong> 移除相关Bug <strong>$extra</strong>。');
|
||||
|
||||
$lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = '选择相关版本...';
|
||||
|
||||
+51
-23
@@ -432,10 +432,9 @@ class bugModel extends model
|
||||
$oldBug = $this->getById($bugID);
|
||||
if($oldBug->lastEditedDate != $this->post->lastEditedDate)
|
||||
{
|
||||
dao::$errors[] = $this->lang->error->hasEdited;
|
||||
dao::$errors[] = $this->lang->error->editedByOther;
|
||||
return false;
|
||||
}
|
||||
unset($_POST['lastEditedDate']);
|
||||
|
||||
$now = helper::now();
|
||||
$bug = fixer::input('post')
|
||||
@@ -795,61 +794,88 @@ class bugModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* Link bugs.
|
||||
* Link related bugs.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param string $bugs
|
||||
* @access public
|
||||
* @return string
|
||||
* @return void
|
||||
*/
|
||||
public function linkBugs($bugID, $bugs = '')
|
||||
public function linkBugs($bugID)
|
||||
{
|
||||
if($this->post->bugs == false) return $bugs;
|
||||
if($this->post->bugs == false) return;
|
||||
|
||||
$bugs = implode(',', $this->post->bugs) . ',' . trim($bugs, ',');
|
||||
$bug = $this->getById($bugID);
|
||||
$bugs2Link = $this->post->bugs;
|
||||
|
||||
$bugs = implode(',', $bugs2Link) . ',' . trim($bug->linkBug, ',');
|
||||
$this->dao->update(TABLE_BUG)->set('linkBug')->eq(trim($bugs, ','))->where('id')->eq($bugID)->exec();
|
||||
if(dao::isError()) die(js::error(dao::getError()));
|
||||
$this->loadModel('action')->create('bug', $bugID, 'linked2Bug', '', implode(',', $this->post->bugs));
|
||||
|
||||
return $bugs;
|
||||
$this->loadModel('action')->create('bug', $bugID, 'linkRelatedBug', '', implode(',', $bugs2Link));
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a linked bug.
|
||||
* Get bugs to link.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param int $deleteBug
|
||||
* @param string $browseType
|
||||
* @param int $queryID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function deleteLinkedBug($bugID, $deleteBug = 0)
|
||||
public function getBugs2Link($bugID, $browseType = 'bySearch', $queryID)
|
||||
{
|
||||
$bug = $this->getById($bugID);
|
||||
if($browseType == 'bySearch')
|
||||
{
|
||||
$bug = $this->getById($bugID);
|
||||
$bugs2Link = $this->getBySearch($bug->product, $queryID, 'id', null);
|
||||
foreach($bugs2Link as $key => $bug2Link)
|
||||
{
|
||||
if($bug2Link->id == $bugID) unset($bugs2Link[$key]);
|
||||
if(in_array($bug2Link->id, explode(',', $bug->linkBug))) unset($bugs2Link[$key]);
|
||||
}
|
||||
return $bugs2Link;
|
||||
}
|
||||
else
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlink related bug.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @param int $bug2Unlink
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function unlinkBug($bugID, $bug2Unlink = 0)
|
||||
{
|
||||
$bug = $this->getById($bugID);
|
||||
|
||||
$bugs = explode(',', trim($bug->linkBug, ','));
|
||||
foreach($bugs as $key => $bugId)
|
||||
{
|
||||
if($bugId == $deleteBug) unset($bugs[$key]);
|
||||
if($bugId == $bug2Unlink) unset($bugs[$key]);
|
||||
}
|
||||
$bugs = implode(',', $bugs);
|
||||
|
||||
$this->dao->update(TABLE_BUG)->set('linkBug')->eq($bugs)->where('id')->eq($bugID)->exec();
|
||||
if(dao::isError()) die(js::error(dao::getError()));
|
||||
$this->loadModel('action')->create('bug', $bugID, 'unLinkedBug', '', $deleteBug);
|
||||
|
||||
return $this->getLinkedBugs($bugs);
|
||||
$this->loadModel('action')->create('bug', $bugID, 'unlinkRelatedBug', '', $bug2Unlink);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get linked bugs.
|
||||
* Get linkBugs.
|
||||
*
|
||||
* @param string $bugs
|
||||
* @param int $bugID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getLinkedBugs($bugs)
|
||||
public function getLinkBugs($bugID)
|
||||
{
|
||||
return $this->dao->select('id, title')->from(TABLE_BUG)->where('id')->in($bugs)->fetchPairs();
|
||||
$bug = $this->getById($bugID);
|
||||
return $this->dao->select('id, title')->from(TABLE_BUG)->where('id')->in($bug->linkBug)->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -882,6 +908,8 @@ class bugModel extends model
|
||||
$this->config->bug->search['fields']['branch'] = $this->lang->product->branch;
|
||||
$this->config->bug->search['params']['branch']['values'] = array('' => '') + $this->loadModel('branch')->getPairs($productID, 'noempty');
|
||||
}
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->bug->search);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/treeview.html.php';
|
||||
js::set('browseType', $browseType);
|
||||
js::set('moduleID', $moduleID);
|
||||
?>
|
||||
|
||||
@@ -63,7 +63,8 @@ js::set('refresh', $lang->refresh);
|
||||
<span class='input-group-addon'><?php echo $lang->bug->openedBuild?></span>
|
||||
<span id='buildBox'><?php echo html::select('openedBuild[]', $builds, $buildID, "size=4 multiple=multiple class='chosen form-control'");?></span>
|
||||
<span class='input-group-addon' id='buildBoxActions'></span>
|
||||
<span class='input-group-btn'><?php echo html::commonButton('<i class="icon icon-refresh"></i>', "class='btn btn-default' data-toggle='tooltip' onclick='loadAllBuilds()' title='{$lang->bug->allBuilds}' style='border-left: none'")?></span>
|
||||
<span class='input-group-btn'><?php echo html::commonButton('<i class="icon icon-refresh"></i>', "class='btn btn-default' data-toggle='tooltip' onclick='loadAllBuilds()' title='{$lang->bug->allBuilds}'")?></span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -233,7 +233,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
|
||||
<tr class='text-top'>
|
||||
<th class='w-80px'><?php echo $lang->bug->linkBug;?></th>
|
||||
<td>
|
||||
<?php echo html::a($this->createLink('bug', 'linkBugs', "bugID=$bug->id&bugs=$bug->linkBug", '', true), $lang->bug->linkBugs, '', "data-toggle='modal' data-type='iframe' data-width='85%'");?>
|
||||
<?php echo html::a($this->createLink('bug', 'linkBugs', "bugID=$bug->id", '', true), $lang->bug->linkBugs, '', "data-toggle='modal' data-type='iframe' data-width='95%'");?>
|
||||
<ul class='list-unstyled' id='linkBugBox'>
|
||||
<?php
|
||||
if(isset($bug->linkBugTitles))
|
||||
@@ -241,8 +241,8 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
|
||||
foreach($bug->linkBugTitles as $linkBugID => $linkBugTitle)
|
||||
{
|
||||
echo '<li>';
|
||||
echo html::a(inlink('view', "bugID=$linkBugID"), "#$linkBugID " . $linkBugTitle);
|
||||
echo html::a("javascript:deleteLinkedBug($bug->id, $linkBugID)", '<i class="icon-remove"></i>', '', "title='{$lang->unlink}' style='float:right'");
|
||||
echo html::a(inlink('view', "bugID=$linkBugID"), "#$linkBugID " . $linkBugTitle, '_blank');
|
||||
echo html::a("javascript:unlinkBug($bug->id, $linkBugID)", '<i class="icon-remove"></i>', '', "title='{$lang->unlink}' style='float:right'");
|
||||
echo '</li>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
</div>
|
||||
<form method='post' class='form-condensed' target='hiddenwin' id='linkBugsForm'>
|
||||
<table class='table table-condensed table-hover table-striped tablesorter' id='bugList'>
|
||||
<?php if($allBugs):?>
|
||||
<?php if($bugs2Link):?>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-id'><?php echo $lang->idAB;?></th>
|
||||
@@ -36,21 +36,19 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $bugCount = 0;?>
|
||||
<?php foreach($allBugs as $bugDetail):?>
|
||||
<?php if(in_array($bugDetail->id, explode(',', $bug->linkBug))) continue;?>
|
||||
<?php if($bugDetail->id == $bug->id) continue;?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bugDetail->id");?>
|
||||
<?php foreach($bugs2Link as $bug2Link):?>
|
||||
<?php $bugLink = $this->createLink('bug', 'view', "bugID=$bug2Link->id");?>
|
||||
<tr class='text-center'>
|
||||
<td class='text-left'>
|
||||
<input type='checkbox' name='bugs[]' value='<?php echo $bugDetail->id;?>'/>
|
||||
<?php echo html::a($bugLink, sprintf('%03d', $bugDetail->id));?>
|
||||
<input type='checkbox' name='bugs[]' value='<?php echo $bug2Link->id;?>'/>
|
||||
<?php echo html::a($bugLink, sprintf('%03d', $bug2Link->id));?>
|
||||
</td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bugDetail->pri, $bugDetail->pri)?>'><?php echo zget($lang->bug->priList, $bugDetail->pri, $bugDetail->pri);?></span></td>
|
||||
<td><?php echo html::a($this->createLink('product', 'browse', "productID=$bugDetail->product&branch=$bugDetail->branch"), $products[$bugDetail->product], '_blank');?></td>
|
||||
<td class='text-left nobr' title="<?php echo $bugDetail->title?>"><?php echo html::a($bugLink, $bugDetail->title);?></td>
|
||||
<td><span class='<?php echo 'pri' . zget($lang->bug->priList, $bug2Link->pri, $bug2Link->pri)?>'><?php echo zget($lang->bug->priList, $bug2Link->pri, $bug2Link->pri);?></span></td>
|
||||
<td><?php echo html::a($this->createLink('product', 'browse', "productID=$bug2Link->product&branch=$bug2Link->branch"), $products[$bug2Link->product], '_blank');?></td>
|
||||
<td class='text-left nobr' title="<?php echo $bug2Link->title?>"><?php echo html::a($bugLink, $bug2Link->title);?></td>
|
||||
<td><?php echo $lang->bug->statusList[$bug->status];?></td>
|
||||
<td><?php echo $users[$bugDetail->openedBy];?></td>
|
||||
<td><?php echo $users[$bugDetail->assignedTo];?></td>
|
||||
<td><?php echo $users[$bug2Link->openedBy];?></td>
|
||||
<td><?php echo $users[$bug2Link->assignedTo];?></td>
|
||||
</tr>
|
||||
<?php $bugCount ++;?>
|
||||
<?php endforeach;?>
|
||||
@@ -63,6 +61,9 @@
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='hidden'><?php echo html::input('bug', $bug->id);?></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
<?php endif;?>
|
||||
</table>
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
<td>
|
||||
<table cellpadding='0' cellspacing='0' width='600' style='border: none; border-collapse: collapse;'>
|
||||
<tr>
|
||||
<td style='padding: 10px; background-color: #F8FAFE; border: none; font-size: 14px; font-weight: 500; border-bottom: 1px solid #e5e5e5;'>BUG #<?php echo $bug->id . ' ' . html::a(common::getSysURL() . $this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, '', "style='color: #333'");?></td>
|
||||
<td style='width: 40px; text-align: right; background-color: #F8FAFE; border: none; vertical-align: top; padding: 10px; border-bottom: 1px solid #e5e5e5;'><?php echo html::a(common::getSysURL() . $this->createLink('bug', 'view', "bugID=$bug->id"), '[+]', 'target="_blank"');?></td>
|
||||
<td style='padding: 10px; background-color: #F8FAFE; border: none; font-size: 14px; font-weight: 500; border-bottom: 1px solid #e5e5e5;'><?php echo html::a(common::getSysURL() . $this->createLink('bug', 'view', "bugID=$bug->id"), $mailTitle, '', "style='color: #333'");?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -26,7 +25,7 @@
|
||||
<td style='padding: 10px; border: none;'>
|
||||
<fieldset style='border: 1px solid #e5e5e5'>
|
||||
<legend style='color: #114f8e'><?php echo $lang->bug->legendSteps;?></legend>
|
||||
<div class='content'><?php echo $bug->steps;?></div>
|
||||
<div style='padding:5px;'><?php echo $bug->steps;?></div>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -279,6 +279,20 @@
|
||||
</div>
|
||||
<div class='tab-pane' id='legendMisc'>
|
||||
<table class='table table-data table-condensed table-borderless table-fixed'>
|
||||
<tr class='text-top'>
|
||||
<th class='w-60px'><?php echo $lang->bug->linkBug;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(isset($bug->linkBugTitles))
|
||||
{
|
||||
foreach($bug->linkBugTitles as $linkBugID => $linkBugTitle)
|
||||
{
|
||||
echo html::a($this->createLink('bug', 'view', "bugID=$linkBugID"), "#$linkBugID $linkBugTitle", '_blank') . '<br />';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($bug->case):?>
|
||||
<tr>
|
||||
<th class='w-60px'><?php echo $lang->bug->fromCase;?></th>
|
||||
@@ -298,20 +312,6 @@
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr class='text-top'>
|
||||
<th class='w-60px'><?php echo $lang->bug->linkBug;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(isset($bug->linkBugTitles))
|
||||
{
|
||||
foreach($bug->linkBugTitles as $linkBugID => $linkBugTitle)
|
||||
{
|
||||
echo html::a($this->createLink('bug', 'view', "bugID=$linkBugID"), "#$linkBugID $linkBugTitle", '_blank') . '<br />';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($bug->toStory != 0):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->toStory;?></th>
|
||||
|
||||
@@ -3,3 +3,4 @@
|
||||
.red {color:red}
|
||||
.green {color:green}
|
||||
input[type=checkbox].ml-10px{margin-left:10px;}
|
||||
.pdl-8px{padding-left:8px;}
|
||||
|
||||
@@ -17,8 +17,6 @@ $lang->build->linkBug = "Link Bug";
|
||||
$lang->build->delete = "Delete";
|
||||
$lang->build->deleted = "Deleted";
|
||||
$lang->build->view = "Info";
|
||||
$lang->build->ajaxGetProductBuilds = "API:{$lang->productCommon} builds";
|
||||
$lang->build->ajaxGetProjectBuilds = "API:{$lang->projectCommon} builds";
|
||||
$lang->build->batchUnlink = 'Batch unlink';
|
||||
$lang->build->batchUnlinkStory = 'Batch unlink story';
|
||||
$lang->build->batchUnlinkBug = 'Batch unlink bug';
|
||||
@@ -31,7 +29,6 @@ $lang->build->basicInfo = 'Basic Info';
|
||||
|
||||
$lang->build->id = 'ID';
|
||||
$lang->build->product = $lang->productCommon;
|
||||
$lang->build->project = $lang->projectCommon;
|
||||
$lang->build->name = 'Name';
|
||||
$lang->build->date = 'Build date';
|
||||
$lang->build->builder = 'Builder';
|
||||
@@ -40,10 +37,7 @@ $lang->build->filePath = 'Package file path';
|
||||
$lang->build->desc = 'Desc';
|
||||
$lang->build->files = 'Upload package';
|
||||
$lang->build->last = 'Last build';
|
||||
$lang->build->linkStoriesAndBugs = 'stories and bugs';
|
||||
$lang->build->linkStories = 'Stories';
|
||||
$lang->build->unlinkStory = 'Remove story';
|
||||
$lang->build->linkBugs = 'Bugs';
|
||||
$lang->build->unlinkBug = 'Remove bug';
|
||||
$lang->build->stories = 'Finished stories';
|
||||
$lang->build->bugs = 'Resolved bugs';
|
||||
|
||||
@@ -17,8 +17,6 @@ $lang->build->linkBug = "关联Bug";
|
||||
$lang->build->delete = "删除版本";
|
||||
$lang->build->deleted = "已删除";
|
||||
$lang->build->view = "版本详情";
|
||||
$lang->build->ajaxGetProductBuilds = "接口:{$lang->productCommon}版本列表";
|
||||
$lang->build->ajaxGetProjectBuilds = "接口:{$lang->projectCommon}版本列表";
|
||||
$lang->build->batchUnlink = '批量移除';
|
||||
$lang->build->batchUnlinkStory = '批量移除需求';
|
||||
$lang->build->batchUnlinkBug = '批量移除Bug';
|
||||
@@ -31,7 +29,6 @@ $lang->build->basicInfo = '基本信息';
|
||||
|
||||
$lang->build->id = 'ID';
|
||||
$lang->build->product = $lang->productCommon;
|
||||
$lang->build->project = $lang->projectCommon;
|
||||
$lang->build->name = '名称编号';
|
||||
$lang->build->date = '打包日期';
|
||||
$lang->build->builder = '构建者';
|
||||
@@ -40,10 +37,7 @@ $lang->build->filePath = '下载地址';
|
||||
$lang->build->desc = '描述';
|
||||
$lang->build->files = '上传发行包';
|
||||
$lang->build->last = '上个版本';
|
||||
$lang->build->linkStoriesAndBugs = '关联需求和Bug';
|
||||
$lang->build->linkStories = '相关需求';
|
||||
$lang->build->unlinkStory = '移除需求';
|
||||
$lang->build->linkBugs = '相关Bug';
|
||||
$lang->build->unlinkBug = '移除Bug';
|
||||
$lang->build->stories = '完成的需求';
|
||||
$lang->build->bugs = '解决的Bug';
|
||||
|
||||
@@ -181,13 +181,18 @@ class buildModel extends model
|
||||
|
||||
$build = fixer::input('post')
|
||||
->setDefault('product', 0)
|
||||
->setDefault('branch', 0)
|
||||
->add('project', (int)$projectID)
|
||||
->stripTags($this->config->build->editor->create['id'], $this->config->allowedTags)
|
||||
->remove('resolvedBy,allchecker,files,labels')
|
||||
->get();
|
||||
|
||||
$build = $this->loadModel('file')->processEditor($build, $this->config->build->editor->create['id']);
|
||||
$this->dao->insert(TABLE_BUILD)->data($build)->autoCheck()->batchCheck($this->config->build->create->requiredFields, 'notempty')->check('name', 'unique', "product = {$build->product} AND deleted = '0'")->exec();
|
||||
$this->dao->insert(TABLE_BUILD)->data($build)
|
||||
->autoCheck()
|
||||
->batchCheck($this->config->build->create->requiredFields, 'notempty')
|
||||
->check('name', 'unique', "product = {$build->product} AND branch = {$build->branch} AND deleted = '0'")
|
||||
->exec();
|
||||
if(!dao::isError())
|
||||
{
|
||||
$buildID = $this->dao->lastInsertID();
|
||||
@@ -206,7 +211,7 @@ class buildModel extends model
|
||||
public function update($buildID)
|
||||
{
|
||||
$oldBuild = $this->getByID($buildID);
|
||||
$build = fixer::input('post')->stripTags($this->config->build->editor->edit['id'], $this->config->allowedTags)
|
||||
$build = fixer::input('post')->setDefault('branch', $oldBuild->branch)->stripTags($this->config->build->editor->edit['id'], $this->config->allowedTags)
|
||||
->remove('allchecker,resolvedBy,files,labels')
|
||||
->get();
|
||||
|
||||
@@ -215,7 +220,7 @@ class buildModel extends model
|
||||
->autoCheck()
|
||||
->batchCheck($this->config->build->edit->requiredFields, 'notempty')
|
||||
->where('id')->eq((int)$buildID)
|
||||
->check('name', 'unique', "id != $buildID AND product = {$build->product} AND deleted = '0'")
|
||||
->check('name', 'unique', "id != $buildID AND product = {$build->product} AND branch = {$build->branch} AND deleted = '0'")
|
||||
->exec();
|
||||
if(isset($build->branch) and $oldBuild->branch != $build->branch) $this->dao->update(TABLE_RELEASE)->set('branch')->eq($build->branch)->where('build')->eq($buildID)->exec();
|
||||
if(!dao::isError()) return common::createChanges($oldBuild, $build);
|
||||
|
||||
@@ -47,8 +47,9 @@
|
||||
<?php if(count($allBugs))
|
||||
{
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo "<div class='btn-group'>" . html::selectAll('unlinkedBugsForm') . html::selectReverse('unlinkedBugsForm') . '</div>';
|
||||
echo html::submitButton($lang->build->linkBug) . html::a(inlink('view', "buildID={$build->id}&type=bug"), $lang->goback, '', "class='btn'") . '</div>';
|
||||
echo html::selectButton() . html::submitButton($lang->build->linkBug);
|
||||
echo html::a(inlink('view', "buildID={$build->id}&type=bug"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -48,11 +48,13 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='8' class='text-left'>
|
||||
<?php if(count($allStories))
|
||||
<?php
|
||||
if(count($allStories))
|
||||
{
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo "<div class='btn-group'>" . html::selectAll('unlinkedStoriesForm') . html::selectReverse('unlinkedStoriesForm') . '</div>';
|
||||
echo html::submitButton($lang->story->linkStory) . html::a(inlink('view', "buildID={$build->id}&type=story"), $lang->goback, '', "class='btn'") . '</div>';
|
||||
echo html::selectButton() . html::submitButton($lang->story->linkStory);
|
||||
echo html::a(inlink('view', "buildID={$build->id}&type=story"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
<tr>
|
||||
<td colspan='8'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if($countStories and $canBatchUnlink) echo "<div class='table-actions clearfix'><div class='btn-group'>" . html::selectAll('linkedStoriesForm') . html::selectReverse('linkedStoriesForm') . '</div>' . html::submitButton($lang->build->batchUnlink) . '</div>';?>
|
||||
<?php if($countStories and $canBatchUnlink) echo html::selectButton() . html::submitButton($lang->build->batchUnlink);?>
|
||||
<div class='text'><?php echo sprintf($lang->build->finishStories, $countStories);?></div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -158,7 +158,7 @@
|
||||
<tr>
|
||||
<td colspan='8'>
|
||||
<div class='table-actions clearfix'>
|
||||
<?php if($countBugs and $canBatchUnlink) echo "<div class='table-actions clearfix'><div class='btn-group'>" . html::selectAll('linkedBugsForm') . html::selectReverse('linkedBugsForm') . '</div>' . html::submitButton($lang->build->batchUnlink) . '</div>';?>
|
||||
<?php if($countBugs and $canBatchUnlink) echo html::selectButton() . html::submitButton($lang->build->batchUnlink);?>
|
||||
<div class='text'><?php echo sprintf($lang->build->resolvedBugs, $countBugs);?></div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -20,8 +20,6 @@ $lang->ellipsis = '...';
|
||||
|
||||
$lang->zentaoPMS = 'zentao';
|
||||
$lang->welcome = "%s PMS";
|
||||
$lang->myControl = "Dashboard";
|
||||
$lang->currentPos = 'Current';
|
||||
$lang->logout = 'Logout';
|
||||
$lang->login = 'Login';
|
||||
$lang->aboutZenTao = 'About';
|
||||
@@ -31,25 +29,20 @@ $lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar
|
||||
$lang->agreement = "I Agree to the <a href='http://zpl.pub/page/zplv12.html' target='_blank'>Z PUBLIC LICENSE 1.2</a>, <span class='text-danger'>and promise to keep the logo, link of ZenTao.</span>";
|
||||
|
||||
$lang->reset = 'Reset';
|
||||
$lang->cancel = 'Cancel';
|
||||
$lang->refresh = 'Refresh';
|
||||
$lang->edit = 'Edit';
|
||||
$lang->copy = 'Copy';
|
||||
$lang->delete = 'Delete';
|
||||
$lang->close = 'Close';
|
||||
$lang->link = 'Link';
|
||||
$lang->unlink = 'Unlink';
|
||||
$lang->import = 'Import';
|
||||
$lang->export = 'Export';
|
||||
$lang->setFileName = 'Filename:';
|
||||
$lang->activate = 'Activate';
|
||||
$lang->submitting = 'Saving...';
|
||||
$lang->save = 'Save';
|
||||
$lang->confirm = 'Confirm';
|
||||
$lang->preview = 'View';
|
||||
$lang->goback = 'Back';
|
||||
$lang->goPC = 'PC';
|
||||
$lang->go = 'GO';
|
||||
$lang->more = 'More';
|
||||
$lang->day = 'Day';
|
||||
|
||||
@@ -59,7 +52,6 @@ $lang->history = 'History';
|
||||
$lang->attatch = 'Attatch';
|
||||
$lang->reverse = 'Reverse';
|
||||
$lang->switchDisplay= 'Toggle Show';
|
||||
$lang->switchHelp = 'Toggle Help';
|
||||
$lang->addFiles = 'Add Files';
|
||||
$lang->files = 'Files ';
|
||||
$lang->pasteText = 'Paste text';
|
||||
@@ -76,9 +68,9 @@ $lang->nextShortcutKey = '[Shortcut key:→]';
|
||||
$lang->select = 'Select';
|
||||
$lang->selectAll = 'All';
|
||||
$lang->selectReverse = 'Inverse';
|
||||
$lang->loading = 'Wait...';
|
||||
$lang->notFound = 'Sorry, the object not found.';
|
||||
$lang->showAll = "[[Show all {$lang->projectCommon}s]]";
|
||||
$lang->hideClosed = "[[Show {$lang->projectCommon}s going]]";
|
||||
|
||||
$lang->future = 'Future';
|
||||
$lang->year = 'Year';
|
||||
@@ -368,7 +360,7 @@ $lang->error->passwordrule = "Password should more than six letters.";
|
||||
$lang->error->accessDenied = 'No purview';
|
||||
$lang->error->pasteImg = 'Your browser does not support the paste image!';
|
||||
$lang->error->noData = 'No data';
|
||||
$lang->error->hasEdited = 'The record may have been changed. Please refresh and re edit!';
|
||||
$lang->error->editedByOther = 'The record may have been changed. Please refresh and re edit!';
|
||||
|
||||
/* Pager. */
|
||||
$lang->pager = new stdclass();
|
||||
@@ -381,11 +373,7 @@ $lang->pager->next = "<i class='icon-play' title='Next'></i>";
|
||||
$lang->pager->last = "<i class='icon-step-forward' title='Last'></i>";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
$lang->zentaoSite = "Official Site";
|
||||
$lang->chinaScrum = "<a href='http://api.zentao.net/goto.php?item=chinascrum' target='_blank'>Scrum community</a> ";
|
||||
$lang->agileTraining = "<a href='http://api.zentao.net/goto.php?item=agiletrain' target='_blank'>Training</a> ";
|
||||
$lang->donate = "<a href='http://api.zentao.net/goto.php?item=donate' target='_blank'>Donate</a> ";
|
||||
$lang->proVersion = "<a href='http://api.zentao.net/goto.php?item=proversion&from=footer' target='_blank' class='text-important'><i class='text-danger icon-pro-version'></i> PRO</a> ";
|
||||
$lang->proVersion = "<a href='http://api.zentao.net/goto.php?item=proversion&from=footer' target='_blank' class='text-important'>PRO <i class='text-danger icon-pro-version'></i></a> ";
|
||||
$lang->downNotify = "Down notify";
|
||||
|
||||
$lang->suhosinInfo = "Warming:data is too large! Please enlarge the setting of <font color=red>sohusin.post.max_vars</font> and <font color=red>sohusin.request.max_vars</font> in php.ini. Otherwise partial data can't be saved.";
|
||||
@@ -394,8 +382,6 @@ $lang->noticeImport = "<p style='font-size:14px'>Import data, containing the ex
|
||||
|
||||
$lang->noResultsMatch = "No results match";
|
||||
$lang->searchMore = "Search more results with the key:";
|
||||
$lang->selectAnOption = "Select an option";
|
||||
$lang->selectSomeOptions = "Select some options";
|
||||
$lang->chooseUsersToMail = "Choose users to mail...";
|
||||
|
||||
/* Date times. */
|
||||
|
||||
@@ -20,8 +20,6 @@ $lang->ellipsis = '…';
|
||||
|
||||
$lang->zentaoPMS = '禅道';
|
||||
$lang->welcome = "%s项目管理系统";
|
||||
$lang->myControl = "我的地盘";
|
||||
$lang->currentPos = '当前位置:';
|
||||
$lang->logout = '退出';
|
||||
$lang->login = '登录';
|
||||
$lang->aboutZenTao = '关于';
|
||||
@@ -31,25 +29,20 @@ $lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar
|
||||
$lang->agreement = "已阅读并同意<a href='http://zpl.pub/page/zplv12.html' target='_blank'>《Z PUBLIC LICENSE授权协议1.2》</a>。<span class='text-danger'>未经许可,不得去除、隐藏或遮掩禅道软件的任何标志及链接。</span>";
|
||||
|
||||
$lang->reset = '重填';
|
||||
$lang->cancel = '取消';
|
||||
$lang->refresh = '刷新';
|
||||
$lang->edit = '编辑';
|
||||
$lang->copy = '复制';
|
||||
$lang->delete = '删除';
|
||||
$lang->close = '关闭';
|
||||
$lang->link = '关联';
|
||||
$lang->unlink = '移除';
|
||||
$lang->import = '导入';
|
||||
$lang->export = '导出';
|
||||
$lang->setFileName = '文件名:';
|
||||
$lang->activate = '激活';
|
||||
$lang->submitting = '稍候...';
|
||||
$lang->save = '保存';
|
||||
$lang->confirm = '确认';
|
||||
$lang->preview = '查看';
|
||||
$lang->goback = '返回';
|
||||
$lang->goPC = 'PC版';
|
||||
$lang->go = 'GO';
|
||||
$lang->more = '更多';
|
||||
$lang->day = '天';
|
||||
|
||||
@@ -59,7 +52,6 @@ $lang->history = '历史记录';
|
||||
$lang->attatch = '附件';
|
||||
$lang->reverse = '切换顺序';
|
||||
$lang->switchDisplay= '切换显示';
|
||||
$lang->switchHelp = '切换帮助';
|
||||
$lang->addFiles = '上传了附件 ';
|
||||
$lang->files = '附件 ';
|
||||
$lang->pasteText = '粘贴文本 ';
|
||||
@@ -79,7 +71,6 @@ $lang->selectReverse = '反选';
|
||||
$lang->loading = '稍候...';
|
||||
$lang->notFound = '抱歉,您访问的对象并不存在!';
|
||||
$lang->showAll = '[[全部显示]]';
|
||||
$lang->hideClosed = '[[显示进行中]]';
|
||||
|
||||
$lang->future = '未来';
|
||||
$lang->year = '年';
|
||||
@@ -369,7 +360,7 @@ $lang->error->passwordrule = "密码应该符合规则,长度至少为六
|
||||
$lang->error->accessDenied = '您没有访问权限';
|
||||
$lang->error->pasteImg = '您的浏览器不支持粘贴图片!';
|
||||
$lang->error->noData = '没有数据';
|
||||
$lang->error->hasEdited = '该记录可能已经被改动。请刷新页面重新编辑!';
|
||||
$lang->error->editedByOther = '该记录可能已经被改动。请刷新页面重新编辑!';
|
||||
|
||||
/* 分页信息。*/
|
||||
$lang->pager = new stdclass();
|
||||
@@ -382,11 +373,7 @@ $lang->pager->next = "<i class='icon-play' title='下一页'></i>";
|
||||
$lang->pager->last = "<i class='icon-step-forward' title='末页'></i>";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
$lang->zentaoSite = "官方网站";
|
||||
$lang->chinaScrum = "<a href='http://api.zentao.net/goto.php?item=chinascrum' target='_blank'>Scrum社区</a> ";
|
||||
$lang->agileTraining = "<a href='http://api.zentao.net/goto.php?item=agiletrain' target='_blank'>培训</a> ";
|
||||
$lang->donate = "<a href='http://api.zentao.net/goto.php?item=donate' target='_blank'>捐赠 </a>";
|
||||
$lang->proVersion = "<a href='http://api.zentao.net/goto.php?item=proversion&from=footer' target='_blank' id='proLink' class='text-important'><i class='text-danger icon-pro-version'></i> 专业版!</a> ";
|
||||
$lang->proVersion = "<a href='http://api.zentao.net/goto.php?item=proversion&from=footer' target='_blank' id='proLink' class='text-important'>专业版 <i class='text-danger icon-pro-version'></i></a> ";
|
||||
$lang->downNotify = "下载桌面提醒";
|
||||
|
||||
$lang->suhosinInfo = "警告:数据太多,请在php.ini中修改<font color=red>sohusin.post.max_vars</font>和<font color=red>sohusin.request.max_vars</font>(设置更大的数)。 保存并重新启动apache,否则会造成部分数据无法保存。";
|
||||
@@ -395,8 +382,6 @@ $lang->noticeImport = "<p style='font-size:14px'>导入数据中,含有已经
|
||||
|
||||
$lang->noResultsMatch = "没有匹配结果";
|
||||
$lang->searchMore = "搜索此关键字的更多结果:";
|
||||
$lang->selectAnOption = "选择一个选项";
|
||||
$lang->selectSomeOptions = "选择一些选项";
|
||||
$lang->chooseUsersToMail = "选择要发信通知的用户...";
|
||||
|
||||
/* 时间格式设置。*/
|
||||
|
||||
@@ -822,7 +822,7 @@ class commonModel extends model
|
||||
{
|
||||
$id = (isset($_SESSION['testcaseOnlyCondition']) and !$_SESSION['testcaseOnlyCondition'] and $app->getModuleName() == 'testcase' and isset($preAndNext->pre->case)) ? 'case' : 'id';
|
||||
$title = isset($preAndNext->pre->title) ? $preAndNext->pre->title : $preAndNext->pre->name;
|
||||
$title = $lang->preShortcutKey . '#' . $preAndNext->pre->$id . ' ' . $title;
|
||||
$title = '#' . $preAndNext->pre->$id . ' ' . $title . ' ' . $lang->preShortcutKey;
|
||||
$link = $linkTemplate ? sprintf($linkTemplate, $preAndNext->pre->$id) : inLink('view', "ID={$preAndNext->pre->$id}");
|
||||
echo html::a($link, '<i class="icon-pre icon-chevron-left"></i>', '', "id='pre' class='btn' title='{$title}'");
|
||||
}
|
||||
@@ -830,7 +830,7 @@ class commonModel extends model
|
||||
{
|
||||
$id = (isset($_SESSION['testcaseOnlyCondition']) and !$_SESSION['testcaseOnlyCondition'] and $app->getModuleName() == 'testcase' and isset($preAndNext->next->case)) ? 'case' : 'id';
|
||||
$title = isset($preAndNext->next->title) ? $preAndNext->next->title : $preAndNext->next->name;
|
||||
$title = $lang->nextShortcutKey . '#' . $preAndNext->next->$id . ' ' . $title;
|
||||
$title = '#' . $preAndNext->next->$id . ' ' . $title . ' ' . $lang->nextShortcutKey;
|
||||
$link = $linkTemplate ? sprintf($linkTemplate, $preAndNext->next->$id) : inLink('view', "ID={$preAndNext->next->$id}");
|
||||
echo html::a($link, '<i class="icon-pre icon-chevron-right"></i>', '', "id='next' class='btn' title='$title'");
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ if($onlybody) $_GET['onlybody'] = 'no';
|
||||
<table align='center' border='0' cellpadding='0' cellspacing='0' width='600' style='border: none; border-collapse: collapse;'>
|
||||
<tr>
|
||||
<td style='padding: 10px 0; border: none; vertical-align: middle;'><strong style='font-size: 16px'><?php echo $app->company->name ?></strong></td>
|
||||
<td style='padding: 10px 0; text-align: right; border: none;'><a href='<?php echo common::getSysURL() ?>' target='_blank'><img width='100' src='<?php echo common::getSysURL() . '/theme/default/images/main/zentao.png'; ?>' /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table align='center' border='0' cellpadding='0' cellspacing='0' width='600' style='border-collapse: collapse; background-color: #fff; border: 1px solid #cfcfcf; box-shadow: 0 0px 6px rgba(0, 0, 0, 0.1); margin-bottom: 20px'>
|
||||
<table align='center' border='0' cellpadding='0' cellspacing='0' width='600' style='border-collapse: collapse; background-color: #fff; border: 1px solid #cfcfcf; box-shadow: 0 0px 6px rgba(0, 0, 0, 0.1); margin-bottom: 20px; font-size:13px;'>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<?php
|
||||
@@ -68,7 +68,6 @@ class company extends control
|
||||
$queryID = $type == 'bydept' ? 0 : (int)$param;
|
||||
$actionURL = $this->createLink('company', 'browse', "param=myQueryID&type=bysearch");
|
||||
$this->company->buildSearchForm($queryID, $actionURL);
|
||||
$this->loadModel('search')->setSearchParams($this->config->company->browse->search);
|
||||
|
||||
/* Get users. */
|
||||
$users = $this->company->getUsers($type, $queryID, $deptID, $sort, $pager);
|
||||
|
||||
@@ -11,20 +11,12 @@
|
||||
*/
|
||||
$lang->company->common = 'Company';
|
||||
$lang->company->index = "Index";
|
||||
$lang->company->create = "Create";
|
||||
$lang->company->edit = "Edit";
|
||||
$lang->company->view = "Info";
|
||||
$lang->company->read = "Info";
|
||||
$lang->company->update = "Update";
|
||||
$lang->company->delete = "Delete";
|
||||
$lang->company->browse = "User";
|
||||
$lang->company->dynamic = "Dynamic";
|
||||
$lang->company->depts = "Dept";
|
||||
$lang->company->orgView = 'Company';
|
||||
|
||||
$lang->company->confirmDelete = "Are you sure to delete this company?";
|
||||
|
||||
$lang->company->id = 'ID';
|
||||
$lang->company->name = 'Name';
|
||||
$lang->company->phone = 'Phone';
|
||||
$lang->company->fax = 'Fax';
|
||||
@@ -32,7 +24,6 @@ $lang->company->address = 'Address';
|
||||
$lang->company->zipcode = 'Zipcode';
|
||||
$lang->company->website = 'Website';
|
||||
$lang->company->backyard = 'Intranet';
|
||||
$lang->company->pms = 'Zentao';
|
||||
$lang->company->guest = 'Guest';
|
||||
|
||||
$lang->company->product = $lang->productCommon;
|
||||
|
||||
@@ -11,20 +11,12 @@
|
||||
*/
|
||||
$lang->company->common = '组织视图';
|
||||
$lang->company->index = "组织视图首页";
|
||||
$lang->company->create = "新增公司";
|
||||
$lang->company->edit = "编辑公司";
|
||||
$lang->company->view = "公司信息";
|
||||
$lang->company->read = "公司信息";
|
||||
$lang->company->update = "更新公司";
|
||||
$lang->company->delete = "删除公司";
|
||||
$lang->company->browse = "用户列表";
|
||||
$lang->company->dynamic = "组织动态";
|
||||
$lang->company->depts = "部门列表";
|
||||
$lang->company->orgView = '组织视图';
|
||||
|
||||
$lang->company->confirmDelete = "您确定删除该公司吗?";
|
||||
|
||||
$lang->company->id = '编号';
|
||||
$lang->company->name = '公司名称';
|
||||
$lang->company->phone = '联系电话';
|
||||
$lang->company->fax = '传真';
|
||||
@@ -32,7 +24,6 @@ $lang->company->address = '通讯地址';
|
||||
$lang->company->zipcode = '邮政编码';
|
||||
$lang->company->website = '官网';
|
||||
$lang->company->backyard = '内网';
|
||||
$lang->company->pms = 'PMS网站';
|
||||
$lang->company->guest = '匿名登录';
|
||||
|
||||
$lang->company->product = $lang->productCommon;
|
||||
|
||||
@@ -78,7 +78,7 @@ class companyModel extends model
|
||||
if($type == 'bydept')
|
||||
{
|
||||
$childDeptIds = $this->loadModel('dept')->getAllChildID($deptID);
|
||||
$users = $this->dept->getUsers($childDeptIds, $pager, $sort);
|
||||
return $this->dept->getUsers($childDeptIds, $pager, $sort);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -95,12 +95,8 @@ class companyModel extends model
|
||||
$this->session->set('userQuery', ' 1 = 1');
|
||||
}
|
||||
}
|
||||
$users = $this->loadModel('user')->getByQuery($this->session->userQuery, $pager, $sort);
|
||||
return $this->loadModel('user')->getByQuery($this->session->userQuery, $pager, $sort);
|
||||
}
|
||||
|
||||
if($users) return $users;
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -137,5 +133,7 @@ class companyModel extends model
|
||||
$this->config->company->browse->search['actionURL'] = $actionURL;
|
||||
$this->config->company->browse->search['queryID'] = $queryID;
|
||||
$this->config->company->browse->search['params']['dept']['values'] = array('' => '') + $this->loadModel('dept')->getOptionMenu();
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->company->browse->search);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
?>
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
include '../../common/view/treeview.html.php';
|
||||
js::set('deptID', $deptID);
|
||||
js::set('confirmDelete', $lang->user->confirmDelete);
|
||||
?>
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
*/
|
||||
$lang->convert->common = 'Import';
|
||||
$lang->convert->index = 'Index';
|
||||
$lang->convert->next = 'Next';
|
||||
$lang->convert->pre = 'Back';
|
||||
$lang->convert->reload = 'Reload';
|
||||
$lang->convert->error = 'Error ';
|
||||
|
||||
$lang->convert->start = 'Begin import';
|
||||
$lang->convert->desc = <<<EOT
|
||||
@@ -31,8 +27,6 @@ $lang->convert->convertRedmine = 'Convert Redmine';
|
||||
$lang->convert->convertBugFree = 'Convert BugFree';
|
||||
|
||||
$lang->convert->selectSource = 'Select source system and version';
|
||||
$lang->convert->source = 'Source system';
|
||||
$lang->convert->version = 'Version';
|
||||
$lang->convert->mustSelectSource = "Must select a source system";
|
||||
|
||||
$lang->convert->direction = 'Please select the direction of issue in Redmine';
|
||||
@@ -52,7 +46,6 @@ $lang->convert->checkConfig = 'Check setting';
|
||||
$lang->convert->ok = 'Check passed(√)';
|
||||
$lang->convert->fail = 'Check failed(×)';
|
||||
|
||||
$lang->convert->settingDB = 'Set database';
|
||||
$lang->convert->dbHost = 'Database server';
|
||||
$lang->convert->dbPort = 'Server port';
|
||||
$lang->convert->dbUser = 'Database user';
|
||||
@@ -97,7 +90,6 @@ $lang->convert->redmine->docLibs = 'DocLibs';
|
||||
$lang->convert->redmine->docs = 'Docs';
|
||||
$lang->convert->redmine->files = 'files';
|
||||
|
||||
$lang->convert->errorConnectDB = 'Connect to database server failed.';
|
||||
$lang->convert->errorFileNotExits = 'File %s not exits.';
|
||||
$lang->convert->errorUserExists = 'User %s exits already.';
|
||||
$lang->convert->errorGroupExists = 'Group %s exits already.';
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
*/
|
||||
$lang->convert->common = '从其他系统导入';
|
||||
$lang->convert->index = '首页';
|
||||
$lang->convert->next = '下一步';
|
||||
$lang->convert->pre = '返回';
|
||||
$lang->convert->reload = '刷新';
|
||||
$lang->convert->error = '错误 ';
|
||||
|
||||
$lang->convert->start = '开始转换';
|
||||
$lang->convert->desc = <<<EOT
|
||||
@@ -31,8 +27,6 @@ $lang->convert->convertRedmine = '转换Redmine';
|
||||
$lang->convert->convertBugFree = '转换BugFree';
|
||||
|
||||
$lang->convert->selectSource = '选择来源系统及版本';
|
||||
$lang->convert->source = '来源系统';
|
||||
$lang->convert->version = '版本';
|
||||
$lang->convert->mustSelectSource = "必须选择一个来源。";
|
||||
|
||||
$lang->convert->direction = "请选择{$lang->projectCommon}问题转换方向";
|
||||
@@ -52,7 +46,6 @@ $lang->convert->checkConfig = '检查配置';
|
||||
$lang->convert->ok = '<span class="text-success"><i class="icon-ok-sign"></i> 检查通过</span>';
|
||||
$lang->convert->fail = '<span class="text-danger"><i class="icon-remove-sign"></i> 检查失败</span>';
|
||||
|
||||
$lang->convert->settingDB = '设置数据库';
|
||||
$lang->convert->dbHost = '数据库服务器';
|
||||
$lang->convert->dbPort = '服务器端口';
|
||||
$lang->convert->dbUser = '数据库用户名';
|
||||
@@ -97,7 +90,6 @@ $lang->convert->redmine->docLibs = '文档库';
|
||||
$lang->convert->redmine->docs = '文档';
|
||||
$lang->convert->redmine->files = '附件';
|
||||
|
||||
$lang->convert->errorConnectDB = '数据库连接失败 ';
|
||||
$lang->convert->errorFileNotExits = '文件 %s 不存在';
|
||||
$lang->convert->errorUserExists = '用户 %s 已存在';
|
||||
$lang->convert->errorGroupExists = '分组 %s 已存在';
|
||||
|
||||
@@ -50,5 +50,4 @@ $lang->cron->notice->dom = 'Range : 1-31';
|
||||
$lang->cron->notice->mon = 'Range : 1-12';
|
||||
$lang->cron->notice->dow = 'Range : 0-6';
|
||||
$lang->cron->notice->help = 'Note: if the server is restarted, or that the timing task is not normal, then the timing task has stopped. You need to click the [Open process] button or refresh page after a minute to open the scheduled tasks. If the last run time of first record is changed in cron list, then the task is turned on.';
|
||||
|
||||
$lang->cron->error['rule'] = '"%s" is not a valid value';
|
||||
$lang->cron->notice->errorRule = '"%s" is not a valid value';
|
||||
|
||||
@@ -50,5 +50,4 @@ $lang->cron->notice->dom = '取值范围:1-31';
|
||||
$lang->cron->notice->mon = '取值范围:1-12';
|
||||
$lang->cron->notice->dow = '取值范围:0-6';
|
||||
$lang->cron->notice->help = '注:如果服务器重启,或者发现计划任务没有正常工作,那么计划任务已经停止工作。需要手动点击【创建进程】按钮,或者一分钟后刷新页面,来开启计划任务。如果任务列表中第一条记录的最后执行时间改变,说明任务开启成功。';
|
||||
|
||||
$lang->cron->error['rule'] = '"%s" 填写的不是合法的值';
|
||||
$lang->cron->notice->errorRule = '"%s" 填写的不是合法的值';
|
||||
|
||||
+11
-11
@@ -169,10 +169,10 @@ class cronModel extends model
|
||||
->skipSpecial('m,h,dom,mon,dow,command')
|
||||
->get();
|
||||
|
||||
$checkRule = $this->checkRule($cron);
|
||||
if(!empty($checkRule))
|
||||
$result = $this->checkRule($cron);
|
||||
if(!empty($result))
|
||||
{
|
||||
dao::$errors[] = $checkRule;
|
||||
dao::$errors[] = $result;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -195,10 +195,10 @@ class cronModel extends model
|
||||
->skipSpecial('m,h,dom,mon,dow,command')
|
||||
->get();
|
||||
|
||||
$checkRule = $this->checkRule($cron);
|
||||
if(!empty($checkRule))
|
||||
$result = $this->checkRule($cron);
|
||||
if(!empty($result))
|
||||
{
|
||||
dao::$errors[] = $checkRule;
|
||||
dao::$errors[] = $result;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -215,11 +215,11 @@ class cronModel extends model
|
||||
*/
|
||||
public function checkRule($cron)
|
||||
{
|
||||
if($cron->m === '' or preg_match('/[^0-9\*\-\/]/', $cron->m)) return sprintf($this->lang->cron->error['rule'], $this->lang->cron->m);
|
||||
if($cron->h === '' or preg_match('/[^0-9\*\-\/]/', $cron->h)) return sprintf($this->lang->cron->error['rule'], $this->lang->cron->h);
|
||||
if($cron->dom === '' or preg_match('/[^0-9\*\-\/]/', $cron->dom))return sprintf($this->lang->cron->error['rule'], $this->lang->cron->dom);
|
||||
if($cron->mon === '' or preg_match('/[^0-9\*\-\/]/', $cron->mon))return sprintf($this->lang->cron->error['rule'], $this->lang->cron->mon);
|
||||
if($cron->dow === '' or preg_match('/[^0-9\*\-\/]/', $cron->dow))return sprintf($this->lang->cron->error['rule'], $this->lang->cron->dow);
|
||||
if($cron->m === '' or preg_match('/[^0-9\*\-\/]/', $cron->m)) return sprintf($this->lang->cron->notice->errorRule, $this->lang->cron->m);
|
||||
if($cron->h === '' or preg_match('/[^0-9\*\-\/]/', $cron->h)) return sprintf($this->lang->cron->notice->errorRule, $this->lang->cron->h);
|
||||
if($cron->dom === '' or preg_match('/[^0-9\*\-\/]/', $cron->dom))return sprintf($this->lang->cron->notice->errorRule, $this->lang->cron->dom);
|
||||
if($cron->mon === '' or preg_match('/[^0-9\*\-\/]/', $cron->mon))return sprintf($this->lang->cron->notice->errorRule, $this->lang->cron->mon);
|
||||
if($cron->dow === '' or preg_match('/[^0-9\*\-\/]/', $cron->dow))return sprintf($this->lang->cron->notice->errorRule, $this->lang->cron->dow);
|
||||
if(empty($cron->command))return sprintf($this->lang->error->notempty, $this->lang->cron->command);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ class custom extends control
|
||||
die(js::locate($this->createLink('custom', 'set', "module=$module&field=$field&lang=" . str_replace('-', '_', $lang)), 'parent'));
|
||||
}
|
||||
|
||||
/* Check whether the current language has been customized. */
|
||||
$lang = str_replace('_', '-', $lang);
|
||||
$dbFields = $this->custom->getItems("lang=$lang&module=$module§ion=$field");
|
||||
if(empty($dbFields)) $dbFields = $this->custom->getItems("lang=" . ($lang == $currentLang ? 'all' : $currentLang) . "&module=$module§ion=$field");
|
||||
@@ -96,7 +97,7 @@ class custom extends control
|
||||
$this->view->fieldList = $fieldList;
|
||||
$this->view->dbFields = $dbFields;
|
||||
$this->view->field = $field;
|
||||
$this->view->setLang = str_replace('_', '-', $lang);
|
||||
$this->view->lang2Set = str_replace('_', '-', $lang);
|
||||
$this->view->module = $module;
|
||||
$this->view->currentLang = $currentLang;
|
||||
$this->view->canAdd = strpos($this->config->custom->canAdd[$module], $field) !== false;
|
||||
|
||||
@@ -6,7 +6,7 @@ $lang->custom->restore = 'restore';
|
||||
$lang->custom->key = 'Key';
|
||||
$lang->custom->value = 'Value';
|
||||
$lang->custom->flow = 'Flow';
|
||||
$lang->custom->select = 'Select:';
|
||||
$lang->custom->select = 'Select flow:';
|
||||
|
||||
$lang->custom->object['story'] = 'Story';
|
||||
$lang->custom->object['task'] = 'Task';
|
||||
|
||||
@@ -6,7 +6,7 @@ $lang->custom->restore = '恢复默认';
|
||||
$lang->custom->key = '键';
|
||||
$lang->custom->value = '值';
|
||||
$lang->custom->flow = '流程';
|
||||
$lang->custom->select = '请选择:';
|
||||
$lang->custom->select = '请选择流程:';
|
||||
|
||||
$lang->custom->object['story'] = '需求';
|
||||
$lang->custom->object['task'] = '任务';
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<div id='featurebar'>
|
||||
<ul class='nav'>
|
||||
<?php
|
||||
@@ -30,11 +29,17 @@
|
||||
<div class='main'>
|
||||
<form method='post' class='form-condensed' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr><th class='w-100px'><?php echo $lang->custom->select;?></th><th></th><th></th></tr>
|
||||
<?php $checkedKey = isset($config->custom->productproject) ? $config->custom->productproject : '0_0' ?>
|
||||
<?php foreach($lang->custom->productproject->relation as $key => $value):?>
|
||||
<tr>
|
||||
<th class='w-100px'><?php echo $lang->custom->select;?></th>
|
||||
<td class='w-300px'><?php echo html::radio('productproject', $lang->custom->productproject->relation, isset($config->custom->productproject) ? $config->custom->productproject : '0_0');?></td>
|
||||
<td><?php echo html::submitButton()?></td>
|
||||
<td></td>
|
||||
<td class='w-300px'>
|
||||
<label class="radio-inline"><input type="radio" name="productproject" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="productproject<?php echo $key;?>"><?php echo $value;?></label>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
<tr><td></td><td><?php echo html::submitButton()?></td></tr>
|
||||
<tr>
|
||||
<td colspan='3' class='pd-0'>
|
||||
<div class='alert alert-info alert-block'><strong><?php echo $lang->custom->productproject->notice?></strong></div>
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<?php
|
||||
$itemRow = <<<EOT
|
||||
<tr class='text-center'>
|
||||
@@ -97,7 +96,7 @@ EOT;
|
||||
<td colspan='<?php $canAdd ? print(3) : print(2);?>' class='text-center'>
|
||||
<?php
|
||||
$appliedTo = array($currentLang => $lang->custom->currentLang, 'all' => $lang->custom->allLang);
|
||||
echo html::radio('lang', $appliedTo, $setLang);
|
||||
echo html::radio('lang', $appliedTo, $lang2Set);
|
||||
echo html::submitButton();
|
||||
if(common::hasPriv('custom', 'restore')) echo html::linkButton($lang->custom->restore, inlink('restore', "module=$module&field=$field"), 'hiddenwin');
|
||||
?>
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->dept->common = 'Department';
|
||||
$lang->dept->add = "Add";
|
||||
$lang->dept->addChild = "Add child department";
|
||||
$lang->dept->manageChild = "Child deprtment";
|
||||
$lang->dept->edit = "Edit";
|
||||
$lang->dept->delete = "Delete";
|
||||
@@ -21,9 +19,7 @@ $lang->dept->name = "Name";
|
||||
$lang->dept->browse = "Manage";
|
||||
$lang->dept->manage = "Manage";
|
||||
$lang->dept->updateOrder = "Update order";
|
||||
$lang->dept->users = "Users";
|
||||
|
||||
$lang->dept->saveButton = " Save (S) ";
|
||||
$lang->dept->confirmDelete = "Are you sure to delete this department?";
|
||||
$lang->dept->successSave = "Success save.";
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->dept->common = '部门结构';
|
||||
$lang->dept->add = "添加";
|
||||
$lang->dept->addChild = "添加下级部门";
|
||||
$lang->dept->manageChild = "下级部门";
|
||||
$lang->dept->edit = "编辑部门";
|
||||
$lang->dept->delete = "删除部门";
|
||||
@@ -21,9 +19,7 @@ $lang->dept->name = "部门名称";
|
||||
$lang->dept->browse = "部门维护";
|
||||
$lang->dept->manage = "维护部门结构";
|
||||
$lang->dept->updateOrder = "更新排序";
|
||||
$lang->dept->users = "成员列表";
|
||||
|
||||
$lang->dept->saveButton = " 保存 (S) ";
|
||||
$lang->dept->confirmDelete = " 您确定删除该部门吗?";
|
||||
$lang->dept->successSave = " 修改成功。";
|
||||
|
||||
|
||||
@@ -333,6 +333,22 @@ class deptModel extends model
|
||||
->page($pager)
|
||||
->fetchAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user pairs of a department.
|
||||
*
|
||||
* @param int $deptID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDeptUserPairs($deptID = 0)
|
||||
{
|
||||
return $this->dao->select('account, realname')->from(TABLE_USER)
|
||||
->where('deleted')->eq(0)
|
||||
->beginIF($deptID)->andWhere('dept')->eq((int)$deptID)->fi()
|
||||
->orderBy('account')
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a department.
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<div id='titlebar'>
|
||||
<div class='heading'><?php echo html::icon($lang->icons['dept']);?> <?php echo $lang->dept->common;?></div>
|
||||
</div>
|
||||
|
||||
@@ -85,7 +85,6 @@ class doc extends control
|
||||
/* Build the search form. */
|
||||
$actionURL = $this->createLink('doc', 'browse', "libID=$libID&moduleID=$moduleID&procuctID=$productID&projectID=$projectID&browseType=bySearch&queryID=myQueryID");
|
||||
$this->doc->buildSearchForm($libID, $this->libs, $queryID, $actionURL);
|
||||
$this->search->setSearchParams($this->config->doc->search);
|
||||
|
||||
$this->view->libID = $libID;
|
||||
$this->view->libName = $this->libs[$libID];
|
||||
|
||||
@@ -24,7 +24,6 @@ $lang->doc->content = 'Content';
|
||||
$lang->doc->keywords = 'Keywords';
|
||||
$lang->doc->url = 'URL';
|
||||
$lang->doc->files = 'File';
|
||||
$lang->doc->views = 'Views';
|
||||
$lang->doc->addedBy = 'Added by';
|
||||
$lang->doc->addedDate = 'Added date';
|
||||
$lang->doc->editedBy = 'Edited by';
|
||||
@@ -36,9 +35,6 @@ $lang->doc->moduleDoc = 'By module';
|
||||
$lang->doc->searchDoc = 'By search';
|
||||
//$lang->doc->allDoc = 'All document';
|
||||
|
||||
$lang->doc->moduleName = 'Module name';
|
||||
$lang->doc->moduleOrder = 'Module order';
|
||||
|
||||
/* Actions. */
|
||||
$lang->doc->index = 'Index';
|
||||
$lang->doc->create = 'Create doc';
|
||||
|
||||
@@ -24,7 +24,6 @@ $lang->doc->content = '文档正文';
|
||||
$lang->doc->keywords = '关键字';
|
||||
$lang->doc->url = '文档URL';
|
||||
$lang->doc->files = '附件';
|
||||
$lang->doc->views = '查阅次数';
|
||||
$lang->doc->addedBy = '由谁添加';
|
||||
$lang->doc->addedDate = '添加时间';
|
||||
$lang->doc->editedBy = '由谁编辑';
|
||||
@@ -36,9 +35,6 @@ $lang->doc->moduleDoc = '按模块浏览';
|
||||
$lang->doc->searchDoc = '搜索';
|
||||
//$lang->doc->allDoc = '所有文档';
|
||||
|
||||
$lang->doc->moduleName = '模块名称';
|
||||
$lang->doc->moduleOrder = '模块排序';
|
||||
|
||||
/* 方法列表。*/
|
||||
$lang->doc->index = '首页';
|
||||
$lang->doc->create = '创建文档';
|
||||
|
||||
@@ -324,6 +324,8 @@ class docModel extends model
|
||||
$moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($libID, 'customdoc', $startModuleID = 0);
|
||||
}
|
||||
$this->config->doc->search['params']['module']['values'] = $moduleOptionMenu;
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->doc->search);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<?php js::set('confirmDelete', $lang->doc->confirmDelete)?>
|
||||
<script language='Javascript'>
|
||||
var browseType = '<?php echo $browseType;?>';
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<div class='panel panel-sm'>
|
||||
<div class='panel-heading'><i class='icon-list-ul'></i> <strong><?php echo isset($lang->editor->modules[$module])? $lang->editor->modules[$module] : $module;?></strong></div>
|
||||
<div class='panel-body'>
|
||||
|
||||
@@ -19,7 +19,6 @@ $lang->extension->activate = 'Activate';
|
||||
$lang->extension->deactivate = 'Deactivate';
|
||||
$lang->extension->obtain = 'Obtain';
|
||||
$lang->extension->view = 'Info';
|
||||
$lang->extension->download = 'Download';
|
||||
$lang->extension->downloadAB = 'Down';
|
||||
$lang->extension->upload = 'Upload and install';
|
||||
$lang->extension->erase = 'Erase';
|
||||
@@ -31,21 +30,13 @@ $lang->extension->installed = 'Installed';
|
||||
$lang->extension->deactivated = 'Deactivated';
|
||||
$lang->extension->available = 'Downloaded';
|
||||
|
||||
$lang->extension->id = 'ID';
|
||||
$lang->extension->name = 'Name';
|
||||
$lang->extension->code = 'Code';
|
||||
$lang->extension->version = 'Version';
|
||||
$lang->extension->compatible = 'Compatible';
|
||||
$lang->extension->latest = '<small>Latest:<strong><a href="%s" target="_blank" class="extension">%s</a></strong>,need zentao <a href="http://api.zentao.net/goto.php?item=latest" target="_blank"><strong>%s</strong></small>';
|
||||
$lang->extension->author = 'Author';
|
||||
$lang->extension->license = 'License';
|
||||
$lang->extension->intro = 'Description';
|
||||
$lang->extension->abstract = 'Abstract';
|
||||
$lang->extension->site = 'Site';
|
||||
$lang->extension->addedTime = 'Added Time';
|
||||
$lang->extension->updatedTime = 'Updated Time';
|
||||
$lang->extension->downloads = 'Downloads';
|
||||
$lang->extension->public = 'Public';
|
||||
$lang->extension->compatible = 'Compatible';
|
||||
$lang->extension->grade = 'Grade';
|
||||
$lang->extension->depends = 'Depends';
|
||||
@@ -65,7 +56,6 @@ $lang->extension->byCategory = 'By Category';
|
||||
$lang->extension->installFailed = '%s failed, the reason is:';
|
||||
$lang->extension->uninstallFailed = 'Uninstall failed, the reason is:';
|
||||
$lang->extension->confirmUninstall = 'Uninstall will delete or modify database, whether to uninstall?';
|
||||
$lang->extension->noticeBackupDB = 'Before uninstalling, we recommend backing up the database.';
|
||||
$lang->extension->installFinished = 'Good, the extension has been %s successfully.';
|
||||
$lang->extension->refreshPage = 'Refresh';
|
||||
$lang->extension->uninstallFinished = 'Extension has been successfully uninstalled.';
|
||||
|
||||
@@ -19,7 +19,6 @@ $lang->extension->activate = '激活';
|
||||
$lang->extension->deactivate = '禁用';
|
||||
$lang->extension->obtain = '获得插件';
|
||||
$lang->extension->view = '详情';
|
||||
$lang->extension->download = '下载插件';
|
||||
$lang->extension->downloadAB = '下载';
|
||||
$lang->extension->upload = '本地安装';
|
||||
$lang->extension->erase = '清除';
|
||||
@@ -31,21 +30,13 @@ $lang->extension->installed = '已安装';
|
||||
$lang->extension->deactivated = '被禁用';
|
||||
$lang->extension->available = '已下载';
|
||||
|
||||
$lang->extension->id = '编号';
|
||||
$lang->extension->name = '名称';
|
||||
$lang->extension->code = '插件代号';
|
||||
$lang->extension->version = '版本';
|
||||
$lang->extension->compatible = '适用版本';
|
||||
$lang->extension->latest = '<small>最新版本<strong><a href="%s" target="_blank" class="extension">%s</a></strong>,兼容禅道<a href="http://api.zentao.net/goto.php?item=latest" target="_blank" class="alert-link"><strong>%s</strong></a></small>';
|
||||
$lang->extension->author = '作者';
|
||||
$lang->extension->license = '授权';
|
||||
$lang->extension->intro = '详情';
|
||||
$lang->extension->abstract = '简介';
|
||||
$lang->extension->site = '官网';
|
||||
$lang->extension->addedTime = '添加时间';
|
||||
$lang->extension->updatedTime = '更新时间';
|
||||
$lang->extension->downloads = '下载量';
|
||||
$lang->extension->public = '下载方式';
|
||||
$lang->extension->compatible = '兼容性';
|
||||
$lang->extension->grade = '评分';
|
||||
$lang->extension->depends = '依赖';
|
||||
@@ -65,7 +56,6 @@ $lang->extension->byCategory = '分类浏览';
|
||||
$lang->extension->installFailed = '%s失败,错误原因如下:';
|
||||
$lang->extension->uninstallFailed = '卸载失败,错误原因如下:';
|
||||
$lang->extension->confirmUninstall = '卸载插件会删除或修改相关的数据库,是否继续卸载?';
|
||||
$lang->extension->noticeBackupDB = '卸载前,建议备份数据库。';
|
||||
$lang->extension->installFinished = '恭喜您,插件顺利的%s成功!';
|
||||
$lang->extension->refreshPage = '刷新页面';
|
||||
$lang->extension->uninstallFinished = '插件已经成功卸载';
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<div class='side'>
|
||||
<form class='side-search mgb-20' method='post' action='<?php echo inlink('obtain', 'type=bySearch');?>'>
|
||||
<div class="input-group">
|
||||
|
||||
@@ -5,4 +5,4 @@ $config->file->mimes['csv'] = 'text/csv';
|
||||
$config->file->mimes['default'] = 'application/octet-stream';
|
||||
|
||||
$config->file->imageExtensions = array('jpeg', 'jpg', 'gif', 'png');
|
||||
$config->file->imageFmt = array('.jpg', '.bmp', '.jpeg');
|
||||
$config->file->image2Compress = array('.jpg', '.bmp', '.jpeg');
|
||||
|
||||
@@ -52,13 +52,7 @@ class file extends control
|
||||
if(@move_uploaded_file($file['tmpname'], $this->file->savePath . $file['pathname']))
|
||||
{
|
||||
/* Compress image for jpg and bmp. */
|
||||
$compressedImage = $this->file->compressImage($file['pathname']);
|
||||
if($compressedImage)
|
||||
{
|
||||
$file['pathname'] = $compressedImage['pathname'];
|
||||
$file['extension'] = $compressedImage['extension'];
|
||||
$file['size'] = $compressedImage['size'];
|
||||
}
|
||||
$file = $this->file->compressImage($file);
|
||||
|
||||
$file['addedBy'] = $this->app->user->account;
|
||||
$file['addedDate'] = helper::today();
|
||||
|
||||
@@ -16,8 +16,6 @@ $lang->file->download = 'Download';
|
||||
$lang->file->edit = 'Edit file name';
|
||||
$lang->file->inputFileName = 'Input file name';
|
||||
$lang->file->delete = 'Delete';
|
||||
$lang->file->export2CSV = 'Export CSV';
|
||||
$lang->file->ajaxUpload = 'AJAX: upload file from editor';
|
||||
$lang->file->label = 'Title: ';
|
||||
$lang->file->maxUploadSize = "<span class='red'>%s</span>";
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@ $lang->file->download = '下载附件';
|
||||
$lang->file->edit = '重命名';
|
||||
$lang->file->inputFileName = '请输入附件名称';
|
||||
$lang->file->delete = '删除附件';
|
||||
$lang->file->export2CSV = '导出CSV';
|
||||
$lang->file->ajaxUpload = '接口:编辑器上传附件';
|
||||
$lang->file->label = '标题:';
|
||||
$lang->file->maxUploadSize = "<span class='red'>%s</span>";
|
||||
|
||||
|
||||
+25
-27
@@ -78,13 +78,7 @@ class fileModel extends model
|
||||
{
|
||||
if($file['size'] == 0) continue;
|
||||
move_uploaded_file($file['tmpname'], $this->savePath . $file['pathname']);
|
||||
$compressedImage = $this->compressImage($file['pathname']);
|
||||
if($compressedImage)
|
||||
{
|
||||
$file['pathname'] = $compressedImage['pathname'];
|
||||
$file['extension'] = $compressedImage['extension'];
|
||||
$file['size'] = $compressedImage['size'];
|
||||
}
|
||||
$file = $this->compressImage($file);
|
||||
|
||||
$file['objectType'] = $objectType;
|
||||
$file['objectID'] = $objectID;
|
||||
@@ -246,9 +240,11 @@ class fileModel extends model
|
||||
$realPathName= $this->savePath . $pathName;
|
||||
if(!is_dir(dirname($realPathName)))mkdir(dirname($realPathName));
|
||||
move_uploaded_file($file['tmpname'], $realPathName);
|
||||
$compressImage = $this->compressImage($pathName);
|
||||
if($compressImage) $file['size'] = $compressedImage['size'];
|
||||
|
||||
$file['pathname'] = $pathName;
|
||||
$file = $this->compressImage($file);
|
||||
|
||||
$fileInfo = new stdclass();
|
||||
$fileInfo->addedBy = $this->app->user->account;
|
||||
$fileInfo->addedDate = helper::now();
|
||||
$fileInfo->size = $file['size'];
|
||||
@@ -440,8 +436,16 @@ class fileModel extends model
|
||||
foreach($files as $i => $uploadFile)
|
||||
{
|
||||
if($uploadFile['folder']) continue;
|
||||
$fileName = mb_convert_encoding($uploadFile['filename'], 'UTF-8', 'gbk');
|
||||
$fileName = substr($fileName, strrpos($fileName, '/') + 1);
|
||||
$fileName = $uploadFile['filename'];
|
||||
if(function_exists('iconv'))
|
||||
{
|
||||
$fileName = iconv('gbk', 'utf-8//TRANSLIT', $fileName);
|
||||
}
|
||||
elseif(function_exists('mb_convert_encoding'))
|
||||
{
|
||||
$fileName = mb_convert_encoding($fileName, 'utf-8', 'gbk');
|
||||
}
|
||||
if(($pos = strrpos($fileName, '/')) !== false) $fileName = substr($fileName, $pos + 1);
|
||||
|
||||
$file = array();
|
||||
$file['extension'] = $this->getExtension($fileName);
|
||||
@@ -483,39 +487,33 @@ class fileModel extends model
|
||||
/**
|
||||
* Compress image
|
||||
*
|
||||
* @param string $pathName
|
||||
* @param array $file
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function compressImage($pathName)
|
||||
public function compressImage($file)
|
||||
{
|
||||
if(!extension_loaded('gd')) return false;
|
||||
if(!extension_loaded('gd')) return $file;
|
||||
|
||||
$pathName = $file['pathname'];
|
||||
$fileName = $this->savePath . $pathName;
|
||||
$suffix = strrchr($fileName, '.');
|
||||
$lowerSuffix = strtolower($suffix);
|
||||
|
||||
if(!in_array($lowerSuffix, $this->config->file->imageFmt)) return false;
|
||||
if(!in_array($lowerSuffix, $this->config->file->image2Compress)) return $file;
|
||||
|
||||
$quality = 85;
|
||||
$newSuffix = '.jpg';
|
||||
$compressedName = str_replace($suffix, $newSuffix, $pathName);
|
||||
|
||||
$res = '';
|
||||
if($lowerSuffix == '.bmp')
|
||||
{
|
||||
$res = $this->imagecreatefrombmp($fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
$res = imagecreatefromjpeg($fileName);
|
||||
}
|
||||
|
||||
$res = $lowerSuffix == '.bmp' ? $this->imagecreatefrombmp($fileName) : imagecreatefromjpeg($fileName);
|
||||
imagejpeg($res, $this->savePath . $compressedName, $quality);
|
||||
if($fileName != $this->savePath . $compressedName) unlink($fileName);
|
||||
|
||||
|
||||
return array('pathname' => $compressedName, 'extension' => ltrim($newSuffix, '.'), 'size' => filesize($this->savePath . $compressedName));
|
||||
$file['pathname'] = $compressedName;
|
||||
$file['extension'] = ltrim($newSuffix, '.');
|
||||
$file['size'] = filesize($this->savePath . $compressedName);
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -235,7 +235,7 @@ class group extends control
|
||||
}
|
||||
$group = $this->group->getById($groupID);
|
||||
$groupUsers = $this->group->getUserPairs($groupID);
|
||||
$allUsers = $this->group->getDeptUserPairs($deptID);
|
||||
$allUsers = $this->loadModel('dept')->getDeptUserPairs($deptID);
|
||||
$otherUsers = array_diff_assoc($allUsers, $groupUsers);
|
||||
|
||||
$title = $this->lang->company->common . $this->lang->colon . $group->name . $this->lang->colon . $this->lang->group->manageMember;
|
||||
|
||||
@@ -21,8 +21,6 @@ $lang->group->managePrivByGroup = 'Privilege';
|
||||
$lang->group->managePrivByModule = 'Manage privilege by module';
|
||||
$lang->group->byModuleTips = '<span class="tips"> (Press shift or control to multiple select)</span>';
|
||||
$lang->group->manageMember = 'Members';
|
||||
$lang->group->linkMember = 'Add members';
|
||||
$lang->group->unlinkMember = 'Remove member';
|
||||
$lang->group->confirmDelete = 'Are you sure to delete this group?';
|
||||
$lang->group->successSaved = 'Success saved.';
|
||||
$lang->group->errorNotSaved = 'Not saved, please make sure you have selected some actions and groups.';
|
||||
|
||||
@@ -159,6 +159,8 @@ $lang->resource->story = new stdclass();
|
||||
$lang->resource->story->create = 'create';
|
||||
$lang->resource->story->batchCreate = 'batchCreate';
|
||||
$lang->resource->story->edit = 'edit';
|
||||
$lang->resource->story->linkStory = 'linkStory';
|
||||
$lang->resource->story->unlinkStory = 'unlinkStory';
|
||||
$lang->resource->story->batchEdit = 'batchEdit';
|
||||
$lang->resource->story->export = 'export';
|
||||
$lang->resource->story->delete = 'delete';
|
||||
@@ -416,6 +418,8 @@ $lang->resource->bug->confirmBug = 'confirmBug';
|
||||
$lang->resource->bug->batchConfirm = 'batchConfirm';
|
||||
$lang->resource->bug->view = 'view';
|
||||
$lang->resource->bug->edit = 'edit';
|
||||
$lang->resource->bug->linkBugs = 'linkBugs';
|
||||
$lang->resource->bug->unlinkBug = 'unlinkBug';
|
||||
$lang->resource->bug->batchEdit = 'batchEdit';
|
||||
$lang->resource->bug->batchClose = 'batchClose';
|
||||
$lang->resource->bug->assignTo = 'assignTo';
|
||||
@@ -464,6 +468,8 @@ $lang->resource->testcase->batchCreate = 'batchCreate';
|
||||
$lang->resource->testcase->createBug = 'createBug';
|
||||
$lang->resource->testcase->view = 'view';
|
||||
$lang->resource->testcase->edit = 'edit';
|
||||
$lang->resource->testcase->linkCases = 'linkCases';
|
||||
$lang->resource->testcase->unlinkCase = 'unlinkCase';
|
||||
$lang->resource->testcase->batchEdit = 'batchEdit';
|
||||
$lang->resource->testcase->delete = 'delete';
|
||||
$lang->resource->testcase->batchDelete = 'batchDelete';
|
||||
|
||||
@@ -21,8 +21,6 @@ $lang->group->managePrivByGroup = '权限维护';
|
||||
$lang->group->managePrivByModule = '按模块分配权限';
|
||||
$lang->group->byModuleTips = '<span class="tips">(可以按住shift或者control键进行多选)</span>';
|
||||
$lang->group->manageMember = '成员维护';
|
||||
$lang->group->linkMember = '关联用户';
|
||||
$lang->group->unlinkMember = '移除用户';
|
||||
$lang->group->confirmDelete = '您确定删除该用户分组吗?';
|
||||
$lang->group->successSaved = '成功保存';
|
||||
$lang->group->errorNotSaved = '没有保存,请确认选择了权限数据。';
|
||||
|
||||
@@ -178,22 +178,6 @@ class groupModel extends model
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user pairs of a dept.
|
||||
*
|
||||
* @param int $deptID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDeptUserPairs($deptID = 0)
|
||||
{
|
||||
return $this->dao->select('account, realname')->from(TABLE_USER)
|
||||
->where('deleted')->eq(0)
|
||||
->beginIF($deptID)->andWhere('dept')->eq((int)$deptID)
|
||||
->orderBy('account')
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a group.
|
||||
*
|
||||
|
||||
@@ -68,8 +68,6 @@ class install extends control
|
||||
$this->view->phpVersion = $this->install->getPhpVersion();
|
||||
$this->view->phpResult = $this->install->checkPHP();
|
||||
$this->view->pdoResult = $this->install->checkPDO();
|
||||
$this->view->sessionResult = $this->install->checkSessionSavePath();
|
||||
$this->view->sessionInfo = $this->install->getSessionSavePath();
|
||||
$this->view->pdoMySQLResult = $this->install->checkPDOMySQL();
|
||||
$this->view->jsonResult = $this->install->checkJSON();
|
||||
$this->view->tmpRootInfo = $this->install->getTmpRoot();
|
||||
@@ -77,6 +75,16 @@ class install extends control
|
||||
$this->view->dataRootInfo = $this->install->getDataRoot();
|
||||
$this->view->dataRootResult = $this->install->checkDataRoot();
|
||||
$this->view->iniInfo = $this->install->getIniInfo();
|
||||
|
||||
$checkSession = ini_get('session.save_handler') == 'files';
|
||||
$this->view->sessionResult = 'ok';
|
||||
$this->view->checkSession = $checkSession;
|
||||
if($checkSession)
|
||||
{
|
||||
$this->view->sessionResult = $this->install->checkSessionSavePath();
|
||||
$this->view->sessionInfo = $this->install->getSessionSavePath();
|
||||
}
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ The version of current release is <strong class='red'>%s</strong>。
|
||||
EOT;
|
||||
|
||||
$lang->install->newReleased= "<strong class='red'>Notice</strong>:There is a new version <strong class='red'>%s</strong>, released on %s。";
|
||||
$lang->install->choice = 'You can ';
|
||||
$lang->install->or = 'or';
|
||||
$lang->install->checking = 'System checking';
|
||||
$lang->install->ok = 'OK(√)';
|
||||
@@ -70,9 +69,6 @@ $lang->install->sessionFail = 'Edit the php.ini file to set session.save_path';
|
||||
$lang->install->mkdir = '<p>Should creat the directory %s。<br /> Under linux, can try<br /> mkdir -p %s</p>';
|
||||
$lang->install->chmod = 'Should change the permission of "%s".<br />Under linux, can try<br />chmod o=rwx -R %s';
|
||||
|
||||
$lang->install->settingDB = 'Set database';
|
||||
$lang->install->webRoot = 'ZenTaoPMS path';
|
||||
$lang->install->requestType = 'URL type';
|
||||
$lang->install->defaultLang = 'Default Language';
|
||||
$lang->install->dbHost = 'Database host';
|
||||
$lang->install->dbHostNote = 'If 127.0.0.1 can not connect, try localhost';
|
||||
@@ -81,7 +77,6 @@ $lang->install->dbUser = 'Database user';
|
||||
$lang->install->dbPassword = 'Database password';
|
||||
$lang->install->dbName = 'Database name';
|
||||
$lang->install->dbPrefix = 'Table prefix';
|
||||
$lang->install->createDB = 'Auto create database';
|
||||
$lang->install->clearDB = 'Clear data if database exists.';
|
||||
$lang->install->importDemoData = 'Import demo data if database exists.';
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ $lang->install->links = <<<EOT
|
||||
EOT;
|
||||
|
||||
$lang->install->newReleased= "<strong class='text-danger'>提示</strong>:官网网站已有最新版本<strong class='text-danger'>%s</strong>, 发布日期于 %s。";
|
||||
$lang->install->choice = '您可以选择:';
|
||||
$lang->install->or = '或者';
|
||||
$lang->install->checking = '系统检查';
|
||||
$lang->install->ok = '检查通过(√)';
|
||||
@@ -70,9 +69,6 @@ $lang->install->sessionFail = '修改PHP配置文件,设置session.save_path'
|
||||
$lang->install->mkdir = '<p>需要创建目录%s。<br /> linux下面命令为:<br /> mkdir -p %s</p>';
|
||||
$lang->install->chmod = '需要修改目录 "%s" 的权限。<br />linux下面命令为:<br />chmod o=rwx -R %s';
|
||||
|
||||
$lang->install->settingDB = '设置数据库';
|
||||
$lang->install->webRoot = 'PMS所在网站目录';
|
||||
$lang->install->requestType = 'URL方式';
|
||||
$lang->install->defaultLang = '默认语言';
|
||||
$lang->install->dbHost = '数据库服务器';
|
||||
$lang->install->dbHostNote = '如果127.0.0.1无法访问,尝试使用localhost';
|
||||
@@ -81,7 +77,6 @@ $lang->install->dbUser = '数据库用户名';
|
||||
$lang->install->dbPassword = '数据库密码';
|
||||
$lang->install->dbName = 'PMS使用的库';
|
||||
$lang->install->dbPrefix = '建表使用的前缀';
|
||||
$lang->install->createDB = '自动创建数据库';
|
||||
$lang->install->clearDB = '清空现有数据';
|
||||
$lang->install->importDemoData = '导入demo数据';
|
||||
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php if($checkSession):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->install->session;?></th>
|
||||
<td>
|
||||
@@ -102,6 +103,7 @@
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
</table>
|
||||
</div>
|
||||
<div class='modal-footer'>
|
||||
|
||||
@@ -16,7 +16,6 @@ $lang->mail->turnon = 'Turnon';
|
||||
$lang->mail->async = 'Asynchronous';
|
||||
$lang->mail->fromAddress = 'From email';
|
||||
$lang->mail->fromName = 'From title';
|
||||
$lang->mail->mta = 'MTA';
|
||||
$lang->mail->host = 'SMTP host';
|
||||
$lang->mail->port = 'SMTP port';
|
||||
$lang->mail->auth = 'Authentication';
|
||||
@@ -42,7 +41,6 @@ $lang->mail->addedBy = 'Sender';
|
||||
$lang->mail->addedDate = 'Added date';
|
||||
$lang->mail->sendTime = 'Send time';
|
||||
$lang->mail->status = 'Status';
|
||||
$lang->mail->ccList = 'Copy to';
|
||||
$lang->mail->failReason = 'Fail Reason';
|
||||
|
||||
$lang->mail->statusList['send'] = 'Success';
|
||||
|
||||
@@ -16,7 +16,6 @@ $lang->mail->turnon = '是否打开';
|
||||
$lang->mail->async = '异步发送';
|
||||
$lang->mail->fromAddress = '发信邮箱';
|
||||
$lang->mail->fromName = '发信人';
|
||||
$lang->mail->mta = '发信方式';
|
||||
$lang->mail->host = 'smtp服务器';
|
||||
$lang->mail->port = 'smtp端口号';
|
||||
$lang->mail->auth = '是否需要验证';
|
||||
@@ -42,7 +41,6 @@ $lang->mail->addedBy = '发送者';
|
||||
$lang->mail->addedDate = '创建时间';
|
||||
$lang->mail->sendTime = '发送时间';
|
||||
$lang->mail->status = '状态';
|
||||
$lang->mail->ccList = '抄送给';
|
||||
$lang->mail->failReason = '失败原因';
|
||||
|
||||
$lang->mail->statusList['send'] = '成功';
|
||||
|
||||
@@ -53,7 +53,7 @@ $lang->misc->zentao->service['servicemore']= 'More...';
|
||||
|
||||
$lang->misc->mobile = "Mobile access";
|
||||
$lang->misc->noGDLib = "Please visit:<strong>%s</strong>.";
|
||||
$lang->misc->copyright = "© 2009-2015 <a href='http://www.cnezsoft.com' target='_blank'>Nature EasySoft Network Tecnology Co.ltd, QingDao, China</a> 4006-8899-23 <a href='mailto:co@zentao.net'>co@zentao.net</a>";
|
||||
$lang->misc->copyright = "© 2009-2016 <a href='http://www.cnezsoft.com' target='_blank'>Nature EasySoft Network Tecnology Co.ltd, QingDao, China</a> 4006-8899-23 <a href='mailto:co@zentao.net'>co@zentao.net</a>";
|
||||
$lang->misc->checkTable = "Check and repair table";
|
||||
$lang->misc->needRepair = "Repair Table";
|
||||
$lang->misc->repairTable = "The database table can cause of damage because of power failure, need to check and repair!!";
|
||||
|
||||
@@ -53,7 +53,7 @@ $lang->misc->zentao->service['servicemore']= '更多服务...';
|
||||
|
||||
$lang->misc->mobile = "手机访问";
|
||||
$lang->misc->noGDLib = "请用手机浏览器访问:<strong>%s</strong>";
|
||||
$lang->misc->copyright = "© 2009 - 2015 <a href='http://www.cnezsoft.com' target='_blank'>青岛易软天创网络科技有限公司</a> 电话:4006-8899-23 Email:<a href='mailto:co@zentao.net'>co@zentao.net</a> QQ:1492153927";
|
||||
$lang->misc->copyright = "© 2009 - 2016 <a href='http://www.cnezsoft.com' target='_blank'>青岛易软天创网络科技有限公司</a> 电话:4006-8899-23 Email:<a href='mailto:co@zentao.net'>co@zentao.net</a> QQ:1492153927";
|
||||
$lang->misc->checkTable = "检查修复数据表";
|
||||
$lang->misc->needRepair = "修复表";
|
||||
$lang->misc->repairTable = "数据库表可以因为断电原因损坏,需要检查修复!!";
|
||||
|
||||
@@ -290,11 +290,11 @@ class my extends control
|
||||
$cases = array();
|
||||
if($type == 'assigntome')
|
||||
{
|
||||
$cases = $this->loadModel('testcase')->getByAssigento($this->app->user->account, $sort, $pager);
|
||||
$cases = $this->loadModel('testcase')->getByAssignedTo($this->app->user->account, $sort, $pager);
|
||||
}
|
||||
elseif($type == 'openedbyme')
|
||||
{
|
||||
$cases = $this->loadModel('testcase')->getByOpened($this->app->user->account, $sort, $pager);
|
||||
$cases = $this->loadModel('testcase')->getByOpenedBy($this->app->user->account, $sort, $pager);
|
||||
}
|
||||
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', $type == 'assigntome' ? false : true);
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ $(function()
|
||||
sp.attr('href', sp.attr('href') + sign + 'onlybody=yes').modalTrigger({width:600, type:'iframe'});
|
||||
scp.attr('href', scp.attr('href') + sign + 'onlybody=yes').modalTrigger({width:500, type:'iframe'});
|
||||
|
||||
/* Fix table actions */
|
||||
/* Fixed table actions */
|
||||
if($('table.tablesorter').closest('form').size() > 0) fixedTfootAction($('table.tablesorter').closest('form'));
|
||||
/* Fixed table header */
|
||||
if($('table.tablesorter').size() > 0) fixedTheadOfList($('table.tablesorter:first'));
|
||||
});
|
||||
|
||||
@@ -10,7 +10,6 @@ $lang->my->testTask = 'Build';
|
||||
$lang->my->testCase = 'Test case';
|
||||
$lang->my->story = 'Story';
|
||||
$lang->my->myProject = $lang->projectCommon;
|
||||
$lang->my->team = 'Team';
|
||||
$lang->my->profile = 'Profile';
|
||||
$lang->my->dynamic = 'Dynamic';
|
||||
$lang->my->editProfile = 'Edit profile';
|
||||
@@ -35,8 +34,6 @@ $lang->my->home->latest = 'Dynamic';
|
||||
$lang->my->home->action = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>.";
|
||||
$lang->my->home->projects = $lang->projectCommon;
|
||||
$lang->my->home->products = $lang->productCommon;
|
||||
$lang->my->home->projectHome = "{$lang->projectCommon} home";
|
||||
$lang->my->home->productHome = "{$lang->productCommon} home";
|
||||
$lang->my->home->createProject = "create a {$lang->projectCommon}?";
|
||||
$lang->my->home->createProduct = "create a {$lang->productCommon}?";
|
||||
$lang->my->home->help = "<a href='http://www.zentao.net/help-read-79236.html' target='_blank'>Help Book</a>";
|
||||
|
||||
@@ -10,7 +10,6 @@ $lang->my->testTask = '我的版本';
|
||||
$lang->my->testCase = '我的用例';
|
||||
$lang->my->story = '我的需求';
|
||||
$lang->my->myProject = "我的{$lang->projectCommon}";
|
||||
$lang->my->team = '我的团队';
|
||||
$lang->my->profile = '我的档案';
|
||||
$lang->my->dynamic = '我的动态';
|
||||
$lang->my->editProfile = '修改档案';
|
||||
@@ -35,8 +34,6 @@ $lang->my->home->latest = '最新动态';
|
||||
$lang->my->home->action = "%s, %s <em>%s</em> %s <a href='%s'>%s</a>。";
|
||||
$lang->my->home->projects = $lang->projectCommon;
|
||||
$lang->my->home->products = $lang->productCommon;
|
||||
$lang->my->home->projectHome = "访问{$lang->projectCommon}主页";
|
||||
$lang->my->home->productHome = "访问{$lang->productCommon}主页";
|
||||
$lang->my->home->createProject = "创建一个{$lang->projectCommon}";
|
||||
$lang->my->home->createProduct = "创建一个{$lang->productCommon}";
|
||||
$lang->my->home->help = "<a href='http://www.zentao.net/help-read-79236.html' target='_blank'>帮助文档</a>";
|
||||
|
||||
@@ -145,7 +145,6 @@ class product extends control
|
||||
/* Build search form. */
|
||||
$actionURL = $this->createLink('product', 'browse', "productID=$productID&branch=$branch&browseType=bySearch&queryID=myQueryID");
|
||||
$this->product->buildSearchForm($productID, $this->products, $queryID, $actionURL);
|
||||
$this->loadModel('search')->setSearchParams($this->config->product->search);
|
||||
|
||||
/* Assign. */
|
||||
$this->view->title = $this->products[$productID]. $this->lang->colon . $this->lang->product->browse;
|
||||
@@ -166,7 +165,7 @@ class product extends control
|
||||
$this->view->moduleID = $moduleID;
|
||||
$this->view->branch = $branch;
|
||||
$this->view->branches = $this->loadModel('branch')->getPairs($productID);
|
||||
$this->view->storyStages = $this->product->getStoryStages($stories);
|
||||
$this->view->storyStages = $this->product->batchGetStoryStage($stories);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ $lang->product->view = "Info";
|
||||
$lang->product->edit = "Edit";
|
||||
$lang->product->batchEdit = "Batch Edit";
|
||||
$lang->product->create = "Create";
|
||||
$lang->product->read = "Info";
|
||||
$lang->product->delete = "Delete";
|
||||
$lang->product->deleted = "Deleted";
|
||||
$lang->product->close = "Close";
|
||||
@@ -41,20 +40,11 @@ $lang->product->roadmap = 'Roadmap';
|
||||
$lang->product->doc = 'Doc';
|
||||
$lang->product->project = "{$lang->projectCommon}s";
|
||||
|
||||
$lang->product->selectProduct = "Select {$lang->productCommon}";
|
||||
$lang->product->saveButton = " Save (S) ";
|
||||
$lang->product->confirmDelete = " Are you sure to delete this {$lang->productCommon}?";
|
||||
$lang->product->ajaxGetProjects = "API: {$lang->projectCommon}s of {$lang->productCommon}";
|
||||
$lang->product->ajaxGetPlans = "API: plans of {$lang->productCommon}";
|
||||
|
||||
$lang->product->errorFormat = 'Error format.';
|
||||
$lang->product->errorEmptyName = 'Name can not be empty.';
|
||||
$lang->product->errorEmptyCode = 'Code can not be empty';
|
||||
$lang->product->errorNoProduct = "No {$lang->productCommon} in system yet.";
|
||||
$lang->product->accessDenied = "Access to this {$lang->productCommon} denined.";
|
||||
|
||||
$lang->product->id = 'ID';
|
||||
$lang->product->company = 'Company';
|
||||
$lang->product->name = 'Name';
|
||||
$lang->product->code = 'Code';
|
||||
$lang->product->order = 'Order';
|
||||
@@ -68,7 +58,6 @@ $lang->product->acl = 'Access limitation';
|
||||
$lang->product->whitelist = 'Whitelist';
|
||||
$lang->product->branch = '%s';
|
||||
|
||||
$lang->product->moduleStory = 'Module';
|
||||
$lang->product->searchStory = 'Search';
|
||||
$lang->product->assignedToMe = 'To me';
|
||||
$lang->product->openedByMe = 'My opened';
|
||||
|
||||
@@ -17,7 +17,6 @@ $lang->product->view = "{$lang->productCommon}概况";
|
||||
$lang->product->edit = "编辑{$lang->productCommon}";
|
||||
$lang->product->batchEdit = "批量编辑";
|
||||
$lang->product->create = "新增{$lang->productCommon}";
|
||||
$lang->product->read = "{$lang->productCommon}详情";
|
||||
$lang->product->delete = "删除{$lang->productCommon}";
|
||||
$lang->product->deleted = "已删除";
|
||||
$lang->product->close = "关闭";
|
||||
@@ -41,20 +40,11 @@ $lang->product->roadmap = '路线图';
|
||||
$lang->product->doc = '文档列表';
|
||||
$lang->product->project = $lang->projectCommon . '列表';
|
||||
|
||||
$lang->product->selectProduct = "请选择{$lang->productCommon}";
|
||||
$lang->product->saveButton = " 保存 (S) ";
|
||||
$lang->product->confirmDelete = " 您确定删除该{$lang->productCommon}吗?";
|
||||
$lang->product->ajaxGetProjects = "接口:{$lang->projectCommon}列表";
|
||||
$lang->product->ajaxGetPlans = "接口:计划列表";
|
||||
|
||||
$lang->product->errorFormat = "{$lang->productCommon}数据格式不正确";
|
||||
$lang->product->errorEmptyName = "{$lang->productCommon}名称不能为空";
|
||||
$lang->product->errorEmptyCode = "{$lang->productCommon}代号不能为空";
|
||||
$lang->product->errorNoProduct = "还没有创建{$lang->productCommon}!";
|
||||
$lang->product->accessDenied = "您无权访问该{$lang->productCommon}";
|
||||
|
||||
$lang->product->id = '编号';
|
||||
$lang->product->company = '所属公司';
|
||||
$lang->product->name = "{$lang->productCommon}名称";
|
||||
$lang->product->code = "{$lang->productCommon}代号";
|
||||
$lang->product->order = '排序';
|
||||
@@ -68,7 +58,6 @@ $lang->product->acl = '访问控制';
|
||||
$lang->product->whitelist = '分组白名单';
|
||||
$lang->product->branch = '所属%s';
|
||||
|
||||
$lang->product->moduleStory = '按模块';
|
||||
$lang->product->searchStory = '搜索';
|
||||
$lang->product->assignedToMe = '指派给我';
|
||||
$lang->product->openedByMe = '由我创建';
|
||||
|
||||
@@ -376,7 +376,7 @@ class productModel extends model
|
||||
if($browseType == 'draftstory') $stories = $this->story->getByStatus($productID, $branch, 'draft', $sort, $pager);
|
||||
if($browseType == 'activestory') $stories = $this->story->getByStatus($productID, $branch, 'active', $sort, $pager);
|
||||
if($browseType == 'changedstory') $stories = $this->story->getByStatus($productID, $branch, 'changed', $sort, $pager);
|
||||
if($browseType == 'willclose') $stories = $this->story->getWillClose($productID, $branch, $sort, $pager);
|
||||
if($browseType == 'willclose') $stories = $this->story->get2BeClosed($productID, $branch, $sort, $pager);
|
||||
if($browseType == 'closedstory') $stories = $this->story->getByStatus($productID, $branch, 'closed', $sort, $pager);
|
||||
|
||||
if($stories) return $stories;
|
||||
@@ -385,19 +385,19 @@ class productModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* Get story stages.
|
||||
* Batch get story stage.
|
||||
*
|
||||
* @param array $stories.
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getStoryStages($stories)
|
||||
public function batchGetStoryStage($stories)
|
||||
{
|
||||
/* Set story id list. */
|
||||
$storyIdList = array();
|
||||
foreach($stories as $story) $storyIdList[$story->id] = $story->id;
|
||||
|
||||
return $this->loadModel('story')->getStoryStages($storyIdList);
|
||||
return $this->loadModel('story')->batchGetStoryStage($storyIdList);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -427,6 +427,8 @@ class productModel extends model
|
||||
$this->config->product->search['fields']['branch'] = $this->lang->product->branch;
|
||||
$this->config->product->search['params']['branch']['values'] = array('' => '') + $this->loadModel('branch')->getPairs($productID, 'noempty');
|
||||
}
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->product->search);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/treeview.html.php';?>
|
||||
<?php js::set('browseType', $browseType);?>
|
||||
<div id='featurebar'>
|
||||
<ul class='nav'>
|
||||
|
||||
@@ -53,9 +53,10 @@ include '../../common/view/tablesorter.html.php';
|
||||
<td colspan='6' class='text-left'>
|
||||
<?php if(count($allBugs))
|
||||
{
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo "<div class='btn-group'>" . html::selectAll('unlinkedBugsForm') . html::selectReverse('unlinkedBugsForm') . '</div>';
|
||||
echo html::submitButton($lang->productplan->linkBug) . html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=$orderBy"), $lang->goback, '', "class='btn'") . '</div>';
|
||||
echo "<div class='table-actions clearfix' style='padding-left:8px;'>";
|
||||
echo html::selectButton() . html::submitButton($lang->productplan->linkBug);
|
||||
echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=$orderBy"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -56,9 +56,10 @@ include '../../common/view/tablesorter.html.php';
|
||||
<td colspan='9' class='text-left'>
|
||||
<?php if(count($allStories))
|
||||
{
|
||||
echo "<div class='table-actions clearfix'>";
|
||||
echo "<div class='btn-group'>" . html::selectAll('unlinkedStoriesForm') . html::selectReverse('unlinkedStoriesForm') . '</div>';
|
||||
echo html::submitButton($lang->story->linkStory) . html::a(inlink('view', "planID=$plan->id&type=story&orderBy=$orderBy"), $lang->goback, '', "class='btn'") . '</div>';
|
||||
echo "<div class='table-actions clearfix' style='padding-left:8px;'>";
|
||||
echo html::selectButton() . html::submitButton($lang->story->linkStory);
|
||||
echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=$orderBy"), $lang->goback, '', "class='btn'");
|
||||
echo '</div>';
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -166,7 +166,6 @@ class project extends control
|
||||
/* Build the search form. */
|
||||
$actionURL = $this->createLink('project', 'task', "projectID=$projectID&status=bySearch¶m=myQueryID");
|
||||
$this->project->buildSearchForm($projectID, $this->projects, $queryID, $actionURL);
|
||||
$this->search->setSearchParams($this->config->project->search);
|
||||
|
||||
/* team member pairs. */
|
||||
$memberPairs = array();
|
||||
|
||||
@@ -1,2 +1,5 @@
|
||||
$(function(){fixedTfootAction('#projectStoryForm');});
|
||||
$(function(){fixedTheadOfList('#storyList');});
|
||||
$(function()
|
||||
{
|
||||
fixedTfootAction('#projectStoryForm');
|
||||
fixedTheadOfList('#storyList');
|
||||
});
|
||||
|
||||
@@ -11,13 +11,8 @@
|
||||
*/
|
||||
/* Fields. */
|
||||
$lang->project->common = $lang->projectCommon;
|
||||
$lang->project->id = 'ID';
|
||||
$lang->project->company = 'Company';
|
||||
$lang->project->fromproject = 'From' . $lang->projectCommon;
|
||||
$lang->project->allProjects = 'All';
|
||||
$lang->project->iscat = 'Is category';
|
||||
$lang->project->type = 'Type';
|
||||
$lang->project->parent = 'Parent';
|
||||
$lang->project->name = 'Name';
|
||||
$lang->project->code = 'Code';
|
||||
$lang->project->begin = 'Begin';
|
||||
@@ -27,15 +22,7 @@ $lang->project->to = 'To';
|
||||
$lang->project->days = 'Workdays';
|
||||
$lang->project->day = 'day';
|
||||
$lang->project->status = 'Status';
|
||||
$lang->project->statge = 'Stage';
|
||||
$lang->project->pri = 'Priority';
|
||||
$lang->project->desc = 'Desc';
|
||||
$lang->project->openedBy = 'Opened by';
|
||||
$lang->project->openedDate = 'Opened date';
|
||||
$lang->project->closedBy = 'Closed by';
|
||||
$lang->project->closedDate = 'Closed date';
|
||||
$lang->project->canceledBy = 'Canceled by';
|
||||
$lang->project->canceledDate = 'Canceled date';
|
||||
$lang->project->owner = 'Owner';
|
||||
$lang->project->PO = $lang->productCommon . ' owner';
|
||||
$lang->project->PM = $lang->projectCommon . ' manager';
|
||||
@@ -45,7 +32,6 @@ $lang->project->acl = 'Access limitation';
|
||||
$lang->project->teamname = 'Team name';
|
||||
$lang->project->order = "{$lang->projectCommon} order";
|
||||
$lang->project->products = "{$lang->productCommon}s";
|
||||
$lang->project->childProjects = "Child {$lang->projectCommon}s";
|
||||
$lang->project->whitelist = 'Whitelist';
|
||||
$lang->project->totalEstimate = 'Est';
|
||||
$lang->project->totalConsumed = 'Done';
|
||||
@@ -54,7 +40,6 @@ $lang->project->Left = 'Left';
|
||||
$lang->project->progess = 'Progess';
|
||||
$lang->project->viewBug = 'View bug';
|
||||
$lang->project->noProduct = "No {$lang->productCommon}";
|
||||
$lang->project->select = "Select {$lang->projectCommon}";
|
||||
$lang->project->createStory = "Create story";
|
||||
$lang->project->all = 'All';
|
||||
$lang->project->undone = 'Undone';
|
||||
@@ -134,7 +119,6 @@ $lang->project->unlinkStory = 'Remove story';
|
||||
$lang->project->batchUnlinkStory = 'Batch remove story';
|
||||
$lang->project->importTask = 'Transfer task';
|
||||
$lang->project->importBug = 'Import bug';
|
||||
$lang->project->ajaxGetProducts = "API: get {$lang->projectCommon}'s {$lang->productCommon}s";
|
||||
$lang->project->updateOrder = 'Order';
|
||||
|
||||
/* Browse. */
|
||||
@@ -165,7 +149,6 @@ $lang->project->groups['left'] = 'Group by left';
|
||||
$lang->project->groups['type'] = 'Group by type';
|
||||
$lang->project->groups['deadline'] = 'Group by deadline';
|
||||
|
||||
$lang->project->moduleTask = 'Module';
|
||||
$lang->project->byQuery = 'Search';
|
||||
|
||||
/* Browse tabs. */
|
||||
@@ -178,17 +161,14 @@ $lang->project->selectProject = "Select {$lang->projectCommon}";
|
||||
$lang->project->beginAndEnd = 'Begin and end';
|
||||
$lang->project->lblStats = 'Stats';
|
||||
$lang->project->stats = 'Total work hours is 『%s』hours, <br />Total estimate is『%s』hours,<br />Total confused is『%s』hours<br />Total left is『%s』hours';
|
||||
$lang->project->oneLineStats = "{$lang->projectCommon}『%s』, code is『%s』, {$lang->productCommon}s is『%s』,begin from『%s』to 『%s』,total estimate『%s』hours,consumed『%s』hours,left『%s』hours.";
|
||||
$lang->project->taskSummary = "<strong>%s</strong> tasks in this page. Pending: <strong>%s</strong>. doing: <strong>%s</strong>. Est: <strong>%s</strong> h. Consumed: <strong>%s</strong> h. Left: <strong>%s</strong>.";
|
||||
$lang->project->memberHours = "%s has <strong>%s</strong> workhours, ";
|
||||
$lang->project->groupSummary = "<strong>%s</strong> tasks in this group, wait:<strong>%s</strong>, doing:<strong>%s</strong>, estimate <strong>%s</strong>, consumed <strong>%s</strong>, left <strong>%s</strong> hours.";
|
||||
$lang->project->wbs = "WBS";
|
||||
$lang->project->batchWBS = "Batch WBS";
|
||||
$lang->project->largeBurnChart = 'View large';
|
||||
$lang->project->howToUpdateBurn = "<a href='http://api.zentao.net/goto.php?item=burndown&lang=zh-cn' title='How to update burndown?' target='_blank' class='btn btn-sm'>Help</a>";
|
||||
$lang->project->whyNoStories = "There no active stories to added to this {$lang->projectCommon}. Please check the linked {$lang->productCommon}.";
|
||||
$lang->project->doneProjects = 'Done';
|
||||
$lang->project->unDoneProjects = 'Undone';
|
||||
$lang->project->copyTeam = 'Copy a team';
|
||||
$lang->project->copyFromTeam = 'Copy form team: <strong>%s</strong>';
|
||||
$lang->project->noMatched = "No matched {$lang->projectCommon} including '%s'";
|
||||
@@ -196,7 +176,6 @@ $lang->project->copyTitle = "Choose A {$lang->projectCommon} To Copy";
|
||||
$lang->project->copyTeamTitle = 'Choose A Team To Copy';
|
||||
$lang->project->copyNoProject = "No {$lang->projectCommon} To Copy";
|
||||
$lang->project->copyFromProject = 'Copy from: <strong>%s</strong>';
|
||||
$lang->project->reCopy = 'recopy';
|
||||
$lang->project->cancelCopy = 'cancel copy';
|
||||
$lang->project->byPeriod = 'By period';
|
||||
$lang->project->byUser = 'By user';
|
||||
@@ -213,7 +192,6 @@ $lang->project->setTeam = 'Set team';
|
||||
$lang->project->linkStory = 'Link story';
|
||||
$lang->project->createTask = 'Create task';
|
||||
$lang->project->goback = 'Go back';
|
||||
$lang->project->linkProduct = "Select {$lang->productCommon} to link...";
|
||||
$lang->project->noweekend = 'No weekend';
|
||||
$lang->project->withweekend = 'With weekend';
|
||||
$lang->project->interval = 'Interval';
|
||||
@@ -236,8 +214,4 @@ $lang->project->placeholder->code = "{$lang->projectCommon} code";
|
||||
$lang->project->placeholder->totalLeft = 'Total left when start project';
|
||||
|
||||
$lang->project->selectGroup = new stdclass();
|
||||
$lang->project->selectGroup->doing = '(doing)';
|
||||
$lang->project->selectGroup->suspended = '(suspended)';
|
||||
$lang->project->selectGroup->done = '(done)';
|
||||
|
||||
$lang->project->projectTasks = "{$lang->projectCommon}s";
|
||||
$lang->project->selectGroup->done = '(done)';
|
||||
|
||||
@@ -11,13 +11,8 @@
|
||||
*/
|
||||
/* 字段列表。*/
|
||||
$lang->project->common = $lang->projectCommon . '视图';
|
||||
$lang->project->id = $lang->projectCommon . '编号';
|
||||
$lang->project->company = '所属公司';
|
||||
$lang->project->fromproject = '所属' . $lang->projectCommon;
|
||||
$lang->project->allProjects = '全部';
|
||||
$lang->project->iscat = '作为目录';
|
||||
$lang->project->type = $lang->projectCommon . '类型';
|
||||
$lang->project->parent = '上级' . $lang->projectCommon;
|
||||
$lang->project->name = $lang->projectCommon . '名称';
|
||||
$lang->project->code = $lang->projectCommon . '代号';
|
||||
$lang->project->begin = '开始日期';
|
||||
@@ -27,15 +22,7 @@ $lang->project->to = '至';
|
||||
$lang->project->days = '可用工作日';
|
||||
$lang->project->day = '天';
|
||||
$lang->project->status = $lang->projectCommon . '状态';
|
||||
$lang->project->statge = '所处阶段';
|
||||
$lang->project->pri = '优先级';
|
||||
$lang->project->desc = $lang->projectCommon . '描述';
|
||||
$lang->project->openedBy = '由谁创建';
|
||||
$lang->project->openedDate = '创建日期';
|
||||
$lang->project->closedBy = '由谁关闭';
|
||||
$lang->project->closedDate = '关闭日期';
|
||||
$lang->project->canceledBy = '由谁取消';
|
||||
$lang->project->canceledDate = '取消日期';
|
||||
$lang->project->owner = '负责人';
|
||||
$lang->project->PO = $lang->productCommon . '负责人';
|
||||
$lang->project->PM = $lang->projectCommon . '负责人';
|
||||
@@ -45,7 +32,6 @@ $lang->project->acl = '访问控制';
|
||||
$lang->project->teamname = '团队名称';
|
||||
$lang->project->order = $lang->projectCommon . '排序';
|
||||
$lang->project->products = '相关' . $lang->productCommon;
|
||||
$lang->project->childProjects = "子{$lang->projectCommon}";
|
||||
$lang->project->whitelist = '分组白名单';
|
||||
$lang->project->totalEstimate = '总预计';
|
||||
$lang->project->totalConsumed = '总消耗';
|
||||
@@ -54,7 +40,6 @@ $lang->project->Left = '剩余';
|
||||
$lang->project->progess = '进度';
|
||||
$lang->project->viewBug = '查看bug';
|
||||
$lang->project->noProduct = "无{$lang->productCommon}{$lang->projectCommon}";
|
||||
$lang->project->select = "请选择{$lang->projectCommon}";
|
||||
$lang->project->createStory = "新增需求";
|
||||
$lang->project->all = '所有';
|
||||
$lang->project->undone = '未完成';
|
||||
@@ -134,7 +119,6 @@ $lang->project->unlinkStory = '移除需求';
|
||||
$lang->project->batchUnlinkStory = '批量移除需求';
|
||||
$lang->project->importTask = '转入任务';
|
||||
$lang->project->importBug = '导入Bug';
|
||||
$lang->project->ajaxGetProducts = "接口:获得{$lang->projectCommon}{$lang->productCommon}列表";
|
||||
$lang->project->updateOrder = '排序';
|
||||
|
||||
/* 分组浏览。*/
|
||||
@@ -165,7 +149,6 @@ $lang->project->groups['left'] = '剩余分组';
|
||||
$lang->project->groups['type'] = '类型分组';
|
||||
$lang->project->groups['deadline'] = '截止分组';
|
||||
|
||||
$lang->project->moduleTask = '按模块';
|
||||
$lang->project->byQuery = '搜索';
|
||||
|
||||
/* 查询条件列表。*/
|
||||
@@ -178,17 +161,14 @@ $lang->project->selectProject = "请选择{$lang->projectCommon}";
|
||||
$lang->project->beginAndEnd = '起止时间';
|
||||
$lang->project->lblStats = '工时统计';
|
||||
$lang->project->stats = '可用工时<strong>%s</strong>工时<br />总共预计<strong>%s</strong>工时<br />已经消耗<strong>%s</strong>工时<br />预计剩余<strong>%s</strong>工时';
|
||||
$lang->project->oneLineStats = "{$lang->projectCommon}<strong>%s</strong>, 代号为<strong>%s</strong>, 相关{$lang->productCommon}为<strong>%s</strong>,<strong>%s</strong>开始,<strong>%s</strong>结束,总预计<strong>%s</strong>工时,已消耗<strong>%s</strong>工时,预计剩余<strong>%s</strong>工时。";
|
||||
$lang->project->taskSummary = "本页共 <strong>%s</strong> 个任务,未开始<strong>%s</strong>,进行中<strong>%s</strong>,总预计<strong>%s</strong>工时,已消耗<strong>%s</strong>工时,剩余<strong>%s</strong>工时。";
|
||||
$lang->project->memberHours = "%s共有 <strong>%s</strong> 个可用工时,";
|
||||
$lang->project->groupSummary = "本组共 <strong>%s</strong> 个任务,未开始<strong>%s</strong>,进行中<strong>%s</strong>,总预计<strong>%s</strong>工时,已消耗<strong>%s</strong>工时,剩余<strong>%s</strong>工时。";
|
||||
$lang->project->wbs = "分解任务";
|
||||
$lang->project->batchWBS = "批量分解";
|
||||
$lang->project->largeBurnChart = '点击查看大图';
|
||||
$lang->project->howToUpdateBurn = "<a href='http://api.zentao.net/goto.php?item=burndown&lang=zh-cn' target='_blank' title='如何更新燃尽图?' class='btn btn-sm'>帮助</a>";
|
||||
$lang->project->whyNoStories = "看起来没有需求可以关联。请检查下{$lang->projectCommon}关联的{$lang->productCommon}中有没有需求,而且要确保它们已经审核通过。";
|
||||
$lang->project->doneProjects = '已结束';
|
||||
$lang->project->unDoneProjects = '未结束';
|
||||
$lang->project->copyTeam = '复制团队';
|
||||
$lang->project->copyFromTeam = "复制自{$lang->projectCommon}团队: <strong>%s</strong>";
|
||||
$lang->project->noMatched = "找不到包含'%s'的$lang->projectCommon";
|
||||
@@ -196,7 +176,6 @@ $lang->project->copyTitle = "请选择一个{$lang->projectCommon}来复
|
||||
$lang->project->copyTeamTitle = "请选择一个{$lang->projectCommon}团队来复制";
|
||||
$lang->project->copyNoProject = "没有可用的{$lang->projectCommon}来复制";
|
||||
$lang->project->copyFromProject = "复制自{$lang->projectCommon} <strong>%s</strong>";
|
||||
$lang->project->reCopy = '重新复制';
|
||||
$lang->project->cancelCopy = '取消复制';
|
||||
$lang->project->byPeriod = '按时间段';
|
||||
$lang->project->byUser = '按用户';
|
||||
@@ -213,7 +192,6 @@ $lang->project->setTeam = '设置团队';
|
||||
$lang->project->linkStory = '关联需求';
|
||||
$lang->project->createTask = '添加任务';
|
||||
$lang->project->goback = "返回{$lang->projectCommon}首页";
|
||||
$lang->project->linkProduct = "选择{$lang->productCommon}关联...";
|
||||
$lang->project->noweekend = '去除周末';
|
||||
$lang->project->withweekend = '显示周末';
|
||||
$lang->project->interval = '间隔';
|
||||
@@ -236,8 +214,4 @@ $lang->project->placeholder->code = '团队内部的简称';
|
||||
$lang->project->placeholder->totalLeft = '项目开始时的总预计工时';
|
||||
|
||||
$lang->project->selectGroup = new stdclass();
|
||||
$lang->project->selectGroup->doing = '(进行中)';
|
||||
$lang->project->selectGroup->suspended = '(已挂起)';
|
||||
$lang->project->selectGroup->done = '(已结束)';
|
||||
|
||||
$lang->project->projectTasks = $lang->projectCommon;
|
||||
$lang->project->selectGroup->done = '(已结束)';
|
||||
|
||||
@@ -522,6 +522,7 @@ class projectModel extends model
|
||||
if(strpos($mode, 'noclosed') !== false and $project->status == 'done') continue;
|
||||
if($this->checkPriv($project)) $pairs[$project->id] = $project->name;
|
||||
}
|
||||
if(strpos($mode, 'empty') !== false) $pairs[0] = '';
|
||||
|
||||
/* If the pairs is empty, to make sure there's an project in the pairs. */
|
||||
if(empty($pairs) and isset($projects[0]) and $this->checkPriv($projects[0]))
|
||||
@@ -1774,5 +1775,7 @@ class projectModel extends model
|
||||
$this->config->project->search['queryID'] = $queryID;
|
||||
$this->config->project->search['params']['project']['values'] = array(''=>'', $projectID => $projects[$projectID], 'all' => $this->lang->project->allProject);
|
||||
$this->config->project->search['params']['module']['values'] = $this->loadModel('tree')->getTaskOptionMenu($projectID, $startModuleID = 0);
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->project->search);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
<td>
|
||||
<table cellpadding='0' cellspacing='0' width='600' style='border: none; border-collapse: collapse;'>
|
||||
<tr>
|
||||
<td style='padding: 10px; background-color: #F8FAFE; border: none; font-size: 14px; font-weight: 500; border-bottom: 1px solid #e5e5e5;'><?php echo 'TASK #' . $task->id . ' ' . html::a(common::getSysURL() . $this->createLink('task', 'view', "taskID=$task->id"), $task->name, '', "style='color: #333; text-decoration: none;'");?></td>
|
||||
<td style='width: 40px; text-align: right; background-color: #F8FAFE; border: none; vertical-align: top; padding: 10px; border-bottom: 1px solid #e5e5e5;'><?php echo html::a(common::getSysURL() . $this->createLink('task', 'view', "taskID=$task->id"), '[+]', 'target="_blank"');?></td>
|
||||
<td style='padding: 10px; background-color: #F8FAFE; border: none; font-size: 14px; font-weight: 500; border-bottom: 1px solid #e5e5e5;'><?php echo html::a(common::getSysURL() . $this->createLink('task', 'view', "taskID=$task->id"), $mailTitle, '', "style='color: #333; text-decoration: none;'");?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -26,7 +25,7 @@
|
||||
<td style='padding: 10px; border: none;'>
|
||||
<fieldset style='border: 1px solid #e5e5e5'>
|
||||
<legend style='color: #114f8e'><?php echo $lang->task->legendDesc;?></legend>
|
||||
<div class='content'><?php echo $task->desc;?></div>
|
||||
<div style='padding:5px;'><?php echo $task->desc;?></div>
|
||||
</fieldset>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user