diff --git a/module/kanban/config.php b/module/kanban/config.php index 1e81b7c2e2..ca74a4b0cd 100644 --- a/module/kanban/config.php +++ b/module/kanban/config.php @@ -14,6 +14,7 @@ $config->kanban->create = new stdclass(); $config->kanban->edit = new stdclass(); $config->kanban->createspace = new stdclass(); $config->kanban->editspace = new stdclass(); +$config->kanban->createregion = new stdclass(); $config->kanban->createcard = new stdclass(); $config->kanban->editcard = new stdclass(); $config->kanban->editregion = new stdclass(); @@ -26,6 +27,7 @@ $config->kanban->create->requiredFields = 'space,name'; $config->kanban->edit->requiredFields = 'space,name'; $config->kanban->createspace->requiredFields = 'name,owner'; $config->kanban->editspace->requiredFields = 'name,owner'; +$config->kanban->createregion->requiredFields = 'name'; $config->kanban->createcard->requiredFields = 'name'; $config->kanban->editcard->requiredFields = 'name'; $config->kanban->editregion->requiredFields = 'name'; diff --git a/module/kanban/control.php b/module/kanban/control.php index d88804a234..243640c570 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -288,6 +288,37 @@ class kanban extends control } /** + * Create a region. + * + * @param int $kanbanID + * @access public + * @return void + */ + public function createRegion($kanbanID) + { + if(!empty($_POST)) + { + $kanban = $this->kanban->getByID($kanbanID); + $copyRegionID = (int)$_POST['region']; + unset($_POST['region']); + + $regionID = $this->kanban->createRegion($kanban, '', $copyRegionID); + + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent')); + } + + $regions = $this->kanban->getRegionPairs($kanbanID); + $regionPairs = array(); + foreach($regions as $regionID => $region) + { + $regionPairs[$regionID] = $this->lang->kanban->copy . $region . $this->lang->kanban->styleCommon; + } + + $this->view->regions = array('custom' => $this->lang->kanban->custom) + $regionPairs; + $this->display(); + } + * Edit a region * * @param int $regionID @@ -537,6 +568,8 @@ class kanban extends control else { $this->kanban->delete(TABLE_KANBANCARD, $cardID); + + if(isonlybody()) die(js::reload('parent.parent')); die(js::reload('parent')); } } diff --git a/module/kanban/lang/en.php b/module/kanban/lang/en.php index 7d89641314..c13b3d9bd5 100644 --- a/module/kanban/lang/en.php +++ b/module/kanban/lang/en.php @@ -40,6 +40,9 @@ $lang->kanban->createColumnOnRight = 'Create Column On Right'; $lang->kanban->copyColumn = 'Copy Column'; $lang->kanban->archiveColumn = 'Archive Column'; $lang->kanban->spaceCommon = 'Kanban Space'; +$lang->kanban->styleCommon = 'Style'; +$lang->kanban->copy = 'Copy'; +$lang->kanban->custom = 'Custom'; /* Fields. */ $lang->kanban->space = 'Space'; @@ -229,6 +232,7 @@ $lang->kanbanlane->modeList['independent'] = 'Independent Kanban column is adopt $lang->kanbanregion = new stdclass(); $lang->kanbanregion->name = 'Region Name'; $lang->kanbanregion->default = 'Default Region'; +$lang->kanbanregion->style = 'Region Style'; $lang->kanbancard = new stdclass(); $lang->kanbancard->create = 'Create Card'; diff --git a/module/kanban/lang/zh-cn.php b/module/kanban/lang/zh-cn.php index d8933b8a30..d346371bad 100644 --- a/module/kanban/lang/zh-cn.php +++ b/module/kanban/lang/zh-cn.php @@ -40,6 +40,9 @@ $lang->kanban->createColumnOnRight = '右侧新增看板列'; $lang->kanban->copyColumn = '复制看板列'; $lang->kanban->archiveColumn = '归档看板列'; $lang->kanban->spaceCommon = '看板空间'; +$lang->kanban->styleCommon = '样式'; +$lang->kanban->copy = '复制'; +$lang->kanban->custom = '自定义'; /* Fields. */ $lang->kanban->space = '所属空间'; @@ -229,6 +232,7 @@ $lang->kanbanlane->modeList['independent'] = '采用独立的看板列'; $lang->kanbanregion = new stdclass(); $lang->kanbanregion->name = '区域名称'; $lang->kanbanregion->default = '默认区域'; +$lang->kanbanregion->style = '区域样式'; $lang->kanbancard = new stdclass(); $lang->kanbancard->create = '创建卡片'; diff --git a/module/kanban/model.php b/module/kanban/model.php index 0ac54e66b1..68801de276 100644 --- a/module/kanban/model.php +++ b/module/kanban/model.php @@ -13,32 +13,6 @@ getByID($kanbanID); - - $function = $type == 'default' ? 'createDefaultRegion' : 'createRegion'; - $regionID = $this->$function($kanban); - if(dao::isError()) return false; - - $groupID = $this->createGroup($kanban->id, $regionID); - if(dao::isError()) return false; - - $this->createDefaultLane($kanban, $regionID, $groupID); - if(dao::isError()) return false; - - $this->createDefaultColumns($kanban, $regionID, $groupID); - if(dao::isError()) return false; - } - /** * Create a kanban group. * @@ -95,10 +69,11 @@ class kanbanModel extends model * * @param object $kanban * @param object $region + * @param int $copyRegionID * @access public * @return int */ - public function createRegion($kanban, $region = null) + public function createRegion($kanban, $region = null, $copyRegionID = 0) { $account = $this->app->user->account; $order = 1; @@ -130,9 +105,61 @@ class kanbanModel extends model ->exec(); $regionID = $this->dao->lastInsertID(); + if(dao::isError()) return false; + $this->loadModel('action')->create('kanbanRegion', $regionID, 'Created'); $this->saveOrder($kanban->id, 'kanban', $regionID, 'region', $account, $order); + if($copyRegionID) + { + /* Gets the groups, lanes and columns of the replication region. */ + $copyGroups = $this->getGroupGroupByRegions($copyRegionID); + $copyLaneGroup = $this->getLaneGroupByRegions($copyRegionID); + $copyColumnGroup = $this->getColumnGroupByRegions($copyRegionID); + + /* Create groups, lanes, and columns. */ + foreach($copyGroups[$copyRegionID] as $copyGroupID => $copyGroup) + { + $newGroupID = $this->createGroup($kanban->id, $regionID); + if(dao::isError()) return false; + + $copyLanes = $copyLaneGroup[$copyGroupID]; + $copyColumns = $copyColumnGroup[$copyGroupID]; + foreach($copyLanes as $copyLane) + { + unset($copyLane->id); + unset($copyLane->actions); + $copyLane->region = $regionID; + $copyLane->group = $newGroupID; + $copyLane->lastEditedTime = helper::now(); + $this->createLane($kanban->id, $regionID, $copyLane); + if(dao::isError()) return false; + } + + foreach($copyColumns as $copyColumn) + { + unset($copyColumn->id); + unset($copyColumn->actions); + $copyColumn->region = $regionID; + $copyColumn->group = $newGroupID; + $this->createColumn($regionID, $copyColumn); + if(dao::isError()) return false; + } + } + } + else + { + $groupID = $this->createGroup($kanban->id, $regionID); + if(dao::isError()) return false; + + $this->createDefaultLane($kanban, $regionID, $groupID); + if(dao::isError()) return false; + + $this->createDefaultColumns($kanban, $regionID, $groupID); + if(dao::isError()) return false; + } + + return $regionID; } @@ -442,11 +469,11 @@ class kanbanModel extends model * * @param int $regionID * @access public - * @return array + * @return object */ - public function getRegionById($regionID) + public function getRegionByID($regionID) { - return $this->dao->findById($regionID)->from(TABLE_KANBANREGION)->fetch(); + return $this->dao->findByID($regionID)->from(TABLE_KANBANREGION)->fetch(); } /** @@ -477,7 +504,7 @@ class kanbanModel extends model return $this->dao->select('*')->from(TABLE_KANBANGROUP) ->where('region')->in($regions) ->orderBy('id_asc') - ->fetchGroup('region'); + ->fetchGroup('region', 'id'); } /** @@ -525,7 +552,7 @@ class kanbanModel extends model //->andWhere('archived')->eq('0') ->andWhere('region')->in($regions) ->orderBy('order') - ->fetchGroup('group', 'id'); + ->fetchGroup('group'); $actions = array('createColumn', 'copyColumn', 'editColumn', 'splitColumn', 'setWIP', 'archiveColumn', 'restoreColumn', 'deleteColumn', 'createCard', 'splitColumn'); @@ -1021,9 +1048,10 @@ class kanbanModel extends model if(!dao::isError()) { $kanbanID = $this->dao->lastInsertID(); + $kanban = $this->getByID($kanbanID); $this->saveOrder(0, '', $kanbanID, 'kanban', '', $kanbanID); - $this->initKanban($kanbanID); + $this->createDefaultRegion($kanban); $this->file->saveUpload('kanban', $kanbanID); $this->file->updateObjectID($this->post->uid, $kanbanID, 'kanban'); diff --git a/module/kanban/view/createregion.html.php b/module/kanban/view/createregion.html.php new file mode 100644 index 0000000000..bd50d0fdd1 --- /dev/null +++ b/module/kanban/view/createregion.html.php @@ -0,0 +1,39 @@ + + * @package kanban + * @version $Id: createregion.html.php 935 2021-12-15 16:23:24Z $ + * @link https://www.zentao.net + */ +?> + +