summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/api-json-rpc.markdown2
-rw-r--r--doc/closing-tasks.markdown6
-rw-r--r--doc/config.markdown11
-rw-r--r--doc/fr/analytics.markdown70
-rw-r--r--doc/fr/automatic-actions.markdown137
-rw-r--r--doc/fr/board-collapsed-expanded.markdown19
-rw-r--r--doc/fr/board-horizontal-scrolling-and-compact-view.markdown13
-rw-r--r--doc/fr/board-show-hide-columns.markdown12
-rw-r--r--doc/fr/budget.markdown34
-rw-r--r--doc/fr/calendar.markdown20
-rw-r--r--doc/fr/creating-projects.markdown32
-rw-r--r--doc/fr/editing-projects.markdown16
-rw-r--r--doc/fr/gantt-chart-projects.markdown17
-rw-r--r--doc/fr/gantt-chart-tasks.markdown20
-rw-r--r--doc/fr/kanban-vs-todo-and-scrum.markdown36
-rw-r--r--doc/fr/project-permissions.markdown49
-rw-r--r--doc/fr/project-views.markdown44
-rw-r--r--doc/fr/sharing-projects.markdown37
-rw-r--r--doc/fr/swimlanes.markdown28
-rw-r--r--doc/fr/usage-examples.markdown69
-rw-r--r--doc/fr/what-is-kanban.markdown34
-rw-r--r--doc/index.markdown4
-rw-r--r--doc/ldap-authentication.markdown11
-rw-r--r--doc/ldap-group-sync.markdown36
-rw-r--r--doc/plugins.markdown263
-rw-r--r--doc/screenshots.markdown2
-rw-r--r--doc/subtasks.markdown2
27 files changed, 1018 insertions, 6 deletions
diff --git a/doc/api-json-rpc.markdown b/doc/api-json-rpc.markdown
index 61852933..b11f256b 100644
--- a/doc/api-json-rpc.markdown
+++ b/doc/api-json-rpc.markdown
@@ -1708,6 +1708,7 @@ Response example:
- Parameters:
- **swimlane_id** (integer, required)
- **name** (string, required)
+ - **description** (string, optional)
- Result on success: **true**
- Result on failure: **false**
@@ -1741,6 +1742,7 @@ Response example:
- Parameters:
- **project_id** (integer, required)
- **name** (string, required)
+ - **description** (string, optional)
- Result on success: **swimlane_id**
- Result on failure: **false**
diff --git a/doc/closing-tasks.markdown b/doc/closing-tasks.markdown
index 235387a9..018acace 100644
--- a/doc/closing-tasks.markdown
+++ b/doc/closing-tasks.markdown
@@ -1,11 +1,11 @@
Closing tasks
=============
-When a task is closed, they are hidden from the board.
+When a task is closed, it is hidden from the board.
However, you can always access to the list of closed tasks by using the query **status:closed** in any search form or simply choose **Closed tasks** from the filter dropdown.
-There are two different way to close a task, from the task dropdown menu on the board:
+There are two different ways to close a task, from the task dropdown menu on the board:
![Close a task from dropdown menu](http://kanboard.net/screenshots/documentation/menu-close-task.png)
@@ -13,4 +13,4 @@ Or from the task sidebar menu in the task detail view:
![Close a task](http://kanboard.net/screenshots/documentation/closing-tasks.png)
-Note: When you close a task, all subtasks not completed will be changed to the status "Done". \ No newline at end of file
+Note: When you close a task, all subtasks not completed will be changed to the status "Done".
diff --git a/doc/config.markdown b/doc/config.markdown
index b5c3ce0d..5473ef9b 100644
--- a/doc/config.markdown
+++ b/doc/config.markdown
@@ -132,6 +132,17 @@ define('LDAP_ACCOUNT_EMAIL', 'mail');
// Example for OpenLDAP: 'uid'
define('LDAP_ACCOUNT_ID', 'samaccountname');
+// LDAP Attribute for group membership
+define('LDAP_ACCOUNT_MEMBEROF', 'memberof');
+
+// DN for administrators
+// Example: CN=Kanboard Admins,CN=Users,DC=kanboard,DC=local
+define('LDAP_GROUP_ADMIN_DN', '');
+
+// DN for project administrators
+// Example: CN=Kanboard Project Admins,CN=Users,DC=kanboard,DC=local
+define('LDAP_GROUP_PROJECT_ADMIN_DN', '');
+
// By default Kanboard lowercase the ldap username to avoid duplicate users (the database is case sensitive)
// Set to true if you want to preserve the case
define('LDAP_USERNAME_CASE_SENSITIVE', false);
diff --git a/doc/fr/analytics.markdown b/doc/fr/analytics.markdown
new file mode 100644
index 00000000..951ade04
--- /dev/null
+++ b/doc/fr/analytics.markdown
@@ -0,0 +1,70 @@
+Analytique
+=========
+
+Chaque projet dispose d'une section analytique. En fonction de la façon dont vous utilisez Kanboard, vous pourrez voir les rapports suivants :
+
+Répartition des utilisateurs
+----------------
+
+![Répartition des utilisateurs](http://kanboard.net/screenshots/documentation/user-repartition.png)
+
+Ce graphique circulaire affiche le nombre de tâches assignées par utilisateur.
+
+Distribution des tâches
+-----------------
+
+![Distribution des tâches](http://kanboard.net/screenshots/documentation/task-distribution.png)
+
+Ce graphique circulaire donne une vue d'ensemble du nombre de tâches ouvertes par colonne.
+
+Diagramme de flux cumulé
+-----------------------
+
+![Diagramme de flux cumulé](http://kanboard.net/screenshots/documentation/cfd.png)
+
+- Ce graphique affiche le nombre de tâches de façon cumulée pour chaque colonne en fonction du temps passé.
+- Chaque jour, le nombre total de tâches est enregistré pour chaque colonne.
+- Si vous souhaitez exclure les tâches terminées, modifiez les [paramètres du projet global](project-configuration.markdown).
+
+Remarque : il faut au moins deux jours de données pour que le graphique apparaisse.
+
+Graphique d'avancement
+--------------
+
+![Graphique d'avancement](http://kanboard.net/screenshots/documentation/burndown-chart.png)
+
+Un [graphique d'avancement](http://en.wikipedia.org/wiki/Burn_down_chart) est disponible pour chaque projet.
+
+- Il s'agit de la représentation graphique du travail qui reste à faire en fonction du temps restant.
+- Kanboard utilise la complexité des estimations d'achèvement pour créer le graphique.
+- Chaque jour, la somme des estimations pour chaque colonne est calculée.
+
+Temps moyen passé pour chaque colonne
+-----------------------------------
+
+![Temps moyen passé pour chaque colonne](http://kanboard.net/screenshots/documentation/average-time-spent-into-each-column.png)
+
+Ce graphique affiche le temps moyen passé pour chaque colonne pour les 1000 dernière tâches.
+
+- Kanboard utilise les transitions entre tâches pour calculer les données.
+- Le temps passé est calculé jusqu'à la fin de la tâche.
+
+Temps moyen de Lead et Cycle
+---------------------------
+
+![Temps moyen passé pour chaque colonne](http://kanboard.net/screenshots/documentation/average-lead-cycle-time.png)
+
+Ce graphique affiche le temps moyen de lead et cycle pour les 1000 dernières tâches au cours du temps.
+
+- Le *lead time* est le temps passé entre la création de la tâche et sa date d'achèvement.
+- Le *cycle time* est le temps passé entre la date de début spécifiée et la date d'achèvement de la tâche.
+- Si la tâche n'est pas close, la date courante est utilisée à la place de la date d'achèvement.
+
+Ces métriques sont calculées et enregistrées chaque jour pour l'ensemble du projet.
+
+N'oubliez pas de lancer chaque jour le calcul statistique
+-------------------------------------------------------
+
+Pour générer des données analytique précises, vous devriez lancer chaque jour le cronjob **statistiques quotidiennes du projet**.
+
+[Consultez la documentation sur la ligne de commande avec Kanboard](cli.markdown)
diff --git a/doc/fr/automatic-actions.markdown b/doc/fr/automatic-actions.markdown
new file mode 100644
index 00000000..844354a5
--- /dev/null
+++ b/doc/fr/automatic-actions.markdown
@@ -0,0 +1,137 @@
+Actions automatiques
+=================
+
+Pour réduire au minimum l'interaction avec les utilisateurs, Kanboard dispose d'actions automatiques.
+
+Chaque action automatique est définie ainsi :
+
+- Un événement à suivre
+- Une action associée à cet évènement
+- Éventuellement quelques paramètres à définir
+
+Chaque projet a une série d'actions automatisées qui lui sont propres, le panneau de configuration est situé sur la page qui liste les projets, il vous suffit de cliquer sur le lien **Actions automatiques**.
+
+Ajouter une nouvelle action
+----------------
+
+### Choisir une action
+
+![Choisir une action](http://kanboard.net/screenshots/documentation/project-automatic-action-step1.png)
+
+### Choisir un évènement
+
+![Choisir un évènement](http://kanboard.net/screenshots/documentation/project-automatic-action-step2.png)
+
+### Définir les paramètres d'une action
+
+![Definir les paramètres](http://kanboard.net/screenshots/documentation/project-automatic-action-step3.png)
+
+Liste des évènements disponibles
+------------------------
+
+- Déplacement d'une tâche vers une autre colonne
+- Déplacement d'une tâche à un autre emplacement de la même colonne
+- Modification d'une tâche
+- Création d'une tâche
+- Réouverture d'une tâche
+- Fermeture d'une tâche
+- Création ou modification d'une tâche
+- Changement d'assigné à une tâche
+- Création ou mise à jour du lien vers une tâche
+- Réception d'un *commit* de Github
+- Ouverture d'une *issue* de Github
+- Fermeture d'une *issue* de Github
+- Réouverture d'une *issue* de Github
+- Modification de l'assigné à une *issue* de Github
+- Modification de l'étiquette d'une *issue* de Github
+- Création d'un commentaire d'une *issue* de Github
+- Ouverture d'une *issue* de Gitlab
+- Fermeture d'une *issue* de Gitlab
+- Réception d'un *commit* de Gitlab
+- Réception d'un *commit* de Bitbucket
+- Ouverture d'une *issue* de Bitbucket
+- Fermeture d'une *issue* de Bitbucket
+- Réouverture d'une *issue* de Bitbucket
+- Modification de l'assigné à une *issue* de Bitbucket issue assignee change
+- Création d'un commentaire d'une *issue* de Bitbucket
+
+Liste des actions disponibles
+-------------------------
+
+- Fermer une tâche
+- Ouvrir une tâche
+- Assigner la tâche à un utilisateur particulier
+- Assigner la tâche à la personne qui fait l'action
+- Cloner la tâche depuis un autre projet
+- Déplacer la tâche vers un autre projet
+- Déplacer la tâche vers une autre colonne quand elle est assignée à un utilisateur
+- Déplacer la tâche vers une autre colonne quand quand l'assigné est supprimé
+- Assigner une couleur quand la tâche est déplacée vers une colonne particulière
+- Assigner une couleur à un utilisateur particulier
+- Assigner automatiquement une couleur selon la catégorie
+- Assigner automatiquement une catégorie en fonction d'une couleur
+- Créer un commentaire depuis un fournisseur externe
+- Créer une tâche depuis un fournisseur externe
+- Ajouter un journal de commentaires quand on change une tâche de colonne
+- Modifier l'assigné en fonction d'un nom d'utilisateur externe
+- Modifier la catégorie en fonction d'une étiquette externe
+- Mettre à jour automatiquement la date de début
+- Déplacer la tâche vers une autre colonne quand la catégorie a changé
+- Envoyer une tâche par mail à quelqu'un
+- Modifier la couleur de la tâche quand on utilise un lien particulier pour cette tâche
+
+Exemples
+--------
+Voici quelques exemples d'utilisation dans la vraie vie :
+
+### Quand je déplace une tâche vers la colonne "Terminer", fermer automatiquement cette tâche
+
+- Choisir l'action : **Fermer la tâche**
+- Choisir l'évènement : **Déplacement d'une tâche vers une autre colonne**
+- Définir le paramètre de l'action : **Colonne = Terminé** (c'est la colonne de destination)
+
+### Quand je déplace une tâche vers la colonne "À valider", assigner cette tâche à un utilisateur particulier
+
+- Choisir l'action : **Assigner la tâche à un utilisateur particulier**
+- Choisir l'évènement : **Déplacer une tâche vers une nouvelle colonne**
+- Définir les paramètres de l'action :**Colonne = À valider** et **Utilisateur = Adrien** (Adrien est par exemple un testeur)
+
+### Quand je déplace une tâche vers la colonne "Travail en cours", assigner cette tâche à l'utilisateur courant
+
+- Choisir l'action : **Assigner la tâche à la personne qui fait cette action**
+- Choisir l'évènement : **Déplacer une tâche vers une autre colonne**
+- Définir le paramètre de l'action : **Colonne = Travail en cours**
+
+### Quand une tâche est terminée, dupliquer cette tâche vers un autre projet
+
+Supposons que nous ayons deux projets : "Commande du client" et "Production". Une fois validée la commande, la basculer vers le projet "Production".
+
+- Choisir l'action : **Dupliquer la tâche vers un autre projet**
+- Choisir l'évènement : **Fermer une tâche**
+- Définir les paramètres de l'action : **Colonne = Validé** et **Projet = Production**
+
+### Quand une tâche est déplacée vers la toute dernière colonne, déplacer la même tâche exactement vers un autre projet
+
+Supposons que nous ayons deux projets : "Idées" et "Développement". Une fois validée l'idée, la basculer vers le projet "Développement".
+
+- Choisir l'action : **Déplacer la tâche vers un autre projet**
+- Choisir l'évènement : **Déplacer une tâche vers une autre colonne**
+- Définir les paramètres de l'action : **Colonne = Validé** et **Projet = Développement**
+
+### Je veux assigner automatiquement une couleur à l'utilisateur Adrien
+
+- Choisir l'action : **Assigner une couleur à un utilisateur particulier**
+- Choisir l'évènement : **Modification de l'assigné à une tâche**
+- Définir les paramètres de l'action :**Couleur = Vert** et **Assigné = Adrien**
+
+### Je veux assigner automatiquement une couleur à la catégorie "Demande de fonctionnalité"
+
+- Choisir l'action : **Assigner automatiquement une couleur à une catégorie particulière**
+- Choisir l'évènement : **Création ou modification d'une tâche**
+- Définir les paramètres de l'action : **Couleur = Bleu** et **Catégorie = Demande de fonctionnalité**
+
+### Je veux régler automatiquement la date de début quand la tâche est déplacée dans la colonne "Travail en cours"
+
+- Choisir l'action : **Mettre à jour automatiquement la date de début**
+- Choisir l'évènement : **Déplacer une tâche vers une autre colonne**
+- Définir les paramètres de l'action : **Colonne= Travail en cours**
diff --git a/doc/fr/board-collapsed-expanded.markdown b/doc/fr/board-collapsed-expanded.markdown
new file mode 100644
index 00000000..f72d990d
--- /dev/null
+++ b/doc/fr/board-collapsed-expanded.markdown
@@ -0,0 +1,19 @@
+Mode Replié et Déplié
+===========================
+
+
+Les tâches peuvent être affichées sur le Tableau en mode Replié ou Déplié.
+Basculer d'un mode à l'autre peut être fait à l'aide du raccourci clavier **"s"** ou en utilisant le menu déroulant sur la gauche.
+
+Mode Replié
+--------------
+![Tâches repliées](http://kanboard.net/screenshots/documentation/board-collapsed-mode.png)
+
+- Si la tâche est affectée à quelqu'un, les initiales de la personne sont affichées à côté du numéro de la tâche.
+- Si le titre de la tâche est trop long, mettez le curseur de la souris au-dessus de la tâche pour voir une boite flottante avec le titre entier.
+
+Mode Déplié
+-------------
+
+![Tâches dépliées](http://kanboard.net/screenshots/documentation/board-expanded-mode.png)
+
diff --git a/doc/fr/board-horizontal-scrolling-and-compact-view.markdown b/doc/fr/board-horizontal-scrolling-and-compact-view.markdown
new file mode 100644
index 00000000..51d28bbb
--- /dev/null
+++ b/doc/fr/board-horizontal-scrolling-and-compact-view.markdown
@@ -0,0 +1,13 @@
+Défilement horizontal et mode compact
+=====================================
+
+Lorsque le tableau ne tient pas dans votre écran, une barre de défilement horizontal appaîtra au bas de l'écran.
+
+Cependant, il est possible de basculer vers la vue compacte pour afficher toutes les colonnes dans votre écran.
+
+![Tableau en mode compact](http://kanboard.net/screenshots/documentation/board-compact-mode.png)
+
+Basculer entre le défilement horizontal et la vue compacte s'effectue avec le raccourci clavier **"c"** ou en utilisant le menu déroulant sur la gauche.
+
+Note : Il est possible que du texte se superpose dans le mode compact, ceci sera amélioré dans les prochaines versions.
+
diff --git a/doc/fr/board-show-hide-columns.markdown b/doc/fr/board-show-hide-columns.markdown
new file mode 100644
index 00000000..e1e02c6b
--- /dev/null
+++ b/doc/fr/board-show-hide-columns.markdown
@@ -0,0 +1,12 @@
+Afficher ou cacher des colonnes dans le tableau
+==================================
+
+Vous pouvez très facilement cacher ou afficher des colonnes dans le tableau :
+
+![Tableau avec des colonnes cachées](http://kanboard.net/screenshots/documentation/board-hide-show-column.png)
+
+- Pour cacher une colonne, cliquez juste sur le titre de la colonne
+- Pour afficher une colonne cachée, cliquez sur le titre vertical
+
+Lorsqu'une colonne est cachée, le nombre de tâches est affiché en haut de la colonne.
+
diff --git a/doc/fr/budget.markdown b/doc/fr/budget.markdown
new file mode 100644
index 00000000..3eac20d5
--- /dev/null
+++ b/doc/fr/budget.markdown
@@ -0,0 +1,34 @@
+Gestion du budget
+=================
+
+La gestion du budget repose sur le suivi du temps d'une sous-tâche, l'emploi du temps de l'utilisateur et le taux horaire de l'utilisateur.
+
+Cette section est accessible depuis la page de paramètres du projet : **Project > Budget**. Il existe également un raccourci depuis le menu déroulant sur le tableau.
+
+Lignes budgétaires
+------------
+
+![Ligne des coûts](http://kanboard.net/screenshots/documentation/budget-lines.png)
+
+Les lignes budgétaires sont utilisées pour définir le budget du projet.
+Celui-ci peut être ajusté en ajoutant une nouvelle entrée avec une date effective.
+
+Détail des coûts
+--------------
+
+![Détail des coûts](http://kanboard.net/screenshots/documentation/budget-cost-breakdown.png)
+
+Selon le tableau qui donne le suivi temporel de la sous-tâche et les informations sur l'utilisateur vous pouvez voir le coût de chaque sous-tâche.
+
+Le temps passé est arrondi au quart d'heure le plus proche.
+
+Graphique du budget
+------------
+
+![Graphique du budget](http://kanboard.net/screenshots/documentation/budget-graph.png)
+
+Finalement, en combinant toutes les informations nous pouvons générer un graphique :
+
+- Les dépenses représentent le coût utilisateur
+- Les lignes budgétaires sont le budget prévisionnel
+- Le restant est le budget qui reste après un délai donné
diff --git a/doc/fr/calendar.markdown b/doc/fr/calendar.markdown
new file mode 100644
index 00000000..94610efb
--- /dev/null
+++ b/doc/fr/calendar.markdown
@@ -0,0 +1,20 @@
+Calendriers
+========
+
+il existe deux visualisations différentes des calendriers :
+
+- La vue du projet avec des filtres (disponibles depuis le tableau)
+- La vue utilisateur (disponible depuis le tableau de bord de l'utilisateur)
+
+Pour l'instant le calendrier permet d'afficher les informations suivantes :
+
+- Les tâches avec une date d'échéance, affichée en haut. **La date d'échéance peut être modifiée en déplaçant la tâche vers un autre jour**.
+- les tâches basées sur la date de création ou la date de début. **Ces évènements ne peuvent pas être modifiés avec le calendrier**.
+- Le suivi dans le temps de sous-tâches, tous les segments temporels sont affichés dans le calendrier.
+- Les estimations pour les sous-tâches, les prévisions et le travail restant
+
+![Calendrier](http://kanboard.net/screenshots/documentation/calendar.png)
+
+La configuration du calendrier peut être modifiée dans la page des paramètres.
+
+Remarque : la date d'échéance n'inclut pas d'information temporelle.
diff --git a/doc/fr/creating-projects.markdown b/doc/fr/creating-projects.markdown
new file mode 100644
index 00000000..d492ac62
--- /dev/null
+++ b/doc/fr/creating-projects.markdown
@@ -0,0 +1,32 @@
+Créer des projets
+=================
+
+Kanboard peut gérer de multiples projets. Voici deux sortes de projets :
+
+- Les projets multi-utilisateurs (pour le travail collaboratif, en équipe)
+- Les projets privés, réservés à un seul utilisateur
+
+Créer des projets multi-utilisateurs
+-------------------------------------
+
+- Seuls les administrateurs et administrateurs de projets peuvent créer ce type de projets
+- La gestion des utilisateurs est disponible
+
+Depuis le tableau principal, cliquez sur le lien **Nouveau projet** :
+
+![Formulaire de création de projet](http://kanboard.net/screenshots/documentation/project-creation-form.png)
+
+C'est vraiment très simple, il vous suffit de trouver un nom pour votre projet !
+
+Créer un projet privé
+--------------------------
+
+- Tout le monde peut créer un projet privé
+- Il n'y a **pas** de gestion des utilisateurs
+- Seuls le propriétaire et les administrateurs peuvent accéder au projet
+
+Depuis le tableau principal, cliquez sur le lien **Nouveau projet privé**.
+
+![Nouveau projet privé](http://kanboard.net/screenshots/documentation/new-private-project.png)
+
+Remarque : les noms de projets doivent être uniques dans toute l'application.
diff --git a/doc/fr/editing-projects.markdown b/doc/fr/editing-projects.markdown
new file mode 100644
index 00000000..67f8a0db
--- /dev/null
+++ b/doc/fr/editing-projects.markdown
@@ -0,0 +1,16 @@
+Modifier des projets
+================
+
+Les projets peuvent être renommés et désactivés à tout moment.
+
+Pour renommer un projet, il suffit de cliquer sur le lien « Modifier un projet » sur la gauche.
+
+![Modification de projet](http://kanboard.net/screenshots/documentation/project-edition.png)
+
+- Les dates de début et de fin sont utilisées pour créer le diagramme de Gantt du projet
+- La description est visible en infobulle sur le tableau et sur la page qui liste les projets
+- Les administrateurs et administrateurs de projets peuvent convertir un projet privé en projet multi-utilisateur en décochant la case « Projet privé ».
+- Vous pouvez également convertir un projet multi-utilisateur en projet privé.
+
+Remarque : quand vous rendez un projet privé, tous les utilisateurs existants auront accès au projet. Ajustez la liste des utilisateurs selon vos besoins.
+
diff --git a/doc/fr/gantt-chart-projects.markdown b/doc/fr/gantt-chart-projects.markdown
new file mode 100644
index 00000000..f2ac40ac
--- /dev/null
+++ b/doc/fr/gantt-chart-projects.markdown
@@ -0,0 +1,17 @@
+Diagramme de Gantt pour tous les projets
+============================
+
+Le but de ce diagramme de Gantt est d'afficher une vue d'ensemble de tous les projets basée sur les dates de début et de fin.
+
+- Ce diagramme de Gantt est disponible dans la section de gestion du projet
+- Seuls les administrateurs et administrateurs de projet peuvent accéder à cette section
+- Les administrateurs de projet ne verront que les projets dans lesquels il y a des membres
+- Les objets privés ne sont pas affichés dans ce graphique
+
+![Diagramme de Gantt pour tous les projets](http://kanboard.net/screenshots/documentation/gantt-chart-all-projects.png)
+
+- La **date de début** et la **date de fin** des projets est utilisée pour construire le graphique
+- Les barres horizontales peuvent être redimensionnées et déplacées latéralement avec votre souris
+- Il n'y a pas de glisser-déposer vertical
+- Les barres de projet sont affichées en noir quand il n'y a ni date de début ni date de fin définies
+- L'infobulle affiche la liste des gestionnaires de projets et les membres ordinaires
diff --git a/doc/fr/gantt-chart-tasks.markdown b/doc/fr/gantt-chart-tasks.markdown
new file mode 100644
index 00000000..73053ed2
--- /dev/null
+++ b/doc/fr/gantt-chart-tasks.markdown
@@ -0,0 +1,20 @@
+Diagramme de Gantt pour les tâches
+======================
+
+Le but de ce diagramme de Gantt est de montrer une vue d'ensemble du temps utilisé en fonction de l'ensemble des tâches d'un projet donné.
+
+- Le diagramme de Gantt est disponible depuis le « sélecteur de vue »
+- Seuls les gestionnaires de projet peuvent accéder à cette section
+
+![Gantt Chart](http://kanboard.net/screenshots/documentation/gantt-chart-project.png)
+
+- La **date de début** et la **date de fin** des tâches sont utilisées pour créer le graphique
+- Les tâches peuvent être redimensionnées et déplacées horizontalement avec votre souris
+- Il n'y a pas de glisser-déposer vertical
+- La barre est de la même couleur que la tâche
+- Chaque barre affiche un niveau de progression en pourcentage, qui est calculé en utilisant la position de la colonne dans le tableau
+- Pour correspondre au modèle du Kanban, les tâches peuvent être ordonnées suivant leur position dans le tableau ou suivant les dates de début
+- Les nouvelles tâches crées avec cette vue seront affichées sur le tableau en position 1 de la première colonne
+- Les tâches sont affichées en noir quand il n'existe ni date de début ni date d'échéance définies
+
+![Tâche non définie](http://kanboard.net/screenshots/documentation/gantt-chart-not-defined.png)
diff --git a/doc/fr/kanban-vs-todo-and-scrum.markdown b/doc/fr/kanban-vs-todo-and-scrum.markdown
new file mode 100644
index 00000000..b6f5bc1f
--- /dev/null
+++ b/doc/fr/kanban-vs-todo-and-scrum.markdown
@@ -0,0 +1,36 @@
+Comparons Kanban aux Todo listes et à Scrum
+==============================
+
+Kanban et les Todo listes
+--------------------
+
+### Todo listes :
+
+- Une seule phase (une simple liste d'éléments)
+- La possibilité de multitâche (moins efficace)
+
+### Kanban:
+
+- Multiples phases, chaque colonne représente une étape
+- Permet de se concentrer sans se disperser sur de multiples tâches, puisque l'on peut poser une limite au travail en cours par colonne
+
+Kanban et Scrum
+---------------
+### Scrum :
+
+- Limite les Sprints dans le temps, généralement à 2 ou 4 semaines
+- N'accepte pas de modifications pendant l'itération
+- Nécessite une estimation
+- Utilise la vélocité comme métrique par défaut
+- Le tableau Scrum est remis à zéro entre chaque Sprint
+- Scrum a des rôles prédéfinis comme Scrum Master, Product Owner et l'équipe
+- Beaucoup de réunions : planification, consolidation du backlog, quotidienne, rétrospective
+
+### Kanban :
+- Flux continu
+- Des modifications peuvent arriver à n'importe quel moment
+- L'estimation est facultative
+- Utilise le temps *lead* et *cycle* pour mesurer l'efficacité
+- Le tableau Kanban est permanent
+- Kanban n'impose aucune contrainte stricte ni de réunion, le processus est plus flexible
+
diff --git a/doc/fr/project-permissions.markdown b/doc/fr/project-permissions.markdown
new file mode 100644
index 00000000..9e21e1ad
--- /dev/null
+++ b/doc/fr/project-permissions.markdown
@@ -0,0 +1,49 @@
+Permissions des projets
+===================
+
+Deux sortes d'utilisateurs sont en charge d'un projet : les **gestionnaires de projet** et les **membres du projet**.
+
+- Les gestionnaires de projet peuvent gérer la configuration du projet et accéder aux rapports.
+- Les membres du projet ne peuvent effectuer que des opérations de base (créer ou déplacer des tâches).
+
+Quand vous créez un nouveau projet, le statut de gestionnaire de projet vous est automatiquement attribué.
+
+Les administrateurs de Kanboard peuvent accéder à tout mais ils ne sont pas nécessairement gestionnaires de projet ni membres du projet. **Ces permissions sont définies au niveau du projet**.
+
+Permissions selon chaque rôle
+-------------------------
+
+### Membres du projet
+
+- Utiliser le tableau (créer, déplacer et modifier les tâches)
+- Supprimer seulement les tâches créées par eux-mêmes
+
+### Gestionnaires du projet
+
+- Utiliser le tableau
+- Configurer le projet
+- Partager, renommer, dupliquer et désactiver le projet
+- Gérer les swimlanes, les catégories, colonnes et utilisateurs
+- Modifier les actions automatisées
+- Exporter en CSV
+- Supprimer les tâches de n'importe quel membre du projet
+- Accéder à la section analytique
+
+Ils ne **peuvent pas supprimer un projet**.
+
+Gérer les utilisateurs et les permissions
+----------------------------
+
+Pour définir les rôles dans un projet, allez sur la page de **configuration de projet** puis cliquez sur **Gestion des utilisateurs**.
+
+### Gestion des utilisateurs
+
+![Permissions du projet](http://kanboard.net/screenshots/documentation/project-permissions.png)
+
+C'est l'endroit où vous pouvez choisir de nouveaux membres, modifier leur rôle ou interrompre l'accès d'un utilisateur.
+
+### Permission générale
+
+Si vous choisissez d'autoriser tout le monde (tous les utilisateurs de Kanboard), le projet est considéré comme public.
+
+Cela signifie qu'il n'y a plus de rôle de gestionnaire de projet. Les permissions par utilisateur ne peuvent pas s'appliquer.
diff --git a/doc/fr/project-views.markdown b/doc/fr/project-views.markdown
new file mode 100644
index 00000000..efaa1c94
--- /dev/null
+++ b/doc/fr/project-views.markdown
@@ -0,0 +1,44 @@
+Vues Tableau, Agenda et Liste
+==============================
+Pour chaque projet, les tâches peuvent être visualisées dans différentes vues : **Tableau, Agenda, Liste ou Gantt**. Chaque vue affiche le résultat filtré par le champ de recherche en haut de page. Le moteur de recherche utilise la [syntaxe avancée](search.markdown).
+
+Vue Tableau
+----------
+![Vue Tableau](http://kanboard.net/screenshots/documentation/board-view.png)
+
+- Dans cette vue, il est possible de glisser-déposer facilement des tâches d'une colonne à l'autre.
+- Il est également possible d'utiliser le raccourci clavier **"v b"** pour afficher la vue Tableau.
+- Les tâches avec une ombre ont été modifiées récemment.
+
+![Tableau Limite de tâches](http://kanboard.net/screenshots/documentation/board-task-limit.png)
+
+Lorsque la limite de tâches est atteinte pour une colonne, l'arrière-plan devient rouge. Ce qui signifie qu'il y a trop de tâches en cours en même temps.
+
+[En apprendre plus sur la configuration du Tableau](board-configuration.markdown)
+
+Vue Agenda
+--------------
+
+![Vue Agenda](http://kanboard.net/screenshots/documentation/calendar-view.png)
+
+- Dans cette vue, il est possible de voir les tâches avec des dates d'échéance.
+- Selon les paramètres, il est également possible de voir les tâches en cours.
+- Il est également possible d'utiliser le raccourci clavier **"v c"** pour afficher la vue Agenda.
+- [En apprendre plus sur la configuration de l'Agenda](calendar-configuration.markdown)
+
+Vue Liste
+----------
+
+![Vue liste](http://kanboard.net/screenshots/documentation/list-view.png)
+
+- Dans cette vue, tous les résultats de votre recherche sont affichés dans un tableau.
+- Il est également possible d'utiliser le raccourci clavier **"v l"** pour afficher la vue Liste.
+
+Vue Gantt
+----------
+
+![Vue Gantt](http://kanboard.net/screenshots/documentation/gantt-view.png)
+
+- La vue Gantt affiche les tâches dans une fresque horizontale
+- Le diagramme utilise la date de début et la date d'échéance pour afficher les tâches
+- Il est également possible d'utiliser le raccourci clavier **"v g"** pour afficher la vue Gantt.
diff --git a/doc/fr/sharing-projects.markdown b/doc/fr/sharing-projects.markdown
new file mode 100644
index 00000000..0d2df7aa
--- /dev/null
+++ b/doc/fr/sharing-projects.markdown
@@ -0,0 +1,37 @@
+Partager des tableaux et des tâches
+========================
+
+Par défaut, les tableaux sont privés, mais il est possible de rendre un tableau public.
+
+Un tableau public ne **peut pas être modifié, il est en lecture seule**.
+Son accès est protégé par un jeton aléatoire, seules les personnes qui ont la bonne URL peuvent voir le tableau.
+
+Les tableaux publics sont automatiquement réactualisés toutes les minutes.
+Les détails des tâches sont disponibles en lecture seule.
+
+Exemples d'utilisation :
+
+- Partager son tableau avec quelqu'un qui ne fait pas partie de votre organisation / entreprise / groupe
+- Afficher le tableau sur un grand écran dans votre bureau
+
+Activer l'accès public
+-------------------
+
+Choisissez votre projet, puis cliquez sur « Accès public » et enfin sur le bouton « Activer l'accès public ».
+
+![Activer l'accès public](http://kanboard.net/screenshots/documentation/project-enable-sharing.png)
+
+Lorsque l'accès public est activé, plusieurs liens sont créés :
+
+- Affichage du tableau public
+- Lien de souscription au fil RSS
+- Lien d'abonnement à iCalendar
+
+![Désactiver l'accès public](http://kanboard.net/screenshots/documentation/project-disable-sharing.png)
+
+Vous pouvez désactiver l'accès public à tout moment.
+
+À chaque fois que vous activez ou désactivez l'accès public, un nouveau jeton aléatoire est créé.
+**Les liens précédents ne fonctionneront pas**.
+
+
diff --git a/doc/fr/swimlanes.markdown b/doc/fr/swimlanes.markdown
new file mode 100644
index 00000000..48772117
--- /dev/null
+++ b/doc/fr/swimlanes.markdown
@@ -0,0 +1,28 @@
+Swimlanes
+=========
+
+Les *swimlanes* sont des séparations horizontales de votre tableau (pensez à des « couloirs » ou « lignes d'eau » dans une piscine).
+Par exemple, cela peut servir à séparer les sorties des différentes versions d'un logiciel, à diviser vos tâches selon différents produits, équipes ou tout autre critère de votre choix.
+
+Tableau avec des swimlanes
+--------------------
+
+![Configuration des swimlanes](http://kanboard.net/screenshots/documentation/swimlanes.png)
+
+Gestion des swimlanes
+------------------
+
+- Tous les projets ont une swimlane par défaut.
+- S'il existe plus d'une swimlane, le tableau les affichera toutes.
+- Vous pouvez glisser-déposer les tâches d'une swimlane à l'autre.
+
+Pour configurer les swimlanes allez sur la page de **Configuration du projet** et choisissez la section **Swimlanes**.
+
+![Swimlanes Configuration](http://kanboard.net/screenshots/documentation/swimlanes-configuration.png)
+
+À partir de cet endroit, vous pouvez ajouter une nouvelle swimlane ou renommer celle qui existe par défaut.
+Vous pouvez aussi désactiver et modifier la position des diverses swimlanes.
+
+- La swimlane par défaut est toujours en haut de tableau mais vous pouvez la cacher.
+- Les swimlanes inactives ne sont pas affichées dans le tableau.
+- **Supprimer une swimlane ne supprime pas les tâches qui lui sont assignées**, ces tâches seront transférées à la swimlane par défaut.
diff --git a/doc/fr/usage-examples.markdown b/doc/fr/usage-examples.markdown
new file mode 100644
index 00000000..b91fa613
--- /dev/null
+++ b/doc/fr/usage-examples.markdown
@@ -0,0 +1,69 @@
+Exemples d'utilisation
+==============
+Il est possible de personnaliser ses tableaux selon l'activité de votre entreprise :
+
+Développement logiciel
+--------------------
+
+- Prévu
+- Prêt
+- En cours
+- À valider
+- Validé
+- En production
+
+Suivi de bogues
+------------
+
+- Rapporté
+- Confirmé
+- En cours
+- Testé
+- Résolu
+
+Ventes
+-----
+
+- Objectifs
+- Réunions
+- Propositions
+- Achats
+
+Gestion au plus juste
+------------------------
+
+- Idées
+- Expression de la demande
+- Étude de marché
+- Analyses
+- Fait
+
+
+Procédure de recrutement
+------------------
+
+- Offres d'emploi
+- Candidats
+- Appels téléphoniques
+- Entretiens
+- Embauches
+
+Boutiques en ligne
+------------
+
+- Commande
+- Empaquetage
+- Prêt à envoyer
+- Envoyé
+
+Artisanat
+-----------
+
+- Commande
+- Assemblage
+- Tests
+- Empaquetage
+- Prêt à envoyer
+- Envoyé
+
+
diff --git a/doc/fr/what-is-kanban.markdown b/doc/fr/what-is-kanban.markdown
new file mode 100644
index 00000000..f479927c
--- /dev/null
+++ b/doc/fr/what-is-kanban.markdown
@@ -0,0 +1,34 @@
+Qu'est-ce que Kanban?
+===============
+
+
+Kanban est une méthodologie développée à l'origine par l'entreprise Toyota pour gagner en efficacité.
+
+Kanban n'impose que deux contraintes :
+
+- Visualiser votre flux d'activité
+- Limiter votre travail en cours
+
+Visualiser votre flux d'activité
+-----------------------
+
+- Votre activité est affichée sur un tableau, vous disposez ainsi d'une vue très nette sur l'ensemble de votre projet
+- Chaque colonne représente une étape de votre flux d'activité
+
+Se concentrer sur une seule tâche à la fois sans disperser son activité
+----------------------------------
+
+- Chaque phase peut avoir sa date d'échéance
+- Les limites fixées sont très utiles pour identifier les goulots d'étranglement
+- Les limites évitent de travailler à un trop grand nombre de tâches à la fois
+
+Mesure des performances et des progrès
+-----------------------------------
+
+Kanban utilise lead time et cycle times pour mesurer les performances :
+
+- **Lead time** : le *lead time* est la durée entre la création de la tâche et son achèvement.
+- **Cycle time** : le *cycle time* est la durée entre la date de début et l'achèvement.
+
+Par exemple, vous pouvez avoir un *lead time* de 100 jours et n'avoir à travailler qu'une heure pour achever la tâche.
+
diff --git a/doc/index.markdown b/doc/index.markdown
index 0c33bfaa..96069250 100644
--- a/doc/index.markdown
+++ b/doc/index.markdown
@@ -78,6 +78,7 @@ Using Kanboard
- [RSS/Atom subscriptions](rss.markdown)
- [Json-RPC API](api-json-rpc.markdown)
- [Webhooks](webhooks.markdown)
+- [Plugins](plugins.markdown)
### More
@@ -104,6 +105,7 @@ Technical details
- [Installation on Heroku](heroku.markdown)
- [Example with Nginx + HTTPS + SPDY + PHP-FPM](nginx-ssl-php-fpm.markdown)
- [Run Kanboard with Docker](docker.markdown)
+- [Run Kanboard with Vagrant](vagrant.markdown)
### Configuration
@@ -120,6 +122,7 @@ Technical details
### Authentication
- [LDAP authentication](ldap-authentication.markdown)
+- [LDAP group sync](ldap-group-sync.markdown)
- [Google authentication](google-authentication.markdown)
- [Github authentication](github-authentication.markdown)
- [Gitlab authentication](gitlab-authentication.markdown)
@@ -132,7 +135,6 @@ Technical details
- [Coding standards](coding-standards.markdown)
- [Running tests](tests.markdown)
- [Build assets](assets.markdown)
-- [Run Kanboard with Vagrant](vagrant.markdown)
The documentation is written in [Markdown](http://en.wikipedia.org/wiki/Markdown).
If you want to improve the documentation, just send a pull-request.
diff --git a/doc/ldap-authentication.markdown b/doc/ldap-authentication.markdown
index 53b3d012..136aa9ac 100644
--- a/doc/ldap-authentication.markdown
+++ b/doc/ldap-authentication.markdown
@@ -225,6 +225,17 @@ define('LDAP_ACCOUNT_EMAIL', 'mail');
// Example for OpenLDAP: 'uid'
define('LDAP_ACCOUNT_ID', 'samaccountname');
+// LDAP Attribute for group membership
+define('LDAP_ACCOUNT_MEMBEROF', 'memberof');
+
+// DN for administrators
+// Example: CN=Kanboard Admins,CN=Users,DC=kanboard,DC=local
+define('LDAP_GROUP_ADMIN_DN', '');
+
+// DN for project administrators
+// Example: CN=Kanboard Project Admins,CN=Users,DC=kanboard,DC=local
+define('LDAP_GROUP_PROJECT_ADMIN_DN', '');
+
// By default Kanboard lowercase the ldap username to avoid duplicate users (the database is case sensitive)
// Set to true if you want to preserve the case
define('LDAP_USERNAME_CASE_SENSITIVE', false);
diff --git a/doc/ldap-group-sync.markdown b/doc/ldap-group-sync.markdown
new file mode 100644
index 00000000..355a1cde
--- /dev/null
+++ b/doc/ldap-group-sync.markdown
@@ -0,0 +1,36 @@
+LDAP Group Synchronization
+==========================
+
+Requirements
+------------
+
+- Have LDAP authentication properly configured
+- Use a LDAP server that supports `memberOf`
+
+Automatically define Kanboard groups based on LDAP groups
+---------------------------------------------------------
+
+In your config file, define the constants `LDAP_GROUP_ADMIN_DN` and `LDAP_GROUP_PROJECT_ADMIN_DN`. Here an example, replace the values according to your own LDAP configuration:
+
+```php
+define('LDAP_GROUP_ADMIN_DN', 'CN=Kanboard Admins,CN=Users,DC=kanboard,DC=local');
+define('LDAP_GROUP_PROJECT_ADMIN_DN', 'CN=Kanboard Project Admins,CN=Users,DC=kanboard,DC=local');
+```
+
+- People member of "Kanboard Admins" will be "Kanboard Administrators"
+- People member of "Kanboard Project Admins" will be "Kanboard Project Administrators"
+- Everybody else will be Kanboard Standard Users
+
+Note: At the moment, that works only at account creation.
+
+Filter Kanboard access based on the LDAP group
+----------------------------------------------
+
+To allow only some users to use Kanboard, use the existing `LDAP_USER_PATTERN` constant:
+
+```php
+define('LDAP_USER_PATTERN', '(&(objectClass=user)(sAMAccountName=%s)(memberOf=CN=Kanboard Users,CN=Users,DC=kanboard,DC=local))');
+```
+
+This example allow only people member of the group "Kanboard Users" to connect to Kanboard.
+
diff --git a/doc/plugins.markdown b/doc/plugins.markdown
new file mode 100644
index 00000000..7f32cf0a
--- /dev/null
+++ b/doc/plugins.markdown
@@ -0,0 +1,263 @@
+Plugin Development
+==================
+
+Note: The plugin API is considered alpha at the moment.
+
+Plugins are useful to extend the core functionalities of Kanboard, adding features, creating themes or changing the default behavior.
+
+Plugin creators should specify explicitly the compatible versions of Kanboard. Internal code of Kanboard may change over the time and your plugin must be tested with new versions.
+
+Directory structure
+-------------------
+
+Plugins are stored in the `plugins` subdirectory. An example of a plugin directory structure:
+
+```bash
+plugins
+└── Budget <= Plugin name
+ ├── Asset <= Javascript/CSS files
+ ├── Controller
+ ├── LICENSE <= Plugin license
+ ├── Locale
+ │ ├── fr_FR
+ │   ├── it_IT
+ │   ├── ja_JP
+ │   └── zh_CN
+ ├── Model
+ ├── Plugin.php <= Plugin registration file
+ ├── README.md
+ ├── Schema <= Database migrations
+ ├── Template
+ └── Test <= Unit tests
+```
+
+Only the registration file `Plugin.php` is required. Other folders are optionals.
+
+The first letter of the plugin name must be capitalized.
+
+Plugin registration file
+------------------------
+
+Kanboard will scan the directory `plugins` and load automatically everything under this directory. The file `Plugin.php` is used to load and register the plugin.
+
+Example of `Plugin.php` file (`plugins/Foobar/Plugin.php`):
+
+```php
+<?php
+
+namespace Plugin\Foobar;
+
+use Core\PluginBase;
+
+class Plugin extends PluginBase
+{
+ public function initialize()
+ {
+ $this->template->hook->attach('layout:head', 'theme:layout/head');
+ }
+}
+```
+
+This file should contains a class `Plugin` defined under the namespace `Plugin\Yourplugin` and extends `Core\PluginBase`.
+
+The only required method is `initialize()`. This method is called for each request when the plugin is loaded.
+
+Plugin methods
+--------------
+
+Available methods from `PluginBase`:
+
+- `initialize()`: Executed when the plugin is loaded
+- `getClasses()`: Return all classes that should be stored in the dependency injection container
+- `on($event, $callback)`: Listen on internal events
+
+Your plugin registration class also inherit from `Core\Base`, that means you can access to all classes and methods of Kanboard easily.
+
+This example will fetch the user #123:
+
+```php
+$this->user->getById(123);
+```
+
+Template hooks
+--------------
+
+Template hooks allow to add new content in existing templates.
+
+Example to add new content in the dashboard sidebar:
+
+```php
+$this->template->hook->attach('dashboard:sidebar', 'myplugin:dashboard/sidebar');
+```
+
+This call is usually defined in the `initialize()` method.
+The first argument is name of the hook and the second argument is the template name.
+
+Template names prefixed with the plugin name and colon indicate the location of the template.
+
+Example with `myplugin:dashboard/sidebar`:
+
+- `myplugin` is the name of your plugin (lowercase)
+- `dashboard/sidebar` is the template name
+- On the filesystem, the plugin will be located here: `plugins\Myplugin\Template\dashboard\sidebar.php`
+- Templates are written in pure PHP (don't forget to escape data)
+
+Template name without prefix are core templates.
+
+List of template hooks:
+
+- `dashboard:sidebar`
+- `config:sidebar`
+- `export:sidebar`
+- `layout:head`
+- `layout:top`
+- `layout:bottom`
+- `project:dropdown`
+- `project-user:sidebar`
+- `task:sidebar:information`
+- `task:sidebar:actions`
+- `user:sidebar:information`
+- `user:sidebar:actions`
+
+Other template hooks can be added if necessary, just ask on the issue tracker.
+
+Template overrides
+------------------
+
+Any templates defined in the core can be overrided. By example, you can redefine the default layout or change email notifications.
+
+Example of template override:
+
+```php
+$this->template->setTemplateOverride('header', 'theme:layout/header');
+```
+
+The first argument is the original template name and the second argument the template to use as replacement.
+
+Listen on events
+----------------
+
+Kanboard use internal events and your plugin can listen and perform actions on these events.
+
+```php
+$this->on('session.bootstrap', function($container) {
+ // Do something
+});
+```
+
+- The first argument is the event name
+- The second argument is a PHP callable function (closure or class method)
+
+Extend ACL
+----------
+
+Kanboard use a custom access list for privilege separations. Your extension can add new rules:
+
+```php
+$this->acl->extend('project_manager_acl', array('mycontroller' => '*'));
+```
+
+- The first argument is the ACL name
+- The second argument are the new rules
+ + Syntax to include only some actions: `array('controller' => array('action1', 'action2'))`
+ + Syntax to include all actions of a controller: `array('controller' => '*')`
+ + Everything is lowercase
+
+List of ACL:
+
+- `public_acl`: Public access without authentication
+- `project_member_acl`: Project member access
+- `project_manager_acl`: Project manager access
+- `project_admin_acl`: Project Admins
+- `admin_acl`: Administrators
+
+Plugin Translations
+-------------------
+
+Plugin can be translated in the same way the rest of the application. You must load the translations yourself when the session is created:
+
+```php
+$this->on('session.bootstrap', function($container) {
+ Translator::load($container['config']->getCurrentLanguage(), __DIR__.'/Locale');
+});
+```
+
+The translations must be stored in `plugins/Myplugin/Locale/xx_XX/translations.php`.
+
+Dependency Injection Container
+------------------------------
+
+Kanboard use Pimple, a simple PHP Dependency Injection Container. However, Kanboard can register any class in the container easily.
+
+Those classes are available everywhere in the application and only one instance is created.
+
+Here an example to register your own models in the container:
+
+```php
+public function getClasses()
+{
+ return array(
+ 'Plugin\Budget\Model' => array(
+ 'HourlyRate',
+ 'Budget',
+ )
+ );
+}
+```
+
+Now, if you use a class that extends from `Core\Base`, you can access directly to those class instance:
+
+```php
+$this->hourlyRate->remove(123);
+$this->budget->getDailyBudgetBreakdown(456);
+
+// It's the same thing as using the container:
+$this->container['hourlyRate']->getAll();
+```
+
+Keys of the containers are unique across the application. If you override an existing class you will change the default behavior.
+
+Schema migrations
+-----------------
+
+Kanboard execute database migrations automatically for you. Migrations must be stored in a folder **Schema** and the filename must be the same as the database driver:
+
+```bash
+Schema
+├── Mysql.php
+├── Postgres.php
+└── Sqlite.php
+```
+
+Each file contains all migrations, here an example for Sqlite:
+
+```php
+<?php
+
+namespace Plugin\Something\Schema;
+
+const VERSION = 1;
+
+function version_1($pdo)
+{
+ $pdo->exec('CREATE TABLE IF NOT EXISTS something (
+ "id" INTEGER PRIMARY KEY,
+ "project_id" INTEGER NOT NULL,
+ "something" TEXT,
+ FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE CASCADE
+ )');
+}
+```
+
+- The constant `VERSION` is the last version of your schema
+- Each function is a migration `version_1()`, `version_2()`, etc...
+- A `PDO` instance is passed as first argument
+- Everything is executed inside a transaction, if something doesn't work a rollback is performed and the error is displayed to the user
+
+Kanboard will compare the version defined in your schema and the version stored in the database. If the versions are different, Kanboard will execute one by one each migration until to reach the last version.
+
+Examples of plugins
+-------------------
+
+- Budget planning: https://github.com/kanboard/plugin-budget
+- Theme plugin sample: https://github.com/kanboard/plugin-example-theme
diff --git a/doc/screenshots.markdown b/doc/screenshots.markdown
index 419de412..95972405 100644
--- a/doc/screenshots.markdown
+++ b/doc/screenshots.markdown
@@ -22,4 +22,4 @@ On Mac OS X, you can use those shortcuts to take screenshots:
There are also several third-party applications that can be used to take screenshots with annotations and shapes.
-**Note: This feature doesn't works with all browsers.** It doesn't work with Safari due to this bug: https://bugs.webkit.org/show_bug.cgi?id=49141
+**Note: This feature doesn't work with all browsers.** It doesn't work with Safari due to this bug: https://bugs.webkit.org/show_bug.cgi?id=49141
diff --git a/doc/subtasks.markdown b/doc/subtasks.markdown
index 3c9e8350..e1acd98c 100644
--- a/doc/subtasks.markdown
+++ b/doc/subtasks.markdown
@@ -40,5 +40,5 @@ Subtask timer
- Each time a subtask is in progress, the timer is also started. The timer can be started and stopped at any time.
- The timer records the time spent on the subtask automatically. You can also change manually the value of the time spent field when you edit a subtask.
- The time calculated is rounded to the nearest quarter. This information is recorded in a separate table.
-- The task time spent is updated automatically according to the sum of all subtasks time spent.
+- The task time spent and time estimated are updated automatically according to the sum of all subtasks.