summaryrefslogtreecommitdiff
path: root/jsonrpc.php
diff options
context:
space:
mode:
Diffstat (limited to 'jsonrpc.php')
-rw-r--r--jsonrpc.php71
1 files changed, 71 insertions, 0 deletions
diff --git a/jsonrpc.php b/jsonrpc.php
index 03f007c2..a2106010 100644
--- a/jsonrpc.php
+++ b/jsonrpc.php
@@ -77,6 +77,77 @@ $server->bind('moveSwimlaneUp', $container['swimlane'], 'moveUp');
$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->bind('removeAction', $container['action'], 'remove');
+
+$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);
+});
+
+
+/**
* Project permissions procedures
*/
$server->bind('getMembers', $container['projectPermission'], 'getMembers');