Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms
This commit is contained in:
@@ -36,6 +36,9 @@ class configEntry extends baseEntry
|
||||
case 'timezone':
|
||||
$config['value'] = $this->config->timezone;
|
||||
break;
|
||||
case 'systemMode':
|
||||
$config['value'] = $this->config->systemMode;
|
||||
break;
|
||||
default:
|
||||
$this->sendError(400, 'No configuration.');
|
||||
return;
|
||||
|
||||
@@ -21,10 +21,11 @@ class configsEntry extends baseEntry
|
||||
{
|
||||
$configs = array();
|
||||
|
||||
$configs[] = array('key' => 'language', 'value' => $this->config->default->lang);
|
||||
$configs[] = array('key' => 'version', 'value' => $this->config->version);
|
||||
$configs[] = array('key' => 'charset', 'value' => $this->config->charset);
|
||||
$configs[] = array('key' => 'timezone', 'value' => $this->config->timezone);
|
||||
$configs[] = array('key' => 'language', 'value' => $this->config->default->lang);
|
||||
$configs[] = array('key' => 'version', 'value' => $this->config->version);
|
||||
$configs[] = array('key' => 'charset', 'value' => $this->config->charset);
|
||||
$configs[] = array('key' => 'timezone', 'value' => $this->config->timezone);
|
||||
$configs[] = array('key' => 'systemMode', 'value' => $this->config->systemMode);
|
||||
|
||||
$this->send(200, $configs);
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ class programsEntry extends Entry
|
||||
$_COOKIE['showClosed'] = $this->param('showClosed', 0);
|
||||
$mergeChildren = $this->param('mergeChildren', 0);
|
||||
|
||||
$this->config->systemMode = 'new';
|
||||
|
||||
$fields = $this->param('fields', '');
|
||||
if(stripos(strtolower(",{$fields},"), ",dropmenu,") !== false) return $this->getDropMenu();
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@ class projectsEntry extends entry
|
||||
|
||||
$_COOKIE['involved'] = $this->param('involved', 0);
|
||||
|
||||
$this->config->systemMode = 'new';
|
||||
|
||||
if($programID)
|
||||
{
|
||||
$control = $this->loadController('program', 'project');
|
||||
|
||||
@@ -2118,6 +2118,7 @@ class baseRouter
|
||||
$view->methodVar = $this->config->methodVar;
|
||||
$view->viewVar = $this->config->viewVar;
|
||||
$view->sessionVar = $this->config->sessionVar;
|
||||
$view->systemMode = $this->config->systemMode;
|
||||
|
||||
$this->session->set('random', mt_rand(0, 10000));
|
||||
$view->sessionName = session_name();
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
foreach($modulePath as $key => $module)
|
||||
{
|
||||
$moduleTitle .= $module->name;
|
||||
if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name;
|
||||
if(!common::printLink('bug', 'browse', "productID=$bug->product&branch=$module->branch&browseType=byModule¶m=$module->id", $module->name, '', "data-app='qa'")) echo $module->name;
|
||||
if(isset($modulePath[$key + 1]))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
|
||||
@@ -848,7 +848,9 @@ class commonModel extends model
|
||||
if(!isset($linkPart[2])) continue;
|
||||
$method = $linkPart[2];
|
||||
|
||||
if($currentModule == 'report' and $method == 'annualData') continue; // Skip some pages that do not require permissions.
|
||||
/* Skip some pages that do not require permissions.*/
|
||||
if($currentModule == 'report' and $method == 'annualData') continue;
|
||||
if($currentModule == 'my' and $currentMethod == 'team') continue;
|
||||
|
||||
if(common::hasPriv($currentModule, $method))
|
||||
{
|
||||
@@ -2161,7 +2163,7 @@ EOD;
|
||||
$menu = isset($lang->navGroup->$module) ? $lang->navGroup->$module : $module;
|
||||
$menu = strtolower($menu);
|
||||
if($menu != 'qa' and !isset($lang->$menu->menu)) return true;
|
||||
if($menu == 'my' or $menu == 'index' or $module == 'tree') return true;
|
||||
if(($menu == 'my' && $method != 'team')or $menu == 'index' or $module == 'tree') return true;
|
||||
if($module == 'company' and $method == 'dynamic') return true;
|
||||
if($module == 'action' and $method == 'editcomment') return true;
|
||||
if($module == 'action' and $method == 'comment') return true;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#kanbanList .kanban-card {display: grid;}
|
||||
#kanbanList .kanban-card > .title {white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}
|
||||
#kanbanList .kanban-card.has-progress {padding-right: 40px; position: relative;}
|
||||
#kanbanList .kanban-card.has-progress > .progress-pie {position: absolute; right: 7px; top: 7px}
|
||||
#kanbanList .kanban-card.has-progress > .progress-pie {position: absolute; right: 7px; top: 7px; width: 24px; height: 24px;}
|
||||
#kanbanList .kanban-card.has-left-border {border-left: 2px solid #838a9d;}
|
||||
#kanbanList .kanban-card.has-left-border.border-left-green {border-left-color: #0bd986;}
|
||||
#kanbanList .kanban-card.has-left-border.border-left-red {border-left-color: #ff5d5d;}
|
||||
|
||||
@@ -5,3 +5,4 @@
|
||||
#kanbanList .kanban-col[data-type="project"] .kanban-lane-items {height: 100%; display: flex; flex-direction: column; justify-content: center;}
|
||||
#kanbanList .kanban-lane-name > .text {display: none;}
|
||||
#kanbanList .kanban-item.link-block > a {cursor: move;}
|
||||
#kanbanList .kanban-lane + .kanban-lane {margin-top: 2px!important;}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#kanbanContainer {margin: 0;}
|
||||
#kanbanContainer > .panel-body {overflow: auto;}
|
||||
#kanbans .kanban {min-height: initial;}
|
||||
#kanbans .kanban-lane {min-height: 150px;}
|
||||
#kanbans .kanban-lane {min-height: 150px; margin-top: 2px;}
|
||||
#kanbans .kanban-affixed > .kanban-header {top: 100px;}
|
||||
#kanbans .kanban-card[data-scale-size="4"] {padding: 8px;}
|
||||
#kanbans .kanban-card[data-scale-size="3"] {padding: 3px 4px;}
|
||||
|
||||
@@ -159,13 +159,13 @@ $(function()
|
||||
{
|
||||
data: processKanbanData(),
|
||||
laneNameWidth: 5,
|
||||
virtualize: true,
|
||||
droppable:
|
||||
{
|
||||
selector: '.kanban-item:not(.kanban-item-span)',
|
||||
target: findDropColumns,
|
||||
finish: handleFinishDrop,
|
||||
mouseButton: 'left'
|
||||
},
|
||||
virtualize: true
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -880,7 +880,7 @@ $(function()
|
||||
var menuCreator = window.menuCreators[menuType];
|
||||
if(!menuCreator) return;
|
||||
|
||||
var options = $.extend({event, $trigger: $trigger}, $trigger.data());
|
||||
var options = $.extend({event: event, $trigger: $trigger}, $trigger.data());
|
||||
var items = menuCreator(options);
|
||||
if(!items || !items.length) return;
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ class executionModel extends model
|
||||
/* Unset story, bug, build and testtask if type is ops. */
|
||||
$execution = $this->getByID($executionID);
|
||||
|
||||
if($execution and $execution->type == 'stage')
|
||||
if($execution and $execution->type == 'stage' and $this->config->systemMode == 'new')
|
||||
{
|
||||
global $lang;
|
||||
$this->app->loadLang('project');
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
<th><?php echo $lang->gitlab->group->memberAccessLevel;?></th>
|
||||
<th class='c-date'><?php echo $lang->gitlab->group->memberExpiresAt;?></th>
|
||||
<th class="c-actions"><?php echo $lang->actions;?></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -81,7 +81,6 @@ $lang->mr->sourceBranch = 'Source branch';
|
||||
$lang->mr->targetProject = 'Target project';
|
||||
$lang->mr->targetBranch = 'Target branch';
|
||||
|
||||
$lang->mr->usersTips = 'Tip: If you cannot choose the assignee, please go to the GitLab page to bind the user first.';
|
||||
$lang->mr->notFound = "Merge Request does not exist!";
|
||||
$lang->mr->toCreatedMessage = "The merge request you submitted:<a href='%s'>%s</a>, the build task succeeded.";
|
||||
$lang->mr->toReviewerMessage = "You have one merge request <a href='%s'>%s</a> waiting.";
|
||||
|
||||
@@ -63,8 +63,8 @@ $lang->mr->approvalStatusList['approved'] = '已通过';
|
||||
$lang->mr->approvalStatusList['rejected'] = '已拒绝';
|
||||
|
||||
$lang->mr->notApproved = '审核拒绝的';
|
||||
$lang->mr->assignedToMe = '指派给我的';
|
||||
$lang->mr->createdByMe = '我创建的';
|
||||
$lang->mr->assignedToMe = '指派给我';
|
||||
$lang->mr->createdByMe = '由我创建';
|
||||
|
||||
$lang->mr->statusList = array();
|
||||
$lang->mr->statusList['all'] = '所有';
|
||||
@@ -86,7 +86,6 @@ $lang->mr->targetBranch = '目标分支';
|
||||
$lang->mr->noCompileJob = '没有构建任务';
|
||||
$lang->mr->compileUnexecuted = '还未执行';
|
||||
|
||||
$lang->mr->usersTips = '提示:如果无法选择指派人,请先前往GitLab页面绑定用户。';
|
||||
$lang->mr->notFound = "此{$lang->mr->common}不存在。";
|
||||
$lang->mr->toCreatedMessage = "您提交的合并请求:<a href='%s'>%s</a> 构建任务执行通过。";
|
||||
$lang->mr->toReviewerMessage = "有一个合并请求:<a href='%s'>%s</a> 待审核。";
|
||||
|
||||
@@ -68,8 +68,7 @@ $lang->mr->sourceBranch = '源分支';
|
||||
$lang->mr->targetProject = '目標項目';
|
||||
$lang->mr->targetBranch = '目標分支';
|
||||
|
||||
$lang->mr->usersTips = '提示:如果無法選擇指派人,請先前往GitLab頁面綁定用戶。';
|
||||
$lang->mr->notFound = "此{$lang->mr->common}不存在。";
|
||||
$lang->mr->notFound = "此{$lang->mr->common}不存在。";
|
||||
|
||||
$lang->mr->apiError = new stdclass;
|
||||
$lang->mr->apiError->createMR = "通過API創建合併請求失敗,失敗原因:%s";
|
||||
|
||||
@@ -72,10 +72,6 @@
|
||||
<th><?php echo $lang->mr->assignee;?></th>
|
||||
<td><?php echo html::select('assignee', $users, '', "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td><?php echo $lang->mr->usersTips;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
|
||||
@@ -87,10 +87,6 @@
|
||||
<th><?php echo $lang->mr->assignee;?></th>
|
||||
<td><?php echo html::select('assignee', $users, $assignee, "class='form-control chosen'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td><?php echo $lang->mr->usersTips;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
|
||||
@@ -364,7 +364,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(), 'myBug');
|
||||
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'bug', false);
|
||||
|
||||
/* assign. */
|
||||
$this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->bug;
|
||||
|
||||
@@ -161,6 +161,7 @@ class productModel extends model
|
||||
|
||||
if($this->cookie->preProductID != $this->session->product)
|
||||
{
|
||||
$this->cookie->set('preBranch', 0);
|
||||
setcookie('preBranch', 0, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
||||
}
|
||||
return $this->session->product;
|
||||
@@ -1026,7 +1027,7 @@ class productModel extends model
|
||||
->orWhere('t2.PM')->eq($this->app->user->account)
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->beginIF($branch)->andWhere('t1.branch')->in($branch)->fi()
|
||||
->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi()
|
||||
->andWhere('t2.deleted')->eq('0')
|
||||
->orderBy($orderBy)
|
||||
->fetchAll('id');
|
||||
|
||||
@@ -115,6 +115,13 @@ function processKanbanData(key, programsData)
|
||||
return {id: kanbanId, columns: columns, lanes: lanes};
|
||||
}
|
||||
|
||||
/** Calculate column height */
|
||||
function calcColHeight(col, lane, colCards, colHeight)
|
||||
{
|
||||
if (col.type !== 'doingProject') return colHeight;
|
||||
return colCards.length * 62;
|
||||
}
|
||||
|
||||
$(function()
|
||||
{
|
||||
/* Init all kanbans */
|
||||
@@ -122,6 +129,11 @@ $(function()
|
||||
{
|
||||
var $kanban = $('#kanban-' + key);
|
||||
if(!$kanban.length) return;
|
||||
$kanban.kanban({data: processKanbanData(key, programsData), virtualize: true});
|
||||
$kanban.kanban(
|
||||
{
|
||||
data: processKanbanData(key, programsData),
|
||||
virtualize: true,
|
||||
calcColHeight: calcColHeight
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php
|
||||
$productID = $productID == 0 ? key($this->product->getProductPairsByProject($project->id)) : $productID;
|
||||
$buildName = $build ? " <span class='label label-danger'>Build:{$build->name}</span>" : '';
|
||||
echo html::a($this->inlink('bug', "projectID={$project->id}&productID={$productID}&orderBy=status,id_desc&build=$buildID&type=all"), "<span class='text'>{$lang->bug->allBugs}</span>" . ($type == 'all' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='allTab' class='btn btn-link" . ('all' == $type ? ' btn-active-text' : '') . "'");
|
||||
echo html::a($this->inlink('bug', "projectID={$project->id}&productID={$productID}&orderBy=status,id_desc&build=$buildID&type=unresolved"), "<span class='text'>{$lang->bug->unResolved}</span>" . ($type == 'unresolved' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='unresolvedTab' class='btn btn-link" . ('unresolved' == $type ? ' btn-active-text' : '') . "'");
|
||||
|
||||
@@ -32,7 +32,10 @@ class qaModel extends model
|
||||
$branch = ($this->cookie->preBranch !== '' and $branch === '') ? $this->cookie->preBranch : $branch;
|
||||
setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
||||
|
||||
if(!in_array($this->app->rawModule, $this->config->qa->noDropMenuModule)) $this->lang->switcherMenu = $this->loadModel('product')->getSwitcher($productID, $extra, $branch);
|
||||
$product = $this->loadModel('product')->getById($productID);
|
||||
if($product->type != 'normal') $this->lang->product->branch = sprintf($this->lang->product->branch, $this->lang->product->branchName[$product->type]);
|
||||
|
||||
if(!in_array($this->app->rawModule, $this->config->qa->noDropMenuModule)) $this->lang->switcherMenu = $this->product->getSwitcher($productID, $extra, $branch);
|
||||
if($this->app->rawModule == 'product' and $this->app->rawMethod == 'showerrornone') $this->lang->switcherMenu = '';
|
||||
common::setMenuVars('qa', $productID);
|
||||
}
|
||||
|
||||
@@ -1854,6 +1854,7 @@ class repoModel extends model
|
||||
public function syncCommit($repoID, $branchID)
|
||||
{
|
||||
$repo = $this->getRepoByID($repoID);
|
||||
$this->scm = $this->app->loadClass('scm');
|
||||
$this->scm->setEngine($repo);
|
||||
|
||||
$latestInDB = $this->dao->select('DISTINCT t1.*')->from(TABLE_REPOHISTORY)->alias('t1')
|
||||
|
||||
@@ -45,10 +45,13 @@ function loadProduct(productID)
|
||||
*/
|
||||
function loadBranch()
|
||||
{
|
||||
var branch = $('#branch').val();
|
||||
var branch = $('#branch').val();
|
||||
var productID = $('#product').val();
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
loadProductModules($('#product').val(), branch);
|
||||
loadProductPlans($('#product').val(), branch);
|
||||
if(typeof(productID) == 'undefined' && config.currentMethod == 'edit') productID = oldProductID;
|
||||
|
||||
loadProductModules(productID, branch);
|
||||
loadProductPlans(productID, branch);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1778,7 +1778,7 @@ class testcase extends control
|
||||
$this->view->productID = $productID;
|
||||
$this->view->branch = $branch;
|
||||
$this->view->cases = $this->loadModel('testsuite')->getNotImportedCases($productID, $libID, $orderBy, $pager, $browseType, $queryID);
|
||||
$this->view->modules = $this->loadModel('tree')->getOptionMenu($productID, 'case', 0, $branch);
|
||||
$this->view->modules = $this->loadModel('tree')->getOptionMenu($productID, 'case', 0, $branch === 'all' ? 0 : (int)$branch);
|
||||
$this->view->libModules = $this->tree->getOptionMenu($libID, 'caselib');
|
||||
$this->view->pager = $pager;
|
||||
$this->view->orderBy = $orderBy;
|
||||
@@ -1839,7 +1839,8 @@ class testcase extends control
|
||||
|
||||
$caseLang = $this->lang->testcase;
|
||||
$caseConfig = $this->config->testcase;
|
||||
$modules = $this->loadModel('tree')->getOptionMenu($productID, 'case', 0, $branch);
|
||||
$branches = $this->loadModel('branch')->getPairs($productID);
|
||||
$modules = $this->loadModel('tree')->getOptionMenu($productID, 'case', 0, empty(array_keys($branches)) ? 0 : array_keys($branches));
|
||||
$stories = $this->loadModel('story')->getProductStoryPairs($productID, $branch);
|
||||
$fields = $this->testcase->getImportFields($productID);
|
||||
$fields = array_flip($fields);
|
||||
@@ -2020,7 +2021,7 @@ class testcase extends control
|
||||
$this->view->caseData = $caseData;
|
||||
$this->view->stepData = $stepData;
|
||||
$this->view->productID = $productID;
|
||||
$this->view->branches = $this->loadModel('branch')->getPairs($productID);
|
||||
$this->view->branches = $branches;
|
||||
$this->view->isEndPage = $pagerID >= $allPager;
|
||||
$this->view->allCount = $allCount;
|
||||
$this->view->allPager = $allPager;
|
||||
|
||||
@@ -81,7 +81,8 @@ $(function()
|
||||
</td>
|
||||
<td><?php echo html::input("title[$key]", htmlSpecialString($case->title, ENT_QUOTES), "class='form-control'")?></td>
|
||||
<td style='overflow:visible'>
|
||||
<?php echo html::select("module[$key]", $modules, isset($case->module) ? $case->module : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->module : ''), "class='form-control chosen moduleChange'")?>
|
||||
<?php $caseModules = (isset($case->branch) and $case->branch != 0) ? $modules[BRANCH_MAIN] + $modules[$case->branch] : $modules;?>
|
||||
<?php echo html::select("module[$key]", $caseModules, isset($case->module) ? $case->module : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->module : ''), "class='form-control chosen moduleChange'")?>
|
||||
</td>
|
||||
<td style='overflow:visible'>
|
||||
<?php $storyID = isset($case->story) ? $case->story : ((!empty($case->id) and isset($cases[$case->id])) ? $cases[$case->id]->story : '');?>
|
||||
|
||||
@@ -341,7 +341,7 @@ class upgrade extends control
|
||||
/* When upgrading historical data as a project, handle products that are not linked with the project. */
|
||||
if(!empty($singleProducts)) $this->upgrade->computeProductAcl($singleProducts, $programID);
|
||||
}
|
||||
elseif($type == 'sprint' or $type == 'moreLink')
|
||||
elseif($type == 'sprint')
|
||||
{
|
||||
$linkedSprints = $this->post->sprints;
|
||||
|
||||
@@ -363,6 +363,43 @@ class upgrade extends control
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif($type == 'moreLink')
|
||||
{
|
||||
$linkedSprints = $this->post->sprints;
|
||||
|
||||
/* Create Program. */
|
||||
list($programID, $projectList, $lineID) = $this->upgrade->createProgram(array(), $linkedSprints);
|
||||
if(dao::isError()) die(js::error(dao::getError()));
|
||||
|
||||
if($_POST['projectType'] == 'execution')
|
||||
{
|
||||
/* Use historical projects as execution upgrades. */
|
||||
$this->upgrade->processMergedData($programID, $projectList, $lineID, array(), $linkedSprints);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Use historical projects as project upgrades. */
|
||||
foreach($linkedSprints as $sprint)
|
||||
{
|
||||
$this->upgrade->processMergedData($programID, $projectList[$sprint], $lineID, array(), array($sprint => $sprint));
|
||||
}
|
||||
|
||||
/* If is more-link sprints, and as project upgrade, set old relation into new project. */
|
||||
$projectProducts = $this->dao->select('product,project,branch,plan')->from(TABLE_PROJECTPRODUCT)
|
||||
->where('project')->in($linkedSprints)
|
||||
->fetchAll();
|
||||
foreach($projectProducts as $projectProduct)
|
||||
{
|
||||
$data = new stdclass();
|
||||
$data->project = $projectList[$projectProduct->project];
|
||||
$data->product = $projectProduct->product;
|
||||
$data->plan = $projectProduct->plan;
|
||||
$data->branch = $projectProduct->branch;
|
||||
|
||||
$this->dao->replace(TABLE_PROJECTPRODUCT)->data($data)->exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
die(js::locate($this->createLink('upgrade', 'mergeProgram', "type=$type&programID=$programID&projectType=$projectType"), 'parent'));
|
||||
}
|
||||
|
||||
@@ -35,10 +35,6 @@ div.divider {vertical-align: middle;}
|
||||
.programParams td > label:first-child {margin-right: 10px;}
|
||||
.programParams td > label:last-child {margin-left: 0px;}
|
||||
|
||||
.lineGroup .sprintRename input {max-width: 120px;}
|
||||
.projectList .scroll-handle .checkbox-primary {display: inline-block;}
|
||||
.sprintRename {margin-top: 5px;}
|
||||
.sprintRename input {display: inline-block; width: auto;}
|
||||
.sprintRename .btn-group {display: inline-block;}
|
||||
.sprintGroup .sprintItem .checkbox-primary {display: inline-block;}
|
||||
|
||||
|
||||
@@ -1150,45 +1150,3 @@ function isSelectAll(lineID = 0, type = 'product')
|
||||
if(objectNum > checkedObjectNum || objectNum == 0) checked = false;
|
||||
return checked;
|
||||
}
|
||||
|
||||
$(function()
|
||||
{
|
||||
$('.sprintItem').mouseover(function()
|
||||
{
|
||||
$(this).find('#sprintEdit').removeClass('hidden');
|
||||
}).mouseout(function()
|
||||
{
|
||||
$(this).find('#sprintEdit').addClass('hidden');
|
||||
})
|
||||
|
||||
$(document).on('click', '#sprintEdit i', function()
|
||||
{
|
||||
$(this).parents('.sprintItem').addClass('hidden');
|
||||
$(this).parents('.sprintItem').next('.sprintRename').removeClass('hidden');
|
||||
})
|
||||
|
||||
$('.sprintRename button.name-confirm').click(function()
|
||||
{
|
||||
var execution = $(this).parent().siblings('input').attr('name').split('_');
|
||||
var newExecutionName = $(this).parent().siblings('input').val();
|
||||
var link = createLink('execution', 'ajaxUpdateExecutionName', 'executionID=' + execution[1] + '&newExecutionName=' + newExecutionName);
|
||||
var $this = $(this);
|
||||
|
||||
$.post(link, function(data)
|
||||
{
|
||||
if(data)
|
||||
{
|
||||
$this.closest('.sprintRename').addClass('hidden');
|
||||
$this.closest('.sprintRename').prev('.sprintItem').removeClass('hidden').find('.checkbox-primary label').text(newExecutionName);
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
$('.sprintRename button.name-cancel').click(function()
|
||||
{
|
||||
var oldValue = $(this).closest('.sprintRename').prev('.sprintItem').find('.checkbox-primary label').text();
|
||||
$(this).closest('.sprintRename').addClass('hidden');
|
||||
$(this).closest('.sprintRename').prev('.sprintItem').removeClass('hidden');
|
||||
$(this).parent().siblings('input').val(oldValue);
|
||||
})
|
||||
})
|
||||
|
||||
@@ -50,22 +50,14 @@
|
||||
</div>
|
||||
<div class='projectList'>
|
||||
<div class='scroll-handle'>
|
||||
<?php if(isset($productGroups[$productID])):?>
|
||||
<?php foreach($productGroups[$productID] as $sprint):?>
|
||||
<?php if(isset($productGroups[$productID])):?>
|
||||
<?php foreach($productGroups[$productID] as $sprint):?>
|
||||
<div class="sprintItem">
|
||||
<?php echo html::checkBox("sprints[$line->id][$productID]", array($sprint->id => $sprint->name), '', "title='{$sprint->name}' data-product='{$product->id}' data-line='{$line->id}' data-begin='{$sprint->begin}' data-end='{$sprint->end}' data-status='{$sprint->status}' data-pm='{$sprint->PM}' class='tile'");?>
|
||||
<?php echo html::hidden("sprintIdList[$line->id][$productID][$sprint->id]", $sprint->id);?>
|
||||
<a href='#' id='sprintEdit' class='hidden'><i class="icon-common-edit icon-edit muted"></i></a>
|
||||
</div>
|
||||
<div class="sprintRename hidden">
|
||||
<?php echo html::input("sprintRename_$sprint->id", $sprint->name, "class='form-control'");?>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-success name-confirm"><i class='icon icon-check'></i></button>
|
||||
<button type="button" class="btn btn-gray name-cancel"><i class='icon icon-close'></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -27,22 +27,14 @@
|
||||
</div>
|
||||
<div class='projectList'>
|
||||
<div class='scroll-handle'>
|
||||
<?php if(isset($productGroups[$productID])):?>
|
||||
<?php foreach($productGroups[$productID] as $sprint):?>
|
||||
<?php if(isset($productGroups[$productID])):?>
|
||||
<?php foreach($productGroups[$productID] as $sprint):?>
|
||||
<div class="sprintItem">
|
||||
<?php echo html::checkBox("sprints[$productID]", array($sprint->id => $sprint->name), '', "data-product='{$productID}' data-begin='{$sprint->begin}' data-end='{$sprint->end}' data-status='{$sprint->status}' data-pm='{$sprint->PM}'");?>
|
||||
<?php echo html::hidden("sprintIdList[$productID][$sprint->id]", $sprint->id);?>
|
||||
<a href='#' id='sprintEdit' class='hidden'><i class="icon-common-edit icon-edit muted"></i></a>
|
||||
</div>
|
||||
<div class="sprintRename hidden">
|
||||
<?php echo html::input("sprintRename_$sprint->id", $sprint->name, "class='form-control'");?>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-success name-confirm"><i class='icon icon-check'></i></button>
|
||||
<button type="button" class="btn btn-gray name-cancel"><i class='icon icon-close'></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,14 +17,6 @@
|
||||
<?php foreach($noMergedSprints as $sprintID => $sprint):?>
|
||||
<div class="sprintItem">
|
||||
<?php echo html::checkBox("sprints", array($sprint->id => $sprint->name), '', "data-begin='{$sprint->begin}' data-end='{$sprint->end}' data-status='{$sprint->status}' data-pm='{$sprint->PM}'");?>
|
||||
<a href='#' id='sprintEdit' class='hidden'><i class="icon-common-edit icon-edit muted"></i></a>
|
||||
</div>
|
||||
<div class="sprintRename hidden">
|
||||
<?php echo html::input("sprintRename_$sprint->id", $sprint->name, "class='form-control'");?>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-success name-confirm"><i class='icon icon-check'></i></button>
|
||||
<button type="button" class="btn btn-gray name-cancel"><i class='icon icon-close'></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user