Merge branch '15.5' into 165

This commit is contained in:
王怡栋
2021-10-09 10:06:05 +08:00
63 changed files with 711 additions and 531 deletions
+2
View File
@@ -1,6 +1,8 @@
UPDATE `zt_action` SET `action` = 'reviewpassed' WHERE `action` = 'passreviewed';
UPDATE `zt_action` SET `action` = 'reviewrejected' WHERE `action` = 'reviewclosed';
UPDATE `zt_action` SET `action` = 'reviewclarified' WHERE `action` = 'clarifyreviewed';
DELETE FROM `zt_config` WHERE `key` = 'skipYoungBlueTheme' and `section` = 'global';
UPDATE `zt_config` SET `key` = 'skipYoungBlueTheme' WHERE `key` = 'skipThemeGuide' and `section` = 'global';
DELETE FROM `zt_score` WHERE `module` = 'tutorial' AND `method` = 'finish';
CREATE TABLE `zt_mr` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+2 -2
View File
@@ -49,7 +49,7 @@ class actionModel extends model
$action->date = helper::now();
$action->extra = $extra;
if($objectType == 'story' and $actionType !== 'reviewed' and strpos(',reviewclosed,passreviewed,clarifyreviewed,', ",$actionType,") !== false) $action->actor = $this->lang->action->system;
if($objectType == 'story' and strpos(',reviewpassed,reviewrejected,reviewclarified,', ",$actionType,") !== false) $action->actor = $this->lang->action->system;
/* Use purifier to process comment. Fix bug #2683. */
$action->comment = fixer::stripDataTags($comment);
@@ -338,7 +338,7 @@ class actionModel extends model
elseif($actionName == 'moved')
{
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
if($name) $action->extra = common::hasPriv('project', 'task') ? html::a(helper::createLink('project', 'task', "projectID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
if($name) $action->extra = common::hasPriv('execution', 'task') ? html::a(helper::createLink('execution', 'task', "executionID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
}
elseif($actionName == 'frombug' and common::hasPriv('bug', 'view'))
{
+1 -1
View File
@@ -26,7 +26,7 @@ $config->bug->list->allFields = 'id, module, execution, story, task,
$config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution';
$config->bug->list->exportFields = 'id, product, branch, module, execution, story, task,
$config->bug->list->exportFields = 'id, product, branch, module, project, execution, story, task,
title, keywords, severity, pri, type, os, browser,
steps, status, deadline, activatedCount, confirmed, mailto,
openedBy, openedDate, openedBuild,
+5 -3
View File
@@ -574,12 +574,12 @@ class bug extends control
/* Set custom. */
foreach(explode(',', $this->config->bug->list->customCreateFields) as $field) $customFields[$field] = $this->lang->bug->$field;
$title = isset($this->products[$productID]) ? $this->products[$productID] . $this->lang->colon . $this->lang->bug->create : $this->lang->bug->create;
$this->view->title = $title;
$this->view->title = isset($this->products[$productID]) ? $this->products[$productID] . $this->lang->colon . $this->lang->bug->create : $this->lang->bug->create;
$this->view->customFields = $customFields;
$this->view->showFields = $this->config->bug->custom->createFields;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('bug', 'browse', "productID=$productID") : '';
$this->view->products = $products;
$this->view->productID = $productID;
$this->view->productName = isset($this->products[$productID]) ? $this->products[$productID] : '';
@@ -1719,6 +1719,7 @@ class bug extends control
/* Get users, products and executions. */
$users = $this->loadModel('user')->getPairs('noletter');
$products = $this->loadModel('product')->getPairs();
$projects = $this->loadModel('project')->getPairsByProgram();
$executions = $this->loadModel('execution')->getPairs($this->projectID, 'all', 'all');
/* Get related objects id lists. */
@@ -1777,6 +1778,7 @@ class bug extends control
/* fill some field with useful value. */
$bug->product = !isset($products[$bug->product]) ? '' : $products[$bug->product] . "(#$bug->product)";
$bug->project = !isset($projects[$bug->project]) ? '' : $projects[$bug->project] . "(#$bug->project)";
$bug->execution = !isset($executions[$bug->execution]) ? '' : $executions[$bug->execution] . "(#$bug->execution)";
$bug->story = !isset($relatedStories[$bug->story]) ? '' : $relatedStories[$bug->story] . "(#$bug->story)";
$bug->task = !isset($relatedTasks[$bug->task]) ? '' : $relatedTasks[$bug->task] . "($bug->task)";
@@ -1802,7 +1804,7 @@ class bug extends control
if(isset($users[$bug->lastEditedBy])) $bug->lastEditedBy = $users[$bug->lastEditedBy];
if(isset($users[$bug->closedBy])) $bug->closedBy = $users[$bug->closedBy];
$bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES);
$bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES);
if($bug->linkBug)
{
+7
View File
@@ -1,4 +1,11 @@
$(function()
{
if($('#bugList thead th.c-title').width() < 150) $('#bugList thead th.c-title').width(150);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+1 -1
View File
@@ -202,7 +202,7 @@ class bugModel extends model
foreach(explode(',', $this->config->bug->create->requiredFields) as $field)
{
$field = trim($field);
if($field and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field)));
if($field and isset($bug->$field) and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field)));
}
$bugs[$i] = $bug;
+2 -1
View File
@@ -328,7 +328,8 @@ js::set('moduleID', $moduleID);
<?php $browseLink = $this->session->bugList ? $this->session->bugList : $this->inlink('browse', "productID=$productID");?>
<?php echo html::submitButton();?>
<?php if($caseID) echo html::a($browseLink, $lang->goback, '', 'class="btn btn-wide"');?>
<?php if(!$caseID) echo html::backButton();?>
<?php if(!$caseID and $gobackLink) echo html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"');?>
<?php if(!$caseID and !$gobackLink) echo html::backButton();?>
<?php echo html::hidden('case', (int)$caseID) . html::hidden('caseVersion', (int)$version);?>
<?php echo html::hidden('result', (int)$runID) . html::hidden('testtask', empty($testtask) ? 0 : $testtask->id);?>
</td>
+1 -1
View File
@@ -565,7 +565,7 @@ class build extends control
/* Set menu. */
$build = $this->build->getByID($buildID);
$product = $this->loadModel('product')->getByID($build->product);
$this->loadModel('execution')->setMenu($this->execution->getPairs($build->project), $build->execution);
$this->loadModel('execution')->setMenu($build->execution);
/* Load pager. */
$this->app->loadClass('pager', $static = true);
+10
View File
@@ -20,3 +20,13 @@ function confirmBatchDelete(actionLink)
if(confirm(batchDelete)) setFormAction(actionLink);
return false;
}
$(function()
{
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+10 -2
View File
@@ -395,13 +395,21 @@ class commonModel extends model
$attr = $objectType == 'doc' ? "class='iframe' data-width='650px'" : '';
$params = '';
if(strpos('bug|testcase|story', $objectType) !== false) $params = "productID=$productID";
if($objectType == 'doc')
{
$params = "objectType=&objectID=0&libID=0";
$createMethod = 'selectLibType';
}
if($objectType == 'bug') $params = "productID=$productID&branch=&extras=from=global";
if($objectType == 'story') $params = "productID=$productID&branch=0&moduleID=0&storyID=0&objectID=0&bugID=0&planID=0&todoID=0&extra=from=global";
if($objectType == 'task') $params = "executionID=0&storyID=0&moduleID=0&taskID=0&todoID=0&extra=from=global";
if($objectType == 'testcase') $params = "productID=$productID&branch=&moduleID=0&from=&param=0&storyID=0&extras=from=global";
if($objectType == 'execution') $params = "projectID=&executionID=0&copyExecutionID=0&planID=0&confirm=no&productID=0&extra=from=global";
if($objectType == 'project') $params = "model=scrum&programID=0&copyProjectID=0&extra=from=global";
if($objectType == 'product') $params = "programID=&extra=from=global";
if($objectType == 'program') $params = "parentProgramID=0&extra=from=global";
$html .= '<li>' . html::a(helper::createLink($objectType, $createMethod, $params, '', $isOnlyBody), "<i class='icon icon-$objectIcon'></i> " . $lang->createObjects[$objectType], '', $isOnlyBody ? $attr : '') . '</li>';
}
}
@@ -1297,7 +1305,7 @@ EOD;
if(strtolower($module) == 'story' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create');
if(strtolower($module) == 'bug' and strtolower($method) == 'tostory') ($module = 'story') and ($method = 'create');
if(strtolower($module) == 'bug' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create');
if($config->systemMode == 'classic' and strtolower($module) == 'project') $method = substr(strtolower($method), 3);
if($config->systemMode == 'classic' and strtolower($module) == 'project') $module = 'execution';
if(!commonModel::hasPriv($module, $method, $object)) return false;
$link = helper::createLink($module, $method, $vars, '', $onlyBody, $programID);
+1 -1
View File
@@ -47,7 +47,7 @@
#kanbanList .kanban-col[data-type="unclosedProduct"] .kanban-item:hover {box-shadow: none;}
#kanbanList .kanban-col[data-type="unclosedProduct"] .kanban-item > .title {white-space: normal;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title {display: flex; flex-direction: row; flex-wrap: nowrap; align-items: center; height: 38px;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: block; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: block; white-space: nowrap; text-overflow: clip; overflow: hidden;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title.has-icon > .text {margin-right: 5px; max-width: calc(100% - 20px);}
#kanbanList .no-flex .kanban-col[data-type="normalRelease"] .kanban-item > .title {display: block; height: 38px;}
#kanbanList .no-flex .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: inline-block;}
+1
View File
@@ -25,6 +25,7 @@
function submitForm(type)
{
$('.modal-body #insert').val(type == 'insert' ? 1 : 0);
$('#importNoticeModal .form-actions .btn').addClass('disabled');
$("button[data-target='#importNoticeModal']").closest('form').submit();
}
</script>
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Administratoren';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Benutzer';
$lang->company->guestOptions[0] = 'Verweigern';
+1 -1
View File
@@ -32,7 +32,7 @@ $lang->company->deleted = 'Deleted';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'User';
$lang->company->guestOptions[0] = 'Deny';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Administrateur';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Utilisateurs';
$lang->company->guestOptions[0] = 'Refusée';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Quản trị viên';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Người dùng';
$lang->company->guestOptions[0] = 'Từ chối';
+1 -1
View File
@@ -32,7 +32,7 @@ $lang->company->deleted = '已删除';
$lang->company->product = $lang->productCommon;
$lang->company->project = '项目';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = '执行';
$lang->company->user = '用户';
$lang->company->guestOptions[0] = '不允许';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = '管理員';
$lang->company->product = $lang->productCommon;
$lang->company->project = '項目';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = '執行';
$lang->company->user = '用戶';
$lang->company->guestOptions[0] = '不允許';
+1 -1
View File
@@ -53,7 +53,7 @@ $config->custom->fieldList['task']['edit'] = 'pri,estimate,estStarted,
$config->custom->fieldList['task']['finish'] = 'comment';
$config->custom->fieldList['task']['activate'] = 'assignedTo,comment';
$config->custom->fieldList['build'] = 'scmPath,filePath,desc';
$config->custom->fieldList['bug']['create'] = 'module,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['create'] = 'module,project,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['edit'] = 'plan,assignedTo,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['resolve'] = 'resolvedBuild,resolvedDate,assignedTo,comment';
$config->custom->fieldList['testcase']['create'] = 'stage,story,pri,precondition,keywords';
+1 -1
View File
@@ -6,7 +6,7 @@ $(function()
{
$('#content').html(draft);
editor = KindEditor.instances[0];
editor.html(draft);
editor.html('' + draft);
$('.kindeditor-ph').remove();
}
}, 100)
+6 -1
View File
@@ -1208,11 +1208,12 @@ class execution extends control
* @param int $planID
* @param string $confirm
* @param string $productID
* @param string $extra
*
* @access public
* @return void
*/
public function create($projectID = '', $executionID = '', $copyExecutionID = '', $planID = 0, $confirm = 'no', $productID = 0)
public function create($projectID = '', $executionID = '', $copyExecutionID = '', $planID = 0, $confirm = 'no', $productID = 0, $extra = '')
{
/* Set menu. */
if($this->app->tab == 'project')
@@ -1233,6 +1234,9 @@ class execution extends control
unset($this->lang->doc->menu->execution['subMenu']);
}
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$this->app->loadLang('program');
$this->app->loadLang('stage');
$this->app->loadLang('programplan');
@@ -1340,6 +1344,7 @@ class execution extends control
$this->view->title = (($this->app->tab == 'execution') and ($this->config->systemMode == 'new')) ? $this->lang->execution->createExec : $this->lang->execution->create;
$this->view->position[] = $this->view->title;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'all') : '';
$this->view->executions = array('' => '') + $this->execution->getList($projectID);
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->allProducts = array(0 => '') + $this->loadModel('product')->getProductPairsByProject($projectID, 'noclosed');
+7
View File
@@ -14,6 +14,13 @@ $(function()
adjustTableFooter();
$('body').on('click', '#toggleFold', adjustTableFooter);
$('body').on('click', '.icon.icon-angle-double-right', adjustTableFooter);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
$('#module' + moduleID).closest('li').addClass('active');
+8 -8
View File
@@ -239,24 +239,24 @@ class executionModel extends model
/* When the cookie and session do not exist, get it from the database. */
if(empty($executionID) and isset($this->config->execution->lastExecution) and isset($executions[$this->config->execution->lastExecution]))
{
$this->session->set('execution', $this->config->execution->lastExecution);
$this->session->set('execution', $this->config->execution->lastExecution, $this->app->tab);
$this->setProjectSession($this->session->execution);
return $this->session->execution;
}
if($executionID > 0) $this->session->set('execution', (int)$executionID, $this->app->tab);
if($executionID == 0 and $this->cookie->lastExecution)
{
/* Execution link is execution-task. */
$executionID = (int)$this->cookie->lastExecution;
$executionID = in_array($executionID, array_keys($executions)) ? $executionID : key($executions);
$this->session->set('execution', $executionID);
}
if($executionID == 0 and $this->session->execution == '') $this->session->set('execution', key($executions));
if(!isset($executions[$this->session->execution]))
if($executionID == 0 and $this->session->execution == '') $executionID = key($executions);
$this->session->set('execution', (int)$executionID, $this->app->tab);
if(!isset($executions[$executionID]))
{
$this->session->set('execution', key($executions));
if($executionID && strpos(",{$this->app->user->view->sprints},", ",{$this->session->execution},") === false) $this->accessDenied();
$this->session->set('execution', key($executions), $this->app->tab);
if($executionID && strpos(",{$this->app->user->view->sprints},", ",{$executionID},") === false) $this->accessDenied();
}
$this->setProjectSession($this->session->execution);
@@ -273,7 +273,7 @@ class executionModel extends model
public function setProjectSession($executionID)
{
$execution = $this->getByID($executionID);
if(!empty($execution)) $this->session->set('project', $execution->project);
if(!empty($execution)) $this->session->set('project', $execution->project, $this->app->tab);
}
/**
+1 -1
View File
@@ -176,7 +176,7 @@
<tr>
<td colspan='4' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</table>
+41 -5
View File
@@ -4,6 +4,7 @@
.file-input-list .input-group-btn{float:left}
</style>
<?php js::set('dangerExtensions', ',' . $this->config->file->dangers . ',');?>
<?php js::set('maxUploadSize', $maxUploadSize);?>
<div class="file-input-list" data-provide="fileInputList" data-each-file-max-size="<?php echo $maxUploadSize;?>" data-file-size-error="<?php echo sprintf($lang->file->errorFileSize, $maxUploadSize);?>">
<div class="file-input">
<div class="file-input-empty">
@@ -32,11 +33,38 @@
</div>
</div>
<script>
function checkDangerExtension(obj)
var totalSize = 0;
maxUploadSize = unitConversion(maxUploadSize);
/**
* Conversion unit to byte.
*
* @param string $maxUploadSize
* @access public
* @return int
*/
function unitConversion(maxUploadSize)
{
var fileName = $(obj).val();
var sizeOfString = maxUploadSize;
if(sizeOfString.indexOf('K') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024;
if(sizeOfString.indexOf('M') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024 * 1024;
if(sizeOfString.indexOf('G') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024 * 1024 * 1024;
return parseFloat(maxUploadSize);
}
/**
* Check danger extension and file size.
*
* @param object $file
* @access public
* @return void
*/
function checkDangerExtension(file)
{
var fileName = $(file).val();
var index = fileName.lastIndexOf(".");
var fileSize = $(obj)[0].files[0].size;
var fileSize = $(file)[0].files[0].size;
totalSize += fileSize;
if(index >= 0)
{
@@ -44,14 +72,22 @@ function checkDangerExtension(obj)
if(dangerExtensions.lastIndexOf(',' + extension + ',') >= 0)
{
alert(<?php echo json_encode($this->lang->file->dangerFile);?>);
$(obj).val('');
$(file).val('');
return false;
}
if(fileSize == 0)
{
alert(<?php echo json_encode($this->lang->file->fileContentEmpty);?>);
$(obj).val('');
$(file).val('');
return false;
}
if(totalSize >= maxUploadSize)
{
alert(<?php echo json_encode(sprintf($lang->file->errorFileSize, $maxUploadSize));?>);
totalSize -= fileSize;
$(file).val('');
return false;
}
}
+426
View File
@@ -0,0 +1,426 @@
<?php
/* Every version of new privilege. */
$lang->changelog['1.0.1'][] = 'project-computeBurn';
$lang->changelog['1.1'][] = 'search-saveQuery';
$lang->changelog['1.1'][] = 'search-deleteQuery';
$lang->changelog['1.2'][] = 'product-doc';
$lang->changelog['1.2'][] = 'project-doc';
$lang->changelog['1.2'][] = 'bug-saveTemplate';
$lang->changelog['1.2'][] = 'bug-deleteTemplate';
$lang->changelog['1.2'][] = 'doc-index';
$lang->changelog['1.2'][] = 'doc-browse';
$lang->changelog['1.2'][] = 'doc-createLib';
$lang->changelog['1.2'][] = 'doc-editLib';
$lang->changelog['1.2'][] = 'doc-deleteLib';
$lang->changelog['1.2'][] = 'doc-create';
$lang->changelog['1.2'][] = 'doc-view';
$lang->changelog['1.2'][] = 'doc-edit';
$lang->changelog['1.2'][] = 'doc-delete';
$lang->changelog['1.2'][] = 'doc-deleteFile';
$lang->changelog['1.3'][] = 'task-start';
$lang->changelog['1.3'][] = 'task-complete';
$lang->changelog['1.3'][] = 'task-cancel';
$lang->changelog['1.3'][] = 'file-delete';
$lang->changelog['1.4'][] = 'my-testTask';
$lang->changelog['1.4'][] = 'my-testCase';
$lang->changelog['1.4'][] = 'task-finish';
$lang->changelog['1.4'][] = 'task-close';
$lang->changelog['1.4'][] = 'task-activate';
$lang->changelog['1.4'][] = 'search-select';
$lang->changelog['1.5'][] = 'task-batchClose';
$lang->changelog['2.0'][] = 'my-dynamic';
$lang->changelog['2.0'][] = 'bug-export';
$lang->changelog['2.0'][] = 'story-export';
$lang->changelog['2.0'][] = 'story-reportChart';
$lang->changelog['2.0'][] = 'task-export';
$lang->changelog['2.0'][] = 'task-reportChart';
$lang->changelog['2.0'][] = 'taskcase-export';
$lang->changelog['2.0'][] = 'company-dynamic';
$lang->changelog['2.0'][] = 'user-dynamic';
$lang->changelog['2.0'][] = 'extension-browse';
$lang->changelog['2.0'][] = 'extension-obtain';
$lang->changelog['2.0'][] = 'extension-install';
$lang->changelog['2.0'][] = 'extension-uninstall';
$lang->changelog['2.0'][] = 'extension-activate';
$lang->changelog['2.0'][] = 'extension-deactivate';
$lang->changelog['2.0'][] = 'extension-upload';
$lang->changelog['2.0'][] = 'extension-erase';
$lang->changelog['2.1'][] = 'extension-upgrade';
$lang->changelog['2.2'][] = 'file-edit';
$lang->changelog['2.3'][] = 'product-dynamic';
$lang->changelog['2.3'][] = 'project-dynamic';
$lang->changelog['2.3'][] = 'project-importBug';
$lang->changelog['2.3'][] = 'story-batchCreate';
$lang->changelog['2.3'][] = 'task-batchCreate';
$lang->changelog['2.3'][] = 'testcase-batchCreate';
$lang->changelog['2.3'][] = 'bug-confirmBug';
$lang->changelog['2.3'][] = 'svn-diff';
$lang->changelog['2.3'][] = 'svn-cat';
$lang->changelog['2.3'][] = 'svn-apiSync';
$lang->changelog['2.4'][] = 'task-assign';
$lang->changelog['2.4'][] = 'project-testtask';
$lang->changelog['2.4'][] = 'todo-export';
$lang->changelog['2.4'][] = 'product-project';
$lang->changelog['3.0.beta2'][] = 'extension-structure';
$lang->changelog['3.0.beta2'][] = 'product-order';
$lang->changelog['3.0.beta2'][] = 'project-order';
$lang->changelog['3.1'][] = 'todo-batchCreate';
$lang->changelog['3.2'][] = 'my-changePassword';
$lang->changelog['3.2'][] = 'story-batchClose';
$lang->changelog['3.2'][] = 'task-batchEdit';
$lang->changelog['3.2'][] = 'release-export';
$lang->changelog['3.2'][] = 'report-index';
$lang->changelog['3.2'][] = 'report-projectDeviation';
$lang->changelog['3.2'][] = 'report-productSummary';
$lang->changelog['3.2'][] = 'report-bugCreate';
$lang->changelog['3.2'][] = 'report-workload';
$lang->changelog['3.2'][] = 'tree-fix';
$lang->changelog['3.3'][] = 'report-bugAssign';
$lang->changelog['4.0.beta1'][] = 'user-batchCreate';
$lang->changelog['4.0.beta1'][] = 'user-unlock';
$lang->changelog['4.0.beta1'][] = 'admin-checkDB';
$lang->changelog['4.0.beta2'][] = 'todo-batchEdit';
$lang->changelog['4.0.beta2'][] = 'story-batchEdit';
$lang->changelog['4.0.beta2'][] = 'bug-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testcase-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testtask-batchRun';
$lang->changelog['4.0.beta2'][] = 'user-batchEdit';
$lang->changelog['4.0.beta2'][] = 'user-manageContacts';
$lang->changelog['4.0.beta2'][] = 'user-deleteContacts';
$lang->changelog['4.0'][] = 'todo-finish';
$lang->changelog['4.0'][] = 'product-close';
$lang->changelog['4.0'][] = 'project-start';
$lang->changelog['4.0'][] = 'project-activate';
$lang->changelog['4.0'][] = 'project-putoff';
$lang->changelog['4.0'][] = 'project-suspend';
$lang->changelog['4.0'][] = 'project-close';
$lang->changelog['4.0'][] = 'task-record';
$lang->changelog['4.0'][] = 'testtask-start';
$lang->changelog['4.0'][] = 'testtask-close';
$lang->changelog['4.0'][] = 'action-hideOne';
$lang->changelog['4.0'][] = 'action-hideAll';
$lang->changelog['4.0'][] = 'task-editEstimate';
$lang->changelog['4.0'][] = 'task-deleteEstimate';
$lang->changelog['4.1'][] = 'todo-batchFinish';
$lang->changelog['4.1'][] = 'productplan-batchUnlinkStory';
$lang->changelog['4.1'][] = 'company-view';
$lang->changelog['4.1'][] = 'user-story';
$lang->changelog['4.1'][] = 'user-testTask';
$lang->changelog['4.1'][] = 'user-testCase';
$lang->changelog['4.2.beta'][] = 'tree-browseTask';
$lang->changelog['4.3.beta'][] = 'product-batchEdit';
$lang->changelog['4.3.beta'][] = 'project-batchEdit';
$lang->changelog['4.3.beta'][] = 'story-batchReview';
$lang->changelog['4.3.beta'][] = 'story-batchChangePlan';
$lang->changelog['4.3.beta'][] = 'story-batchChangeStage';
$lang->changelog['4.3.beta'][] = 'productplan-linkBug';
$lang->changelog['4.3.beta'][] = 'productplan-unlinkBug';
$lang->changelog['4.3.beta'][] = 'productplan-batchUnlinkBug';
$lang->changelog['4.3.beta'][] = 'bug-batchCreate';
$lang->changelog['4.3.beta'][] = 'testcase-exportTemplet';
$lang->changelog['4.3.beta'][] = 'testcase-import';
$lang->changelog['4.3.beta'][] = 'testcase-showImport';
$lang->changelog['4.3.beta'][] = 'testcase-confirmChange';
$lang->changelog['4.3.beta'][] = 'mail-reset';
$lang->changelog['4.3.beta'][] = 'api-debug';
$lang->changelog['4.3.beta'][] = 'action-editComment';
$lang->changelog['5.0.beta1'][] = 'bug-batchConfirm';
$lang->changelog['5.0.beta1'][] = 'bug-batchResolve';
$lang->changelog['5.0.beta1'][] = 'custom-index';
$lang->changelog['5.0.beta1'][] = 'custom-set';
$lang->changelog['5.0.beta1'][] = 'custom-restore';
$lang->changelog['5.0.beta2'][] = 'git-diff';
$lang->changelog['5.0.beta2'][] = 'git-cat';
$lang->changelog['5.0.beta2'][] = 'git-apiSync';
$lang->changelog['5.3'][] = 'bug-batchClose';
$lang->changelog['6.1'][] = 'story-zeroCase';
$lang->changelog['6.1'][] = 'testcase-groupCase';
$lang->changelog['6.1'][] = 'testtask-groupCase';
$lang->changelog['6.2'][] = 'task-pause';
$lang->changelog['6.2'][] = 'task-restart';
$lang->changelog['6.2'][] = 'testcase-createBug';
$lang->changelog['6.3'][] = 'bug-batchAssignTo';
$lang->changelog['6.3'][] = 'task-batchAssignTo';
$lang->changelog['6.3'][] = 'file-uploadImages';
$lang->changelog['6.3'][] = 'project-batchUnlinkStory';
$lang->changelog['6.4'][] = 'api-sql';
$lang->changelog['6.4'][] = 'backup-index';
$lang->changelog['6.4'][] = 'backup-backup';
$lang->changelog['6.4'][] = 'backup-restore';
$lang->changelog['6.4'][] = 'backup-delete';
$lang->changelog['6.4'][] = 'build-linkStory';
$lang->changelog['6.4'][] = 'build-unlinkStory';
$lang->changelog['6.4'][] = 'build-batchUnlinkStory';
$lang->changelog['6.4'][] = 'build-linkBug';
$lang->changelog['6.4'][] = 'build-unlinkBug';
$lang->changelog['6.4'][] = 'build-batchUnlinkBug';
$lang->changelog['6.4'][] = 'dept-edit';
$lang->changelog['6.4'][] = 'release-linkStory';
$lang->changelog['6.4'][] = 'release-unlinkStory';
$lang->changelog['6.4'][] = 'release-batchUnlinkStory';
$lang->changelog['6.4'][] = 'release-linkBug';
$lang->changelog['6.4'][] = 'release-unlinkBug';
$lang->changelog['6.4'][] = 'release-batchUnlinkBug';
$lang->changelog['6.4'][] = 'story-batchAssignTo';
$lang->changelog['7.1'][] = 'cron-index';
$lang->changelog['7.1'][] = 'cron-turnon';
$lang->changelog['7.1'][] = 'cron-create';
$lang->changelog['7.1'][] = 'cron-edit';
$lang->changelog['7.1'][] = 'cron-toggle';
$lang->changelog['7.1'][] = 'cron-delete';
$lang->changelog['7.1'][] = 'mail-browse';
$lang->changelog['7.1'][] = 'mail-delete';
$lang->changelog['7.1'][] = 'mail-batchDelete';
$lang->changelog['7.1'][] = 'dev-api';
$lang->changelog['7.1'][] = 'dev-db';
$lang->changelog['7.2'][] = 'admin-safeIndex';
$lang->changelog['7.2'][] = 'admin-checkWeak';
$lang->changelog['7.2'][] = 'backup-change';
$lang->changelog['7.2'][] = 'custom-flow';
$lang->changelog['7.2'][] = 'group-manageView';
$lang->changelog['7.2'][] = 'product-updateOrder';
$lang->changelog['7.2'][] = 'project-updateOrder';
$lang->changelog['7.3'][] = 'project-fixFirst';
$lang->changelog['7.3'][] = 'productplan-batchEdit';
$lang->changelog['7.3'][] = 'admin-sso';
$lang->changelog['7.3'][] = 'cron-openProcess';
$lang->changelog['7.3'][] = 'mail-sendCloud';
$lang->changelog['7.3'][] = 'mail-sendcloudUser';
$lang->changelog['7.4.beta'][] = 'release-changeStatus';
$lang->changelog['7.4.beta'][] = 'user-unbind';
$lang->changelog['7.4.beta'][] = 'branch-manage';
$lang->changelog['7.4.beta'][] = 'branch-delete';
$lang->changelog['7.4.beta'][] = 'my-unbind';
$lang->changelog['8.0'][] = 'story-batchChangeBranch';
$lang->changelog['8.0.1'][] = 'bug-linkBugs';
$lang->changelog['8.0.1'][] = 'story-linkStory';
$lang->changelog['8.0.1'][] = 'testcase-linkCases';
$lang->changelog['8.1.3'][] = 'story-batchChangeModule';
$lang->changelog['8.1.3'][] = 'task-batchChangeModule';
$lang->changelog['8.1.3'][] = 'bug-batchChangeModule';
$lang->changelog['8.1.3'][] = 'testcase-batchChangeModule';
$lang->changelog['8.1.3'][] = 'my-manageContacts';
$lang->changelog['8.1.3'][] = 'my-deleteContacts';
$lang->changelog['8.2.beta'][] = 'product-all';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.2.beta'][] = 'project-all';
$lang->changelog['8.2.beta'][] = 'project-kanban';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.3'][] = 'doc-allLibs';
$lang->changelog['8.3'][] = 'doc-objectLibs';
$lang->changelog['8.3'][] = 'doc-showFiles';
$lang->changelog['8.4'][] = 'branch-sort';
$lang->changelog['8.4'][] = 'story-bugs';
$lang->changelog['8.4'][] = 'story-cases';
$lang->changelog['9.0'][] = 'testcase-bugs';
$lang->changelog['9.0'][] = 'mail-resend';
$lang->changelog['9.1'][] = 'testcase-review';
$lang->changelog['9.1'][] = 'testcase-batchReview';
$lang->changelog['9.1'][] = 'testcase-importFromLib';
$lang->changelog['9.1'][] = 'testcase-batchCaseTypeChange';
$lang->changelog['9.1'][] = 'testcase-batchConfirmStoryChange';
$lang->changelog['9.1'][] = 'testreport-browse';
$lang->changelog['9.1'][] = 'testreport-create';
$lang->changelog['9.1'][] = 'testreport-view';
$lang->changelog['9.1'][] = 'testreport-delete';
$lang->changelog['9.1'][] = 'testreport-edit';
$lang->changelog['9.1'][] = 'testsuite-index';
$lang->changelog['9.1'][] = 'testsuite-browse';
$lang->changelog['9.1'][] = 'testsuite-create';
$lang->changelog['9.1'][] = 'testsuite-view';
$lang->changelog['9.1'][] = 'testsuite-edit';
$lang->changelog['9.1'][] = 'testsuite-delete';
$lang->changelog['9.1'][] = 'testsuite-linkCase';
$lang->changelog['9.1'][] = 'testsuite-unlinkCase';
$lang->changelog['9.1'][] = 'testsuite-batchUnlinkCases';
$lang->changelog['9.1'][] = 'testsuite-library';
$lang->changelog['9.1'][] = 'testsuite-createLib';
$lang->changelog['9.1'][] = 'testsuite-createCase';
$lang->changelog['9.1'][] = 'testsuite-libView';
$lang->changelog['9.1'][] = 'caselib-library';
$lang->changelog['9.1'][] = 'caselib-createLib';
$lang->changelog['9.1'][] = 'caselib-edit';
$lang->changelog['9.1'][] = 'caselib-createCase';
$lang->changelog['9.1'][] = 'caselib-libView';
$lang->changelog['9.1'][] = 'testtask-activate';
$lang->changelog['9.1'][] = 'testtask-block';
$lang->changelog['9.1'][] = 'testtask-report';
$lang->changelog['9.2'][] = 'custom-working';
$lang->changelog['9.2'][] = 'doc-sort';
$lang->changelog['9.2'][] = 'product-build';
$lang->changelog['9.2'][] = 'testsuite-batchCreateCase';
$lang->changelog['9.2'][] = 'testsuite-exportTemplet';
$lang->changelog['9.2'][] = 'testsuite-import';
$lang->changelog['9.2'][] = 'testsuite-showImport';
$lang->changelog['9.5'][] = 'bug-batchActivate';
$lang->changelog['9.6'][] = 'custom-setPublic';
$lang->changelog['9.6'][] = 'datatable-setGlobal';
$lang->changelog['9.6'][] = 'product-export';
$lang->changelog['9.6'][] = 'project-export';
$lang->changelog['9.6'][] = 'project-storyKanban';
$lang->changelog['9.6'][] = 'project-storySort';
$lang->changelog['9.8'][] = 'message-index';
$lang->changelog['9.8'][] = 'message-setting';
$lang->changelog['9.8'][] = 'todo-createCycle';
$lang->changelog['9.8'][] = 'project-importPlanStories';
$lang->changelog['9.8'][] = 'todo-assignTo';
$lang->changelog['9.8'][] = 'todo-activate';
$lang->changelog['9.8'][] = 'todo-close';
$lang->changelog['10.0.alpha'][] = 'my-calendar';
$lang->changelog['10.0.alpha'][] = 'doc-collect';
$lang->changelog['10.1'][] = 'todo-batchClose';
$lang->changelog['10.1'][] = 'project-treeTask';
$lang->changelog['10.1'][] = 'project-treeStory';
$lang->changelog['10.6'][] = 'backup-setting';
$lang->changelog['10.6'][] = 'backup-rmPHPHeader';
$lang->changelog['11.6.2'][] = 'message-browser';
$lang->changelog['12.3'][] = 'testtask-browseUnits';
$lang->changelog['12.3'][] = 'testtask-unitCases';
$lang->changelog['12.3'][] = 'testtask-importUnitResult';
$lang->changelog['12.3'][] = 'job-view';
$lang->changelog['12.3'][] = 'ci-commitResult';
$lang->changelog['12.5'][] = 'story-batchToTask';
$lang->changelog['12.5'][] = 'custom-product';
$lang->changelog['12.5'][] = 'custom-project';
$lang->changelog['15.0.rc1'][] = 'program-browse';
$lang->changelog['15.0.rc1'][] = 'program-view';
$lang->changelog['15.0.rc1'][] = 'program-product';
$lang->changelog['15.0.rc1'][] = 'program-create';
$lang->changelog['15.0.rc1'][] = 'program-edit';
$lang->changelog['15.0.rc1'][] = 'program-start';
$lang->changelog['15.0.rc1'][] = 'program-suspend';
$lang->changelog['15.0.rc1'][] = 'program-activate';
$lang->changelog['15.0.rc1'][] = 'program-close';
$lang->changelog['15.0.rc1'][] = 'program-delete';
$lang->changelog['15.0.rc1'][] = 'program-project';
$lang->changelog['15.0.rc1'][] = 'program-stakeholder';
$lang->changelog['15.0.rc1'][] = 'program-createStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-unlinkStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-batchUnlinkStakeholders';
$lang->changelog['15.0.rc1'][] = 'program-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'program-export';
$lang->changelog['15.0.rc1'][] = 'project-execution';
$lang->changelog['15.0.rc1'][] = 'project-group';
$lang->changelog['15.0.rc1'][] = 'project-createGroup';
$lang->changelog['15.0.rc1'][] = 'project-manageView';
$lang->changelog['15.0.rc1'][] = 'project-managePriv';
$lang->changelog['15.0.rc1'][] = 'project-manageGroupMember';
$lang->changelog['15.0.rc1'][] = 'project-copyGroup';
$lang->changelog['15.0.rc1'][] = 'project-editGroup';
$lang->changelog['15.0.rc1'][] = 'project-whitelist';
$lang->changelog['15.0.rc1'][] = 'project-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-qa';
$lang->changelog['15.0.rc1'][] = 'project-createGuide';
$lang->changelog['15.0.rc1'][] = 'project-moduleOpen';
$lang->changelog['15.0.rc1'][] = 'personnel-accessible';
$lang->changelog['15.0.rc1'][] = 'personnel-invest';
$lang->changelog['15.0.rc1'][] = 'personnel-whitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'my-workAction';
$lang->changelog['15.0.rc1'][] = 'my-contributeAction';
$lang->changelog['15.0.rc1'][] = 'my-testtask';
$lang->changelog['15.0.rc1'][] = 'my-execution';
$lang->changelog['15.0.rc1'][] = 'my-doc';
$lang->changelog['15.0.rc1'][] = 'my-calendarAction';
$lang->changelog['15.0.rc1'][] = 'story-trackAB';
$lang->changelog['15.0.rc1'][] = 'story-processStoryChange';
$lang->changelog['15.0.rc1'][] = 'projectstory-story';
$lang->changelog['15.0.rc1'][] = 'projectstory-trackAction';
$lang->changelog['15.0.rc1'][] = 'projectstory-view';
$lang->changelog['15.0.rc1'][] = 'projectstory-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-importplanstories';
$lang->changelog['15.0.rc1'][] = 'execution-whitelist';
$lang->changelog['15.0.rc1'][] = 'execution-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'execution-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'automation-browse';
$lang->changelog['15.0.rc1'][] = 'group-manageProjectAdmin';
$lang->changelog['15.0.rc1'][] = 'user-execution';
$lang->changelog['15.0.rc1'][] = 'custom-setStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-editStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-browseStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-setDefaultConcept';
$lang->changelog['15.0.rc1'][] = 'custom-deleteStoryConcept';
$lang->changelog['15.0.rc1'][] = 'search-index';
$lang->changelog['15.0.rc1'][] = 'search-buildIndex';
$lang->changelog['15.0.rc1'][] = 'projectbuild-browse';
$lang->changelog['15.0.rc1'][] = 'projectrelease-browseAction';
$lang->changelog['15.0.rc1'][] = 'projectrelease-create';
$lang->changelog['15.0.rc1'][] = 'projectrelease-edit';
$lang->changelog['15.0.rc1'][] = 'projectrelease-delete';
$lang->changelog['15.0.rc1'][] = 'projectrelease-view';
$lang->changelog['15.0.rc1'][] = 'projectrelease-export';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-changeStatus';
$lang->changelog['15.0.rc1'][] = 'stakeholder-browse';
$lang->changelog['15.0.rc1'][] = 'stakeholder-create';
$lang->changelog['15.0.rc1'][] = 'stakeholder-batchCreate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-edit';
$lang->changelog['15.0.rc1'][] = 'stakeholder-delete';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-issue';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewIssueAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-communicate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expectation';
$lang->changelog['15.0.rc1'][] = 'stakeholder-deleteExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-createExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-editExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-userIssue';
+1 -425
View File
@@ -1479,428 +1479,4 @@ $lang->dev->methodOrder[10] = 'db';
$lang->dev->methodOrder[15] = 'editor';
$lang->dev->methodOrder[20] = 'translate';
/* Every version of new privilege. */
$lang->changelog['1.0.1'][] = 'project-computeBurn';
$lang->changelog['1.1'][] = 'search-saveQuery';
$lang->changelog['1.1'][] = 'search-deleteQuery';
$lang->changelog['1.2'][] = 'product-doc';
$lang->changelog['1.2'][] = 'project-doc';
$lang->changelog['1.2'][] = 'bug-saveTemplate';
$lang->changelog['1.2'][] = 'bug-deleteTemplate';
$lang->changelog['1.2'][] = 'doc-index';
$lang->changelog['1.2'][] = 'doc-browse';
$lang->changelog['1.2'][] = 'doc-createLib';
$lang->changelog['1.2'][] = 'doc-editLib';
$lang->changelog['1.2'][] = 'doc-deleteLib';
$lang->changelog['1.2'][] = 'doc-create';
$lang->changelog['1.2'][] = 'doc-view';
$lang->changelog['1.2'][] = 'doc-edit';
$lang->changelog['1.2'][] = 'doc-delete';
$lang->changelog['1.2'][] = 'doc-deleteFile';
$lang->changelog['1.3'][] = 'task-start';
$lang->changelog['1.3'][] = 'task-complete';
$lang->changelog['1.3'][] = 'task-cancel';
$lang->changelog['1.3'][] = 'file-delete';
$lang->changelog['1.4'][] = 'my-testTask';
$lang->changelog['1.4'][] = 'my-testCase';
$lang->changelog['1.4'][] = 'task-finish';
$lang->changelog['1.4'][] = 'task-close';
$lang->changelog['1.4'][] = 'task-activate';
$lang->changelog['1.4'][] = 'search-select';
$lang->changelog['1.5'][] = 'task-batchClose';
$lang->changelog['2.0'][] = 'my-dynamic';
$lang->changelog['2.0'][] = 'bug-export';
$lang->changelog['2.0'][] = 'story-export';
$lang->changelog['2.0'][] = 'story-reportChart';
$lang->changelog['2.0'][] = 'task-export';
$lang->changelog['2.0'][] = 'task-reportChart';
$lang->changelog['2.0'][] = 'taskcase-export';
$lang->changelog['2.0'][] = 'company-dynamic';
$lang->changelog['2.0'][] = 'user-dynamic';
$lang->changelog['2.0'][] = 'extension-browse';
$lang->changelog['2.0'][] = 'extension-obtain';
$lang->changelog['2.0'][] = 'extension-install';
$lang->changelog['2.0'][] = 'extension-uninstall';
$lang->changelog['2.0'][] = 'extension-activate';
$lang->changelog['2.0'][] = 'extension-deactivate';
$lang->changelog['2.0'][] = 'extension-upload';
$lang->changelog['2.0'][] = 'extension-erase';
$lang->changelog['2.1'][] = 'extension-upgrade';
$lang->changelog['2.2'][] = 'file-edit';
$lang->changelog['2.3'][] = 'product-dynamic';
$lang->changelog['2.3'][] = 'project-dynamic';
$lang->changelog['2.3'][] = 'project-importBug';
$lang->changelog['2.3'][] = 'story-batchCreate';
$lang->changelog['2.3'][] = 'task-batchCreate';
$lang->changelog['2.3'][] = 'testcase-batchCreate';
$lang->changelog['2.3'][] = 'bug-confirmBug';
$lang->changelog['2.3'][] = 'svn-diff';
$lang->changelog['2.3'][] = 'svn-cat';
$lang->changelog['2.3'][] = 'svn-apiSync';
$lang->changelog['2.4'][] = 'task-assign';
$lang->changelog['2.4'][] = 'project-testtask';
$lang->changelog['2.4'][] = 'todo-export';
$lang->changelog['2.4'][] = 'product-project';
$lang->changelog['3.0.beta2'][] = 'extension-structure';
$lang->changelog['3.0.beta2'][] = 'product-order';
$lang->changelog['3.0.beta2'][] = 'project-order';
$lang->changelog['3.1'][] = 'todo-batchCreate';
$lang->changelog['3.2'][] = 'my-changePassword';
$lang->changelog['3.2'][] = 'story-batchClose';
$lang->changelog['3.2'][] = 'task-batchEdit';
$lang->changelog['3.2'][] = 'release-export';
$lang->changelog['3.2'][] = 'report-index';
$lang->changelog['3.2'][] = 'report-projectDeviation';
$lang->changelog['3.2'][] = 'report-productSummary';
$lang->changelog['3.2'][] = 'report-bugCreate';
$lang->changelog['3.2'][] = 'report-workload';
$lang->changelog['3.2'][] = 'tree-fix';
$lang->changelog['3.3'][] = 'report-bugAssign';
$lang->changelog['4.0.beta1'][] = 'user-batchCreate';
$lang->changelog['4.0.beta1'][] = 'user-unlock';
$lang->changelog['4.0.beta1'][] = 'admin-checkDB';
$lang->changelog['4.0.beta2'][] = 'todo-batchEdit';
$lang->changelog['4.0.beta2'][] = 'story-batchEdit';
$lang->changelog['4.0.beta2'][] = 'bug-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testcase-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testtask-batchRun';
$lang->changelog['4.0.beta2'][] = 'user-batchEdit';
$lang->changelog['4.0.beta2'][] = 'user-manageContacts';
$lang->changelog['4.0.beta2'][] = 'user-deleteContacts';
$lang->changelog['4.0'][] = 'todo-finish';
$lang->changelog['4.0'][] = 'product-close';
$lang->changelog['4.0'][] = 'project-start';
$lang->changelog['4.0'][] = 'project-activate';
$lang->changelog['4.0'][] = 'project-putoff';
$lang->changelog['4.0'][] = 'project-suspend';
$lang->changelog['4.0'][] = 'project-close';
$lang->changelog['4.0'][] = 'task-record';
$lang->changelog['4.0'][] = 'testtask-start';
$lang->changelog['4.0'][] = 'testtask-close';
$lang->changelog['4.0'][] = 'action-hideOne';
$lang->changelog['4.0'][] = 'action-hideAll';
$lang->changelog['4.0'][] = 'task-editEstimate';
$lang->changelog['4.0'][] = 'task-deleteEstimate';
$lang->changelog['4.1'][] = 'todo-batchFinish';
$lang->changelog['4.1'][] = 'productplan-batchUnlinkStory';
$lang->changelog['4.1'][] = 'company-view';
$lang->changelog['4.1'][] = 'user-story';
$lang->changelog['4.1'][] = 'user-testTask';
$lang->changelog['4.1'][] = 'user-testCase';
$lang->changelog['4.2.beta'][] = 'tree-browseTask';
$lang->changelog['4.3.beta'][] = 'product-batchEdit';
$lang->changelog['4.3.beta'][] = 'project-batchEdit';
$lang->changelog['4.3.beta'][] = 'story-batchReview';
$lang->changelog['4.3.beta'][] = 'story-batchChangePlan';
$lang->changelog['4.3.beta'][] = 'story-batchChangeStage';
$lang->changelog['4.3.beta'][] = 'productplan-linkBug';
$lang->changelog['4.3.beta'][] = 'productplan-unlinkBug';
$lang->changelog['4.3.beta'][] = 'productplan-batchUnlinkBug';
$lang->changelog['4.3.beta'][] = 'bug-batchCreate';
$lang->changelog['4.3.beta'][] = 'testcase-exportTemplet';
$lang->changelog['4.3.beta'][] = 'testcase-import';
$lang->changelog['4.3.beta'][] = 'testcase-showImport';
$lang->changelog['4.3.beta'][] = 'testcase-confirmChange';
$lang->changelog['4.3.beta'][] = 'mail-reset';
$lang->changelog['4.3.beta'][] = 'api-debug';
$lang->changelog['4.3.beta'][] = 'action-editComment';
$lang->changelog['5.0.beta1'][] = 'bug-batchConfirm';
$lang->changelog['5.0.beta1'][] = 'bug-batchResolve';
$lang->changelog['5.0.beta1'][] = 'custom-index';
$lang->changelog['5.0.beta1'][] = 'custom-set';
$lang->changelog['5.0.beta1'][] = 'custom-restore';
$lang->changelog['5.0.beta2'][] = 'git-diff';
$lang->changelog['5.0.beta2'][] = 'git-cat';
$lang->changelog['5.0.beta2'][] = 'git-apiSync';
$lang->changelog['5.3'][] = 'bug-batchClose';
$lang->changelog['6.1'][] = 'story-zeroCase';
$lang->changelog['6.1'][] = 'testcase-groupCase';
$lang->changelog['6.1'][] = 'testtask-groupCase';
$lang->changelog['6.2'][] = 'task-pause';
$lang->changelog['6.2'][] = 'task-restart';
$lang->changelog['6.2'][] = 'testcase-createBug';
$lang->changelog['6.3'][] = 'bug-batchAssignTo';
$lang->changelog['6.3'][] = 'task-batchAssignTo';
$lang->changelog['6.3'][] = 'file-uploadImages';
$lang->changelog['6.3'][] = 'project-batchUnlinkStory';
$lang->changelog['6.4'][] = 'api-sql';
$lang->changelog['6.4'][] = 'backup-index';
$lang->changelog['6.4'][] = 'backup-backup';
$lang->changelog['6.4'][] = 'backup-restore';
$lang->changelog['6.4'][] = 'backup-delete';
$lang->changelog['6.4'][] = 'build-linkStory';
$lang->changelog['6.4'][] = 'build-unlinkStory';
$lang->changelog['6.4'][] = 'build-batchUnlinkStory';
$lang->changelog['6.4'][] = 'build-linkBug';
$lang->changelog['6.4'][] = 'build-unlinkBug';
$lang->changelog['6.4'][] = 'build-batchUnlinkBug';
$lang->changelog['6.4'][] = 'dept-edit';
$lang->changelog['6.4'][] = 'release-linkStory';
$lang->changelog['6.4'][] = 'release-unlinkStory';
$lang->changelog['6.4'][] = 'release-batchUnlinkStory';
$lang->changelog['6.4'][] = 'release-linkBug';
$lang->changelog['6.4'][] = 'release-unlinkBug';
$lang->changelog['6.4'][] = 'release-batchUnlinkBug';
$lang->changelog['6.4'][] = 'story-batchAssignTo';
$lang->changelog['7.1'][] = 'cron-index';
$lang->changelog['7.1'][] = 'cron-turnon';
$lang->changelog['7.1'][] = 'cron-create';
$lang->changelog['7.1'][] = 'cron-edit';
$lang->changelog['7.1'][] = 'cron-toggle';
$lang->changelog['7.1'][] = 'cron-delete';
$lang->changelog['7.1'][] = 'mail-browse';
$lang->changelog['7.1'][] = 'mail-delete';
$lang->changelog['7.1'][] = 'mail-batchDelete';
$lang->changelog['7.1'][] = 'dev-api';
$lang->changelog['7.1'][] = 'dev-db';
$lang->changelog['7.2'][] = 'admin-safeIndex';
$lang->changelog['7.2'][] = 'admin-checkWeak';
$lang->changelog['7.2'][] = 'backup-change';
$lang->changelog['7.2'][] = 'custom-flow';
$lang->changelog['7.2'][] = 'group-manageView';
$lang->changelog['7.2'][] = 'product-updateOrder';
$lang->changelog['7.2'][] = 'project-updateOrder';
$lang->changelog['7.3'][] = 'project-fixFirst';
$lang->changelog['7.3'][] = 'productplan-batchEdit';
$lang->changelog['7.3'][] = 'admin-sso';
$lang->changelog['7.3'][] = 'cron-openProcess';
$lang->changelog['7.3'][] = 'mail-sendCloud';
$lang->changelog['7.3'][] = 'mail-sendcloudUser';
$lang->changelog['7.4.beta'][] = 'release-changeStatus';
$lang->changelog['7.4.beta'][] = 'user-unbind';
$lang->changelog['7.4.beta'][] = 'branch-manage';
$lang->changelog['7.4.beta'][] = 'branch-delete';
$lang->changelog['7.4.beta'][] = 'my-unbind';
$lang->changelog['8.0'][] = 'story-batchChangeBranch';
$lang->changelog['8.0.1'][] = 'bug-linkBugs';
$lang->changelog['8.0.1'][] = 'story-linkStory';
$lang->changelog['8.0.1'][] = 'testcase-linkCases';
$lang->changelog['8.1.3'][] = 'story-batchChangeModule';
$lang->changelog['8.1.3'][] = 'task-batchChangeModule';
$lang->changelog['8.1.3'][] = 'bug-batchChangeModule';
$lang->changelog['8.1.3'][] = 'testcase-batchChangeModule';
$lang->changelog['8.1.3'][] = 'my-manageContacts';
$lang->changelog['8.1.3'][] = 'my-deleteContacts';
$lang->changelog['8.2.beta'][] = 'product-all';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.2.beta'][] = 'project-all';
$lang->changelog['8.2.beta'][] = 'project-kanban';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.3'][] = 'doc-allLibs';
$lang->changelog['8.3'][] = 'doc-objectLibs';
$lang->changelog['8.3'][] = 'doc-showFiles';
$lang->changelog['8.4'][] = 'branch-sort';
$lang->changelog['8.4'][] = 'story-bugs';
$lang->changelog['8.4'][] = 'story-cases';
$lang->changelog['9.0'][] = 'testcase-bugs';
$lang->changelog['9.0'][] = 'mail-resend';
$lang->changelog['9.1'][] = 'testcase-review';
$lang->changelog['9.1'][] = 'testcase-batchReview';
$lang->changelog['9.1'][] = 'testcase-importFromLib';
$lang->changelog['9.1'][] = 'testcase-batchCaseTypeChange';
$lang->changelog['9.1'][] = 'testcase-batchConfirmStoryChange';
$lang->changelog['9.1'][] = 'testreport-browse';
$lang->changelog['9.1'][] = 'testreport-create';
$lang->changelog['9.1'][] = 'testreport-view';
$lang->changelog['9.1'][] = 'testreport-delete';
$lang->changelog['9.1'][] = 'testreport-edit';
$lang->changelog['9.1'][] = 'testsuite-index';
$lang->changelog['9.1'][] = 'testsuite-browse';
$lang->changelog['9.1'][] = 'testsuite-create';
$lang->changelog['9.1'][] = 'testsuite-view';
$lang->changelog['9.1'][] = 'testsuite-edit';
$lang->changelog['9.1'][] = 'testsuite-delete';
$lang->changelog['9.1'][] = 'testsuite-linkCase';
$lang->changelog['9.1'][] = 'testsuite-unlinkCase';
$lang->changelog['9.1'][] = 'testsuite-batchUnlinkCases';
$lang->changelog['9.1'][] = 'testsuite-library';
$lang->changelog['9.1'][] = 'testsuite-createLib';
$lang->changelog['9.1'][] = 'testsuite-createCase';
$lang->changelog['9.1'][] = 'testsuite-libView';
$lang->changelog['9.1'][] = 'caselib-library';
$lang->changelog['9.1'][] = 'caselib-createLib';
$lang->changelog['9.1'][] = 'caselib-edit';
$lang->changelog['9.1'][] = 'caselib-createCase';
$lang->changelog['9.1'][] = 'caselib-libView';
$lang->changelog['9.1'][] = 'testtask-activate';
$lang->changelog['9.1'][] = 'testtask-block';
$lang->changelog['9.1'][] = 'testtask-report';
$lang->changelog['9.2'][] = 'custom-working';
$lang->changelog['9.2'][] = 'doc-sort';
$lang->changelog['9.2'][] = 'product-build';
$lang->changelog['9.2'][] = 'testsuite-batchCreateCase';
$lang->changelog['9.2'][] = 'testsuite-exportTemplet';
$lang->changelog['9.2'][] = 'testsuite-import';
$lang->changelog['9.2'][] = 'testsuite-showImport';
$lang->changelog['9.5'][] = 'bug-batchActivate';
$lang->changelog['9.6'][] = 'custom-setPublic';
$lang->changelog['9.6'][] = 'datatable-setGlobal';
$lang->changelog['9.6'][] = 'product-export';
$lang->changelog['9.6'][] = 'project-export';
$lang->changelog['9.6'][] = 'project-storyKanban';
$lang->changelog['9.6'][] = 'project-storySort';
$lang->changelog['9.8'][] = 'message-index';
$lang->changelog['9.8'][] = 'message-setting';
$lang->changelog['9.8'][] = 'todo-createCycle';
$lang->changelog['9.8'][] = 'project-importPlanStories';
$lang->changelog['9.8'][] = 'todo-assignTo';
$lang->changelog['9.8'][] = 'todo-activate';
$lang->changelog['9.8'][] = 'todo-close';
$lang->changelog['10.0.alpha'][] = 'my-calendar';
$lang->changelog['10.0.alpha'][] = 'doc-collect';
$lang->changelog['10.1'][] = 'todo-batchClose';
$lang->changelog['10.1'][] = 'project-treeTask';
$lang->changelog['10.1'][] = 'project-treeStory';
$lang->changelog['10.6'][] = 'backup-setting';
$lang->changelog['10.6'][] = 'backup-rmPHPHeader';
$lang->changelog['11.6.2'][] = 'message-browser';
$lang->changelog['12.3'][] = 'testtask-browseUnits';
$lang->changelog['12.3'][] = 'testtask-unitCases';
$lang->changelog['12.3'][] = 'testtask-importUnitResult';
$lang->changelog['12.3'][] = 'job-view';
$lang->changelog['12.3'][] = 'ci-commitResult';
$lang->changelog['12.5'][] = 'story-batchToTask';
$lang->changelog['12.5'][] = 'custom-product';
$lang->changelog['12.5'][] = 'custom-project';
$lang->changelog['15.0.rc1'][] = 'program-browse';
$lang->changelog['15.0.rc1'][] = 'program-view';
$lang->changelog['15.0.rc1'][] = 'program-product';
$lang->changelog['15.0.rc1'][] = 'program-create';
$lang->changelog['15.0.rc1'][] = 'program-edit';
$lang->changelog['15.0.rc1'][] = 'program-start';
$lang->changelog['15.0.rc1'][] = 'program-suspend';
$lang->changelog['15.0.rc1'][] = 'program-activate';
$lang->changelog['15.0.rc1'][] = 'program-close';
$lang->changelog['15.0.rc1'][] = 'program-delete';
$lang->changelog['15.0.rc1'][] = 'program-project';
$lang->changelog['15.0.rc1'][] = 'program-stakeholder';
$lang->changelog['15.0.rc1'][] = 'program-createStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-unlinkStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-batchUnlinkStakeholders';
$lang->changelog['15.0.rc1'][] = 'program-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'program-export';
$lang->changelog['15.0.rc1'][] = 'project-execution';
$lang->changelog['15.0.rc1'][] = 'project-group';
$lang->changelog['15.0.rc1'][] = 'project-createGroup';
$lang->changelog['15.0.rc1'][] = 'project-manageView';
$lang->changelog['15.0.rc1'][] = 'project-managePriv';
$lang->changelog['15.0.rc1'][] = 'project-manageGroupMember';
$lang->changelog['15.0.rc1'][] = 'project-copyGroup';
$lang->changelog['15.0.rc1'][] = 'project-editGroup';
$lang->changelog['15.0.rc1'][] = 'project-whitelist';
$lang->changelog['15.0.rc1'][] = 'project-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-qa';
$lang->changelog['15.0.rc1'][] = 'project-createGuide';
$lang->changelog['15.0.rc1'][] = 'project-moduleOpen';
$lang->changelog['15.0.rc1'][] = 'personnel-accessible';
$lang->changelog['15.0.rc1'][] = 'personnel-invest';
$lang->changelog['15.0.rc1'][] = 'personnel-whitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'my-workAction';
$lang->changelog['15.0.rc1'][] = 'my-contributeAction';
$lang->changelog['15.0.rc1'][] = 'my-testtask';
$lang->changelog['15.0.rc1'][] = 'my-execution';
$lang->changelog['15.0.rc1'][] = 'my-doc';
$lang->changelog['15.0.rc1'][] = 'my-calendarAction';
$lang->changelog['15.0.rc1'][] = 'story-trackAB';
$lang->changelog['15.0.rc1'][] = 'story-processStoryChange';
$lang->changelog['15.0.rc1'][] = 'projectstory-story';
$lang->changelog['15.0.rc1'][] = 'projectstory-trackAction';
$lang->changelog['15.0.rc1'][] = 'projectstory-view';
$lang->changelog['15.0.rc1'][] = 'projectstory-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-importplanstories';
$lang->changelog['15.0.rc1'][] = 'execution-whitelist';
$lang->changelog['15.0.rc1'][] = 'execution-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'execution-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'automation-browse';
$lang->changelog['15.0.rc1'][] = 'group-manageProjectAdmin';
$lang->changelog['15.0.rc1'][] = 'user-execution';
$lang->changelog['15.0.rc1'][] = 'custom-setStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-editStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-browseStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-setDefaultConcept';
$lang->changelog['15.0.rc1'][] = 'custom-deleteStoryConcept';
$lang->changelog['15.0.rc1'][] = 'search-index';
$lang->changelog['15.0.rc1'][] = 'search-buildIndex';
$lang->changelog['15.0.rc1'][] = 'projectbuild-browse';
$lang->changelog['15.0.rc1'][] = 'projectrelease-browseAction';
$lang->changelog['15.0.rc1'][] = 'projectrelease-create';
$lang->changelog['15.0.rc1'][] = 'projectrelease-edit';
$lang->changelog['15.0.rc1'][] = 'projectrelease-delete';
$lang->changelog['15.0.rc1'][] = 'projectrelease-view';
$lang->changelog['15.0.rc1'][] = 'projectrelease-export';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-changeStatus';
$lang->changelog['15.0.rc1'][] = 'stakeholder-browse';
$lang->changelog['15.0.rc1'][] = 'stakeholder-create';
$lang->changelog['15.0.rc1'][] = 'stakeholder-batchCreate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-edit';
$lang->changelog['15.0.rc1'][] = 'stakeholder-delete';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-issue';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewIssueAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-communicate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expectation';
$lang->changelog['15.0.rc1'][] = 'stakeholder-deleteExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-createExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-editExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-userIssue';
include (dirname(__FILE__) . '/changelog.php');
+11
View File
@@ -15,7 +15,17 @@
<div class="btn-toolbar pull-right">
<?php if(common::hasPriv('jenkins', 'create')) common::printLink('jenkins', 'create', "", "<i class='icon icon-plus'></i> " . $lang->jenkins->create, '', "class='btn btn-primary'");?>
</div>
<?php if(empty($jenkinsList)):?>
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->noData;?></span>
<?php if(common::hasPriv('jenkins', 'create')):?>
<?php echo html::a($this->createLink('jenkins', 'create'), "<i class='icon icon-plus'></i> " . $lang->jenkins->create, '', "class='btn btn-info'");?>
<?php endif;?>
</p>
</div>
</div>
<?php else:?>
<div id='mainContent' class='main-row'>
<form class='main-table' id='ajaxForm' method='post'>
<table id='jenkinsList' class='table has-sort-head table-fixed'>
@@ -49,4 +59,5 @@
<?php endif; ?>
</form>
</div>
<?php endif;?>
<?php include '../../common/view/footer.html.php'; ?>
+2
View File
@@ -672,6 +672,8 @@ class mailModel extends model
*/
public function sendmail($objectID, $actionID)
{
if(empty($objectID) or empty($actionID)) return;
/* Load module and get vars. */
$this->loadModel('action');
$users = $this->loadModel('user')->getPairs('noletter');
+1 -1
View File
@@ -355,7 +355,7 @@ class my extends control
$sort = $this->loadModel('common')->appendOrder($orderBy);
$bugs = $this->loadModel('bug')->getUserBugs($this->app->user->account, $type, $sort, 0, $pager);
$bugs = $this->bug->checkDelayedBugs($bugs);
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'bug');
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'myBug');
/* assign. */
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->bug;
+10 -1
View File
@@ -312,10 +312,11 @@ class product extends control
* Create a product.
*
* @param int $programID
* @param string $extra
* @access public
* @return void
*/
public function create($programID = 0)
public function create($programID = 0, $extra = '')
{
if(!empty($_POST))
{
@@ -348,6 +349,9 @@ class product extends control
}
}
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$this->loadModel('user');
$poUsers = $this->user->getPairs('nodeleted|pofirst|noclosed', '', $this->config->maxCount);
if(!empty($this->config->user->moreLink)) $this->config->moreLinks["PO"] = $this->config->user->moreLink;
@@ -366,6 +370,7 @@ class product extends control
$this->view->title = $this->lang->product->create;
$this->view->position[] = $this->view->title;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('product', 'all') : '';
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->programID = $programID;
$this->view->poUsers = $poUsers;
@@ -1153,6 +1158,10 @@ class product extends control
*/
public function kanban()
{
$this->session->set('projectList', $this->app->getURI(true), 'project');
$this->session->set('productPlanList', $this->app->getURI(true), 'product');
$this->session->set('releaseList', $this->app->getURI(true), 'product');
$kanbanGroup = $this->product->getStats4Kanban();
extract($kanbanGroup);
+7
View File
@@ -104,6 +104,13 @@ $(function()
{
window.location.reload();
})
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
/**
+24 -9
View File
@@ -845,7 +845,7 @@ class productModel extends model
{
$this->config->product->search['actionURL'] = $actionURL;
$this->config->product->search['queryID'] = $queryID;
$this->config->product->search['params']['plan']['values'] = $this->loadModel('productplan')->getPairs($productID);
$this->config->product->search['params']['plan']['values'] = $this->loadModel('productplan')->getPairs(($this->app->tab == 'project' and empty($productID)) ? array_keys($products) : $productID);
$product = ($this->app->tab == 'project' and empty($productID)) ? $products : array($productID => $products[$productID]);
$this->config->product->search['params']['product']['values'] = $product + array('all' => $this->lang->product->allProduct);
@@ -958,13 +958,24 @@ class productModel extends model
$emptyHour = array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalLeft' => 0, 'progress' => 0);
/* Get all tasks and compute totalEstimate, totalConsumed, totalLeft, progress according to them. */
$tasks = $this->dao->select('id, project, estimate, consumed, `left`, status, closedReason')
->from(TABLE_TASK)
->where('project')->in($projectKeys)
->andWhere('parent')->lt(1)
->andWhere('deleted')->eq(0)
->fetchGroup('project', 'id');
if($this->config->systemMode == 'new')
{
$tasks = $this->dao->select('id, project, estimate, consumed, `left`, status, closedReason')
->from(TABLE_TASK)
->where('project')->in($projectKeys)
->andWhere('parent')->lt(1)
->andWhere('deleted')->eq(0)
->fetchGroup('project', 'id');
}
else
{
$tasks = $this->dao->select('id, execution, estimate, consumed, `left`, status, closedReason')
->from(TABLE_TASK)
->where('execution')->in($projectKeys)
->andWhere('parent')->lt(1)
->andWhere('deleted')->eq(0)
->fetchGroup('execution', 'id');
}
/* Compute totalEstimate, totalConsumed, totalLeft. */
foreach($tasks as $projectID => $projectTasks)
{
@@ -1593,7 +1604,11 @@ class productModel extends model
$hourList = $this->loadModel('project')->computerProgress($latestExecutionList);
$releaseList = $this->dao->select('id,product,name,marker')->from(TABLE_RELEASE)->where('product')->in(array_keys($productList))->fetchGroup('product', 'id');
$releaseList = $this->dao->select('id,product,name,marker')->from(TABLE_RELEASE)
->where('product')->in(array_keys($productList))
->andWhere('deleted')->eq('0')
->andWhere('status')->eq('normal')
->fetchGroup('product', 'id');
return array('programList' => $programList, 'productList' => $productList, 'planList' => $planList, 'projectList' => $projectList, 'executionList' => $executionList, 'projectProduct' => $projectProduct, 'projectLatestExecutions' => $projectLatestExecutions, 'hourList' => $hourList, 'releaseList' => $releaseList);
}
+1 -1
View File
@@ -104,7 +104,7 @@
<tr>
<td colspan='3' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</tbody>
+1 -1
View File
@@ -130,7 +130,7 @@
<?php
if(common::hasPriv('execution', 'create', $plan))
{
$executionLink = $config->systemMode == 'new' ? '#projects' : $this->createLink('execution', 'create', "projectID=0&executionID=0&copyExecutionID=0&plan=$plan->id");
$executionLink = $config->systemMode == 'new' ? '#projects' : $this->createLink('execution', 'create', "projectID=0&executionID=0&copyExecutionID=0&plan=$plan->id&confirm=no&productID=$productID");
if($config->systemMode == 'new')
{
echo html::a($executionLink, '<i class="icon-plus"></i>', '', "data-toggle='modal' data-id='$plan->id' onclick='getPlanID(this)' class='btn' title='{$lang->productplan->createExecution}'");
+7 -2
View File
@@ -141,11 +141,12 @@ class program extends control
/**
* Create a program.
*
* @param int $parentProgramID
* @param int $parentProgramID
* @param string $extra
* @access public
* @return void
*/
public function create($parentProgramID = 0)
public function create($parentProgramID = 0, $extra = '')
{
$parentProgram = $this->program->getByID($parentProgramID);
@@ -159,9 +160,13 @@ class program extends control
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
}
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$this->view->title = $this->lang->program->create;
$this->view->position[] = $this->lang->program->create;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('program', 'browse') : '';
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst');
$this->view->poUsers = $this->user->getPairs('noclosed|nodeleted|pofirst');
$this->view->users = $this->user->getPairs('noclosed|nodeleted');
+1 -1
View File
@@ -121,7 +121,7 @@
<tr>
<td colspan='4' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</table>
+6 -1
View File
@@ -337,10 +337,11 @@ class project extends control
* @param string $model
* @param int $programID
* @param int $copyProjectID
* @param string $extra
* @access public
* @return void
*/
public function create($model = 'scrum', $programID = 0, $copyProjectID = 0)
public function create($model = 'scrum', $programID = 0, $copyProjectID = 0, $extra = '')
{
$this->loadModel('execution');
@@ -402,6 +403,9 @@ class project extends control
if($this->app->tab == 'program') $this->loadModel('program')->setMenu($programID);
$this->session->set('projectModel', $model);
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$name = '';
$code = '';
$team = '';
@@ -437,6 +441,7 @@ class project extends control
$this->view->title = $this->lang->project->create;
$this->view->position[] = $this->lang->project->create;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('project', 'browse') : '';
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst');
$this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->view->copyProjects = $this->project->getPairsByModel();
+30 -18
View File
@@ -117,12 +117,13 @@ class projectModel extends model
*/
public function saveState($projectID = 0, $projects = array())
{
if($projectID > 0) $this->session->set('project', (int)$projectID);
if($projectID == 0 and $this->cookie->lastProject) $this->session->set('project', (int)$this->cookie->lastProject);
if($projectID == 0 and $this->session->project == '') $this->session->set('project', key($projects));
if($projectID == 0 and $this->cookie->lastProject) $projectID = $this->cookie->lastProject;
if($projectID == 0 and $this->session->project == '') $projectID = key($projects);
$this->session->set('project', (int)$projectID, $this->app->tab);
if(!isset($projects[$this->session->project]))
{
$this->session->set('project', key($projects));
$this->session->set('project', key($projects), $this->app->tab);
if($projectID && strpos(",{$this->app->user->view->projects},", ",{$this->session->project},") === false) $this->accessDenied();
}
@@ -814,6 +815,7 @@ class projectModel extends model
->autoCheck()
->batchcheck($requiredFields, 'notempty')
->checkIF(!empty($project->code), 'code', 'unique', "type='project'")
->checkIF($project->end != '', 'end', 'gt', $project->begin)
->check('name', 'unique', "type='project' AND deleted='0'")
->exec();
@@ -1027,6 +1029,14 @@ class projectModel extends model
if($oldProject->parent != $project->parent) $this->loadModel('program')->processNode($projectID, $project->parent, $oldProject->path, $oldProject->grade);
/* Fix whitelist changes. */
$oldWhitelist = explode(',', $oldProject->whitelist) and $oldWhitelist = array_filter($oldWhitelist);
$newWhitelist = explode(',', $project->whitelist) and $newWhitelist = array_filter($newWhitelist);
if(count($oldWhitelist) == count($newWhitelist) and count(array_diff($oldWhitelist, $newWhitelist)) == 0) unset($project->whitelist);
/* Add linkedproducts changes. */
$oldProject->linkedProducts = implode(',', $linkedProducts);
$project->linkedProducts = implode(',', $_POST['products']);
return common::createChanges($oldProject, $project);
}
}
@@ -1519,18 +1529,19 @@ class projectModel extends model
echo "<div class='progress-pie' data-doughnut-size='90' data-color='#3CB371' data-value='{$project->hours->progress}' data-width='24' data-height='24' data-back-color='#e8edf3'><div class='progress-info'>{$project->hours->progress}</div></div>";
break;
case 'actions':
if($project->status == 'wait' || $project->status == 'suspended') common::printIcon('project', 'start', "projectID=$project->id", $project, 'list', 'play', '', 'iframe', true);
if($project->status == 'doing') common::printIcon('project', 'close', "projectID=$project->id", $project, 'list', 'off', '', 'iframe', true);
if($project->status == 'closed') common::printIcon('project', 'activate', "projectID=$project->id", $project, 'list', 'magic', '', 'iframe', true);
$moduleName = $this->config->systemMode == 'classic' ? "execution" : "project";
if($project->status == 'wait' || $project->status == 'suspended') common::printIcon($moduleName, 'start', "projectID=$project->id", $project, 'list', 'play', '', 'iframe', true);
if($project->status == 'doing') common::printIcon($moduleName, 'close', "projectID=$project->id", $project, 'list', 'off', '', 'iframe', true);
if($project->status == 'closed') common::printIcon($moduleName, 'activate', "projectID=$project->id", $project, 'list', 'magic', '', 'iframe', true);
if(common::hasPriv('project','suspend') || (common::hasPriv('project','close') && $project->status != 'doing') || (common::hasPriv('project','activate') && $project->status != 'closed'))
if(common::hasPriv($moduleName, 'suspend') || (common::hasPriv($moduleName, 'close') && $project->status != 'doing') || (common::hasPriv($moduleName, 'activate') && $project->status != 'closed'))
{
echo "<div class='btn-group'>";
echo "<button type='button' class='btn icon-caret-down dropdown-toggle' data-toggle='context-dropdown' title='{$this->lang->more}' style='width: 16px; padding-left: 0px; border-radius: 4px;'></button>";
echo "<ul class='dropdown-menu pull-right text-center' role='menu' style='position: unset; min-width: auto; padding: 5px 6px;'>";
common::printIcon('project', 'suspend', "projectID=$project->id", $project, 'list', 'pause', '', 'iframe btn-action', true);
if($project->status != 'doing') common::printIcon('project', 'close', "projectID=$project->id", $project, 'list', 'off', '', 'iframe btn-action', true);
if($project->status != 'closed') common::printIcon('project', 'activate', "projectID=$project->id", $project, 'list', 'magic', '', 'iframe btn-action', true);
common::printIcon($moduleName, 'suspend', "projectID=$project->id", $project, 'list', 'pause', '', 'iframe btn-action', true);
if($project->status != 'doing') common::printIcon($moduleName, 'close', "projectID=$project->id", $project, 'list', 'off', '', 'iframe btn-action', true);
if($project->status != 'closed') common::printIcon($moduleName, 'activate', "projectID=$project->id", $project, 'list', 'magic', '', 'iframe btn-action', true);
echo "</ul>";
echo "</div>";
}
@@ -1538,18 +1549,19 @@ class projectModel extends model
$from = $project->from == 'project' ? 'project' : 'pgmproject';
$iframe = $this->app->tab == 'program' ? 'iframe' : '';
$onlyBody = $this->app->tab == 'program' ? true : '';
common::printIcon('project', 'edit', "projectID=$project->id", $project, 'list', 'edit', '', $iframe, $onlyBody, "data-app=project", '', $project->id);
common::printIcon('project', 'manageMembers', "projectID=$project->id", $project, 'list', 'group', '', '', '', "data-app=project", $this->lang->execution->team, $project->id);
if($this->config->systemMode == 'new') common::printIcon('project', 'group', "projectID=$project->id&programID=$programID", $project, 'list', 'lock', '', '', '', "data-app=project", '', $project->id);
$dataApp = $this->config->systemMode == 'classic' ? "data-app=execution" : "data-app=project";
common::printIcon($moduleName, 'edit', "projectID=$project->id", $project, 'list', 'edit', '', $iframe, $onlyBody, $dataApp, '', $project->id);
common::printIcon($moduleName, 'manageMembers', "projectID=$project->id", $project, 'list', 'group', '', '', '', $dataApp, $this->lang->execution->team, $project->id);
if($this->config->systemMode == 'new') common::printIcon('project', 'group', "projectID=$project->id&programID=$programID", $project, 'list', 'lock', '', '', '', $dataApp, '', $project->id);
if(common::hasPriv('project','manageProducts') || common::hasPriv('project', 'whitelist') || common::hasPriv('project', 'delete'))
if(common::hasPriv($moduleName, 'manageProducts') || common::hasPriv($moduleName, 'whitelist') || common::hasPriv($moduleName, 'delete'))
{
echo "<div class='btn-group'>";
echo "<button type='button' class='btn dropdown-toggle' data-toggle='context-dropdown' title='{$this->lang->more}'><i class='icon-more-alt'></i></button>";
echo "<ul class='dropdown-menu pull-right text-center' role='menu'>";
common::printIcon('project', 'manageProducts', "projectID=$project->id", $project, 'list', 'link', '', 'btn-action', '', "data-app=project", $this->lang->project->manageProducts, $project->id);
if($this->config->systemMode == 'new') common::printIcon('project', 'whitelist', "projectID=$project->id&module=project&from=$from", $project, 'list', 'shield-check', '', 'btn-action', '', "data-app=project", '', $project->id);
if(common::hasPriv('project','delete')) echo html::a(inLink("delete", "projectID=$project->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn btn-action' title='{$this->lang->project->delete}'");
common::printIcon($moduleName, 'manageProducts', "projectID=$project->id", $project, 'list', 'link', '', 'btn-action', '', $dataApp, $this->lang->project->manageProducts, $project->id);
if($this->config->systemMode == 'new') common::printIcon('project', 'whitelist', "projectID=$project->id&module=project&from=$from", $project, 'list', 'shield-check', '', 'btn-action', '', $dataApp, '', $project->id);
if(common::hasPriv($moduleName, 'delete')) echo html::a(helper::createLink($moduleName, "delete", "projectID=$project->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn btn-action' title='{$this->lang->project->delete}'");
echo "</ul>";
echo "</div>";
}
+2 -2
View File
@@ -72,7 +72,7 @@
<?php echo html::a('#',"<i class='icon-cards-view'></i> &nbsp;", '', "class='btn btn-icon text-primary' title='{$lang->project->bycard}' id='switchButton' data-type='bycard'");?>
</div>
<?php common::printLink('project', 'export', "status=$browseType&orderBy=$orderBy", "<i class='icon-export muted'> </i>" . $lang->export, '', "class='btn btn-link export'")?>
<?php if(isset($this->config->maxVersion)):?>
<?php if(isset($this->config->maxVersion) and !defined('TUTORIAL')):?>
<?php common::printLink('project', 'createGuide', "programID=$programID", '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-primary create-project-btn" data-toggle="modal" data-target="#guideDialog"');?>
<?php else:?>
<?php common::printLink('project', 'create', 'mode=scrum', '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-primary create-project-btn"');?>
@@ -85,7 +85,7 @@
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->project->empty;?></span>
<?php if(isset($this->config->maxVersion)):?>
<?php if(isset($this->config->maxVersion) and !defined('TUTORIAL')):?>
<?php common::printLink('project', 'createGuide', "programID=$programID", '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-info" data-toggle="modal" data-target="#guideDialog"');?>
<?php elseif($this->config->systemMode == 'new'):?>
<?php common::printLink('project', 'create', 'mode=scrum', '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-info"');?>
+2 -2
View File
@@ -47,7 +47,7 @@
<?php echo html::a('#',"<i class='icon-cards-view'></i> &nbsp;", '', "class='btn btn-icon' title='{$lang->project->bycard}' id='switchButton' data-type='bycard'");?>
</div>
<?php common::printLink('project', 'export', "status=$browseType&orderBy=$orderBy", "<i class='icon-export muted'> </i>" . $lang->export, '', "class='btn btn-link export'")?>
<?php if(isset($this->config->maxVersion)):?>
<?php if(isset($this->config->maxVersion) and !defined('TUTORIAL')):?>
<?php common::printLink('project', 'createGuide', "programID=$programID", '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-primary create-project-btn" data-toggle="modal" data-target="#guideDialog"');?>
<?php else:?>
<?php common::printLink('project', 'create', "mode=scrum&programID=$programID", '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-primary create-project-btn"');?>
@@ -71,7 +71,7 @@
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->project->empty;?></span>
<?php if(isset($this->config->maxVersion)):?>
<?php if(isset($this->config->maxVersion) and !defined('TUTORIAL')):?>
<?php common::printLink('project', 'createGuide', "programID=$programID", '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-info" data-toggle="modal" data-target="#guideDialog"');?>
<?php elseif($this->config->systemMode == 'new'):?>
<?php common::printLink('project', 'create', "mode=scrum&programID=$programID", '<i class="icon icon-plus"></i> ' . $lang->project->create, '', 'class="btn btn-info"');?>
+1 -1
View File
@@ -168,7 +168,7 @@
<?php
echo html::hidden('model', $model);
echo html::submitButton();
echo html::backButton();
echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();
?>
</td>
</tr>
+2 -1
View File
@@ -301,6 +301,7 @@ class story extends control
$this->view->position[] = html::a($this->createLink('product', 'browse', "product=$productID&branch=$branch"), $product->name);
$this->view->position[] = $this->lang->story->common;
$this->view->position[] = $this->lang->story->create;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('product', 'browse', "productID=$productID") : '';
$this->view->products = $products;
$this->view->users = $users;
$this->view->moduleID = $moduleID ? $moduleID : (int)$this->cookie->lastStoryModule;
@@ -576,7 +577,7 @@ class story extends control
$this->action->logHistory($actionID, $changes);
$story = $this->dao->findById($storyID)->from(TABLE_STORY)->fetch();
if(isset($this->post->reviewer)) $this->story->recordReviewAction($story);
if(isset($_POST['reviewer'])) $this->story->recordReviewAction($story);
}
$this->executeHooks($storyID);
+1 -1
View File
@@ -1327,7 +1327,7 @@ class storyModel extends model
$oldStory = $oldStories[$storyID];
if($oldStory->status != 'draft' and $oldStory->status != 'changed') continue;
if(!in_array($this->app->user->account, array_keys($reviewerList[$storyID]))) continue;
if(isset($hasResult[$storyID])) continue;
if(isset($hasResult[$storyID]) and $hasResult[$storyID]->version == $oldStories[$storyID]->version) continue;
$story = new stdClass();
$story->reviewedDate = $now;
+1 -1
View File
@@ -256,7 +256,7 @@
<tr>
<td colspan="5" class="text-center form-actions">
<?php echo html::hidden('type', $type) . html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</tfoot>
+20 -4
View File
@@ -34,12 +34,15 @@ class task extends control
* @param int $moduleID
* @param int $taskID
* @param int $todoID
* @param string $extra
* @access public
* @return void
*/
public function create($executionID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $todoID = 0)
public function create($executionID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $todoID = 0, $extra = '')
{
if(empty($this->app->user->view->sprints) and !$executionID) $this->locate($this->createLink('execution', 'create'));
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$executions = $this->execution->getPairs();
$executionID = $this->execution->saveState($executionID, $executions);
@@ -226,6 +229,7 @@ class task extends control
$this->view->title = $title;
$this->view->position = $position;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'task', "executionID=$executionID") : '';
$this->view->execution = $execution;
$this->view->executions = $this->config->systemMode == 'classic' ? $executions : $this->execution->getByProject(0, 'all', 0, true);
$this->view->task = $task;
@@ -385,9 +389,9 @@ class task extends control
$task = $this->task->getById($taskID);
if($this->post->comment != '' or !empty($changes) or !empty($files))
{
$action = (!empty($changes) or !empty($files)) ? 'Edited' : 'Commented';
$action = (!empty($changes) or !empty($files)) ? 'Edited' : 'Commented';
$fileAction = !empty($files) ? $this->lang->addFiles . join(',', $files) . "\n" : '';
$actionID = $this->action->create('task', $taskID, $action, $fileAction . $this->post->comment);
$actionID = $this->action->create('task', $taskID, $action, $fileAction . $this->post->comment);
if(!empty($changes)) $this->action->logHistory($actionID, $changes);
}
@@ -419,6 +423,18 @@ class task extends control
$tasks = $this->task->getParentTaskPairs($this->view->execution->id, $this->view->task->parent);
if(isset($tasks[$taskID])) unset($tasks[$taskID]);
if($this->config->systemMode == 'classic') $executionsPair = $this->execution->getPairs();
else
{
$executionsPair = array();
$executions = $this->execution->getByProject(0, 'all', 0);
$projects = $this->project->getPairsByProgram(0, 'noclosed');
foreach($executions as $executionId => $execution)
{
$executionsPair[$executionId] = (isset($projects[$execution->project]) ? $projects[$execution->project] . ' / ' : '') . $execution->name;
}
}
if(!isset($this->view->members[$this->view->task->assignedTo])) $this->view->members[$this->view->task->assignedTo] = $this->view->task->assignedTo;
if(isset($this->view->members['closed']) or $this->view->task->status == 'closed') $this->view->members['closed'] = 'Closed';
@@ -430,7 +446,7 @@ class task extends control
$this->view->users = $this->loadModel('user')->getPairs('nodeleted', "{$this->view->task->openedBy},{$this->view->task->canceledBy},{$this->view->task->closedBy}");
$this->view->showAllModule = isset($this->config->execution->task->allModule) ? $this->config->execution->task->allModule : '';
$this->view->modules = $this->tree->getTaskOptionMenu($this->view->task->execution, 0, 0, $this->view->showAllModule ? 'allModule' : '');
$this->view->executions = $this->config->systemMode == 'classic' ? $this->execution->getPairs() : $this->execution->getByProject(0, 'all', 0, true);
$this->view->executions = $executionsPair;
$this->display();
}
+2 -3
View File
@@ -848,8 +848,7 @@ class taskModel extends model
$now = helper::now();
$task = fixer::input('post')
->setDefault('story, estimate, left, consumed', 0)
->setDefault('estStarted', '0000-00-00')
->setDefault('deadline', '0000-00-00')
->setDefault('realStarted', '0000-00-00 00:00:00')
->setIF(is_numeric($this->post->estimate), 'estimate', (float)$this->post->estimate)
->setIF(is_numeric($this->post->consumed), 'consumed', (float)$this->post->consumed)
->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left)
@@ -1922,7 +1921,7 @@ class taskModel extends model
if($task->assignedTo == 'closed') $task->assignedToRealName = 'Closed';
foreach($task as $key => $value)
{
if(strpos($key, 'Date') !== false and !(int)substr($value, 0, 4)) $task->$key = '';
if((strpos($key, 'Date') !== false or strpos('estStarted|deadline', $key) !== false) and !(int)substr($value, 0, 4)) $task->$key = '';
}
$task->files = $this->loadModel('file')->getByObject('task', $taskID);
+1 -1
View File
@@ -248,7 +248,7 @@
<tr>
<td colspan='4' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</table>
+3 -3
View File
@@ -176,11 +176,11 @@
<table class='table table-form'>
<tr>
<th class='thWidth'><?php echo $lang->task->estStarted;?></th>
<td><?php echo html::input('estStarted', helper::isZeroDate($task->estStarted) ? '' : $task->estStarted, "class='form-control form-date'");?></td>
<td><?php echo html::input('estStarted', $task->estStarted, "class='form-control form-date'");?></td>
</tr>
<tr>
<th><?php echo $lang->task->deadline;?></th>
<td><?php echo html::input('deadline', helper::isZeroDate($task->deadline) ? '' : $task->deadline, "class='form-control form-date'");?></td>
<td><?php echo html::input('deadline', $task->deadline, "class='form-control form-date'");?></td>
</tr>
<tr>
<th><?php echo $lang->task->estimate;?></th>
@@ -211,7 +211,7 @@
</tr>
<tr>
<th><?php echo $lang->task->realStarted;?></th>
<td><?php echo html::input('realStarted', helper::isZeroDate($task->realStarted) ? helper::now() : $task->realStarted, "class='form-control form-datetime'");?></td>
<td><?php echo html::input('realStarted', helper::isZeroDate($task->realStarted) ? '' : $task->realStarted, "class='form-control form-datetime'");?></td>
</tr>
<tr>
<th><?php echo $lang->task->finishedBy;?></th>
+5 -1
View File
@@ -303,6 +303,9 @@ class testcase extends control
$testcaseID = ($from and strpos('testcase|work|contribute', $from) !== false) ? $param : 0;
$bugID = $from == 'bug' ? $param : 0;
$extras = str_replace(array(',', ' '), array('&', ''), $extras);
parse_str($extras, $output);
$this->loadModel('story');
if(!empty($_POST))
{
@@ -454,6 +457,7 @@ class testcase extends control
$this->view->productName = $this->products[$productID];
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $branch);
$this->view->currentModuleID = $currentModuleID ? $currentModuleID : (int)$this->cookie->lastCaseModule;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('testcase', 'browse', "productID=$productID") : '';
$this->view->stories = $stories;
$this->view->caseTitle = $caseTitle;
$this->view->color = $color;
@@ -692,7 +696,7 @@ class testcase extends control
$this->view->isLibCase = $isLibCase;
$this->view->caseFails = $caseFails;
if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'success', 'case' => $case));
if(defined('RUN_MODE') and RUN_MODE == 'api' and !empty($this->app->version)) return $this->send(array('status' => 'success', 'case' => $case));
$this->display();
}
+7
View File
@@ -14,4 +14,11 @@ function confirmBatchDelete(actionLink)
$(function()
{
if($('#caseList thead th.c-title').width() < 150) $('#caseList thead th.c-title').width(150);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+1 -1
View File
@@ -233,7 +233,7 @@
<tr>
<td colspan='3' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</tfoot>
+3
View File
@@ -530,6 +530,9 @@ class testreport extends control
$cases = $this->testreport->getTaskCases($tasks, $report->begin, $report->end);
$bugInfo = $this->testreport->getBugInfo($tasks, $report->product, $report->begin, $report->end, $builds);
/* save session .*/
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'testcase', false);
if($report->objectType == 'testtask')
{
$this->setChartDatas($report->objectID);
@@ -1,4 +1,5 @@
<?php $sysURL = $this->session->notHead ? common::getSysURL() : '';?>
<style>.c-date {width: 130px;}</style>
<table class='table main-table' id='cases'>
<thead>
<tr>
+2 -1
View File
@@ -168,7 +168,8 @@
</tr>
<tr>
<td colspan='3' class='text-center form-actions'>
<?php echo html::submitButton() . html::backButton();?>
<?php echo html::submitButton();?>
<?php if(!isonlybody()) echo html::a($this->createLink('my', 'todo', 'type=all'), $lang->goback, '', "class='btn btn-back btn-wide'");?>
</td>
</tr>
</table>
+1 -1
View File
@@ -49,7 +49,7 @@
<?php
if($this->session->todoList)
{
$browseLink = $this->session->todoList;
$browseLink = empty($todo->deleted) ? $this->session->todoList : $this->createLink('action', 'trash');
}
elseif($todo->account == $app->user->account)
{
+1 -1
View File
@@ -194,7 +194,7 @@ $(function()
}
else
{
$e.parent().addClass('tooltip-tutorial').after("<div id='typeLabel' class='text-danger help-text'>" + options.title + "</div>");
$e.parent().addClass('tooltip-tutorial').append("<div id='typeLabel' class='text-danger help-text'>" + options.title + "</div>");
}
};
+1 -1
View File
@@ -92,7 +92,7 @@ $lang->tutorial->tasks['createTask']['mode'] = 'new';
$lang->tutorial->tasks['createTask']['nav'] = array('app' => 'execution', 'module' => 'task', 'method' => 'create', 'menuModule' => 'story', 'menu' => '', 'target' => '.btn-task-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Create Task');
$lang->tutorial->tasks['createTask']['desc'] = "<p>Task breakdown for a story: </p><ul><li data-target='nav'>Open <span class='task-nav'> Execution <i class='icon icon-angle-right'></i> Story <i class='icon icon-angle-right'></i> WBS;</span></li><li data-target='form'>Fill the form with task information;</li><li data-target='submit'>Save</li></ul>";
$lang->tutorial->tasks['createExecutionTask'] = array('title' => '分解任务');
$lang->tutorial->tasks['createExecutionTask'] = array('title' => 'Task Breakdown');
$lang->tutorial->tasks['createExecutionTask']['mode'] = 'classic';
$lang->tutorial->tasks['createExecutionTask']['nav'] = array('app' => 'execution', 'module' => 'task', 'method' => 'create', 'menuModule' => 'story', 'menu' => '', 'target' => '.btn-task-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => 'Create Task');
$lang->tutorial->tasks['createExecutionTask']['desc'] = "<p>Task breakdown for a story: </p><ul><li data-target='nav'>Open <span class='task-nav'> {$lang->executionCommon} <i class='icon icon-angle-right'></i> Story <i class='icon icon-angle-right'></i> WBS;</span></li><li data-target='form'>Fill the form with task information;</li><li data-target='submit'>Save</li></ul>";
+4 -7
View File
@@ -181,25 +181,22 @@ class upgrade extends control
if($mode == 'new') $this->locate(inlink('mergeTips'));
}
$title = $this->lang->upgrade->toPMS15Guide;
if(isset($this->config->maxVersion))
{
$this->lang->upgrade->to15Desc = str_replace('15', 'Max', $this->lang->upgrade->to15Desc);
$this->lang->upgrade->to15Desc = str_replace('15', $this->lang->maxName, $this->lang->upgrade->to15Desc);
$title = $this->lang->upgrade->toMAXGuide;
}
elseif(isset($this->config->bizVersion))
{
$this->lang->upgrade->to15Desc = str_replace('15', 'Biz5', $this->lang->upgrade->to15Desc);
$this->lang->upgrade->to15Desc = str_replace('15', $this->lang->bizName . '5', $this->lang->upgrade->to15Desc);
$title = $this->lang->upgrade->toBIZ5Guide;
}
elseif(isset($this->config->proVersion))
{
$this->lang->upgrade->to15Desc = str_replace('15', 'Pro10', $this->lang->upgrade->to15Desc);
$this->lang->upgrade->to15Desc = str_replace('15', $this->lang->proName . '10', $this->lang->upgrade->to15Desc);
$title = $this->lang->upgrade->toPRO10Guide;
}
else
{
$title = $this->lang->upgrade->toPMS15Guide;
}
$this->view->title = $title;
$this->display();
+3 -2
View File
@@ -4547,7 +4547,6 @@ class upgradeModel extends model
$this->dao->update(TABLE_BUG)->set('project')->eq($projectID)->where('product')->in($productIdList)->exec();
$this->dao->update(TABLE_TESTREPORT)->set('project')->eq($projectID)->where('product')->in($productIdList)->exec();
$this->dao->update(TABLE_TESTSUITE)->set('project')->eq($projectID)->where('product')->in($productIdList)->exec();
$this->dao->update(TABLE_BUILD)->set('project')->eq($projectID)->where('product')->in($productIdList)->exec();
/* Project linked objects. */
$this->dao->update(TABLE_TASK)->set('project')->eq($projectID)->where('execution')->in($sprintIdList)->exec();
@@ -5299,7 +5298,7 @@ class upgradeModel extends model
* Adjust for bug required field.
*
* @access public
* @return void
* @return bool
*/
public function adjustBugRequired()
{
@@ -5309,9 +5308,11 @@ class upgradeModel extends model
->andWhere('section')->eq('create')
->andWhere('`key`')->eq('requiredFields')
->fetch();
if(empty($data)) return true;
$data->value = ',' . $data->value . ',';
$data->value = str_replace(',project,', ',', $data->value);
$this->dao->update(TABLE_CONFIG)->set('`value`')->eq(trim($data->value, ','))->where('id')->eq($data->id)->exec();
return true;
}
}
+1
View File
@@ -11,6 +11,7 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<style>#imgCutter img{max-width: 97%;}</style>
<script> /*! TangBin: image.ready.js http://www.planeart.cn/?p=1121 */ !function(n){"use strict";n.zui.imgReady=function(){var n=[],l=null,e=function(){for(var l=0;l<n.length;l++)n[l].end?n.splice(l--,1):n[l]();!n.length&&o()},o=function(){clearInterval(l),l=null};return function(o,r,t,u){var c,i,a,d,f,h=new Image;return h.src=o,h.complete?(r.call(h),void(t&&t.call(h))):(i=h.width,a=h.height,h.onerror=function(){u&&u.call(h),c.end=!0,h=h.onload=h.onerror=null},c=function(){d=h.width,f=h.height,(d!==i||f!==a||d*f>1024)&&(r.call(h),c.end=!0)},c(),h.onload=function(){!c.end&&c(),t&&t.call(h),h=h.onload=h.onerror=null},void(c.end||(n.push(c),null===l&&(l=setInterval(e,40)))))}}()}(jQuery); </script>
<?php js::import($this->app->getWebRoot() . 'js/zui/imgcutter/min.js');?>
<?php css::import($this->app->getWebRoot() . 'js/zui/imgcutter/min.css');?>
+2 -2
View File
File diff suppressed because one or more lines are too long
+2
View File
@@ -72,3 +72,5 @@ a.showMoreImage:hover {opacity: 1;}
#userNav .dropdown-menu .dropdown-submenu>ul {margin-right: 0px !important;}
#userNav .create-list:hover:before {right: 21.5% !important;}
#modules li>a, #modules ul>li>a {overflow: hidden; white-space: nowrap;}
.fixed-head-table{z-index:1000;}