diff --git a/db/update16.0.beta1.sql b/db/update16.0.beta1.sql index bfb0168184..f47a61a0d9 100644 --- a/db/update16.0.beta1.sql +++ b/db/update16.0.beta1.sql @@ -8,6 +8,7 @@ CREATE TABLE `zt_kanbanspace` ( `acl` char(30) NOT NULL DEFAULT 'open', `whitelist` text NOT NULL, `status` enum('active','closed') NOT NULL default 'active', + `order` smallint(6) NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, `lastEditedBy` char(30) NOT NULL, @@ -30,6 +31,7 @@ CREATE TABLE `zt_kanban` ( `whitelist` text NOT NULL, `archived` enum('0', '1') NOT NULL DEFAULT '0', `status` enum('active','closed') NOT NULL default 'active', + `order` smallint(6) NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, `lastEditedBy` char(30) NOT NULL, @@ -46,6 +48,7 @@ CREATE TABLE `zt_kanbanregion` ( `space` mediumint(8) unsigned NOT NULL, `kanban` mediumint(8) unsigned NOT NULL, `name` varchar(255) NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, `lastEditedBy` char(30) NOT NULL, @@ -72,6 +75,7 @@ CREATE TABLE `zt_kanbancard` ( `color` char(7) NOT NULL, `acl` char(30) NOT NULL DEFAULT 'open', `whitelist` text NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', `archived` enum('0', '1') NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, @@ -90,18 +94,7 @@ CREATE TABLE `zt_kanbangroup` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `kanban` mediumint(8) unsigned NOT NULL, `region` mediumint(8) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- DROP TABLE IF EXISTS `zt_kanbanorder`; -CREATE TABLE `zt_kanbanorder` ( - `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, - `parentID` mediumint(8) unsigned NOT NULL, - `parentType` varchar(20) NOT NULL, - `objectID` mediumint(8) unsigned NOT NULL, - `objectType` varchar(20) NOT NULL, - `account` varchar(30) NOT NULL, - `order` int NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/zentao.sql b/db/zentao.sql index 528ccb811c..733fbca6d5 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -654,6 +654,7 @@ CREATE TABLE `zt_kanbanspace` ( `acl` char(30) NOT NULL DEFAULT 'open', `whitelist` text NOT NULL, `status` enum('active','closed') NOT NULL default 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, `lastEditedBy` char(30) NOT NULL, @@ -675,6 +676,7 @@ CREATE TABLE `zt_kanban` ( `whitelist` text NOT NULL, `archived` enum('0', '1') NOT NULL DEFAULT '0', `status` enum('active','closed') NOT NULL default 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, `lastEditedBy` char(30) NOT NULL, @@ -690,6 +692,7 @@ CREATE TABLE `zt_kanbanregion` ( `space` mediumint(8) unsigned NOT NULL, `kanban` mediumint(8) unsigned NOT NULL, `name` varchar(255) NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, `lastEditedBy` char(30) NOT NULL, @@ -715,6 +718,7 @@ CREATE TABLE `zt_kanbancard` ( `color` char(7) NOT NULL, `acl` char(30) NOT NULL DEFAULT 'open', `whitelist` text NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', `archived` enum('0', '1') NOT NULL DEFAULT '0', `createdBy` char(30) NOT NULL, `createdDate` datetime NOT NULL, @@ -732,17 +736,7 @@ CREATE TABLE `zt_kanbangroup` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `kanban` mediumint(8) unsigned NOT NULL, `region` mediumint(8) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; --- DROP TABLE IF EXISTS `zt_kanbanorder`; -CREATE TABLE `zt_kanbanorder` ( - `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, - `parentID` mediumint(8) unsigned NOT NULL, - `parentType` varchar(20) NOT NULL, - `objectID` mediumint(8) NOT NULL, - `objectType` varchar(20) NOT NULL, - `account` varchar(30) NOT NULL, - `order` int NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_kanbanlane`; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 7f4b4d6c27..916fd30b7d 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -654,6 +654,7 @@ $lang->resource->kanban->moveCard = 'moveCard'; $lang->resource->kanban->setCardColor = 'setCardColor'; $lang->resource->kanban->laneMove = 'laneMove'; $lang->resource->kanban->cardsSort = 'cardsSort'; +$lang->resource->kanban->splitColumn = 'splitColumn'; $lang->kanban->methodOrder[5] = 'space'; $lang->kanban->methodOrder[10] = 'createSpace'; @@ -690,7 +691,8 @@ $lang->kanban->methodOrder[160] = 'assigntoCard'; $lang->kanban->methodOrder[165] = 'moveCard'; $lang->kanban->methodOrder[170] = 'setCardColor'; $lang->kanban->methodOrder[175] = 'laneMove'; -$lang->kanban->methodOrder[180] = 'cardsSort'; +$lang->kanban->methodorder[180] = 'cardsSort'; +$lang->kanban->methodorder[185] = 'splitColumn'; /* Execution. */ $lang->resource->execution = new stdclass(); diff --git a/module/kanban/control.php b/module/kanban/control.php index 01f8591bf5..3a1cf0e9ca 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -348,6 +348,29 @@ class kanban extends control $this->display(); } + /** + * Sort regions. + * + * @param string $regions + * @access public + * @return void + */ + public function sortRegion($regions = '') + { + if(empty($regions)) return; + $regionIdList = explode(',', trim($regions, ',')); + + $order = 1; + foreach($regionIdList as $regionID) + { + $this->dao->update(TABLE_KANBANREGION)->set('`order`')->eq($order)->where('id')->eq($regionID)->exec(); + $order++; + } + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess)); + } + /** * Delete a region * diff --git a/module/kanban/js/view.js b/module/kanban/js/view.js index 6ba37d30c7..a14bdbc366 100644 --- a/module/kanban/js/view.js +++ b/module/kanban/js/view.js @@ -883,6 +883,7 @@ $(function() { $('.icon-double-angle-down').attr('class', 'icon-double-angle-up'); $('.region').find('.kanban').show(); + url = createLink('kanban', 'sortRegion', 'regions=' + orders.join(',')); } if(sortType == 'board') { @@ -911,7 +912,7 @@ $(function() }, always: function(e) { - $cards.show(); + if(sortType == 'lane') $cards.show(); } }); }); diff --git a/module/kanban/model.php b/module/kanban/model.php index 74392caa6c..3c629f76fc 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -23,11 +23,8 @@ class kanbanModel extends model */ public function createGroup($kanbanID, $regionID) { - $maxOrder = $this->dao->select('MAX(`order`) AS maxOrder')->from(TABLE_KANBANORDER) - ->where('objectType')->eq('group') - ->andWhere('parentID')->eq($regionID) - ->andWhere('parentType')->eq('region') - ->andWhere('account')->eq('') + $maxOrder = $this->dao->select('MAX(`order`) AS maxOrder')->from(TABLE_KANBANGROUP) + ->where('region')->eq($regionID) ->fetch('maxOrder'); $order = $maxOrder ? $maxOrder + 1 : 1; @@ -35,14 +32,12 @@ class kanbanModel extends model $group = new stdclass(); $group->kanban = $kanbanID; $group->region = $regionID; + $group->order = $order; $this->dao->insert(TABLE_KANBANGROUP)->data($group)->autoCheck()->exec(); if(dao::isError()) return false; - $groupID = $this->dao->lastInsertID(); - $this->saveOrder($regionID, 'region', $groupID, 'group', '', $order); - - return $groupID; + return $this->dao->lastInsertID(); } /** @@ -80,15 +75,11 @@ class kanbanModel extends model if(!$region) { - $maxOrder = $this->dao->select('MAX(`order`) AS maxOrder')->from(TABLE_KANBANORDER) - ->where('objectType')->eq('region') - ->andWhere('parentID')->eq($kanban->id) - ->andWhere('parentType')->eq('kanban') - ->andWhere('account')->eq('') + $maxOrder = $this->dao->select('MAX(`order`) AS maxOrder')->from(TABLE_KANBANREGION) + ->where('kanban')->eq($kanban->id) ->fetch('maxOrder'); - $order = $maxOrder + 1; - + $order = $maxOrder + 1; $region = fixer::input('post') ->add('kanban', $kanban->id) ->add('space', $kanban->space) @@ -98,6 +89,7 @@ class kanbanModel extends model ->get(); } + $region->order = $order; $this->dao->insert(TABLE_KANBANREGION)->data($region) ->batchCheck($this->config->kanban->require->createregion, 'notempty') ->check('name', 'unique', "kanban = {$kanban->id} AND deleted = '0'") @@ -108,7 +100,6 @@ class kanbanModel extends model if(dao::isError()) return false; $this->loadModel('action')->create('kanbanRegion', $regionID, 'Created'); - $this->saveOrder($kanban->id, 'kanban', $regionID, 'region', $account, $order); if($copyRegionID) { @@ -181,11 +172,11 @@ class kanbanModel extends model $lane->type = 'common'; $lane->lastEditedTime = helper::now(); $lane->color = '#7ec5ff'; + $lane->order = 1; $this->dao->insert(TABLE_KANBANLANE)->data($lane)->exec(); $laneID = $this->dao->lastInsertId(); - $this->saveOrder($regionID, 'region', $laneID, 'lane', '', 1); return $laneID; } @@ -213,7 +204,6 @@ class kanbanModel extends model $this->createColumn($regionID, $column); $order ++; - //$this->saveOrder($regionID, 'region', $this->dao->lastInsertID(), 'column', '', $index); } return !dao::isError(); @@ -376,6 +366,7 @@ class kanbanModel extends model if(!dao::isError()) { $childColumnID = $this->dao->lastInsertID(); + if($i == 1) $this->dao->update(TABLE_KANBANCARD)->set('`column`')->eq($childColumnID)->where('`column`')->eq($columnID)->exec(); $this->dao->update(TABLE_KANBANCOLUMN)->set('type')->eq("column{$childColumnID}")->where('id')->eq($childColumnID)->exec(); $this->action->create('kanbanColumn', $childColumnID, 'created'); } @@ -445,33 +436,6 @@ class kanbanModel extends model return false; } - - /** - * Save kanban object order. - * - * @param int $parentID - * @param string $parentType - * @param int $objectID - * @param string $objectType - * @param string $account - * @param int $order - * @access public - * @return void - */ - public function saveOrder($parentID, $parentType, $objectID, $objectType, $account, $order) - { - $kanbanOrder = new stdclass(); - $kanbanOrder->parentID = $parentID; - $kanbanOrder->parentType = $parentType; - $kanbanOrder->objectID = $objectID; - $kanbanOrder->objectType = $objectType; - $kanbanOrder->account = $account; - $kanbanOrder->order = $order; - - $this->dao->insert(TABLE_KANBANORDER)->data($kanbanOrder)->exec(); - return !dao::isError(); - } - /** * Get kanban by id. * @@ -562,7 +526,7 @@ class kanbanModel extends model return $this->dao->select('id,name')->from(TABLE_KANBANREGION) ->where('kanban')->eq($kanbanID) ->andWhere('deleted')->eq('0') - ->orderBy('id_asc') + ->orderBy('order_asc') ->fetchPairs(); } @@ -950,7 +914,7 @@ class kanbanModel extends model if(!dao::isError()) { $spaceID = $this->dao->lastInsertID(); - $this->saveOrder(0, '', $spaceID, 'space', '', $spaceID); + $this->dao->update(TABLE_KANBANSPACE)->set('`order`')->eq($spaceID)->where('id')->eq($spaceID)->exec(); $this->file->saveUpload('kanbanspace', $spaceID); $this->file->updateObjectID($this->post->uid, $spaceID, 'kanbanspace'); @@ -1114,6 +1078,14 @@ class kanbanModel extends model $kanban = $this->loadModel('file')->processImgURL($kanban, $this->config->kanban->editor->create['id'], $this->post->uid); + if(!empty($kanban->space)) + { + $maxOrder = $this->dao->select('MAX(`order`) AS maxOrder')->from(TABLE_KANBAN) + ->where('space')->eq($kanban->space) + ->fetch('maxOrder'); + $kanban->order = $maxOrder + 1; + } + $this->dao->insert(TABLE_KANBAN)->data($kanban) ->autoCheck() ->batchCheck($this->config->kanban->create->requiredFields, 'notempty') @@ -1124,7 +1096,6 @@ class kanbanModel extends model $kanbanID = $this->dao->lastInsertID(); $kanban = $this->getByID($kanbanID); - $this->saveOrder(0, '', $kanbanID, 'kanban', '', $kanbanID); $this->createDefaultRegion($kanban); $this->file->saveUpload('kanban', $kanbanID); $this->file->updateObjectID($this->post->uid, $kanbanID, 'kanban'); @@ -1728,7 +1699,7 @@ class kanbanModel extends model } $cardID = (int)$cardID; - $oldCard = $this->getCardById($cardID); + $oldCard = $this->getCardByID($cardID); $now = helper::now(); $card = fixer::input('post') diff --git a/module/kanban/view/editcard.html.php b/module/kanban/view/editcard.html.php index 71c5f419f7..fed7d2c032 100644 --- a/module/kanban/view/editcard.html.php +++ b/module/kanban/view/editcard.html.php @@ -58,6 +58,10 @@ kanbancard->end;?> end) ? '' : $card->end, "class='form-control form-date'");?> + + kanbancard->estimate;?> + estimate, "class='form-control' placeholder='{$lang->kanbancard->lblHour}'");?> + kanbancard->pri;?> kanbancard->priList, $card->pri, "class='form-control'");?>