* Add kanban space edit function.

This commit is contained in:
liumengyi
2021-12-09 08:59:40 +08:00
parent a0e40c020d
commit 7ea719984d
10 changed files with 280 additions and 26 deletions
+2 -1
View File
@@ -541,7 +541,8 @@ $lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->api = 'Interface|api|index|libID=%s&moduleID=%s&apiID=%s';
$lang->action->label->kanbancolumn = 'Kanban column|execution|kanban|execution=%s';
$lang->action->label->kanbanspace = 'Kanban Space|kanban|space|browseType=all';
$lang->action->label->kanbancolumn = 'Kanban Column|execution|kanban|execution=%s';
$lang->action->label->kanbanlane = 'Kanban Lane|execution|kanban|execution=%s&type=all';
$lang->action->label->mr = 'Merge Request|mr|view|id=%s';
+62 -12
View File
@@ -618,19 +618,69 @@ $lang->release->methodOrder[75] = 'notify';
/* Kanban */
$lang->resource->kanban = new stdclass();
$lang->resource->kanban->space = 'space';
$lang->resource->kanban->setLane = 'setLane';
$lang->resource->kanban->setColumn = 'setColumn';
$lang->resource->kanban->setWIP = 'setWIP';
$lang->resource->kanban->laneMove = 'laneMove';
$lang->resource->kanban->cardsSort = 'cardsSort';
$lang->resource->kanban->space = 'space';
$lang->resource->kanban->createSpace = 'createSpace';
$lang->resource->kanban->editSpace = 'editSpace';
$lang->resource->kanban->closeSpace = 'closeSpace';
$lang->resource->kanban->deleteSpace = 'deleteSpace';
$lang->resource->kanban->sortSpace = 'sortSpace';
$lang->resource->kanban->create = 'create';
$lang->resource->kanban->edit = 'edit';
$lang->resource->kanban->view = 'view';
$lang->resource->kanban->close = 'close';
$lang->resource->kanban->delete = 'delete';
$lang->resource->kanban->createRegion = 'createRegion';
$lang->resource->kanban->editRegion = 'editRegion';
$lang->resource->kanban->sortRegion = 'sortRegion';
$lang->resource->kanban->deleteRegion = 'deleteRegion';
$lang->resource->kanban->createLane = 'createLane';
$lang->resource->kanban->editLane = 'editLane';
$lang->resource->kanban->sortLane = 'sortLane';
$lang->resource->kanban->createColumn = 'createColumn';
$lang->resource->kanban->editColumn = 'editColumn';
$lang->resource->kanban->setWIP = 'setWIP';
$lang->resource->kanban->sortColumn = 'sortColumn';
$lang->resource->kanban->deleteColumn = 'deleteColumn';
$lang->resource->kanban->createCard = 'createCard';
$lang->resource->kanban->editCard = 'editCard';
$lang->resource->kanban->viewCard = 'viewCard';
$lang->resource->kanban->sortCard = 'sortCard';
$lang->resource->kanban->setLane = 'setLane';
$lang->resource->kanban->setColumn = 'setColumn';
$lang->resource->kanban->laneMove = 'laneMove';
$lang->resource->kanban->cardsSort = 'cardsSort';
$lang->kanban->methodOrder[5] = 'space';
$lang->kanban->methodOrder[10] = 'setLane';
$lang->kanban->methodOrder[15] = 'setColumn';
$lang->kanban->methodOrder[20] = 'setWIP';
$lang->kanban->methodOrder[25] = 'laneMove';
$lang->kanban->methodOrder[30] = 'cardsSort';
$lang->kanban->methodOrder[5] = 'space';
$lang->kanban->methodOrder[10] = 'createSpace';
$lang->kanban->methodOrder[15] = 'editSpace';
$lang->kanban->methodOrder[20] = 'closeSpace';
$lang->kanban->methodOrder[25] = 'deleteSpace';
$lang->kanban->methodOrder[30] = 'sortSpace';
$lang->kanban->methodOrder[35] = 'create';
$lang->kanban->methodOrder[40] = 'edit';
$lang->kanban->methodOrder[45] = 'view';
$lang->kanban->methodOrder[50] = 'close';
$lang->kanban->methodOrder[55] = 'delete';
$lang->kanban->methodOrder[60] = 'createRegion';
$lang->kanban->methodOrder[65] = 'editRegion';
$lang->kanban->methodOrder[70] = 'sortRegion';
$lang->kanban->methodOrder[75] = 'deleteRegion';
$lang->kanban->methodOrder[80] = 'createLane';
$lang->kanban->methodOrder[85] = 'editLane';
$lang->kanban->methodOrder[90] = 'sortLane';
$lang->kanban->methodOrder[95] = 'createColumn';
$lang->kanban->methodOrder[100] = 'editColumn';
$lang->kanban->methodOrder[105] = 'setWIP';
$lang->kanban->methodOrder[110] = 'sortColumn';
$lang->kanban->methodOrder[115] = 'deleteColumn';
$lang->kanban->methodOrder[120] = 'createCard';
$lang->kanban->methodOrder[125] = 'editCard';
$lang->kanban->methodOrder[130] = 'viewCard';
$lang->kanban->methodOrder[135] = 'sortCard';
$lang->kanban->methodOrder[140] = 'setLane';
$lang->kanban->methodOrder[145] = 'setColumn';
$lang->kanban->methodOrder[150] = 'laneMove';
$lang->kanban->methodOrder[155] = 'cardsSort';
/* Execution. */
$lang->resource->execution = new stdclass();
+3
View File
@@ -6,14 +6,17 @@ $config->kanban->setwip = new stdclass();
$config->kanban->setlane = new stdclass();
$config->kanban->setlaneColumn = new stdclass();
$config->kanban->createspace = new stdclass();
$config->kanban->editspace = new stdclass();
$config->kanban->setwip->requiredFields = 'limit';
$config->kanban->setlane->requiredFields = 'name,type';
$config->kanban->setlaneColumn->requiredFields = 'name';
$config->kanban->createspace->requiredFields = 'name,owner';
$config->kanban->editspace->requiredFields = 'name,owner';
$config->kanban->editor = new stdclass();
$config->kanban->editor->createspace = array('id' => 'desc', 'tools' => 'simpleTools');
$config->kanban->editor->editspace = array('id' => 'desc', 'tools' => 'simpleTools');
$config->kanban->default = new stdclass();
$config->kanban->default->story = new stdclass();
+27
View File
@@ -57,6 +57,33 @@ class kanban extends control
$this->display();
}
/**
* Edit a space.
*
* @param int $spaceID
* @access public
* @return void
*/
public function editSpace($spaceID)
{
if(!empty($_POST))
{
$changes = $this->kanban->updateSpace($spaceID);
if(dao::isError()) die(js::error(dao::getError()));
$actionID = $this->loadModel('action')->create('kanbanSpace', $spaceID, 'edited');
$this->action->logHistory($actionID, $changes);
die(js::closeModal('parent.parent', 'this', "function(){parent.parent.location.reload();}"));
}
$this->view->space = $this->kanban->getSpaceById($spaceID);
$this->view->users = $this->loadModel('user')->getPairs('noletter|noclosed');
$this->display();
}
/**
* Set WIP.
*
+29 -5
View File
@@ -1,9 +1,34 @@
<?php
$lang->kanban->space = 'Kanban Space';
$lang->kanban->create = 'Create Kanban';
$lang->kanban->createSpace = 'Create Space';
/* Actions. */
$lang->kanban->space = 'Kanban Space';
$lang->kanban->create = 'Create Kanban';
$lang->kanban->createSpace = 'Create Space';
$lang->kanban->editSpace = 'Edit Space';
$lang->kanban->closeSpace = 'Close Space';
$lang->kanban->deleteSpace = 'Delete Space';
$lang->kanban->sortSpace = 'Sort Space';
$lang->kanban->edit = 'Edit Kanban';
$lang->kanban->view = 'View Kanban';
$lang->kanban->close = 'Close Kanban';
$lang->kanban->delete = 'Delete Kanban';
$lang->kanban->createRegion = 'Create Region';
$lang->kanban->editRegion = 'Edit Region';
$lang->kanban->sortRegion = 'Sort Region';
$lang->kanban->deleteRegion = 'Delete Region';
$lang->kanban->createLane = 'Create Lane';
$lang->kanban->editLane = 'Edit Lane';
$lang->kanban->sortLane = 'Sort Lane';
$lang->kanban->createColumn = 'Create Column';
$lang->kanban->editColumn = 'Edit Column';
$lang->kanban->sortColumn = 'Sort Column';
$lang->kanban->deleteColumn = 'Delete Column';
$lang->kanban->createCard = 'Create Card';
$lang->kanban->editCard = 'Edit Card';
$lang->kanban->viewCard = 'View Card';
$lang->kanban->sortCard = 'Sort Card';
/* Field. */
/* Fields. */
$lang->kanban->spaceName = 'Space Name';
$lang->kanban->spaceDesc = 'Space Description';
$lang->kanban->owner = 'Owner';
@@ -14,7 +39,6 @@ $lang->kanbanspace = new stdclass();
$lang->kanbanspace->name = 'Name';
$lang->kanbanspace->owner = 'Owner';
$lang->kanban->spaceAclList[] = array();
$lang->kanban->spaceAclList['open'] = 'Open (Accessible with kanban view permissions)';
$lang->kanban->spaceAclList['private'] = 'Private (For the kanban owner and team members only)';
+28 -4
View File
@@ -1,9 +1,33 @@
<?php
$lang->kanban->space = '看板空间';
$lang->kanban->create = '创建看板';
$lang->kanban->createSpace = '创建空间';
/* Actions. */
$lang->kanban->space = '看板空间';
$lang->kanban->create = '创建看板';
$lang->kanban->createSpace = '创建空间';
$lang->kanban->editSpace = '设置空间';
$lang->kanban->closeSpace = '关闭空间';
$lang->kanban->deleteSpace = '删除空间';
$lang->kanban->sortSpace = '空间排序';
$lang->kanban->edit = '编辑看板';
$lang->kanban->view = '查看看板';
$lang->kanban->close = '关闭看板';
$lang->kanban->delete = '删除看板';
$lang->kanban->createRegion = '创建区域';
$lang->kanban->editRegion = '编辑区域';
$lang->kanban->sortRegion = '区域排序';
$lang->kanban->deleteRegion = '删除区域';
$lang->kanban->createLane = '创建泳道';
$lang->kanban->editLane = '删除泳道';
$lang->kanban->sortLane = '泳道排序';
$lang->kanban->createColumn = '创建看板列';
$lang->kanban->editColumn = '编辑看板列';
$lang->kanban->sortColumn = '看板列排序';
$lang->kanban->deleteColumn = '删除看板列';
$lang->kanban->createCard = '创建卡片';
$lang->kanban->editCard = '编辑卡片';
$lang->kanban->viewCard = '查看卡片';
$lang->kanban->sortCard = '卡片排序';
/* Field. */
/* Fields. */
$lang->kanban->spaceName = '空间名称';
$lang->kanban->spaceDesc = '空间描述';
$lang->kanban->owner = '负责人';
+46 -4
View File
@@ -170,6 +170,36 @@ class kanbanModel extends model
}
}
/**
* Update a space.
*
* @param int $spaceID
* @access public
* @return array
*/
public function updateSpace($spaceID)
{
$spaceID = (int)$spaceID;
$oldSpace = $this->dao->findById($spaceID)->from(TABLE_KANBANSPACE)->fetch();
$space = fixer::input('post')
->setDefault('lastEditedBy', $this->app->user->account)
->setDefault('lastEditedDate', helper::now())
->add('team', $this->post->mailto)
->join('whitelist', ',')
->join('team', ',')
->remove('uid,mailto,contactListMenu')
->get();
$this->dao->update(TABLE_KANBANSPACE)->data($space)
->autoCheck()
->batchCheck($this->config->kanban->editspace->requiredFields, 'notempty')
->where('id')->eq($spaceID)
->exec();
if(!dao::isError()) return common::createChanges($oldSpace, $space);
}
/**
* Add execution Kanban lanes and columns.
*
@@ -370,9 +400,9 @@ class kanbanModel extends model
/**
* Update kanban lane.
*
* @param int $executionID
* @param string $laneType
*
* @param int $executionID
* @param string $laneType
* @access public
* @return void
*/
@@ -380,7 +410,7 @@ class kanbanModel extends model
{
$lanes = $this->dao->select('*')->from(TABLE_KANBANLANE)
->where('execution')->eq($executionID)
->andWhere('type')->eq($laneType)
->andWhere('type')->eq($laneType)
->fetchAll('id');
foreach($lanes as $lane) $this->updateCards($lane);
@@ -772,6 +802,18 @@ class kanbanModel extends model
if($noExtra) $this->dao->update(TABLE_KANBANLANE)->set('order')->eq($laneOrder)->where('id')->eq($noExtra)->exec();
}
/**
* Get space by id.
*
* @param int $spaceID
* @access public
* @return array
*/
public function getSpaceById($spaceID)
{
return $this->dao->findById($spaceID)->from(TABLE_KANBANSPACE)->fetch();
}
/**
* Get column by id.
*
+39
View File
@@ -0,0 +1,39 @@
<?php
/**
* The control file of space module of ZenTaoPMS.
*
* @copyright Copyright 2009-2021 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Mengyi Liu <liumemgyi@easycorp.ltd>
* @package kanban
* @version $Id: control.php 4460 2021-12-08 11:03:02 $
* @link https://www.zentao.net
*/
class space extends control
{
/**
* create space.
*
* @access public
* @return void
*/
public function create()
{
if($_POST)
{
$spaceID = $this->kanban->createSpace();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($spaceID) $actionID = $this->loadModel('action')->create('space', $spaceID, 'opened');
}
$users = $this->user->getPairs('noclosed|nodeleted');
$this->view->title = $this->lang->kanban->spaceCreate;
$this->view->position[] = $this->lang->kanban->spaceCreate;
$this->view->users = $this->user->getPairs('noclosed|nodeleted');
$this->display();
}
}
+11
View File
@@ -0,0 +1,11 @@
<?php
$lang->space->create = '创建空间';
$lang->space->name ='空间名称';
$lang->space->owner ='负责人';
$lang->space->team ='团队成员';
$lang->space->desc ='空间描述';
$lang->space->acl ='访问控制';
$lang->space->aclList['private'] = '私有(只有看板空间负责人、团队成员可访问)';
$lang->space->aclList['open'] = '公开(有看板空间视图权限即可访问)';
+33
View File
@@ -0,0 +1,33 @@
<?php
/**
* The create file of spce module of ZenTaoPMS.
*
* @copyright Copyright 2009-2021 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Mengyi Liu <liumengyi@easycorp.ltd>
* @package space
* @version $Id: create.html.php 935 2021-12-08 10:49:24Z $
* @link https://www.zentao.net
*/
?>
<?php include '../../common/view/kindeditor.html.php';?>
<div id='mainContent' class='main-content'>
<div class='main-header'>
<h2>
<span><?php echo $lang->space->create;?></span>
</h2>
</div>
<form class='load-indicator main-form' method='post' target='hiddenwin'>
<table class='table table-form'>
<tbody>
<tr>
<th><?php echo $lang->space->name;?></th>
<td><?php echo html::input('name','',"class='form-control input-train-title' requird")?></td>
</tr>
<tr>
<th><?php echo $lang->space->owner;?></th>
</tr>
</tbody>
</table>
</form>
</div>