* Finish task #48005.

This commit is contained in:
tianshujie
2022-01-19 16:02:34 +08:00
parent 2b08d2f07a
commit 1c60beb471
4 changed files with 46 additions and 20 deletions

View File

@@ -670,7 +670,6 @@ $lang->resource->kanban->deleteCard = 'deleteCard';
$lang->resource->kanban->moveCard = 'moveCard';
$lang->resource->kanban->setCardColor = 'setCardColor';
$lang->resource->kanban->laneMove = 'laneMove';
$lang->resource->kanban->cardsSort = 'cardsSort';
$lang->resource->kanban->viewArchivedColumn = 'viewArchivedColumn';
$lang->resource->kanban->viewArchivedCard = 'viewArchivedCard';
$lang->resource->kanban->restoreCard = 'restoreCard';
@@ -714,12 +713,11 @@ $lang->kanban->methodOrder[170] = 'assigntoCard';
$lang->kanban->methodOrder[175] = 'moveCard';
$lang->kanban->methodOrder[180] = 'setCardColor';
$lang->kanban->methodOrder[185] = 'laneMove';
$lang->kanban->methodorder[190] = 'cardsSort';
$lang->kanban->methodOrder[195] = 'viewArchivedColumn';
$lang->kanban->methodorder[200] = 'viewArchivedCard';
$lang->kanban->methodorder[205] = 'archiveColumn';
$lang->kanban->methodorder[210] = 'restoreCard';
$lang->kanban->methodorder[215] = 'setLaneHeight';
$lang->kanban->methodOrder[190] = 'viewArchivedColumn';
$lang->kanban->methodorder[195] = 'viewArchivedCard';
$lang->kanban->methodorder[200] = 'archiveColumn';
$lang->kanban->methodorder[205] = 'restoreCard';
$lang->kanban->methodorder[210] = 'setLaneHeight';
/* Execution. */
$lang->resource->execution = new stdclass();

View File

@@ -781,6 +781,26 @@ class kanban extends control
die(json_encode($kanbanGroup));
}
/**
* Sort cards.
*
* @param int $kanbanID
* @param int $laneID
* @param int $columnID
* @param string $cards
* @access public
* @return void
*/
public function sortCard($kanbanID, $laneID, $columnID, $cards = '')
{
if(empty($cards)) return;
$this->dao->update(TABLE_KANBANCELL)->set('cards')->eq(",$cards,")->where('kanban')->eq($kanbanID)->andWhere('lane')->eq($laneID)->andWhere('`column`')->eq($columnID)->exec();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
}
/**
* Archive a card.
*

View File

@@ -258,6 +258,8 @@ function renderKanbanItem(item, $item)
var $title = $item.children('.title');
var privs = item.actions;
var printMoreBtn = (privs.includes('editCard') || privs.includes('archiveCard') || privs.includes('copyCard') || privs.includes('deleteCard') || privs.includes('moveCard') || privs.includes('setCardColor'));
if(privs.includes('sortCard')) $item.parent().addClass('sort');
if(!$title.length)
{
if(privs.includes('viewCard')) $title = $('<a class="title iframe" data-toggle="modal" data-width="80%"></a>').appendTo($item).attr('href', createLink('kanban', 'viewCard', 'cardID=' + item.id, '', true));
@@ -930,29 +932,29 @@ $(function()
var $cards = null;
$('#kanban').sortable(
{
selector: '.region, .kanban-board, .kanban-lane',
trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name',
selector: '.region, .kanban-board, .kanban-lane, .kanban-item.sort',
trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name, .kanban-item.sort',
container: function($ele)
{
return $ele.parent();
},
targetSelector: function($ele)
{
/* Sort regions */
/* Sort regions. */
if($ele.hasClass('region'))
{
sortType = 'region';
return $ele.parent().children('.region');
}
/* Sort boards */
/* Sort boards. */
if($ele.hasClass('kanban-board'))
{
sortType = 'board';
return $ele.parent().children('.kanban-board');
}
/* Sort lanes */
/* Sort lanes. */
if($ele.hasClass('kanban-lane'))
{
sortType = 'lane';
@@ -961,10 +963,10 @@ $(function()
return $ele.parent().children('.kanban-lane');
}
/* Sort lanes */
/* Sort cards. */
if($ele.hasClass('kanban-item'))
{
sortType = 'item';
sortType = 'card';
return $ele.parent().children('.kanban-item');
}
},
@@ -1015,9 +1017,11 @@ $(function()
var region = e.element.parent().parent().data('id');
url = createLink('kanban', 'sortLane', 'region=' + region + '&lanes=' + orders.join(','));
}
if(sortType == 'item')
if(sortType == 'card')
{
url = createLink('task', 'sort', 'kanbanID=' + kanbanID + '&tasks=' + orders.join(','));
var laneID = e.element.closest('.kanban-lane').data('id');
var columnID = e.element.closest('.kanban-col').data('id');
url = createLink('kanban', 'sortCard', 'kanbanID=' + kanbanID + '&laneID=' + laneID + '&columnID=' + columnID + '&cards=' + orders.join(','));
}
if(!url) return true;

View File

@@ -858,17 +858,21 @@ class kanbanModel extends model
*/
public function getCardGroupByKanban($kanbanID)
{
$cards = $this->dao->select('t1.*,t2.kanban,t2.lane,t2.column')->from(TABLE_KANBANCARD)->alias('t1')
/* Get card data.*/
$sql = $this->dao->select('t1.*,t2.kanban,t2.lane,t2.column')->from(TABLE_KANBANCARD)->alias('t1')
->leftJoin(TABLE_KANBANCELL)->alias('t2')->on('t1.kanban=t2.kanban')
->where('deleted')->eq(0)
->andWhere("INSTR(t2.cards, CONCAT(',',t1.id,','))")->gt(0)
->andWhere('archived')->eq(0)
->andWhere('t2.kanban')->eq($kanbanID)
->andWhere('t2.type')->eq('common')
//->orderBy('`order` asc')
->fetchAll('id');
->get();
$sql .= "ORDER BY FIND_IN_SET(t1.id, t2.cards)";
$stmt = $this->dbh->query($sql);
$cards = $stmt->fetchAll();
$actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard');
$actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard');
$cardGroup = array();
foreach($cards as $card)
{