diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php
index e72e4e7126..c28fbfb220 100644
--- a/module/group/lang/resource.php
+++ b/module/group/lang/resource.php
@@ -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();
diff --git a/module/kanban/control.php b/module/kanban/control.php
index 89bb9f9c97..fc6f3c8072 100644
--- a/module/kanban/control.php
+++ b/module/kanban/control.php
@@ -669,12 +669,11 @@ class kanban extends control
* @param int $kanbanID
* @param int $regionID
* @param int $groupID
- * @param int $laneID
* @param int $columnID
* @access public
* @return void
*/
- public function createCard($kanbanID = 0, $regionID = 0, $groupID = 0, $laneID = 0, $columnID = 0)
+ public function createCard($kanbanID = 0, $regionID = 0, $groupID = 0, $columnID = 0)
{
if($_POST)
{
@@ -782,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.
*
diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js
index f5d6bf9f11..246d4696c6 100644
--- a/module/kanban/js/view.js
+++ b/module/kanban/js/view.js
@@ -145,7 +145,7 @@ function renderHeaderCol($column, column, $header, kanbanData)
if(columnPrivs.includes('createCard') && column.parent != -1)
{
- var cardUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&laneID=' + laneID + '&columnID=' + columnID);
+ var cardUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID);
addItemBtn = ['', '', ''].join('');
}
@@ -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 = $('').appendTo($item).attr('href', createLink('kanban', 'viewCard', 'cardID=' + item.id, '', true));
@@ -489,7 +491,7 @@ function openAddTaskForm($element)
var laneID = $element.closest('.kanban-lane').data('id');
var columnID = $element.closest('.kanban-col').data('id');
var status = $element.closest('.kanban-col').data('type');
- var modalUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&laneID=' + laneID + '&columnID=' + columnID);
+ var modalUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '®ionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID);
$.zui.modalTrigger.show(
{
url: modalUrl,
@@ -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;
diff --git a/module/kanban/model.php b/module/kanban/model.php
index aeee70f5ec..92af56ceb0 100644
--- a/module/kanban/model.php
+++ b/module/kanban/model.php
@@ -460,7 +460,7 @@ class kanbanModel extends model
$cardID = $this->dao->lastInsertID();
$this->file->saveUpload('kanbancard', $cardID);
$this->file->updateObjectID($this->post->uid, $cardID, 'kanbancard');
- $this->addKanbanCell($kanbanID, $this->post->lane, $columnID, 'common', $cardID);
+ $this->addKanbanCell($kanbanID, (int)$this->post->lane, $columnID, 'common', $cardID);
return $cardID;
}
@@ -858,27 +858,38 @@ class kanbanModel extends model
*/
public function getCardGroupByKanban($kanbanID)
{
- $cards = $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')
+ /* Get card data.*/
+ $cards = $this->dao->select('*')->from(TABLE_KANBANCARD)->alias('t1')
->where('deleted')->eq(0)
- ->andWhere("INSTR(t2.cards, CONCAT(',',t1.id,','))")->gt(0)
+ ->andWhere('kanban')->eq($kanbanID)
->andWhere('archived')->eq(0)
- ->andWhere('t2.kanban')->eq($kanbanID)
- ->andWhere('t2.type')->eq('common')
- //->orderBy('`order` asc')
->fetchAll('id');
- $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard');
- $cardGroup = array();
- foreach($cards as $card)
- {
- $card->actions = array();
- foreach($actions as $action)
- {
- if(common::hasPriv('kanban', $action)) $card->actions[] = $action;
- }
+ $cellList = $this->dao->select('*')->from(TABLE_KANBANCELL)
+ ->where('kanban')->eq($kanbanID)
+ ->andWhere('type')->eq('common')
+ ->fetchAll();
- $cardGroup[$card->lane]['column' . $card->column][] = $card;
+ $actions = array('editCard', 'archiveCard', 'deleteCard', 'moveCard', 'setCardColor', 'viewCard', 'sortCard');
+ $cardGroup = array();
+ foreach($cellList as $cell)
+ {
+ $cardIdList = array_filter(explode(',', $cell->cards));
+
+ if(empty($cardIdList)) continue;
+ foreach($cardIdList as $cardID)
+ {
+ if(!isset($cards[$cardID])) continue;
+
+ $card = zget($cards, $cardID);
+ $card->actions = array();
+ foreach($actions as $action)
+ {
+ if(common::hasPriv('kanban', $action)) $card->actions[] = $action;
+ }
+
+ $cardGroup[$cell->lane]['column' . $cell->column][] = $card;
+ }
}
return $cardGroup;