summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Api/App.php15
-rw-r--r--app/Api/Base.php4
-rw-r--r--app/Model/Color.php41
-rw-r--r--docs/api-json-rpc.markdown185
-rw-r--r--tests/functionals/UserApiTest.php25
5 files changed, 259 insertions, 11 deletions
diff --git a/app/Api/App.php b/app/Api/App.php
index 24da4dd9..9b3ceb94 100644
--- a/app/Api/App.php
+++ b/app/Api/App.php
@@ -19,4 +19,19 @@ class App extends \Core\Base
{
return APP_VERSION;
}
+
+ public function getDefaultTaskColor()
+ {
+ return $this->color->getDefaultColor();
+ }
+
+ public function getDefaultTaskColors()
+ {
+ return $this->color->getDefaultColors();
+ }
+
+ public function getColorList()
+ {
+ return $this->color->getList();
+ }
}
diff --git a/app/Api/Base.php b/app/Api/Base.php
index 723b60b7..17c7f79f 100644
--- a/app/Api/Base.php
+++ b/app/Api/Base.php
@@ -24,6 +24,9 @@ abstract class Base extends \Core\Base
private $both_allowed_procedures = array(
'getTimezone',
'getVersion',
+ 'getDefaultTaskColor',
+ 'getDefaultTaskColors',
+ 'getColorList',
'getProjectById',
'getTask',
'getTaskByReference',
@@ -67,6 +70,7 @@ abstract class Base extends \Core\Base
{
if (! empty($task)) {
$task['url'] = $this->helper->url->to('task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id']), '', true);
+ $task['color'] = $this->color->getColorProperties($task['color_id']);
}
return $task;
diff --git a/app/Model/Color.php b/app/Model/Color.php
index 73e5d629..6df7beb8 100644
--- a/app/Model/Color.php
+++ b/app/Model/Color.php
@@ -123,6 +123,22 @@ class Color extends Base
}
/**
+ * Get color properties
+ *
+ * @access public
+ * @param string $color_id
+ * @return array
+ */
+ public function getColorProperties($color_id)
+ {
+ if (isset($this->default_colors[$color_id])) {
+ return $this->default_colors[$color_id];
+ }
+
+ return $this->default_colors[$this->getDefaultColor()];
+ }
+
+ /**
* Get available colors
*
* @access public
@@ -151,6 +167,17 @@ class Color extends Base
}
/**
+ * Get the default colors
+ *
+ * @access public
+ * @return array
+ */
+ public function getDefaultColors()
+ {
+ return $this->default_colors;
+ }
+
+ /**
* Get Bordercolor from string
*
* @access public
@@ -159,11 +186,8 @@ class Color extends Base
*/
public function getBorderColor($color_id)
{
- if (isset($this->default_colors[$color_id])) {
- return $this->default_colors[$color_id]['border'];
- }
-
- return $this->default_colors[$this->getDefaultColor()]['border'];
+ $color = $this->getColorProperties($color_id);
+ return $color['border'];
}
/**
@@ -175,11 +199,8 @@ class Color extends Base
*/
public function getBackgroundColor($color_id)
{
- if (isset($this->default_colors[$color_id])) {
- return $this->default_colors[$color_id]['background'];
- }
-
- return $this->default_colors[$this->getDefaultColor()]['background'];
+ $color = $this->getColorProperties($color_id);
+ return $color['background'];
}
/**
diff --git a/docs/api-json-rpc.markdown b/docs/api-json-rpc.markdown
index 827f4099..ec638529 100644
--- a/docs/api-json-rpc.markdown
+++ b/docs/api-json-rpc.markdown
@@ -40,6 +40,8 @@ Almost the same thing as XML-RPC but with the JSON format.
We use the [version 2 of the protocol](http://www.jsonrpc.org/specification).
You must call the API with a `POST` HTTP request.
+Kanboard support batch requests, so you can make multiple API calls in a single HTTP request. It's particularly useful for mobile clients with higher network latency.
+
Authentication
--------------
@@ -295,6 +297,182 @@ Response example:
}
```
+### getDefaultTaskColors
+
+- Purpose: **Get all default task colors**
+- Parameters: None
+- Result on success: **Color properties**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getDefaultTaskColors",
+ "id": 2108929212
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 2108929212,
+ "result": {
+ "yellow": {
+ "name": "Yellow",
+ "background": "rgb(245, 247, 196)",
+ "border": "rgb(223, 227, 45)"
+ },
+ "blue": {
+ "name": "Blue",
+ "background": "rgb(219, 235, 255)",
+ "border": "rgb(168, 207, 255)"
+ },
+ "green": {
+ "name": "Green",
+ "background": "rgb(189, 244, 203)",
+ "border": "rgb(74, 227, 113)"
+ },
+ "purple": {
+ "name": "Purple",
+ "background": "rgb(223, 176, 255)",
+ "border": "rgb(205, 133, 254)"
+ },
+ "red": {
+ "name": "Red",
+ "background": "rgb(255, 187, 187)",
+ "border": "rgb(255, 151, 151)"
+ },
+ "orange": {
+ "name": "Orange",
+ "background": "rgb(255, 215, 179)",
+ "border": "rgb(255, 172, 98)"
+ },
+ "grey": {
+ "name": "Grey",
+ "background": "rgb(238, 238, 238)",
+ "border": "rgb(204, 204, 204)"
+ },
+ "brown": {
+ "name": "Brown",
+ "background": "#d7ccc8",
+ "border": "#4e342e"
+ },
+ "deep_orange": {
+ "name": "Deep Orange",
+ "background": "#ffab91",
+ "border": "#e64a19"
+ },
+ "dark_grey": {
+ "name": "Dark Grey",
+ "background": "#cfd8dc",
+ "border": "#455a64"
+ },
+ "pink": {
+ "name": "Pink",
+ "background": "#f48fb1",
+ "border": "#d81b60"
+ },
+ "teal": {
+ "name": "Teal",
+ "background": "#80cbc4",
+ "border": "#00695c"
+ },
+ "cyan": {
+ "name": "Cyan",
+ "background": "#b2ebf2",
+ "border": "#00bcd4"
+ },
+ "lime": {
+ "name": "Lime",
+ "background": "#e6ee9c",
+ "border": "#afb42b"
+ },
+ "light_green": {
+ "name": "Light Green",
+ "background": "#dcedc8",
+ "border": "#689f38"
+ },
+ "amber": {
+ "name": "Amber",
+ "background": "#ffe082",
+ "border": "#ffa000"
+ }
+ }
+}
+```
+
+### getDefaultTaskColor
+
+- Purpose: **Get default task color**
+- Parameters: None
+- Result on success: **color_id**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getDefaultTaskColor",
+ "id": 1144775215
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1144775215,
+ "result": "yellow"
+}
+```
+
+### getColorList
+
+- Purpose: **Get the list of task colors**
+- Parameters: none
+- Result on success: **Dictionary of color_id => color_name**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getColorList",
+ "id": 1677051386
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1677051386,
+ "result": {
+ "yellow": "Yellow",
+ "blue": "Blue",
+ "green": "Green",
+ "purple": "Purple",
+ "red": "Red",
+ "orange": "Orange",
+ "grey": "Grey",
+ "brown": "Brown",
+ "deep_orange": "Deep Orange",
+ "dark_grey": "Dark Grey",
+ "pink": "Pink",
+ "teal": "Teal",
+ "cyan": "Cyan",
+ "lime": "Lime",
+ "light_green": "Light Green",
+ "amber": "Amber"
+ }
+}
+```
+
### createProject
- Purpose: **Create a new project**
@@ -2045,7 +2223,12 @@ Response example:
"recurrence_basedate": "0",
"recurrence_parent": null,
"recurrence_child": null,
- "url": "http:\/\/127.0.0.1:8000\/?controller=task&action=show&task_id=1&project_id=1"
+ "url": "http:\/\/127.0.0.1:8000\/?controller=task&action=show&task_id=1&project_id=1",
+ "color": {
+ "name": "Yellow",
+ "background": "rgb(245, 247, 196)",
+ "border": "rgb(223, 227, 45)"
+ }
}
}
```
diff --git a/tests/functionals/UserApiTest.php b/tests/functionals/UserApiTest.php
index 6fe6dad6..e1ce1878 100644
--- a/tests/functionals/UserApiTest.php
+++ b/tests/functionals/UserApiTest.php
@@ -97,6 +97,26 @@ class UserApi extends PHPUnit_Framework_TestCase
$this->assertEquals('master', $this->user->getVersion());
}
+ public function testGetDefaultColor()
+ {
+ $this->assertEquals('yellow', $this->user->getDefaultTaskColor());
+ }
+
+ public function testGetDefaultColors()
+ {
+ $colors = $this->user->getDefaultTaskColors();
+ $this->assertNotEmpty($colors);
+ $this->assertArrayHasKey('red', $colors);
+ }
+
+ public function testGetColorList()
+ {
+ $colors = $this->user->getColorList();
+ $this->assertNotEmpty($colors);
+ $this->assertArrayHasKey('red', $colors);
+ $this->assertEquals('Red', $colors['red']);
+ }
+
public function testGetMe()
{
$profile = $this->user->getMe();
@@ -137,6 +157,11 @@ class UserApi extends PHPUnit_Framework_TestCase
$task = $this->user->getTask(1);
$this->assertNotEmpty($task);
$this->assertEquals('my user title', $task['title']);
+ $this->assertEquals('yellow', $task['color_id']);
+ $this->assertArrayHasKey('color', $task);
+ $this->assertArrayHasKey('name', $task['color']);
+ $this->assertArrayHasKey('border', $task['color']);
+ $this->assertArrayHasKey('background', $task['color']);
}
/**