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' : '') . "'");
|
||||
|
||||
+4
-1
@@ -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
+5
-5
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user