Merge branch 'sprint/183_tianshujie_48005' into 'master'

* Finish task #48005.

See merge request easycorp/zentaopms!1501
This commit is contained in:
孙广明
2022-01-19 08:44:06 +00:00
4 changed files with 69 additions and 37 deletions
+5 -7
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();
+21 -2
View File
@@ -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.
*
+15 -11
View File
@@ -145,7 +145,7 @@ function renderHeaderCol($column, column, $header, kanbanData)
if(columnPrivs.includes('createCard') && column.parent != -1)
{
var cardUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '&regionID=' + regionID + '&groupID=' + groupID + '&laneID=' + laneID + '&columnID=' + columnID);
var cardUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '&regionID=' + regionID + '&groupID=' + groupID + '&columnID=' + columnID);
addItemBtn = ['<a data-contextmenu="columnCreate" data-toggle="modal" data-action="addItem" data-column="' + column.id + '" data-lane="' + laneID + '" href="' + cardUrl + '" class="text-primary iframe">', '<i class="icon icon-expand-alt"></i>', '</a>'].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 = $('<a class="title iframe" data-toggle="modal" data-width="80%"></a>').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 + '&regionID=' + regionID + '&groupID=' + groupID + '&laneID=' + laneID + '&columnID=' + columnID);
var modalUrl = createLink('kanban', 'createCard', 'kanbanID=' + kanbanID + '&regionID=' + 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;
+28 -17
View File
@@ -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;