Merge branch 'sprint/183_xt_card' into 'master'
Sprint/183 xt card See merge request easycorp/zentaopms!1587
This commit is contained in:
@@ -46,9 +46,9 @@ $config->kanban->editor->viewcard = array('id' => 'comment', 'tools' => 'simp
|
||||
|
||||
$config->kanban->fromType = array('execution', 'productplan', 'release', 'build');
|
||||
$config->kanban->executionField = array('name', 'status', 'end', 'PM', 'type', 'deleted');
|
||||
$config->kanban->productplanField = array();
|
||||
$config->kanban->releaseField = array();
|
||||
$config->kanban->buildField = array();
|
||||
$config->kanban->productplanField = array('title', 'status', 'begin', 'end', 'deleted');
|
||||
$config->kanban->releaseField = array('name', 'status', 'date', 'deleted');
|
||||
$config->kanban->buildField = array('name', 'date', 'builder', 'deleted');
|
||||
|
||||
$config->kanban->default = new stdclass();
|
||||
$config->kanban->default->story = new stdclass();
|
||||
|
||||
+14
-12
@@ -12,7 +12,7 @@
|
||||
#kanbanContainer {padding-bottom: 0; margin-bottom: 0;}
|
||||
#kanbanContainer.fullscreen {overflow: auto;}
|
||||
|
||||
.region {border: 1px solid #dcdcdc; background-color: #fff;}
|
||||
.region {border: 1px solid #dcdcdc; background-color: #fff; overflow: scroll;}
|
||||
.region + .region {margin-top: 20px;}
|
||||
.region .region-header {padding: 10px;}
|
||||
.region .region-header span {font-size: 14px; color: #999EAB}
|
||||
@@ -102,15 +102,17 @@
|
||||
.gray .actions {display:none;}
|
||||
|
||||
.kanban-card .header .executionName {display: flex; width: 100%; float: left; white-space: nowrap; overflow: hidden;}
|
||||
.kanban-card .header .executionName .title {padding-right: 0px; margin-right: 5px; white-space: nowrap; overflow: hidden;}
|
||||
.kanban-card .header .executionName .title .icon {padding-right: 5px;}
|
||||
.kanban-card .header .executionName .title, .releaseTitle, .productplanTitle {padding-right: 0px; margin-right: 5px; white-space: nowrap; overflow: hidden;}
|
||||
.kanban-card .header .executionName > span {flex: none;}
|
||||
.execInfo {margin-top: 23px;}
|
||||
.execInfo .execStatus{margin-right: 20px;}
|
||||
.execInfo .label-wait {background: #EFEFEF !important; color: #838A9D;}
|
||||
.execInfo .label-doing {background: #f8d2d2 !important; color: #e64b4c;}
|
||||
.execInfo .label-suspended {background: #fff3d9 !important; color: #ff9800;}
|
||||
.execInfo .label-closed {background: #e5e5e5 !important; color: #b8b8b8;}
|
||||
.execInfo .label-deleted {background: #ff5d5d !important; color: #fff;}
|
||||
.region .kanban-item > .kanban-card > .execInfo > .user {position: absolute; right: 10px; bottom: -2px}
|
||||
.region .kanban-item > .kanban-card > .execInfo > .user > .avatar {display: inline-block; width: 24px; height: 24px; line-height: 24px; margin-right: 0px; margin-left: 2px}
|
||||
.execInfo, .releaseInfo, .productplanInfo {margin-top: 23px;}
|
||||
.label-wait {background: #EFEFEF !important; color: #838A9D;}
|
||||
.label-doing {background: #f8d2d2 !important; color: #e64b4c;}
|
||||
.label-suspended {background: #fff3d9 !important; color: #ff9800;}
|
||||
.label-future {background: #EFEFEF !important; color: #838A9D; border-radius: 9px}
|
||||
.label-closed, .label-terminate {background: #e5e5e5 !important; color: #b8b8b8;}
|
||||
.label-deleted {background: #ff5d5d !important; color: #fff;}
|
||||
.label-normal {background: #e1e8d9 !important; color: #9abe76;}
|
||||
.region .kanban-item > .kanban-card > .execInfo > .user, .region .kanban-item > .kanban-card > .releaseInfo > .user, .region .kanban-item > .kanban-card > .productplanInfo > .user {position: absolute; right: 10px; bottom: -2px}
|
||||
.region .kanban-item > .kanban-card > .execInfo > .user > .avatar, .region .kanban-item > .kanban-card > .releaseInfo > .user > .avatar, .region .kanban-item > .kanban-card > .productplanInfo > .user > .avatar {display: inline-block; width: 24px; height: 24px; line-height: 24px; margin-right: 0px; margin-left: 2px}
|
||||
.kanban-card .releaseTitle .icon, .kanban-card .title .icon, .kanban-card .productplanTitle .icon, .kanban-card .title .icon {padding-right: 5px;}
|
||||
.kanban-card .releaseTitle, .kanban-card .productplanTitle {width: 100%; float: left;}
|
||||
|
||||
+196
-6
@@ -280,6 +280,18 @@ function renderKanbanItem(item, $item)
|
||||
{
|
||||
renderExecutionItem(item, $item);
|
||||
}
|
||||
else if(item.fromType == 'release')
|
||||
{
|
||||
renderReleaseItem(item, $item);
|
||||
}
|
||||
else if(item.fromType == 'build')
|
||||
{
|
||||
renderBuildItem(item, $item);
|
||||
}
|
||||
else if(item.fromType == 'productplan')
|
||||
{
|
||||
renderProductplanItem(item, $item);
|
||||
}
|
||||
else
|
||||
{
|
||||
var $title = $item.children('.title');
|
||||
@@ -457,9 +469,187 @@ function renderExecutionItem(item, $item)
|
||||
/* Display avatars of PM. */
|
||||
var $user = $info.children('.user');
|
||||
var user = [item.PM];
|
||||
if(!$user.length) $user = $('<div class="user"></div>').appendTo($info);
|
||||
if(users[item.PM])
|
||||
{
|
||||
if(!$user.length) $user = $('<div class="user"></div>').appendTo($info);
|
||||
$user.html(renderUsersAvatar(user, item.id)).attr('title', users[item.PM]);
|
||||
}
|
||||
}
|
||||
|
||||
$user.html(renderUsersAvatar(user, item.id)).attr('title', item.PM);
|
||||
/**
|
||||
* Render plan item.
|
||||
*
|
||||
* @param object item
|
||||
* @param object $item
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function renderReleaseItem(item, $item)
|
||||
{
|
||||
var privs = item.actions;
|
||||
|
||||
/* Print name. */
|
||||
var $title = $item.children('.releaseTitle');
|
||||
if(!$title.length)
|
||||
{
|
||||
if(privs.includes('viewRelease') && item.deleted == '0') $title = $('<a class="releaseTitle"><i class="icon icon-flag"></i>' + item.name + '</a>').appendTo($item).attr('href', createLink('release', 'view', 'releaseID=' + item.fromID));
|
||||
if(!privs.includes('viewRelease') || item.deleted == '1') $title = $('<a class="releaseTitle"><i class="icon icon-flag"></i>' + item.name + '</a>').appendTo($item);
|
||||
}
|
||||
$title.attr('title', item.name);
|
||||
|
||||
var $info = $item.children('.releaseInfo');
|
||||
if(!$info.length) $info = $(
|
||||
[
|
||||
'<div class="releaseInfo">',
|
||||
'</div>'
|
||||
].join('')).appendTo($item);
|
||||
|
||||
var $statusBox = $info.children('.releaseStatus');
|
||||
if(!$statusBox.length)
|
||||
{
|
||||
if(item.deleted == '0')
|
||||
{
|
||||
$statusBox = $('<span class="releaseStatus label label-' + item.status + '">' + releaseLang.statusList[item.status] + '</span>').appendTo($info);
|
||||
}
|
||||
else
|
||||
{
|
||||
$statusBox = $('<span class="releaseStatus label label-deleted">' + releaseLang.deleted + '</span>').appendTo($info);
|
||||
}
|
||||
}
|
||||
|
||||
/* Display release date. */
|
||||
var $date = $info.children('.date');
|
||||
var releaseDate = $.zui.createDate(item.date);
|
||||
if(!$date.length) $date = $('<span class="date label label-wait"></span>').appendTo($info);
|
||||
|
||||
$date.text($.zui.formatDate(releaseDate, 'yyyy-MM-dd')).attr('title', $.zui.formatDate(releaseDate, 'yyyy-MM-dd')).show();
|
||||
|
||||
/* Display avatars of creator. */
|
||||
var $user = $info.children('.user');
|
||||
var user = [item.createdBy];
|
||||
if(users[item.createdBy])
|
||||
{
|
||||
if(!$user.length) $user = $('<div class="user"></div>').appendTo($info);
|
||||
$user.html(renderUsersAvatar(user, item.id)).attr('title', users[item.createdBy]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render product plan item.
|
||||
*
|
||||
* @param object item
|
||||
* @param object $item
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function renderProductplanItem(item, $item)
|
||||
{
|
||||
var privs = item.actions;
|
||||
|
||||
/* Print name. */
|
||||
var $title = $item.children('.productplanTitle');
|
||||
if(!$title.length)
|
||||
{
|
||||
if(privs.includes('viewPlan') && item.deleted == '0') $title = $('<a class="productplanTitle"><i class="icon icon-delay"></i>' + item.title + '</a>').appendTo($item).attr('href', createLink('productplan', 'view', 'productplanID=' + item.fromID));
|
||||
if(!privs.includes('viewPlan') || item.deleted == '1') $title = $('<a class="productplanTitle"><i class="icon icon-delay"></i>' + item.title + '</a>').appendTo($item);
|
||||
}
|
||||
$title.attr('title', item.title);
|
||||
|
||||
var $info = $item.children('.productplanInfo');
|
||||
if(!$info.length) $info = $(
|
||||
[
|
||||
'<div class="productplanInfo">',
|
||||
'</div>'
|
||||
].join('')).appendTo($item);
|
||||
|
||||
var $statusBox = $info.children('.productplanStatus');
|
||||
if(!$statusBox.length)
|
||||
{
|
||||
if(item.deleted == '0')
|
||||
{
|
||||
$statusBox = $('<span class="productplanStatus label label-' + item.status + '">' + productplanLang.statusList[item.status] + '</span>').appendTo($info);
|
||||
}
|
||||
else
|
||||
{
|
||||
$statusBox = $('<span class="productplanStatus label label-deleted">' + productplanLang.deleted + '</span>').appendTo($info);
|
||||
}
|
||||
}
|
||||
|
||||
/* Display date of product plan. */
|
||||
var $date = $info.children('.date');
|
||||
var begin = $.zui.createDate(item.begin);
|
||||
var end = $.zui.createDate(item.end);
|
||||
var today = new Date();
|
||||
var labelType = end.toLocaleDateString() == today.toLocaleDateString() ? 'danger' : 'wait';
|
||||
var labelTitle = $.zui.formatDate(begin, 'MM-dd') + ' ' + productplanLang.to + ' ' + $.zui.formatDate(end, 'MM-dd');
|
||||
|
||||
if((item.begin == '2030-01-01' || item.end == '2030-01-01'))
|
||||
{
|
||||
labelType = 'future';
|
||||
labelTitle = productplanLang.future;
|
||||
}
|
||||
if(!$date.length) $date = $('<span class="date label label-' + labelType + '"></span>').appendTo($info);
|
||||
$date.text(labelTitle).attr('title', labelTitle).show();
|
||||
|
||||
/* Display avatars of creator. */
|
||||
var $user = $info.children('.user');
|
||||
var user = [item.createdBy];
|
||||
if(users[item.createdBy])
|
||||
{
|
||||
if(!$user.length) $user = $('<div class="user"></div>').appendTo($info);
|
||||
$user.html(renderUsersAvatar(user, item.id)).attr('title', users[item.createdBy]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render build item.
|
||||
*
|
||||
* @param object item
|
||||
* @param object $item
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function renderBuildItem(item, $item)
|
||||
{
|
||||
var privs = item.actions;
|
||||
|
||||
/* Print name. */
|
||||
var $title = $item.children('.title');
|
||||
if(!$title.length)
|
||||
{
|
||||
if(privs.includes('viewBuild') && item.deleted == '0') $title = $('<a class="title"><i class="icon icon-code"></i>' + item.name + '</a>').appendTo($item).attr('href', createLink('build', 'view', 'buildID=' + item.fromID));
|
||||
if(!privs.includes('viewBuild') || item.deleted == '1') $title = $('<a class="title"><i class="icon icon-code"></i>' + item.name + '</a>').appendTo($item);
|
||||
}
|
||||
$title.attr('title', item.name);
|
||||
|
||||
var $info = $item.children('.info');
|
||||
if(!$info.length) $info = $(
|
||||
[
|
||||
'<div class="info">',
|
||||
'</div>'
|
||||
].join('')).appendTo($item);
|
||||
|
||||
var $statusBox = $info.children('.buildStatus');
|
||||
if(!$statusBox.length && item.deleted == '1')
|
||||
{
|
||||
$statusBox = $('<span class="buildStatus label label-deleted">' + productplanLang.deleted + '</span>').appendTo($info);
|
||||
}
|
||||
|
||||
/* Display build date. */
|
||||
var $date = $info.children('.date');
|
||||
var buildDate = $.zui.createDate(item.date);
|
||||
if(!$date.length) $date = $('<span class="date label label-wait"></span>').appendTo($info);
|
||||
|
||||
$date.text($.zui.formatDate(buildDate, 'yyyy-MM-dd')).attr('title', $.zui.formatDate(buildDate, 'yyyy-MM-dd')).show();
|
||||
|
||||
/* Display avatars of creator. */
|
||||
var $user = $info.children('.user');
|
||||
var user = [item.builder];
|
||||
if(users[item.builder])
|
||||
{
|
||||
if(!$user.length) $user = $('<div class="user"></div>').appendTo($info);
|
||||
$user.html(renderUsersAvatar(user, item.id)).attr('title', users[item.builder]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1099,10 +1289,10 @@ $(function()
|
||||
var columnID = $(this).closest('.kanban-col').data('id');
|
||||
|
||||
/* The submenu of import. */
|
||||
var importPlanLink = kanban.object.indexOf('plan') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importPlan', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID, '', true) + "'>" + kanbanLang.importPlan + '</a></li>' : '';
|
||||
var importReleaseLink = kanban.object.indexOf('release') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importRelease', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID, '', true) + "'>" + kanbanLang.importRelease + '</a></li>' : '';
|
||||
var importExecutionLink = kanban.object.indexOf('execution') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importExecution', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID, '', true) + "'>" + kanbanLang.importExecution + '</a></li>' : '';
|
||||
var importBuildLink = kanban.object.indexOf('build') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importBuild', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID, '', true) + "'>" + kanbanLang.importBuild + '</a></li>' : '';
|
||||
var importPlanLink = kanban.object.indexOf('plan') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importPlan', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID) + "'>" + kanbanLang.importPlan + '</a></li>' : '';
|
||||
var importReleaseLink = kanban.object.indexOf('release') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importRelease', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID) + "'>" + kanbanLang.importRelease + '</a></li>' : '';
|
||||
var importExecutionLink = kanban.object.indexOf('execution') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importExecution', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID) + "'>" + kanbanLang.importExecution + '</a></li>' : '';
|
||||
var importBuildLink = kanban.object.indexOf('build') != -1 ? "<li><a class='iframe' data-toggle='modal' data-width='80%' href='" + createLink('kanban', 'importBuild', 'kanbanID=' + kanban.id + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID) + "'>" + kanbanLang.importBuild + '</a></li>' : '';
|
||||
var importSubmenu = '<ul class="dropdown-menu">' + importPlanLink + importReleaseLink + importExecutionLink + importBuildLink +'</ul>';
|
||||
$('.import').parent().append(importSubmenu);
|
||||
|
||||
|
||||
+49
-23
@@ -523,14 +523,17 @@ class kanbanModel extends model
|
||||
$targetLaneID = $data->targetLane;
|
||||
|
||||
$objectCards = array();
|
||||
$now = helper::now();
|
||||
foreach($objectIDList as $objectID)
|
||||
{
|
||||
$cardData = new stdClass();
|
||||
$cardData->kanban = $kanbanID;
|
||||
$cardData->region = $regionID;
|
||||
$cardData->group = $groupID;
|
||||
$cardData->fromID = $objectID;
|
||||
$cardData->fromType = $objectType;
|
||||
$cardData->kanban = $kanbanID;
|
||||
$cardData->region = $regionID;
|
||||
$cardData->group = $groupID;
|
||||
$cardData->fromID = $objectID;
|
||||
$cardData->fromType = $objectType;
|
||||
$cardData->createdBy = $this->app->user->account;
|
||||
$cardData->createdDate = $now;
|
||||
$this->dao->insert(TABLE_KANBANCARD)->data($cardData)->exec();
|
||||
|
||||
$cardID = $this->dao->lastInsertID();
|
||||
@@ -1032,8 +1035,7 @@ class kanbanModel extends model
|
||||
->andWhere('type')->eq('common')
|
||||
->fetchAll();
|
||||
|
||||
$actions = array('editCard', 'finishCard', 'activateCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard', 'viewExecution');
|
||||
|
||||
$actions = array('editCard', 'finishCard', 'activateCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard', 'viewExecution', 'viewPlan', 'viewRelease', 'viewBuild');
|
||||
$cardGroup = array();
|
||||
foreach($cellList as $cell)
|
||||
{
|
||||
@@ -1051,13 +1053,17 @@ class kanbanModel extends model
|
||||
$card->actions = array();
|
||||
foreach($actions as $action)
|
||||
{
|
||||
if($action == 'viewExecution')
|
||||
if(in_array($action, array('viewExecution', 'viewPlan', 'viewRelease', 'viewBuild')))
|
||||
{
|
||||
if($card->fromType == 'execution')
|
||||
{
|
||||
if($card->execType == 'kanban' and common::hasPriv('execution', 'kanban')) $card->actions[] = $action;
|
||||
if($card->execType != 'kanban' and common::hasPriv('execution', 'view')) $card->actions[] = $action;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(common::hasPriv($fromType, 'view')) $card->actions[] = $action;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if(common::hasPriv('kanban', $action)) $card->actions[] = $action;
|
||||
@@ -1081,38 +1087,58 @@ class kanbanModel extends model
|
||||
*/
|
||||
public function getImportedCards($kanbanID, $cards, $fromType)
|
||||
{
|
||||
/* Get imported cards based on imported object type. */
|
||||
$objectCards = $this->dao->select('*')->from(TABLE_KANBANCARD)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('kanban')->eq($kanbanID)
|
||||
->andWhere('archived')->eq(0)
|
||||
->andWhere('fromType')->eq($fromType)
|
||||
->fetchAll('fromID');
|
||||
->fetchGroup('fromID', 'id');
|
||||
|
||||
if(!empty($objectCards))
|
||||
{
|
||||
/* Get imported objects. */
|
||||
$table = $this->config->objectTables[$fromType];
|
||||
$objects = $this->dao->select('*')->from($table)
|
||||
->where('id')->in(array_keys($objectCards))
|
||||
->fetchAll('id');
|
||||
|
||||
foreach($objectCards as $objectCard)
|
||||
if($fromType == 'productplan' or $fromType == 'release')
|
||||
{
|
||||
$object = $objects[$objectCard->fromID];
|
||||
$fieldType = $fromType . 'Field';
|
||||
$creators = $this->dao->select('objectID, actor')->from(TABLE_ACTION)
|
||||
->where('objectID')->in(array_keys($objectCards))
|
||||
->andWhere('objectType')->eq($fromType)
|
||||
->andWhere('action')->eq('opened')
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
foreach($this->config->kanban->$fieldType as $field) $objectCard->$field = $object->$field;
|
||||
|
||||
if($fromType =='execution')
|
||||
/* Data for constructing the card. */
|
||||
foreach($objectCards as $objectID => $cardsInfo)
|
||||
{
|
||||
foreach($cardsInfo as $cardID => $objectCard)
|
||||
{
|
||||
if($object->status != 'done' and $object->status != 'closed' and $object->status != 'suspended')
|
||||
{
|
||||
$delay = helper::diffDate(helper::today(), $object->end);
|
||||
if($delay > 0) $objectCard->delay = $delay;
|
||||
}
|
||||
$objectCard->execType = $object->type;
|
||||
}
|
||||
$object = $objects[$objectID];
|
||||
$fieldType = $fromType . 'Field';
|
||||
|
||||
$cards[$objectCard->id] = $objectCard;
|
||||
foreach($this->config->kanban->$fieldType as $field) $objectCard->$field = $object->$field;
|
||||
|
||||
if($fromType == 'productplan' or $fromType == 'release')
|
||||
{
|
||||
$objectCard->createdBy = zget($creators, $object->id, '');
|
||||
}
|
||||
|
||||
if($fromType =='execution')
|
||||
{
|
||||
if($object->status != 'done' and $object->status != 'closed' and $object->status != 'suspended')
|
||||
{
|
||||
$delay = helper::diffDate(helper::today(), $object->end);
|
||||
if($delay > 0) $objectCard->delay = $delay;
|
||||
}
|
||||
$objectCard->execType = $object->type;
|
||||
}
|
||||
|
||||
$cards[$cardID] = $objectCard;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $cards;
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedProject;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('project', $projects, $selectedProjectID, "onchange='reloadObjectList(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('project', $projects, $selectedProjectID, "onchange='reloadObjectList(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedLane;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<form class='main-table' method='post' data-ride='table' target='hiddenwin' id='importBuildForm'>
|
||||
<table class='table table-fixed' id='buildList'>
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedKanban;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('kanban', $kanbanPairs, $selectedKanbanID, "onchange='reloadObjectList(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('kanban', $kanbanPairs, $selectedKanbanID, "onchange='reloadObjectList(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedLane;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<form class='main-table' method='post' data-ride='table' target='hiddenwin' id='importCardForm'>
|
||||
<table class='table table-fixed' id='cardList'>
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedProject;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('project', $projects, $selectedProjectID, "onchange='reloadObjectList(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('project', $projects, $selectedProjectID, "onchange='reloadObjectList(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedLane;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<form class='main-table' method='post' data-ride='table' target='hiddenwin' id='importExecutionForm'>
|
||||
<table class='table table-fixed' id='executionList'>
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedProduct;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('product', $products, $selectedProductID, "onchange='reloadObjectList(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('product', $products, $selectedProductID, "onchange='reloadObjectList(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedLane;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<form class='main-table' method='post' data-ride='table' target='hiddenwin' id='importPlanForm'>
|
||||
<table class='table table-fixed' id='planList'>
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedProduct;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('product', $products, $selectedProductID, "onchange='reloadObjectList(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('product', $products, $selectedProductID, "onchange='reloadObjectList(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<div class='table-row p-10px'>
|
||||
<div class='table-col w-150px text-center'><h4><?php echo $lang->kanban->selectedLane;?></h4></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen'");?></div>
|
||||
<div class='table-col'><?php echo html::select('lane', $lanePairs, '', "onchange='setTargetLane(this.value)' class='form-control chosen' data-drop_direction='down'");?></div>
|
||||
</div>
|
||||
<form class='main-table' method='post' data-ride='table' target='hiddenwin' id='importReleaseForm'>
|
||||
<table class='table table-fixed' id='releaseList'>
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
|
||||
<?php
|
||||
$app->loadLang('execution');
|
||||
$app->loadLang('release');
|
||||
$app->loadLang('productplan');
|
||||
$laneCount = 0;
|
||||
foreach($regions as $region) $laneCount += $region->laneCount;
|
||||
|
||||
@@ -25,6 +27,8 @@ js::set('kanbanlaneLang', $lang->kanbanlane);
|
||||
js::set('kanbancolumnLang', $lang->kanbancolumn);
|
||||
js::set('kanbancardLang', $lang->kanbancard);
|
||||
js::set('executionLang', $lang->execution);
|
||||
js::set('releaseLang', $lang->release);
|
||||
js::set('productplanLang', $lang->productplan);
|
||||
js::set('kanbanID', $kanban->id);
|
||||
js::set('laneCount', $laneCount);
|
||||
js::set('userList', $userList);
|
||||
|
||||
Reference in New Issue
Block a user