summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/api-external-task-link-procedures.markdown221
-rw-r--r--doc/api-internal-task-link-procedures.markdown187
-rw-r--r--doc/api-json-rpc.markdown6
-rw-r--r--doc/api-link-procedures.markdown185
-rw-r--r--doc/api-project-file-procedures.markdown221
-rw-r--r--doc/api-project-procedures.markdown49
-rw-r--r--doc/api-subtask-time-tracking-procedures.markdown102
-rw-r--r--doc/api-task-file-procedures.markdown (renamed from doc/api-file-procedures.markdown)4
-rw-r--r--doc/creating-tasks.markdown19
-rw-r--r--doc/docker.markdown14
-rw-r--r--doc/env.markdown1
-rw-r--r--doc/fr_FR/creating-tasks.markdown14
-rw-r--r--doc/fr_FR/index.markdown1
-rw-r--r--doc/fr_FR/removing-projects.markdown10
-rw-r--r--doc/fr_FR/screenshots/task-creation-board.pngbin0 -> 3915 bytes
-rw-r--r--doc/fr_FR/screenshots/task-creation-form.pngbin0 -> 42123 bytes
-rw-r--r--doc/index.markdown2
-rw-r--r--doc/nice-urls.markdown18
-rw-r--r--doc/removing-projects.markdown10
-rw-r--r--doc/screenshots/project-remove.pngbin0 -> 4330 bytes
-rw-r--r--doc/screenshots/tags-board.pngbin0 -> 7405 bytes
-rw-r--r--doc/screenshots/tags-global.pngbin0 -> 9617 bytes
-rw-r--r--doc/screenshots/tags-projects.pngbin0 -> 13718 bytes
-rw-r--r--doc/screenshots/tags-search.pngbin0 -> 3904 bytes
-rw-r--r--doc/screenshots/tags-task.pngbin0 -> 4766 bytes
-rw-r--r--doc/screenshots/task-creation-board.pngbin0 -> 10242 bytes
-rw-r--r--doc/screenshots/task-creation-form.pngbin0 -> 34726 bytes
-rw-r--r--doc/tags.markdown28
-rw-r--r--doc/windows-iis-installation.markdown40
29 files changed, 896 insertions, 236 deletions
diff --git a/doc/api-external-task-link-procedures.markdown b/doc/api-external-task-link-procedures.markdown
new file mode 100644
index 00000000..85f67b60
--- /dev/null
+++ b/doc/api-external-task-link-procedures.markdown
@@ -0,0 +1,221 @@
+External Task Link API Procedures
+=================================
+
+## getExternalTaskLinkTypes
+
+- Purpose: **Get all registered external link providers**
+- Parameters: **none**
+- Result on success: **dict**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"getExternalTaskLinkTypes","id":477370568}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "auto": "Auto",
+ "attachment": "Attachment",
+ "file": "Local File",
+ "weblink": "Web Link"
+ },
+ "id": 477370568
+}
+```
+
+## getExternalTaskLinkProviderDependencies
+
+- Purpose: **Get available dependencies for a given provider**
+- Parameters:
+ - **providerName** (string, required)
+- Result on success: **dict**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"getExternalTaskLinkProviderDependencies","id":124790226,"params":["weblink"]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "related": "Related"
+ },
+ "id": 124790226
+}
+```
+
+## createExternalTaskLink
+
+- Purpose: **Create a new external link**
+- Parameters:
+ - **task_id** (integer, required)
+ - **url** (string, required)
+ - **dependency** (string, required)
+ - **type** (string, optional)
+ - **title** (string, optional)
+- Result on success: **link_id**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"createExternalTaskLink","id":924217495,"params":[9,"http:\/\/localhost\/document.pdf","related","attachment"]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": 1,
+ "id": 924217495
+}
+```
+
+## updateExternalTaskLink
+
+- Purpose: **Update external task link**
+- Parameters:
+ - **task_id** (integer, required)
+ - **link_id** (integer, required)
+ - **title** (string, required)
+ - **url** (string, required)
+ - **dependency** (string, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc":"2.0",
+ "method":"updateExternalTaskLink",
+ "id":1123562620,
+ "params": {
+ "task_id":9,
+ "link_id":1,
+ "title":"New title"
+ }
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": true,
+ "id": 1123562620
+}
+```
+
+## getExternalTaskLinkById
+
+- Purpose: **Get an external task link**
+- Parameters:
+ - **task_id** (integer, required)
+ - **link_id** (integer, required)
+- Result on success: **dict**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"getExternalTaskLinkById","id":2107066744,"params":[9,1]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "id": "1",
+ "link_type": "attachment",
+ "dependency": "related",
+ "title": "document.pdf",
+ "url": "http:\/\/localhost\/document.pdf",
+ "date_creation": "1466965256",
+ "date_modification": "1466965256",
+ "task_id": "9",
+ "creator_id": "0"
+ },
+ "id": 2107066744
+}
+```
+
+## getAllExternalTaskLinks
+
+- Purpose: **Get all external links attached to a task**
+- Parameters:
+ - **task_id** (integer, required)
+- Result on success: **list of external links**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"getAllExternalTaskLinks","id":2069307223,"params":[9]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "id": "1",
+ "link_type": "attachment",
+ "dependency": "related",
+ "title": "New title",
+ "url": "http:\/\/localhost\/document.pdf",
+ "date_creation": "1466965256",
+ "date_modification": "1466965256",
+ "task_id": "9",
+ "creator_id": "0",
+ "creator_name": null,
+ "creator_username": null,
+ "dependency_label": "Related",
+ "type": "Attachment"
+ }
+ ],
+ "id": 2069307223
+}
+```
+
+## removeExternalTaskLink
+
+- Purpose: **Remove an external link**
+- Parameters:
+ - **task_id** (integer, required)
+ - **link_id** (integer, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"removeExternalTaskLink","id":552055660,"params":[9,1]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": true,
+ "id": 552055660
+}
+```
diff --git a/doc/api-internal-task-link-procedures.markdown b/doc/api-internal-task-link-procedures.markdown
new file mode 100644
index 00000000..eca0d886
--- /dev/null
+++ b/doc/api-internal-task-link-procedures.markdown
@@ -0,0 +1,187 @@
+Internal Task Link API Procedures
+=================================
+
+## createTaskLink
+
+- Purpose: **Create a link between two tasks**
+- Parameters:
+ - **task_id** (integer, required)
+ - **opposite_task_id** (integer, required)
+ - **link_id** (integer, required)
+- Result on success: **task_link_id**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "createTaskLink",
+ "id": 509742912,
+ "params": [
+ 2,
+ 3,
+ 1
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 509742912,
+ "result": 1
+}
+```
+
+## updateTaskLink
+
+- Purpose: **Update task link**
+- Parameters:
+ - **task_link_id** (integer, required)
+ - **task_id** (integer, required)
+ - **opposite_task_id** (integer, required)
+ - **link_id** (integer, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "updateTaskLink",
+ "id": 669037109,
+ "params": [
+ 1,
+ 2,
+ 4,
+ 2
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 669037109,
+ "result": true
+}
+```
+
+## getTaskLinkById
+
+- Purpose: **Get a task link**
+- Parameters:
+ - **task_link_id** (integer, required)
+- Result on success: **task link properties**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getTaskLinkById",
+ "id": 809885202,
+ "params": [
+ 1
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 809885202,
+ "result": {
+ "id": "1",
+ "link_id": "1",
+ "task_id": "2",
+ "opposite_task_id": "3"
+ }
+}
+```
+
+## getAllTaskLinks
+
+- Purpose: **Get all links related to a task**
+- Parameters:
+ - **task_id** (integer, required)
+- Result on success: **list of task link**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getAllTaskLinks",
+ "id": 810848359,
+ "params": [
+ 2
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 810848359,
+ "result": [
+ {
+ "id": "1",
+ "task_id": "3",
+ "label": "relates to",
+ "title": "B",
+ "is_active": "1",
+ "project_id": "1",
+ "task_time_spent": "0",
+ "task_time_estimated": "0",
+ "task_assignee_id": "0",
+ "task_assignee_username": null,
+ "task_assignee_name": null,
+ "column_title": "Backlog"
+ }
+ ]
+}
+```
+
+## removeTaskLink
+
+- Purpose: **Remove a link between two tasks**
+- Parameters:
+ - **task_link_id** (integer, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeTaskLink",
+ "id": 473028226,
+ "params": [
+ 1
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 473028226,
+ "result": true
+}
+```
diff --git a/doc/api-json-rpc.markdown b/doc/api-json-rpc.markdown
index 0f922a7c..ab1056f0 100644
--- a/doc/api-json-rpc.markdown
+++ b/doc/api-json-rpc.markdown
@@ -58,8 +58,12 @@ Usage
- [Automatic Actions](api-action-procedures.markdown)
- [Tasks](api-task-procedures.markdown)
- [Subtasks](api-subtask-procedures.markdown)
-- [Files](api-file-procedures.markdown)
+- [Subtask Time Tracking](api-subtask-time-tracking-procedures.markdown)
+- [Task Files](api-task-file-procedures.markdown)
+- [Project Files](api-project-file-procedures.markdown)
- [Links](api-link-procedures.markdown)
+- [Internal Task Links](api-internal-task-link-procedures.markdown)
+- [External Task Links](api-external-task-link-procedures.markdown)
- [Comments](api-comment-procedures.markdown)
- [Users](api-user-procedures.markdown)
- [Groups](api-group-procedures.markdown)
diff --git a/doc/api-link-procedures.markdown b/doc/api-link-procedures.markdown
index 6113316f..44e78a2a 100644
--- a/doc/api-link-procedures.markdown
+++ b/doc/api-link-procedures.markdown
@@ -283,188 +283,3 @@ Response example:
"result": true
}
```
-
-## createTaskLink
-
-- Purpose: **Create a link between two tasks**
-- Parameters:
- - **task_id** (integer, required)
- - **opposite_task_id** (integer, required)
- - **link_id** (integer, required)
-- Result on success: **task_link_id**
-- Result on failure: **false**
-
-Request example:
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "createTaskLink",
- "id": 509742912,
- "params": [
- 2,
- 3,
- 1
- ]
-}
-```
-
-Response example:
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 509742912,
- "result": 1
-}
-```
-
-## updateTaskLink
-
-- Purpose: **Update task link**
-- Parameters:
- - **task_link_id** (integer, required)
- - **task_id** (integer, required)
- - **opposite_task_id** (integer, required)
- - **link_id** (integer, required)
-- Result on success: **true**
-- Result on failure: **false**
-
-Request example:
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "updateTaskLink",
- "id": 669037109,
- "params": [
- 1,
- 2,
- 4,
- 2
- ]
-}
-```
-
-Response example:
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 669037109,
- "result": true
-}
-```
-
-## getTaskLinkById
-
-- Purpose: **Get a task link**
-- Parameters:
- - **task_link_id** (integer, required)
-- Result on success: **task link properties**
-- Result on failure: **false**
-
-Request example:
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "getTaskLinkById",
- "id": 809885202,
- "params": [
- 1
- ]
-}
-```
-
-Response example:
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 809885202,
- "result": {
- "id": "1",
- "link_id": "1",
- "task_id": "2",
- "opposite_task_id": "3"
- }
-}
-```
-
-## getAllTaskLinks
-
-- Purpose: **Get all links related to a task**
-- Parameters:
- - **task_id** (integer, required)
-- Result on success: **list of task link**
-- Result on failure: **false**
-
-Request example:
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "getAllTaskLinks",
- "id": 810848359,
- "params": [
- 2
- ]
-}
-```
-
-Response example:
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 810848359,
- "result": [
- {
- "id": "1",
- "task_id": "3",
- "label": "relates to",
- "title": "B",
- "is_active": "1",
- "project_id": "1",
- "task_time_spent": "0",
- "task_time_estimated": "0",
- "task_assignee_id": "0",
- "task_assignee_username": null,
- "task_assignee_name": null,
- "column_title": "Backlog"
- }
- ]
-}
-```
-
-## removeTaskLink
-
-- Purpose: **Remove a link between two tasks**
-- Parameters:
- - **task_link_id** (integer, required)
-- Result on success: **true**
-- Result on failure: **false**
-
-Request example:
-
-```json
-{
- "jsonrpc": "2.0",
- "method": "removeTaskLink",
- "id": 473028226,
- "params": [
- 1
- ]
-}
-```
-
-Response example:
-
-```json
-{
- "jsonrpc": "2.0",
- "id": 473028226,
- "result": true
-}
-```
diff --git a/doc/api-project-file-procedures.markdown b/doc/api-project-file-procedures.markdown
new file mode 100644
index 00000000..fdc5da1a
--- /dev/null
+++ b/doc/api-project-file-procedures.markdown
@@ -0,0 +1,221 @@
+Project File API Procedures
+===========================
+
+## createProjectFile
+
+- Purpose: **Create and upload a new project attachment**
+- Parameters:
+ - **project_id** (integer, required)
+ - **filename** (integer, required)
+ - **blob** File content encoded in base64 (string, required)
+- Result on success: **file_id**
+- Result on failure: **false**
+- Note: **The maximum file size depends of your PHP configuration, this method should not be used to upload large files**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "createProjectFile",
+ "id": 94500810,
+ "params": [
+ 1,
+ "My file",
+ "cGxhaW4gdGV4dCBmaWxl"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 94500810,
+ "result": 1
+}
+```
+
+## getAllProjectFiles
+
+- Purpose: **Get all files attached to a project**
+- Parameters:
+ - **project_id** (integer, required)
+- Result on success: **list of files**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getAllProjectFiles",
+ "id": 1880662820,
+ "params": {
+ "project_id": 1
+ }
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1880662820,
+ "result": [
+ {
+ "id": "1",
+ "name": "My file",
+ "path": "1\/1\/0db4d0a897a4c852f6e12f0239d4805f7b4ab596",
+ "is_image": "0",
+ "project_id": "1",
+ "date": "1432509941",
+ "user_id": "0",
+ "size": "15",
+ "username": null,
+ "user_name": null
+ }
+ ]
+}
+```
+
+## getProjectFile
+
+- Purpose: **Get file information**
+- Parameters:
+ - **project_id** (integer, required)
+ - **file_id** (integer, required)
+- Result on success: **file properties**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getProjectFile",
+ "id": 318676852,
+ "params": [
+ "42",
+ "1"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 318676852,
+ "result": {
+ "id": "1",
+ "name": "My file",
+ "path": "1\/1\/0db4d0a897a4c852f6e12f0239d4805f7b4ab596",
+ "is_image": "0",
+ "project_id": "1",
+ "date": "1432509941",
+ "user_id": "0",
+ "size": "15"
+ }
+}
+```
+
+## downloadProjectFile
+
+- Purpose: **Download project file contents (encoded in base64)**
+- Parameters:
+ - **project_id** (integer, required)
+ - **file_id** (integer, required)
+- Result on success: **base64 encoded string**
+- Result on failure: **empty string**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "downloadProjectFile",
+ "id": 235943344,
+ "params": [
+ "1",
+ "1"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 235943344,
+ "result": "cGxhaW4gdGV4dCBmaWxl"
+}
+```
+
+## removeProjectFile
+
+- Purpose: **Remove a file associated to a project**
+- Parameters:
+ - **project_id** (integer, required)
+ - **file_id** (integer, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeProjectFile",
+ "id": 447036524,
+ "params": [
+ "1",
+ "1"
+ ]
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 447036524,
+ "result": true
+}
+```
+
+## removeAllProjectFiles
+
+- Purpose: **Remove all files associated to a project**
+- Parameters:
+ - **project_id** (integer, required)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "removeAllProjectFiles",
+ "id": 593312993,
+ "params": {
+ "project_id": 1
+ }
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 593312993,
+ "result": true
+}
+```
diff --git a/doc/api-project-procedures.markdown b/doc/api-project-procedures.markdown
index d375852c..09000e68 100644
--- a/doc/api-project-procedures.markdown
+++ b/doc/api-project-procedures.markdown
@@ -133,6 +133,55 @@ Response example:
}
```
+## getProjectByIdentifier
+
+- Purpose: **Get project information**
+- Parameters:
+ - **identifier** (string, required)
+- Result on success: **project properties**
+- Result on failure: **null**
+
+Request example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "getProjectByIdentifier",
+ "id": 1620253806,
+ "params": {
+ "identifier": "TEST"
+ }
+}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1620253806,
+ "result": {
+ "id": "1",
+ "name": "Test",
+ "is_active": "1",
+ "token": "",
+ "last_modified": "1436119135",
+ "is_public": "0",
+ "is_private": "0",
+ "is_everybody_allowed": "0",
+ "default_swimlane": "Default swimlane",
+ "show_default_swimlane": "1",
+ "description": "test",
+ "identifier": "TEST",
+ "url": {
+ "board": "http:\/\/127.0.0.1:8000\/?controller=board&action=show&project_id=1",
+ "calendar": "http:\/\/127.0.0.1:8000\/?controller=calendar&action=show&project_id=1",
+ "list": "http:\/\/127.0.0.1:8000\/?controller=listing&action=show&project_id=1"
+ }
+ }
+}
+```
+
## getAllProjects
- Purpose: **Get all available projects**
diff --git a/doc/api-subtask-time-tracking-procedures.markdown b/doc/api-subtask-time-tracking-procedures.markdown
new file mode 100644
index 00000000..67447623
--- /dev/null
+++ b/doc/api-subtask-time-tracking-procedures.markdown
@@ -0,0 +1,102 @@
+Subtask Time Tracking API procedures
+====================================
+
+## hasSubtaskTimer
+
+- Purpose: **Check if a timer is started for the given subtask and user**
+- Parameters:
+ - **subtask_id** (integer, required)
+ - **user_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"hasSubtaskTimer","id":1786995697,"params":[2,4]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": true,
+ "id": 1786995697
+}
+```
+
+## setSubtaskStartTime
+
+- Purpose: **Start subtask timer for a user**
+- Parameters:
+ - **subtask_id** (integer, required)
+ - **user_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"setSubtaskStartTime","id":1168991769,"params":[2,4]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": true,
+ "id": 1168991769
+}
+```
+
+## setSubtaskEndTime
+
+- Purpose: **Stop subtask timer for a user**
+- Parameters:
+ - **subtask_id** (integer, required)
+ - **user_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"setSubtaskEndTime","id":1026607603,"params":[2,4]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": true,
+ "id": 1026607603
+}
+```
+
+## getSubtaskTimeSpent
+
+- Purpose: **Get time spent on a subtask for a user**
+- Parameters:
+ - **subtask_id** (integer, required)
+ - **user_id** (integer, optional)
+- Result on success: **number of hours**
+- Result on failure: **false**
+
+Request example:
+
+```json
+{"jsonrpc":"2.0","method":"getSubtaskTimeSpent","id":738527378,"params":[2,4]}
+```
+
+Response example:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": 1.5,
+ "id": 738527378
+}
+```
diff --git a/doc/api-file-procedures.markdown b/doc/api-task-file-procedures.markdown
index 930be733..51840bea 100644
--- a/doc/api-file-procedures.markdown
+++ b/doc/api-task-file-procedures.markdown
@@ -1,5 +1,5 @@
-API File Procedures
-===================
+Task File API Procedures
+========================
## createTaskFile
diff --git a/doc/creating-tasks.markdown b/doc/creating-tasks.markdown
index 2ebdbb9c..99dce713 100644
--- a/doc/creating-tasks.markdown
+++ b/doc/creating-tasks.markdown
@@ -3,25 +3,28 @@ Creating Tasks
From the board, click on the plus sign next to the column name:
-![Task creation from the board](https://kanboard.net/screenshots/documentation/task-creation-board.png)
+![Task creation from the board](screenshots/task-creation-board.png)
Then the task creation form appears:
-![Task creation form](https://kanboard.net/screenshots/documentation/task-creation-form.png)
-
-The only mandatory field is the title.
+![Task creation form](screenshots/task-creation-form.png)
Field description:
- **Title**: The title of your task, which will be displayed on the board.
-- **Description**: Allow you to add more information about the task, the content can be written in [Markdown](https://kanboard.net/documentation/syntax-guide).
+- **Description**: Description that use the [Markdown](syntax-guide.markdown) format.
+- **Tags**: The list of tags associated to tasks.
- **Create another task**: Check this box if you want to create a similar task (some fields will be pre-filled).
+- **Color**: Choose the color of the card.
- **Assignee**: The person that will work on the task.
-- **Category**: Only one category can be assigned to a task.
+- **Category**: Only one category can be assigned to a task (visible only if the projects have categories).
- **Column**: The column where the task will be created, your task will be positioned at the bottom.
-- **Color**: Choose the color of the card.
+- **Priority**: Task priority, the range can be defined in the project settings, default values are P0 to P3.
- **Complexity**: Used in agile project management (Scrum), the complexity or story points is a number that tells the team how hard the story is. Often, people use the Fibonacci series.
-- **Original Estimate**: Estimation in hours to complete the tasks.
+- **Reference**: External ID for the task, for example it can be ticket number that come from another system
+- **Original Estimate**: Estimation in hours to complete the task.
+- **Time Spent**: Time spent working on the task.
+- **Start Date**: This is a date time field.
- **Due Date**: Overdue tasks will have a red due date and upcoming due dates will be black on the board. Several date format are accepted in addition to the date picker.
With the preview link, you can see the task description converted from the Markdown syntax.
diff --git a/doc/docker.markdown b/doc/docker.markdown
index 3f13e954..e55130e5 100644
--- a/doc/docker.markdown
+++ b/doc/docker.markdown
@@ -3,17 +3,17 @@ How to run Kanboard with Docker?
Kanboard can run easily with [Docker](https://www.docker.com).
-The image size is approximately **50MB** and contains:
+The image size is approximately **70MB** and contains:
- [Alpine Linux](http://alpinelinux.org/)
- The [process manager S6](http://skarnet.org/software/s6/)
- Nginx
-- PHP-FPM
+- PHP 7
The Kanboard cronjob is also running everyday at midnight.
URL rewriting is enabled in the included config file.
-When the container is running, the memory utilization is around **20MB**.
+When the container is running, the memory utilization is around **30MB**.
Use the stable version
----------------------
@@ -64,8 +64,8 @@ Volumes
You can attach 2 volumes to your container:
-- Data folder: `/var/www/kanboard/data`
-- Plugins folder: `/var/www/kanboard/plugins`
+- Data folder: `/var/www/app/data`
+- Plugins folder: `/var/www/app/plugins`
Use the flag `-v` to mount a volume on the host machine like described in [official Docker documentation](https://docs.docker.com/engine/userguide/containers/dockervolumes/).
@@ -84,8 +84,8 @@ The list of environment variables is available on [this page](env.markdown).
Config files
------------
-- The container already include a custom config file located at `/var/www/kanboard/config.php`.
-- You can store your own config file on the data volume: `/var/www/kanboard/data/config.php`.
+- The container already include a custom config file located at `/var/www/app/config.php`.
+- You can store your own config file on the data volume: `/var/www/app/data/config.php`.
References
----------
diff --git a/doc/env.markdown b/doc/env.markdown
index 28f14b18..902066d7 100644
--- a/doc/env.markdown
+++ b/doc/env.markdown
@@ -7,4 +7,3 @@ Environment variables maybe useful when Kanboard is deployed as container (Docke
|---------------|---------------------------------------------------------------------------------------------------------------------------------|
| DATABASE_URL | `[database type]://[username]:[password]@[host]:[port]/[database name]`, example: `postgres://foo:foo@myserver:5432/kanboard` |
| DEBUG | Enable/Disable debug mode: "true" or "false" |
-| LOG_DRIVER | Logging driver: stdout, stderr, file or syslog |
diff --git a/doc/fr_FR/creating-tasks.markdown b/doc/fr_FR/creating-tasks.markdown
index 9b7fa274..c3cfed01 100644
--- a/doc/fr_FR/creating-tasks.markdown
+++ b/doc/fr_FR/creating-tasks.markdown
@@ -3,25 +3,33 @@ Créer des tâches
Depuis le tableau, cliquez sur le signe plus + à côté du nom de la colonne :
-![Création de tâche à partir du tableau](https://kanboard.net/screenshots/documentation/task-creation-board.png)
+![Création de tâche à partir du tableau](screenshots/task-creation-board.png)
Le formulaire de création de tâche apparaît :
-![Formulaire de création de tâche](https://kanboard.net/screenshots/documentation/task-creation-form.png)
+![Formulaire de création de tâche](screenshots/task-creation-form.png)
Le seul champ obligatoire est le titre.
Description des champs :
- **Titre** : le titre de votre tâche, tel qu'il sera affiché sur le tableau.
-- **Description** : vous permet d'ajouter davantage d'informations sur la tâche. Le contenu peut être écrit en [Markdown](https://kanboard.net/documentation/syntax-guide).
+- **Description** : vous permet d'ajouter davantage d'informations sur la tâche. Le contenu peut être écrit en [Markdown](syntax-guide.markdown).
+- **Libellés**: Liste de libellés associés à la tâche.
- **Créer une autre tâche** : cochez cette case si vous souhaitez créer une tâche similaire (les champs seront pré-remplis).
- **Assigné** : la personne qui va travailler sur la tâche.
- **Catégorie** : une seule catégorie peut être assignée à une tâche.
- **Colonne** : la colonne dans laquelle la tâche sera créée. La tâche sera positionnée en bas de cette colonne.
- **Couleur** : Choisissez la couleur de la carte.
- **Complexité** : utilisée dans la gestion de projet agile (Scrum), la complexité des points d'étape est un nombre qui montre à l'équipe le degré de difficulté de l'avancement du projet. Les utilisateurs se servent souvent des suites de Fibonacci.
+- **Référence** : Identifiant externe, par exemple cela peut-être un numéro de ticket qui vient d'un système externe.
- **Estimation originale** : estimation du nombre d'heures nécessaire pour terminer les tâches.
- **Date d'échéance** : les tâches dont la date d'échéance est dépassée auront une date d'échéance en rouge et les dates suivantes seront en noir dans le tableau. Plusieurs formats de date sont acceptés, outre le sélecteur de date.
Avec le lien d'aperçu (« Prévisualiser »), vous pouvez voir la description de la tâche convertie depuis la syntaxe Markdown.
+
+Vous créer une tâche de plusieurs manières :
+
+- Avec l'icône avec le signe plus sur le board
+- Avec le raccourci clavier "n"
+- Depuis le menu déroulant en haut à gauche
diff --git a/doc/fr_FR/index.markdown b/doc/fr_FR/index.markdown
index f74c3fce..a73c5c23 100644
--- a/doc/fr_FR/index.markdown
+++ b/doc/fr_FR/index.markdown
@@ -22,6 +22,7 @@ Utiliser Kanboard
- [Types de projets](project-types.markdown)
- [Créer des projets](creating-projects.markdown)
- [Modifier des projets](editing-projects.markdown)
+- [Supprimer des projets](removing-projects.markdown)
- [Partager des tableaux et des tâches](sharing-projects.markdown)
- [Actions automatiques](automatic-actions.markdown)
- [Permissions des projets](project-permissions.markdown)
diff --git a/doc/fr_FR/removing-projects.markdown b/doc/fr_FR/removing-projects.markdown
new file mode 100644
index 00000000..1b64191e
--- /dev/null
+++ b/doc/fr_FR/removing-projects.markdown
@@ -0,0 +1,10 @@
+Supprimer des projets
+=====================
+
+Pour supprimer un projet, vous devez être gestionnaire du projet ou administrateur.
+
+Aller dans les **Préférences du projet**, depuis le menu à gauche, en bas, choisissez **Supprimer**.
+
+![Supprimer un Projet](screenshots/project-remove.png)
+
+Supprimer un projet, supprime également toutes les tâches qui appartiennent à ce projet.
diff --git a/doc/fr_FR/screenshots/task-creation-board.png b/doc/fr_FR/screenshots/task-creation-board.png
new file mode 100644
index 00000000..18f13b3f
--- /dev/null
+++ b/doc/fr_FR/screenshots/task-creation-board.png
Binary files differ
diff --git a/doc/fr_FR/screenshots/task-creation-form.png b/doc/fr_FR/screenshots/task-creation-form.png
new file mode 100644
index 00000000..5e4b455e
--- /dev/null
+++ b/doc/fr_FR/screenshots/task-creation-form.png
Binary files differ
diff --git a/doc/index.markdown b/doc/index.markdown
index c1e9a506..bc3e8a32 100644
--- a/doc/index.markdown
+++ b/doc/index.markdown
@@ -22,6 +22,7 @@ Using Kanboard
- [Project Types](project-types.markdown)
- [Creating projects](creating-projects.markdown)
- [Editing projects](editing-projects.markdown)
+- [Removing projects](removing-projects.markdown)
- [Sharing boards and tasks](sharing-projects.markdown)
- [Automatic actions](automatic-actions.markdown)
- [Project permissions](project-permissions.markdown)
@@ -46,6 +47,7 @@ Using Kanboard
- [Subtasks](subtasks.markdown)
- [Analytics for tasks](analytics-tasks.markdown)
- [User mentions](user-mentions.markdown)
+- [Tags](tags.markdown)
### Working with users and groups
diff --git a/doc/nice-urls.markdown b/doc/nice-urls.markdown
index 9fbb3510..bfea719d 100644
--- a/doc/nice-urls.markdown
+++ b/doc/nice-urls.markdown
@@ -88,18 +88,25 @@ define('ENABLE_URL_REWRITE', true);
Adapt the example above according to your own configuration.
IIS configuration example
----------------------------
+-------------------------
-Create a web.config in you installation folder:
+1. Download and install the Rewrite module for IIS: [Download link](http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module)
+2. Create a web.config in you installation folder:
```xml
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<configuration>
<system.webServer>
+ <defaultDocument>
+ <files>
+ <clear />
+ <add value="index.php" />
+ </files>
+ </defaultDocument>
<rewrite>
<rules>
- <rule name="Imported Rule 1" stopProcessing="true">
- <match url="^" ignoreCase="false" />
+ <rule name="Kanboard URL Rewrite" stopProcessing="true">
+ <match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
@@ -109,7 +116,6 @@ Create a web.config in you installation folder:
</rewrite>
</system.webServer>
</configuration>
-
```
In your Kanboard `config.php`:
diff --git a/doc/removing-projects.markdown b/doc/removing-projects.markdown
new file mode 100644
index 00000000..f9e622cb
--- /dev/null
+++ b/doc/removing-projects.markdown
@@ -0,0 +1,10 @@
+Removing Projects
+=================
+
+To remove a project, you must be manager of the project or administrator.
+
+Go to the **"Project settings"**, and from the menu on the left, at the bottom, choose **"Remove"**.
+
+![Removing Projects](screenshots/project-remove.png)
+
+Removing a project remove all tasks that belongs to this project.
diff --git a/doc/screenshots/project-remove.png b/doc/screenshots/project-remove.png
new file mode 100644
index 00000000..d1c33cc1
--- /dev/null
+++ b/doc/screenshots/project-remove.png
Binary files differ
diff --git a/doc/screenshots/tags-board.png b/doc/screenshots/tags-board.png
new file mode 100644
index 00000000..1a7f710d
--- /dev/null
+++ b/doc/screenshots/tags-board.png
Binary files differ
diff --git a/doc/screenshots/tags-global.png b/doc/screenshots/tags-global.png
new file mode 100644
index 00000000..f5059ae8
--- /dev/null
+++ b/doc/screenshots/tags-global.png
Binary files differ
diff --git a/doc/screenshots/tags-projects.png b/doc/screenshots/tags-projects.png
new file mode 100644
index 00000000..2e08ce90
--- /dev/null
+++ b/doc/screenshots/tags-projects.png
Binary files differ
diff --git a/doc/screenshots/tags-search.png b/doc/screenshots/tags-search.png
new file mode 100644
index 00000000..eab1ad80
--- /dev/null
+++ b/doc/screenshots/tags-search.png
Binary files differ
diff --git a/doc/screenshots/tags-task.png b/doc/screenshots/tags-task.png
new file mode 100644
index 00000000..c9c8b2f7
--- /dev/null
+++ b/doc/screenshots/tags-task.png
Binary files differ
diff --git a/doc/screenshots/task-creation-board.png b/doc/screenshots/task-creation-board.png
new file mode 100644
index 00000000..456dff0b
--- /dev/null
+++ b/doc/screenshots/task-creation-board.png
Binary files differ
diff --git a/doc/screenshots/task-creation-form.png b/doc/screenshots/task-creation-form.png
new file mode 100644
index 00000000..d1e5d24e
--- /dev/null
+++ b/doc/screenshots/task-creation-form.png
Binary files differ
diff --git a/doc/tags.markdown b/doc/tags.markdown
new file mode 100644
index 00000000..26b3169d
--- /dev/null
+++ b/doc/tags.markdown
@@ -0,0 +1,28 @@
+Tags
+====
+
+With Kanboard, you can associate one or many tags to a task.
+You can define tags globally for all projects or only for a specific project.
+
+![Tags on the board](screenshots/tags-board.png)
+
+From the task form, you can enter the desired tags:
+
+![Tags form](screenshots/tags-task.png)
+
+The auto-completion form will show up to suggest available tags.
+
+You can also create tags directly from the task form.
+By default, when you create tags from a task form they are associated to the current project:
+
+![Project Tags](screenshots/tags-projects.png)
+
+All tags can be managed in the project settings.
+
+To define tags globally for all projects, go to the application settings:
+
+![Global Tags](screenshots/tags-global.png)
+
+To search tasks based on tags, just use the attribute "tag":
+
+![Search Tags](screenshots/tags-search.png)
diff --git a/doc/windows-iis-installation.markdown b/doc/windows-iis-installation.markdown
index bd4607de..26ce178f 100644
--- a/doc/windows-iis-installation.markdown
+++ b/doc/windows-iis-installation.markdown
@@ -12,7 +12,10 @@ PHP installation
- [Microsoft IIS 7.0 and later](http://php.net/manual/en/install.windows.iis7.php)
- [PHP for Windows is available here](http://windows.php.net/download/)
-Edit the `php.ini`, uncomment these PHP modules:
+
+### PHP.ini
+
+You need at least, these extensions in your `php.ini`:
```ini
extension=php_gd2.dll
@@ -22,7 +25,9 @@ extension=php_openssl.dll
extension=php_pdo_sqlite.dll
```
-Set the time zone:
+The complete list of required PHP extensions is available on the [requirements page](requirements.markdown)
+
+Do not forget to set the time zone:
```ini
date.timezone = America/Montreal
@@ -30,27 +35,21 @@ date.timezone = America/Montreal
The list of supported time zones can be found in the [PHP documentation](http://php.net/manual/en/timezones.america.php).
-Check if PHP runs correctly:
-
-Go the IIS document root `C:\inetpub\wwwroot` and create a file `phpinfo.php`:
-
-```php
-<?php
-
-phpinfo();
-
-?>
-```
-
-Open a browser at `http://localhost/phpinfo.php` and you should see the current PHP settings.
-If you got an error 500, something is not correctly done in your installation.
-
Notes:
- If you use PHP < 5.4, you have to enable the short tags in your php.ini
- Don't forget to enable the required php extensions mentioned above
- If you got an error about "the library MSVCP110.dll is missing", you probably need to download the Visual C++ Redistributable for Visual Studio from the Microsoft website.
+IIS Modules
+-----------
+
+The Kanboard archive contains a `web.config` file to enable [URL rewriting](nice-urls.markdown).
+This configuration require the [Rewrite module for IIS](http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module).
+
+If you don't have the rewrite module, you will get an internal server error (500) from IIS.
+If you don't want to have Kanboard with nice URLs, you can remove the file `web.config`.
+
Kanboard installation
---------------------
@@ -59,12 +58,7 @@ Kanboard installation
- Make sure the directory `data` is writable by the IIS user
- Open your web browser to use Kanboard http://localhost/kanboard/
- The default credentials are **admin/admin**
-
-Tested configurations
----------------------
-
-- Windows 2008 R2 Standard Edition / IIS 7.5 / PHP 5.5.16
-- Windows 2012 Standard Edition / IIS 8.5 / PHP 5.3.29
+- [URL rewrite configuration](nice-urls.markdown)
Notes
-----