Merge pull-request #670
This commit is contained in:
@@ -248,7 +248,7 @@ class Action extends Base
|
|||||||
|
|
||||||
// $this->container['fileCache']->remove('proxy_action_getAll');
|
// $this->container['fileCache']->remove('proxy_action_getAll');
|
||||||
|
|
||||||
return true;
|
return $action_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1250,6 +1250,242 @@ Response example:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### getAvailableActions
|
||||||
|
|
||||||
|
- Purpose: **Get list of available actions**
|
||||||
|
- Parameters: none
|
||||||
|
- Result on success: **list of actions**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "getAvailableActions",
|
||||||
|
"id": 1433237746,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1433237746,
|
||||||
|
"result": {
|
||||||
|
"TaskLogMoveAnotherColumn" : "Add a comment logging moving the task between columns",
|
||||||
|
"TaskAssignColorUser" : "Assign a color to a specific user",
|
||||||
|
"TaskAssignCategoryColor" : "Assign automatically a category based on a color",
|
||||||
|
"TaskAssignColorCategory" : "Assign automatically a color based on a category",
|
||||||
|
"TaskAssignSpecificUser" : "Assign the task to a specific user",
|
||||||
|
"TaskAssignCurrentUser" : "Assign the task to the person who does the action",
|
||||||
|
"TaskAssignUser" : "Change the assignee based on an external username",
|
||||||
|
"TaskAssignCategoryLabel" : "Change the category based on an external label",
|
||||||
|
"TaskClose" : "Close a task",
|
||||||
|
"CommentCreation" : "Create a comment from an external provider",
|
||||||
|
"TaskCreation" : "Create a task from an external provider",
|
||||||
|
"TaskDuplicateAnotherProject" : "Duplicate the task to another project",
|
||||||
|
"TaskMoveAnotherProject" : "Move the task to another project",
|
||||||
|
"TaskOpen" : "Open a task"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### getAvailableEvents
|
||||||
|
|
||||||
|
- Purpose: **Get list of available events**
|
||||||
|
- Parameters: none
|
||||||
|
- Result on success: **list of events**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "getAvailableEvents",
|
||||||
|
"id": 1433237746,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1433237746,
|
||||||
|
"result": {
|
||||||
|
"bitbucket.webhook.commit" : "Bitbucket commit received",
|
||||||
|
"task.close" : "Closing a task",
|
||||||
|
"github.webhook.commit" : "Github commit received",
|
||||||
|
"github.webhook.issue.assignee" : "Github issue assignee change",
|
||||||
|
"github.webhook.issue.closed" : "Github issue closed",
|
||||||
|
"github.webhook.issue.commented" : "Github issue comment created",
|
||||||
|
"github.webhook.issue.label" : "Github issue label change",
|
||||||
|
"github.webhook.issue.opened" : "Github issue opened",
|
||||||
|
"github.webhook.issue.reopened" : "Github issue reopened",
|
||||||
|
"gitlab.webhook.commit" : "Gitlab commit received",
|
||||||
|
"gitlab.webhook.issue.closed" : "Gitlab issue closed",
|
||||||
|
"gitlab.webhook.issue.opened" : "Gitlab issue opened",
|
||||||
|
"task.move.column" : "Move a task to another column",
|
||||||
|
"task.open" : "Open a closed task",
|
||||||
|
"task.assignee_change" : "Task assignee change",
|
||||||
|
"task.create" : "Task creation",
|
||||||
|
"task.create_update" : "Task creation or modification",
|
||||||
|
"task.update" : "Task modification"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### getCompatibleEvents
|
||||||
|
|
||||||
|
- Purpose: **Get list of events compatible with an action**
|
||||||
|
- Parameters:
|
||||||
|
- **action_name** (string, required)
|
||||||
|
- Result on success: **list of events**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "getCompatibleEvents",
|
||||||
|
"id": 1433237746,
|
||||||
|
"params": [
|
||||||
|
"TaskAssignSpecificUser"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1433237746,
|
||||||
|
"result": {
|
||||||
|
"task.move.column" : "Move a task to another column",
|
||||||
|
"task.create_update" : "Task creation or modification",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### getActions
|
||||||
|
|
||||||
|
- Purpose: **Get list of actions for a project**
|
||||||
|
- Parameters:
|
||||||
|
- **project_id** (integer, required)
|
||||||
|
- Result on success: **list of actions info**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "getActions",
|
||||||
|
"id": 1433237746,
|
||||||
|
"params": [
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1433237746,
|
||||||
|
"result": [
|
||||||
|
{
|
||||||
|
"id" : "13",
|
||||||
|
"project_id" : "2",
|
||||||
|
"event_name" : "task.move.column",
|
||||||
|
"action_name" : "TaskAssignSpecificUser",
|
||||||
|
"params" : {
|
||||||
|
"column_id" : "5",
|
||||||
|
"user_id" : "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### createAction
|
||||||
|
|
||||||
|
- Purpose: **Create an action**
|
||||||
|
- Parameters:
|
||||||
|
- **project_id** (integer, required)
|
||||||
|
- **event_name** (string, required)
|
||||||
|
- **action_name** (string, required)
|
||||||
|
- **params** (list of string pairs, required)
|
||||||
|
- Result on success: **action_id**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "createAction",
|
||||||
|
"id": 1433237746,
|
||||||
|
"params": {
|
||||||
|
"project_id" : "2",
|
||||||
|
"event_name" : "task.move.column",
|
||||||
|
"action_name" : "TaskAssignSpecificUser",
|
||||||
|
"params" : {
|
||||||
|
"column_id" : "3",
|
||||||
|
"user_id" : "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1433237746,
|
||||||
|
"result": 14
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### removeAction
|
||||||
|
|
||||||
|
- Purpose: **Remove an action**
|
||||||
|
- Parameters:
|
||||||
|
- **action_id** (integer, required)
|
||||||
|
- Result on success: **true**
|
||||||
|
- Result on failure: **false**
|
||||||
|
|
||||||
|
Request example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "getAvailableEvents",
|
||||||
|
"id": 1433237746,
|
||||||
|
"params": [
|
||||||
|
"2",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": 1433237746,
|
||||||
|
"result": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### createTask
|
### createTask
|
||||||
|
|
||||||
- Purpose: **Create a new task**
|
- Purpose: **Create a new task**
|
||||||
|
|||||||
59
jsonrpc.php
59
jsonrpc.php
@@ -76,6 +76,65 @@ $server->bind('enableSwimlane', $container['swimlane'], 'enable');
|
|||||||
$server->bind('moveSwimlaneUp', $container['swimlane'], 'moveUp');
|
$server->bind('moveSwimlaneUp', $container['swimlane'], 'moveUp');
|
||||||
$server->bind('moveSwimlaneDown', $container['swimlane'], 'moveDown');
|
$server->bind('moveSwimlaneDown', $container['swimlane'], 'moveDown');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Actions procedures
|
||||||
|
*/
|
||||||
|
$server->bind('getAvailableActions', $container['action'], 'getAvailableActions');
|
||||||
|
$server->bind('getAvailableEvents', $container['action'], 'getAvailableEvents');
|
||||||
|
$server->bind('getCompatibleEvents', $container['action'], 'getCompatibleEvents');
|
||||||
|
$server->register('getActions', function($project_id) use ($container) {
|
||||||
|
$actions = $container['action']->getAllByProject($project_id);
|
||||||
|
foreach($actions as $index => $action) {
|
||||||
|
$params = array();
|
||||||
|
foreach($action['params'] as $param)
|
||||||
|
$params[$param['name']] = $param['value'];
|
||||||
|
$actions[$index]['params'] = $params;
|
||||||
|
}
|
||||||
|
return $actions;
|
||||||
|
});
|
||||||
|
$server->register('createAction', function($project_id, $event_name, $action_name, $params) use ($container) {
|
||||||
|
|
||||||
|
$values = array(
|
||||||
|
'project_id' => $project_id,
|
||||||
|
'event_name' => $event_name,
|
||||||
|
'action_name' => $action_name,
|
||||||
|
'params' => $params
|
||||||
|
);
|
||||||
|
|
||||||
|
list($valid,) = $container['action']->validateCreation($values);
|
||||||
|
if (! $valid) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check the action exists
|
||||||
|
if (! isset($container['action']->getAvailableActions()[$action_name])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check the event
|
||||||
|
$action = $container['action']->load($action_name, $project_id, $event_name);
|
||||||
|
if (! in_array($event_name, $action->getCompatibleEvents())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$required_params = $action->getActionRequiredParameters();
|
||||||
|
|
||||||
|
//Check missing parameters
|
||||||
|
foreach($required_params as $param => $value)
|
||||||
|
if (! isset($params[$param])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check extra parameters
|
||||||
|
foreach($params as $param => $value)
|
||||||
|
if (! isset($required_params[$param])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $container['action']->create($values);
|
||||||
|
});
|
||||||
|
$server->bind('removeAction', $container['action'], 'remove');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Project permissions procedures
|
* Project permissions procedures
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class ActionTest extends Base
|
|||||||
$this->assertEquals(1, $project->create(array('name' => 'unit_test')));
|
$this->assertEquals(1, $project->create(array('name' => 'unit_test')));
|
||||||
|
|
||||||
// We create a new action
|
// We create a new action
|
||||||
$this->assertTrue($action->create(array(
|
$this->assertEquals(1, $action->create(array(
|
||||||
'project_id' => 1,
|
'project_id' => 1,
|
||||||
'event_name' => Task::EVENT_MOVE_COLUMN,
|
'event_name' => Task::EVENT_MOVE_COLUMN,
|
||||||
'action_name' => 'TaskClose',
|
'action_name' => 'TaskClose',
|
||||||
@@ -78,14 +78,14 @@ class ActionTest extends Base
|
|||||||
$this->assertEquals(1, $c->create(array('name' => 'unit_test')));
|
$this->assertEquals(1, $c->create(array('name' => 'unit_test')));
|
||||||
|
|
||||||
// We create a new action
|
// We create a new action
|
||||||
$this->assertTrue($a->create(array(
|
$this->assertEquals(1, $a->create(array(
|
||||||
'project_id' => 1,
|
'project_id' => 1,
|
||||||
'event_name' => GithubWebhook::EVENT_ISSUE_OPENED,
|
'event_name' => GithubWebhook::EVENT_ISSUE_OPENED,
|
||||||
'action_name' => 'TaskCreation',
|
'action_name' => 'TaskCreation',
|
||||||
'params' => array()
|
'params' => array()
|
||||||
)));
|
)));
|
||||||
|
|
||||||
$this->assertTrue($a->create(array(
|
$this->assertEquals(2, $a->create(array(
|
||||||
'project_id' => 1,
|
'project_id' => 1,
|
||||||
'event_name' => GithubWebhook::EVENT_ISSUE_LABEL_CHANGE,
|
'event_name' => GithubWebhook::EVENT_ISSUE_LABEL_CHANGE,
|
||||||
'action_name' => 'TaskAssignCategoryLabel',
|
'action_name' => 'TaskAssignCategoryLabel',
|
||||||
@@ -95,7 +95,7 @@ class ActionTest extends Base
|
|||||||
)
|
)
|
||||||
)));
|
)));
|
||||||
|
|
||||||
$this->assertTrue($a->create(array(
|
$this->assertEquals(3, $a->create(array(
|
||||||
'project_id' => 1,
|
'project_id' => 1,
|
||||||
'event_name' => Task::EVENT_CREATE_UPDATE,
|
'event_name' => Task::EVENT_CREATE_UPDATE,
|
||||||
'action_name' => 'TaskAssignColorCategory',
|
'action_name' => 'TaskAssignColorCategory',
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ class ProjectDuplicationTest extends Base
|
|||||||
|
|
||||||
$this->assertEquals(1, $p->create(array('name' => 'P1')));
|
$this->assertEquals(1, $p->create(array('name' => 'P1')));
|
||||||
|
|
||||||
$this->assertTrue($a->create(array(
|
$this->assertEquals(1, $a->create(array(
|
||||||
'project_id' => 1,
|
'project_id' => 1,
|
||||||
'event_name' => Task::EVENT_MOVE_COLUMN,
|
'event_name' => Task::EVENT_MOVE_COLUMN,
|
||||||
'action_name' => 'TaskAssignCurrentUser',
|
'action_name' => 'TaskAssignCurrentUser',
|
||||||
@@ -186,7 +186,7 @@ class ProjectDuplicationTest extends Base
|
|||||||
$this->assertEquals(2, $c->create(array('name' => 'C2', 'project_id' => 1)));
|
$this->assertEquals(2, $c->create(array('name' => 'C2', 'project_id' => 1)));
|
||||||
$this->assertEquals(3, $c->create(array('name' => 'C3', 'project_id' => 1)));
|
$this->assertEquals(3, $c->create(array('name' => 'C3', 'project_id' => 1)));
|
||||||
|
|
||||||
$this->assertTrue($a->create(array(
|
$this->assertEquals(1, $a->create(array(
|
||||||
'project_id' => 1,
|
'project_id' => 1,
|
||||||
'event_name' => Task::EVENT_CREATE_UPDATE,
|
'event_name' => Task::EVENT_CREATE_UPDATE,
|
||||||
'action_name' => 'TaskAssignColorCategory',
|
'action_name' => 'TaskAssignColorCategory',
|
||||||
|
|||||||
Reference in New Issue
Block a user