Move documentation to https://docs.kanboard.org/
This commit is contained in:
parent
ac11220a1a
commit
0b306fa60a
|
|
@ -20,5 +20,3 @@ Credits
|
|||
- Main developer: Frédéric Guillot
|
||||
- [Contributors](https://github.com/kanboard/kanboard/graphs/contributors)
|
||||
- Distributed under [MIT License](https://github.com/kanboard/kanboard/blob/master/LICENSE)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,126 +12,8 @@ use Parsedown;
|
|||
*/
|
||||
class DocumentationController extends BaseController
|
||||
{
|
||||
public function show()
|
||||
{
|
||||
$page = $this->request->getStringParam('file', 'index');
|
||||
|
||||
if (!preg_match('/^[a-z0-9\-]+/', $page)) {
|
||||
$page = 'index';
|
||||
}
|
||||
|
||||
$filename = $this->getPageFilename($page);
|
||||
$this->response->html($this->helper->layout->app('doc/show', $this->render($filename)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display keyboard shortcut
|
||||
*/
|
||||
public function shortcuts()
|
||||
{
|
||||
$this->response->html($this->template->render('config/keyboard_shortcuts'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare Markdown file
|
||||
*
|
||||
* @access private
|
||||
* @param string $filename
|
||||
* @return array
|
||||
*/
|
||||
private function render($filename)
|
||||
{
|
||||
$data = file_get_contents($filename);
|
||||
$content = preg_replace_callback('/\((.*.markdown)\)/', array($this, 'replaceMarkdownUrl'), $data);
|
||||
$content = preg_replace_callback('/\((screenshots.*\.png)\)/', array($this, 'replaceImageUrl'), $content);
|
||||
$content = preg_replace_callback('/\((\.\.\/screenshots.*\.png)\)/', array($this, 'replaceImageUrl'), $content);
|
||||
|
||||
list($title, ) = explode("\n", $data, 2);
|
||||
|
||||
return array(
|
||||
'content' => Parsedown::instance()->text($content),
|
||||
'title' => $title !== 'Documentation' ? t('Documentation: %s', $title) : $title,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Regex callback to replace Markdown links
|
||||
*
|
||||
* @access public
|
||||
* @param array $matches
|
||||
* @return string
|
||||
*/
|
||||
public function replaceMarkdownUrl(array $matches)
|
||||
{
|
||||
return '('.$this->helper->url->to('DocumentationController', 'show', array('file' => str_replace('.markdown', '', $matches[1]))).')';
|
||||
}
|
||||
|
||||
/**
|
||||
* Regex callback to replace image links
|
||||
*
|
||||
* @access public
|
||||
* @param array $matches
|
||||
* @return string
|
||||
*/
|
||||
public function replaceImageUrl(array $matches)
|
||||
{
|
||||
return '('.$this->getFileBaseUrl($matches[1]).')';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Markdown file according to the current language
|
||||
*
|
||||
* @access private
|
||||
* @param string $page
|
||||
* @return string
|
||||
*/
|
||||
private function getPageFilename($page)
|
||||
{
|
||||
return $this->getFileLocation($page . '.markdown') ?:
|
||||
implode(DIRECTORY_SEPARATOR, array(ROOT_DIR, 'doc', 'en_US', 'index.markdown'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get base URL for Markdown links
|
||||
*
|
||||
* @access private
|
||||
* @param string $filename
|
||||
* @return string
|
||||
*/
|
||||
private function getFileBaseUrl($filename)
|
||||
{
|
||||
$language = $this->languageModel->getCurrentLanguage();
|
||||
$path = $this->getFileLocation($filename);
|
||||
|
||||
if (strpos($path, $language) !== false) {
|
||||
$url = implode('/', array('doc', $language, $filename));
|
||||
} else {
|
||||
$url = implode('/', array('doc', $filename));
|
||||
}
|
||||
|
||||
return $this->helper->url->base().$url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get file location according to the current language
|
||||
*
|
||||
* @access private
|
||||
* @param string $filename
|
||||
* @return string
|
||||
*/
|
||||
private function getFileLocation($filename)
|
||||
{
|
||||
$files = array(
|
||||
implode(DIRECTORY_SEPARATOR, array(ROOT_DIR, 'doc', $this->languageModel->getCurrentLanguage(), $filename)),
|
||||
implode(DIRECTORY_SEPARATOR, array(ROOT_DIR, 'doc', 'en_US', $filename)),
|
||||
);
|
||||
|
||||
foreach ($files as $filename) {
|
||||
if (file_exists($filename)) {
|
||||
return $filename;
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,16 @@ class UrlHelper extends Base
|
|||
*/
|
||||
public function doc($label, $file)
|
||||
{
|
||||
return $this->link($label, 'DocumentationController', 'show', array('file' => $file), false, '', '', true);
|
||||
$version = 'latest';
|
||||
|
||||
if (substr(APP_VERSION, 0, 1) === 'v') {
|
||||
$version = substr(APP_VERSION, 1);
|
||||
} else if (ctype_digit(substr(APP_VERSION, 0, 1))) {
|
||||
$version = APP_VERSION;
|
||||
}
|
||||
|
||||
$url = sprintf(DOCUMENTATION_URL_PATTERN, $version, $file);
|
||||
return sprintf('<a href="%s" target="_blank">%s</a>', $url, $label);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Promijeni boju zadatka kada se koristi određena veza na zadatku',
|
||||
'Task link creation or modification' => 'Veza na zadatku je napravljena ili izmijenjena',
|
||||
'Milestone' => 'Prekretnica',
|
||||
'Documentation: %s' => 'Dokumentacija: %s',
|
||||
'Reset the search/filter box' => 'Vrati na početno pretragu/filtere',
|
||||
'Documentation' => 'Dokumentacija',
|
||||
'Table of contents' => 'Sadržaj',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Verzija',
|
||||
'Plugins' => 'Dodaci',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Canviar de color quan la tasca utilitzant un enllaç tasca específica',
|
||||
'Task link creation or modification' => 'La creació o modificació de l\'enllaç de tasques',
|
||||
'Milestone' => 'Fita',
|
||||
'Documentation: %s' => 'Documentació: %s',
|
||||
'Reset the search/filter box' => 'Restablir el quadre de cerca / filtre',
|
||||
'Documentation' => 'Documentació',
|
||||
'Table of contents' => 'Taula de continguts',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Versió',
|
||||
'Plugins' => 'Connectors',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Změnit barvu úkolu při použití konkrétního odkazu na úkol',
|
||||
'Task link creation or modification' => 'Vytvoření, nebo změna odkazu na úkol',
|
||||
'Milestone' => 'Milník',
|
||||
'Documentation: %s' => 'Dokumentace %s',
|
||||
'Reset the search/filter box' => 'Vyresetovat pole pro vyhledávání/filtrování',
|
||||
'Documentation' => 'Dokumentace',
|
||||
'Table of contents' => 'Obsah',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Ændre opgave farve når der bruges bestemt opgave henvisning',
|
||||
'Task link creation or modification' => 'Opgave henvisning oprettelse eller ændring',
|
||||
'Milestone' => 'Milepæl',
|
||||
'Documentation: %s' => 'Dokumentation: %s',
|
||||
'Reset the search/filter box' => 'Nulstille søge- / filter-boks',
|
||||
'Documentation' => 'Dokumentation',
|
||||
'Table of contents' => 'Indholdsfortegnelse',
|
||||
'Author' => 'Forfatter',
|
||||
'Version' => 'Version',
|
||||
'Plugins' => 'Udvidelses-moduler',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Aufgabefarbe ändern bei bestimmter Aufgabenverbindung',
|
||||
'Task link creation or modification' => 'Aufgabenverbindung erstellen oder bearbeiten',
|
||||
'Milestone' => 'Meilenstein',
|
||||
'Documentation: %s' => 'Dokumentation: %s',
|
||||
'Reset the search/filter box' => 'Suche/Filter-Box zurücksetzen',
|
||||
'Documentation' => 'Dokumentation',
|
||||
'Table of contents' => 'Inhaltsverzeichnis',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Version',
|
||||
'Plugins' => 'Plugins',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Αλλαγή χρώματος εργασίας χρησιμοποιώντας συγκεκριμένο σύνδεσμο εργασίας',
|
||||
'Task link creation or modification' => 'Σύνδεσμος δημιουργίας ή τροποποίησης εργασίας',
|
||||
'Milestone' => 'Ορόσημο',
|
||||
'Documentation: %s' => 'Τεκμηρίωση: %s',
|
||||
'Reset the search/filter box' => 'Αρχικοποίηση του πεδίου αναζήτησης/φιλτραρίσματος',
|
||||
'Documentation' => 'Τεκμηρίωση',
|
||||
'Table of contents' => 'Πίνακας περιεχομένων',
|
||||
'Author' => 'Δημιουργός',
|
||||
'Version' => 'Έκδοση',
|
||||
'Plugins' => 'Πρόσθετα',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Cambiar el color de la tarea cuando se utiliza un enlace de tarea específico',
|
||||
'Task link creation or modification' => 'Creación o modificación de enlaces de tareas',
|
||||
'Milestone' => 'Hito',
|
||||
'Documentation: %s' => 'Documentación: %s',
|
||||
'Reset the search/filter box' => 'Restablecer la caja de búsqueda/filtro',
|
||||
'Documentation' => 'Documentación',
|
||||
'Table of contents' => 'Tabla de contenido',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Versión',
|
||||
'Plugins' => 'Plugins',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
// 'Change task color when using a specific task link' => '',
|
||||
// 'Task link creation or modification' => '',
|
||||
// 'Milestone' => '',
|
||||
// 'Documentation: %s' => '',
|
||||
// 'Reset the search/filter box' => '',
|
||||
// 'Documentation' => '',
|
||||
// 'Table of contents' => '',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Changer la couleur de la tâche lorsqu\'un lien spécifique est utilisé',
|
||||
'Task link creation or modification' => 'Création ou modification d\'un lien sur une tâche',
|
||||
'Milestone' => 'Étape importante',
|
||||
'Documentation: %s' => 'Documentation : %s',
|
||||
'Reset the search/filter box' => 'Réinitialiser le champ de recherche',
|
||||
'Documentation' => 'Documentation',
|
||||
'Table of contents' => 'Table des matières',
|
||||
'Author' => 'Auteur',
|
||||
'Version' => 'Version',
|
||||
'Plugins' => 'Extensions',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
// 'Change task color when using a specific task link' => '',
|
||||
// 'Task link creation or modification' => '',
|
||||
// 'Milestone' => '',
|
||||
// 'Documentation: %s' => '',
|
||||
// 'Reset the search/filter box' => '',
|
||||
'Documentation' => 'Dokumentacija',
|
||||
// 'Table of contents' => '',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Feladatszín megváltoztatása, ha egy adott feladathivatkozást használnak',
|
||||
'Task link creation or modification' => 'Feladathivatkozás létrehozása vagy módosítása',
|
||||
'Milestone' => 'Mérföldkő',
|
||||
'Documentation: %s' => 'Dokumentáció: %s',
|
||||
'Reset the search/filter box' => 'A keresés/szűrés doboz visszaállítása',
|
||||
'Documentation' => 'Dokumentáció',
|
||||
'Table of contents' => 'Tartalomjegyzék',
|
||||
'Author' => 'Szerző',
|
||||
'Version' => 'Verzió',
|
||||
'Plugins' => 'Bővítmények',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Ganti warna tugas ketika menggunakan tautan tugas yang spesifik',
|
||||
'Task link creation or modification' => 'Tautan pembuatan atau modifikasi tugas ',
|
||||
'Milestone' => 'Milestone',
|
||||
'Documentation: %s' => 'Dokumentasi: %s',
|
||||
'Reset the search/filter box' => 'Reset kotak pencarian/saringan',
|
||||
'Documentation' => 'Dokumentasi',
|
||||
'Table of contents' => 'Daftar isi',
|
||||
'Author' => 'Penulis',
|
||||
'Version' => 'Versi',
|
||||
'Plugins' => 'Plugin',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Cambia colore del task quando si un utilizza una determinata relazione di task',
|
||||
'Task link creation or modification' => 'Creazione o modifica di relazione di task',
|
||||
// 'Milestone' => '',
|
||||
'Documentation: %s' => 'Documentazione: %s',
|
||||
'Reset the search/filter box' => 'Resetta la riceca/filtro',
|
||||
'Documentation' => 'Documentazione',
|
||||
'Table of contents' => 'Indice dei contenuti',
|
||||
'Author' => 'Autore',
|
||||
'Version' => 'Versione',
|
||||
'Plugins' => 'Plugin',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => '特定のタスクリンクを使用するとタスクの色を変更',
|
||||
'Task link creation or modification' => 'タスクリンクの作成または変更',
|
||||
'Milestone' => 'マイルストーン',
|
||||
'Documentation: %s' => 'ドキュメント:%s',
|
||||
'Reset the search/filter box' => '検索/フィルタをリセット',
|
||||
'Documentation' => 'ドキュメント',
|
||||
'Table of contents' => '目次',
|
||||
'Author' => '著者',
|
||||
'Version' => 'バージョン',
|
||||
'Plugins' => 'プラグイン',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => '특정 할일 링크를 사용할때 할일의 색깔 변경',
|
||||
'Task link creation or modification' => '할일 링크 생성 혹은 수정',
|
||||
'Milestone' => '마일스톤',
|
||||
'Documentation: %s' => '문서: %s',
|
||||
'Reset the search/filter box' => '찾기/필터 박스 초기화',
|
||||
'Documentation' => '문서',
|
||||
'Table of contents' => '목차',
|
||||
'Author' => '글쓴이',
|
||||
'Version' => '버전',
|
||||
'Plugins' => '플러그인',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Rubah warna tugas ketika menggunakan Pautan tugas yang spesifik',
|
||||
'Task link creation or modification' => 'Pautan tugas pada penciptaan atau penyuntingan',
|
||||
'Milestone' => 'Batu Tanda',
|
||||
'Documentation: %s' => 'Dokumentasi : %s',
|
||||
'Reset the search/filter box' => 'Tetap semula pencarian/saringan',
|
||||
'Documentation' => 'Dokumentasi',
|
||||
'Table of contents' => 'Isi kandungan',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
// 'Change task color when using a specific task link' => '',
|
||||
// 'Task link creation or modification' => '',
|
||||
'Milestone' => 'Milepæl',
|
||||
'Documentation: %s' => 'Dokumentasjon: %s',
|
||||
'Reset the search/filter box' => 'Nullstill søk/filter',
|
||||
'Documentation' => 'Dokumentasjon',
|
||||
'Table of contents' => 'Innholdsfortegnelse',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
// 'Change task color when using a specific task link' => '',
|
||||
// 'Task link creation or modification' => '',
|
||||
'Milestone' => 'Mijlpaal',
|
||||
// 'Documentation: %s' => '',
|
||||
// 'Reset the search/filter box' => '',
|
||||
// 'Documentation' => '',
|
||||
// 'Table of contents' => '',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Zmień kolor zadania używając specjalnego adresu URL',
|
||||
'Task link creation or modification' => 'Adres URL do utworzenia zadania lub modyfikacji',
|
||||
'Milestone' => 'Kamień milowy',
|
||||
'Documentation: %s' => 'Dokumentacja: %s',
|
||||
'Reset the search/filter box' => 'Zresetuj pole wyszukiwania/filtrowania',
|
||||
'Documentation' => 'Dokumentacja',
|
||||
'Table of contents' => 'Tablica zawartości',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Wersja',
|
||||
'Plugins' => 'Wtyczki',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Mudar a cor da tarefa quando um link específico é utilizado',
|
||||
'Task link creation or modification' => 'Criação ou modificação de um link em uma tarefa',
|
||||
'Milestone' => 'Marco',
|
||||
'Documentation: %s' => 'Documentação: %s',
|
||||
'Reset the search/filter box' => 'Reiniciar o campo de pesquisa',
|
||||
'Documentation' => 'Documentação',
|
||||
'Table of contents' => 'Índice',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Versão',
|
||||
'Plugins' => 'Plugins',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Alterar cor da tarefa quando se usar um tipo especifico de ligação de tarefa',
|
||||
'Task link creation or modification' => 'Criação ou modificação de ligação de tarefa',
|
||||
'Milestone' => 'Objectivo',
|
||||
'Documentation: %s' => 'Documentação: %s',
|
||||
'Reset the search/filter box' => 'Repor caixa de procura/filtro',
|
||||
'Documentation' => 'Documentação',
|
||||
'Table of contents' => 'Tabela de conteúdos',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Versão',
|
||||
'Plugins' => 'Plugins',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Schimbă culoarea sarcinii când se folosește o anumită legătură în sarcină',
|
||||
'Task link creation or modification' => 'Creare sau modificare legături sarcină',
|
||||
'Milestone' => 'Țel',
|
||||
'Documentation: %s' => 'Documentație: %s',
|
||||
'Reset the search/filter box' => 'Resetează dialogul de căutare/filtre',
|
||||
'Documentation' => 'Documentație',
|
||||
'Table of contents' => 'Cuprins',
|
||||
'Author' => 'Autor',
|
||||
'Version' => 'Versiuni',
|
||||
'Plugins' => 'Extensii',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Изменение цвета задач при использовании ссылки на определенные задачи',
|
||||
'Task link creation or modification' => 'Ссылка на создание или модификацию задачи',
|
||||
'Milestone' => 'Веха',
|
||||
'Documentation: %s' => 'Документация: %s',
|
||||
'Reset the search/filter box' => 'Сбросить поиск/фильтр',
|
||||
'Documentation' => 'Документация',
|
||||
'Table of contents' => 'Содержание',
|
||||
'Author' => 'Автор',
|
||||
'Version' => 'Версия',
|
||||
'Plugins' => 'Плагины',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
// 'Change task color when using a specific task link' => '',
|
||||
// 'Task link creation or modification' => '',
|
||||
// 'Milestone' => '',
|
||||
// 'Documentation: %s' => '',
|
||||
// 'Reset the search/filter box' => '',
|
||||
// 'Documentation' => '',
|
||||
// 'Table of contents' => '',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
// 'Change task color when using a specific task link' => '',
|
||||
// 'Task link creation or modification' => '',
|
||||
// 'Milestone' => '',
|
||||
// 'Documentation: %s' => '',
|
||||
// 'Reset the search/filter box' => '',
|
||||
// 'Documentation' => '',
|
||||
// 'Table of contents' => '',
|
||||
// 'Author' => '',
|
||||
// 'Version' => '',
|
||||
// 'Plugins' => '',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'เปลี่ยนสีงานเมื่อมีการใช้การเชื่อมโยงงาน',
|
||||
'Task link creation or modification' => 'การสร้างการเชื่อมโยงงานหรือการปรับเปลี่ยน',
|
||||
'Milestone' => 'ขั้น',
|
||||
'Documentation: %s' => 'เอกสาร: %s',
|
||||
'Reset the search/filter box' => 'รีเซตกล่องค้นหา/ตัวกรอง',
|
||||
'Documentation' => 'เอกสาร',
|
||||
'Table of contents' => 'สารบัญ',
|
||||
'Author' => 'ผู้แต่ง',
|
||||
'Version' => 'เวอร์ชัน',
|
||||
'Plugins' => 'ปลั๊กอิน',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Belirli bir görev bağlantısı kullanıldığında görevin rengini değiştir',
|
||||
'Task link creation or modification' => 'Görev bağlantısı oluşturulması veya değiştirilmesi',
|
||||
'Milestone' => 'Kilometre taşı',
|
||||
'Documentation: %s' => 'Dokümantasyon: %s',
|
||||
'Reset the search/filter box' => 'Arama/Filtre kutusunu sıfırla',
|
||||
'Documentation' => 'Dokümantasyon',
|
||||
'Table of contents' => 'İçindekiler',
|
||||
'Author' => 'Yazar',
|
||||
'Version' => 'Versiyon',
|
||||
'Plugins' => 'Eklentiler',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => 'Thay đổi màu nhiệm vụ khi sử dụng liên kết nhiệm vụ cụ thể',
|
||||
'Task link creation or modification' => 'Tạo hoặc sửa đổi liên kết nhiệm vụ',
|
||||
'Milestone' => 'Milestone',
|
||||
'Documentation: %s' => 'Tài liệu: %s',
|
||||
'Reset the search/filter box' => 'Đặt lại hộp tìm kiếm / bộ lọc',
|
||||
'Documentation' => 'Tài liệu hướng dẫn',
|
||||
'Table of contents' => 'Mục lục',
|
||||
'Author' => 'Tác giả',
|
||||
'Version' => 'Phiên bản',
|
||||
'Plugins' => 'Plugins',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => '当任务关联到指定任务时改变颜色',
|
||||
'Task link creation or modification' => '任务链接创建或更新时间',
|
||||
'Milestone' => '里程碑',
|
||||
'Documentation: %s' => '文档:%s',
|
||||
'Reset the search/filter box' => '重置搜索/过滤框',
|
||||
'Documentation' => '帮助文档',
|
||||
'Table of contents' => '表内容',
|
||||
'Author' => '作者',
|
||||
'Version' => '版本',
|
||||
'Plugins' => '插件管理',
|
||||
|
|
|
|||
|
|
@ -742,10 +742,8 @@ return array(
|
|||
'Change task color when using a specific task link' => '當任務關聯到指定任務時改變顏色',
|
||||
'Task link creation or modification' => '任務連接建立或更新時間',
|
||||
'Milestone' => '里程碑',
|
||||
'Documentation: %s' => '文件:%s',
|
||||
'Reset the search/filter box' => '重設搜尋/過濾框',
|
||||
'Documentation' => '文件',
|
||||
'Table of contents' => '表内容',
|
||||
'Author' => '作者',
|
||||
'Version' => '版本',
|
||||
'Plugins' => '插件',
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
<section id="main">
|
||||
<div class="page-header">
|
||||
<ul>
|
||||
<li>
|
||||
<?= $this->url->icon('life-ring', t('Table of contents'), 'DocumentationController', 'show', array('file' => 'index')) ?>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="markdown documentation">
|
||||
<?= $content ?>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -29,7 +29,8 @@
|
|||
<?= $this->hook->render('template:header:dropdown') ?>
|
||||
|
||||
<li>
|
||||
<?= $this->url->icon('life-ring', t('Documentation'), 'DocumentationController', 'show') ?>
|
||||
<i class="fa fa-fw fa-life-ring" aria-hidden="true"></i>
|
||||
<?= $this->url->doc(t('Documentation'), 'index') ?>
|
||||
</li>
|
||||
<?php if (! DISABLE_LOGOUT): ?>
|
||||
<li>
|
||||
|
|
|
|||
|
|
@ -152,3 +152,6 @@ defined('TOTP_ISSUER') or define('TOTP_ISSUER', 'Kanboard');
|
|||
|
||||
// Comma separated list of fields to not synchronize when using external authentication providers
|
||||
defined('EXTERNAL_AUTH_EXCLUDE_FIELDS') or define('EXTERNAL_AUTH_EXCLUDE_FIELDS', 'username');
|
||||
|
||||
// Documentation URL
|
||||
defined('DOCUMENTATION_URL_PATTERN') or define('DOCUMENTATION_URL_PATTERN', 'https://docs.kanboard.org/en/%s/user_guide/%s.html');
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
Sbalený a rozbalený režim
|
||||
===========================
|
||||
|
||||
Úkoly na desce mohou být zobrazeny ve sbaleném nebo v rozbaleném režimu.
|
||||
Přechod z jednoho pohledu na druhý lze provést pomocí klávesové zkratky **"s"** nebo pomocí rozbalovací nabídky vlevo.
|
||||
|
||||
Sbalený režim
|
||||
--------------
|
||||
|
||||

|
||||
|
||||
- Pokud je úkol někomu přiřazen, zobrazí se vedle čísla úlohy iniciály osoby.
|
||||
- Pokud je název úlohy příliš dlouhý, můžete svou myš umístit přes úkol, aby se zobrazil popis s celým názvem.
|
||||
|
||||
Rozbalený režim
|
||||
-------------
|
||||
|
||||

|
||||
|
|
@ -1,10 +0,0 @@
|
|||
Horizontální rolování a kompaktní režim
|
||||
=====================================
|
||||
|
||||
Pokud se nástěnka nevejde na obrazovku, zobrazí se v dolní části vodorovná posuvná lišta.
|
||||
|
||||
Je však možné přepnout na kompaktní zobrazení, aby se zobrazily všechny sloupce na obrazovce.
|
||||
|
||||

|
||||
|
||||
Přepínání mezi horizontálním rolováním a kompaktním zobrazením lze provést pomocí klávesové zkratky **"c"** nebo pomocí rozbalovací nabídky vlevo nahoře.
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
Zobrazit a skrýt sloupce na nástěnce
|
||||
==================================
|
||||
|
||||
Sloupce můžete velmi snadno skrýt nebo zobrazit na nástěnce:
|
||||
|
||||

|
||||
|
||||
Chcete-li sloupec skrýt, klikněte na rozbalovací nabídku sloupců a zvolte "Skrýt tento sloupec".
|
||||
|
||||

|
||||
|
||||
Chcete-li znovu zobrazit sloupec, klikněte na ikonu plus.
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
Uzavírání úkolů
|
||||
=============
|
||||
|
||||
Když je úkol uzavřen, je skrytý z nástěnky.
|
||||
|
||||
Vždy však můžete získat přístup k seznamu uzavřených úkolů pomocí dotazu **status:closed** v libovolném vyhledávacím formuláři nebo jednoduše vybrat **Uzavřené úkoly** z rozevírací nabídky filtru.
|
||||
|
||||
Existují dva různé způsoby jak zavřít úkol z rozbalovací nabídky úloh na nástěnce:
|
||||
|
||||

|
||||
|
||||
Nebo z nabídky postranního panelu úloh v detailním zobrazení úkolu:
|
||||
|
||||

|
||||
|
||||
Poznámka: Když zavřete úkol, všechny dílčí úkoly, které nebyly dokončeny, budou změněny na stav "Dokončeno".
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
Vytváření projektů
|
||||
=================
|
||||
|
||||
Kanboard dokáže zpracovat více projektů. Existují dva druhy projektů:
|
||||
|
||||
- Týmové projekty
|
||||
- Soukromý projekt pro jednoho uživatele
|
||||
|
||||
Vytváření projektů pro více uživatelů
|
||||
-------------------------------------
|
||||
|
||||
- Tyto projekty mohou vytvářet pouze správci a správci projektů
|
||||
- Správa uživatelů je k dispozici
|
||||
|
||||
Na nástěnce klikněte na odkaz **Nový projekt**:
|
||||
|
||||

|
||||
|
||||
Je to velmi snadné: stačí najít jméno pro svůj projekt!
|
||||
|
||||
Vytváření soukromého projektu
|
||||
-----------------------------
|
||||
|
||||
- Každý může vytvořit soukromý projekt
|
||||
- **Není** zde možnost správy uživatelů
|
||||
- Do projektu mohou přistupovat pouze vlastníci a správci
|
||||
|
||||
Na nástěnce klikněte na odkaz **Nový soukromý projekt**.
|
||||
|
||||
Vytváření projektů z jiného projektu
|
||||
--------------------------------------
|
||||
|
||||
Při vytváření nového projektu můžete zvolit duplikování vlastností jiného projektu:
|
||||
|
||||
- Oprávnění
|
||||
- Akce
|
||||
- Dráhy
|
||||
- Kategorie
|
||||
- Úkoly
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
Vytváření úkolů
|
||||
==============
|
||||
|
||||
Na nástěnce klikněte na znaménko plus vedle názvu sloupce:
|
||||
|
||||

|
||||
|
||||
Poté se zobrazí formulář vytvoření úkolu:
|
||||
|
||||

|
||||
|
||||
Popis pole:
|
||||
|
||||
- **Název**: Název vašeho úkolu, který bude zobrazen na nástěnce.
|
||||
- **Popis**: Popis, který používá formát [Markdown](syntax-guide.markdown).
|
||||
- **Štítky**: Seznam štítků přidružených k úkolům.
|
||||
- **Vytvoření dalšího úkolu**: Zaškrtněte toto políčko, pokud chcete vytvořit podobný úkol (některé pole budou předem naplněny).
|
||||
- **Barva**: Vyberte barvu karty.
|
||||
- **Vlastník**: Osoba, která bude na úkolu pracovat.
|
||||
- **Kategorie**: K úloze lze přiřadit pouze jednu kategorii (viditelné pouze v případě, že projekty mají kategorie).
|
||||
- **Sloupec**: Sloupec, ve kterém bude úloha vytvořena, úkol bude umístěn v dolní části.
|
||||
- **Priorita**: Priorita úkolu, rozsah lze definovat v nastavení projektu, výchozí hodnoty jsou P0 až P3.
|
||||
- **Složitost**: Používá se v agilním řízení projektů (Scrum), složitost nebo tzv. "story-points", to je číslo, které říká týmu, jak těžký je úkol. Často lidé používají Fibonacciho posloupnost.
|
||||
- **Reference**: Externí ID úkolu, např. to může být číslo ticketu, které pochází z jiného systému
|
||||
- **Časový odhad**: Odhad v hodinách pro dokončení úkolu.
|
||||
- **Čas strávený**: Doba strávená při práci na úkolu.
|
||||
- **Datum zahájení**: Toto je pole pro zadání data a času zahájení.
|
||||
- **Datum splnění**: Opakované úkoly budou mít červený termín splnění a nadcházející termíny budou černé na nástěnce. Pro zadání datumů je k dispozici několik formátů datumu.
|
||||
|
||||
Pomocí odkazu náhled můžete vidět popis úlohy převedený ze syntaxe Markdown.
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
Kopírovat a přesunout úkoly
|
||||
========================
|
||||
|
||||
Kopírovat úkol do stejného projektu
|
||||
--------------------------------------
|
||||
|
||||
Přejděte do zobrazení úkolů a vlevo vyberte položku **Vytvořit kopii**.
|
||||
|
||||

|
||||
|
||||
Nový úkol bude vytvořen se stejnými vlastnostmi jako originál.
|
||||
|
||||
Kopírovat úkol do jiného projektu
|
||||
-----------------------------------
|
||||
|
||||
Přejděte do zobrazení úkolů a vyberte možnost **Vytvořit kopii v jiném projektu **.
|
||||
|
||||

|
||||
|
||||
V rozbalovací nabídce se zobrazí pouze projekty, ve kterých jste členem.
|
||||
|
||||
Než provedete kopírování úkolů, Kanboard se vás zeptá na cílové vlastnosti, které nejsou společné mezi zdrojovým a cílovým projektem.
|
||||
|
||||
V zásadě musíte definovat:
|
||||
|
||||
- cílová dráha
|
||||
- Sloupec
|
||||
- Kategorie
|
||||
- Vlastník
|
||||
|
||||
Přesunout úkol do jiného projektu
|
||||
------------------------------
|
||||
|
||||
Přejděte do zobrazení úkolů a vyberte možnost **Přesunout do jiného projektu**.
|
||||
|
||||
Přesunutí úkolu do jiného projektu pracuje stejným způsobem jako kopírování, musíte zvolit nové vlastnosti úkolu.
|
||||
|
||||
Seznam kopírovaných polí
|
||||
-------------------------
|
||||
|
||||
Zde je seznam kopírovaných vlastností:
|
||||
|
||||
- název
|
||||
- popis
|
||||
- datum splnění
|
||||
- barva
|
||||
- projekt
|
||||
- sloupec
|
||||
- vlastník
|
||||
- skóre
|
||||
- kategorie
|
||||
- strávený čas
|
||||
- dráha
|
||||
- stav opakování
|
||||
- spouštěč opakování
|
||||
- faktor pro opakování
|
||||
- časové okno pro opakování
|
||||
- výchozí datum pro výpočet opakování
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
Úpravy projektů
|
||||
================
|
||||
|
||||
Projekty lze kdykoli přejmenovat nebo zakázat.
|
||||
|
||||
Chcete-li projekt přejmenovat, klikněte na odkaz "Upravit projekt" vlevo.
|
||||
|
||||

|
||||
|
||||
- Datum zahájení a datum ukončení se používají k vygenerování Ganttova grafu projektu.
|
||||
- Popis je viditelný jako nápověda na nástěnce a na stránce výpisů projektů.
|
||||
- Správci a správci projektů mohou převádět soukromý projekt na projekt s více uživateli změnou zaškrtávacího políčka "Soukromý projekt".
|
||||
- Můžete také převést týmový projekt na soukromý projekt.
|
||||
|
||||
Poznámka: Když převedete projekt na soukromý, všichni stávající uživatelé budou stále mít přístup k projektu. Seznam uživatelů můžete upravit podle vašich potřeb.
|
||||
|
|
@ -1,149 +0,0 @@
|
|||
Obsah
|
||||
=============
|
||||
|
||||
Používání Kanboard
|
||||
--------------
|
||||
|
||||
### Úvod
|
||||
|
||||
- [Co je Kanban?](what-is-kanban.markdown)
|
||||
- [Kanban vs Todo Lists and Scrum](kanban-vs-todo-and-scrum.markdown)
|
||||
- [Usage examples](usage-examples.markdown)
|
||||
|
||||
### Používání nástěnky
|
||||
|
||||
- [Zobrazení Nástěnka, Kalendář, Seznam a Gantt](project-views.markdown)
|
||||
- [Sbalený a rozbalený režim](board-collapsed-expanded.markdown)
|
||||
- [Horizontální rolování a kompaktní režim](board-horizontal-scrolling-and-compact-view.markdown)
|
||||
- [Zobrazit a skrýt sloupce](board-show-hide-columns.markdown)
|
||||
|
||||
### Práce s projekty
|
||||
|
||||
- [Typy projektů](project-types.markdown)
|
||||
- [Vytváření projektů](creating-projects.markdown)
|
||||
- [Úpravy projektů](editing-projects.markdown)
|
||||
- [Odstranění projektů](removing-projects.markdown)
|
||||
- [Sharing boards and tasks](sharing-projects.markdown)
|
||||
- [Automatic actions](automatic-actions.markdown)
|
||||
- [Oprávnění projektu](project-permissions.markdown)
|
||||
- [Swimlanes](swimlanes.markdown)
|
||||
- [Calendar](calendar.markdown)
|
||||
- [Analytics](analytics.markdown)
|
||||
- [Gantt chart for tasks](gantt-chart-tasks.markdown)
|
||||
- [Gantt chart for projects](gantt-chart-projects.markdown)
|
||||
- [Custom filters](custom-filters.markdown)
|
||||
- [Custom project roles](custom-project-roles.markdown)
|
||||
|
||||
### Práce s úkoly
|
||||
|
||||
- [Vytváření úkolů](creating-tasks.markdown)
|
||||
- [Uzavírání úkolů](closing-tasks.markdown)
|
||||
- [Kopírovat a přesunout úkoly](duplicate-move-tasks.markdown)
|
||||
- [Adding screenshots](screenshots.markdown)
|
||||
- [Internal Task links](task-links.markdown)
|
||||
- [Transitions](transitions.markdown)
|
||||
- [Time tracking](time-tracking.markdown)
|
||||
- [Recurring tasks](recurring-tasks.markdown)
|
||||
- [Create tasks by email](create-tasks-by-email.markdown)
|
||||
- [Subtasks](subtasks.markdown)
|
||||
- [Analytics for tasks](analytics-tasks.markdown)
|
||||
- [User mentions](user-mentions.markdown)
|
||||
- [Tags](tags.markdown)
|
||||
|
||||
### Working with users and groups
|
||||
|
||||
- [Roles](roles.markdown)
|
||||
- [User Types](user-types.markdown)
|
||||
- [Group management](groups.markdown)
|
||||
- [User management](user-management.markdown)
|
||||
- [Notifications](notifications.markdown)
|
||||
- [Two factor authentication](2fa.markdown)
|
||||
|
||||
### Settings
|
||||
|
||||
- [Keyboard shortcuts](keyboard-shortcuts.markdown)
|
||||
- [Application settings](application-configuration.markdown)
|
||||
- [Nastavení projektu](project-configuration.markdown)
|
||||
- [Board settings](board-configuration.markdown)
|
||||
- [Calendar settings](calendar-configuration.markdown)
|
||||
- [Link settings](link-labels.markdown)
|
||||
- [Currency rate](currency-rate.markdown)
|
||||
|
||||
### Integrations
|
||||
|
||||
- [iCalendar subscriptions](ical.markdown)
|
||||
- [RSS/Atom subscriptions](rss.markdown)
|
||||
- [Json-RPC API](api-json-rpc.markdown)
|
||||
- [Webhooks](webhooks.markdown)
|
||||
- [Plugins](plugins.markdown)
|
||||
|
||||
### More information
|
||||
|
||||
- [Advanced Search Syntax](search.markdown)
|
||||
- [Command line interface](cli.markdown)
|
||||
- [Syntax guide](syntax-guide.markdown)
|
||||
- [Brute force protection](bruteforce-protection.markdown)
|
||||
- [Frequently asked questions](faq.markdown)
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
- [Solving database migration issues](solving-database-migration-issues.markdown)
|
||||
- [Blank page after upgrading](solving-blank-page-issue.markdown)
|
||||
- [Unable to open a session on Windows IIS and Internet Explorer](solving-session-issue-windows-iis-ie.markdown)
|
||||
- [Performances](performances.markdown)
|
||||
|
||||
Technical details
|
||||
-----------------
|
||||
|
||||
### Installation
|
||||
|
||||
- [Requirements](requirements.markdown)
|
||||
- [Installation instructions](installation.markdown)
|
||||
- [Upgrade Kanboard to a new version](update.markdown)
|
||||
- [Installation on Ubuntu](ubuntu-installation.markdown)
|
||||
- [Installation on Debian](debian-installation.markdown)
|
||||
- [Installation on Centos](centos-installation.markdown)
|
||||
- [Installation on OpenSuse](suse-installation.markdown)
|
||||
- [Installation on FreeBSD](freebsd-installation.markdown)
|
||||
- [Installation on Windows Server with IIS](windows-iis-installation.markdown)
|
||||
- [Installation on Windows Server with Apache](windows-apache-installation.markdown)
|
||||
- [Installation on Heroku](heroku.markdown)
|
||||
- [Run Kanboard with Docker](docker.markdown)
|
||||
- [Run Kanboard with Vagrant](vagrant.markdown)
|
||||
- [Run Kanboard on Cloudron](cloudron.markdown)
|
||||
|
||||
### Configuration
|
||||
|
||||
- [Daily background job](cronjob.markdown)
|
||||
- [Background Worker](worker.markdown)
|
||||
- [Config file](config.markdown)
|
||||
- [Environment variables](env.markdown)
|
||||
- [Email configuration](email-configuration.markdown)
|
||||
- [URL rewriting](nice-urls.markdown)
|
||||
- [Plugin Directory](plugin-directory.markdown)
|
||||
|
||||
### Database
|
||||
|
||||
- [Sqlite database management](sqlite-database.markdown)
|
||||
- [How to use Mysql](mysql-configuration.markdown)
|
||||
- [How to use Postgresql](postgresql-configuration.markdown)
|
||||
|
||||
### Authentication
|
||||
|
||||
- [LDAP authentication](ldap-authentication.markdown)
|
||||
- [LDAP group synchronization](ldap-group-sync.markdown)
|
||||
- [LDAP profile picture](ldap-profile-picture.markdown)
|
||||
- [LDAP parameters](ldap-parameters.markdown)
|
||||
- [LDAP configuration examples](ldap-configuration-examples.markdown)
|
||||
- [Reverse proxy authentication](reverse-proxy-authentication.markdown)
|
||||
|
||||
### Contributors
|
||||
|
||||
- [Contributor guide](contributing.markdown)
|
||||
- [Translations](translations.markdown)
|
||||
- [Coding standards](coding-standards.markdown)
|
||||
- [Running tests](tests.markdown)
|
||||
- [Build assets](assets.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.
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
Nastavení projektu
|
||||
================
|
||||
|
||||
Přejděte do nabídky **Nastavení** a poté vlevo vyberte možnost **Nastavení projektu**.
|
||||
|
||||

|
||||
|
||||
### Výchozí sloupce pro nové projekty
|
||||
|
||||
Zde můžete změnit výchozí názvy sloupců.
|
||||
Toto je užitečné, pokud vždy vytváříte projekty se stejnými sloupci.
|
||||
|
||||
Každé jméno sloupce musí být odděleno čárkou.
|
||||
|
||||
Ve výchozím nastavení Kanboard používá tyto názvy sloupců: Nevyřízené, Připraveno, V řešení a Dokončeno.
|
||||
|
||||
### Výchozí kategorie pro nové projekty
|
||||
|
||||
Kategorie nejsou globální pro aplikaci, ale jsou připojeny k projektu.
|
||||
Každý projekt může mít různé kategorie.
|
||||
|
||||
Pokud však vždy vytvoříte stejné kategorie pro všechny vaše projekty, můžete zde definovat seznam kategorií, které chcete vytvořit automaticky.
|
||||
|
||||
### Povolit současně pouze jednu dílčí úlohu pro uživatele
|
||||
|
||||
Je-li tato volba povolena, může uživatel pracovat pouze s jednou dílčí úlohou v daném okamžiku.
|
||||
|
||||
Pokud má další dílčí úloha stav "probíhající", zobrazí se toto dialogové okno:
|
||||
|
||||

|
||||
|
||||
### Spustit automaticky sledování času
|
||||
|
||||
- Pokud je povoleno, když je stav dílčí úlohy změněn na "probíhající", časovač se spustí automaticky.
|
||||
- Tuto možnost deaktivujte, pokud nepoužíváte sledování času.
|
||||
|
||||
### Zahrnout uzavřené úkoly v kumulativním vývojovém diagramu
|
||||
|
||||
- Pokud je povoleno, uzavřené úkoly budou zahrnuty do kumulativního diagramu.
|
||||
- Pokud je zakázáno, budou zahrnuty pouze otevřené úkoly.
|
||||
- Tato volba ovlivňuje sloupec "celkem" tabulky "project_daily_column_stats"
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
Oprávnění projektu
|
||||
===================
|
||||
|
||||
Každý projekt je izolován od jiných projektů.
|
||||
Přístup k projektu musí být povolen vlastníkem projektu.
|
||||
|
||||
Každý uživatel a každá skupina mohou mít přiřazenou jinou roli.
|
||||
Existují 3 typy [rolí projektu](roles.markdown):
|
||||
|
||||
- Správce projektu
|
||||
- Člen projektu
|
||||
- Čtenář projektu
|
||||
|
||||
Pouze správci mají přístup ke všemu.
|
||||
|
||||
Přiřazení rolí je viditelné v **Nastavení projektu > Oprávnění**:
|
||||
|
||||

|
||||
|
||||
U soukromých projektů nelze definovat oprávnění.
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
Typy projektů
|
||||
=============
|
||||
|
||||
Existují dva druhy projektů:
|
||||
|
||||
| Type | Description |
|
||||
|-------------------|-----------------------------------------------------------------------|
|
||||
| Týmový projekt | Projekt s řízením uživatelů a skupin |
|
||||
| Soukromý projekt | Projekt, který patří pouze jedné osobě, nemá správu uživatelů |
|
||||
|
||||
- Pouze správci a aplikační správci mohou vytvářet týmové projekty.
|
||||
- Soukromé projekty může vytvářet každý.
|
||||
|
||||
[Přečtěte si dokumentaci o rolích v Kanboard](roles.markdown)
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
Nástěnka, kalendář a zobrazení seznamu
|
||||
==============================
|
||||
|
||||
Pro každý projekt je možné úkoly vizualizovat s několika pohledy: ** Nástěnka, Kalendář, Seznam a Gantt **.
|
||||
V každém zobrazení se zobrazí výsledek pole filtru v horní části.
|
||||
Vyhledávač používá [advanced syntax](search.markdown).
|
||||
|
||||
Zobrazení nástěnky
|
||||
-----------------
|
||||
|
||||

|
||||
|
||||
- S tímto pohledem můžete snadno přetáhnout úkoly mezi sloupci.
|
||||
- Můžete také použít klávesovou zkratku **"v b"** pro přepnutí na nástěnku.
|
||||
- Úkoly se stínem byly nedávno upraveny.
|
||||
|
||||

|
||||
|
||||
Po dosažení limitu úkolů pro sloupec se pozadí stává červeným. To znamená, že probíhá příliš mnoho úkolů ve stejnou dobu.
|
||||
|
||||
[Další informace o konfiguraci nástěnky](board-configuration.markdown)
|
||||
|
||||
Zobrazení kalendáře
|
||||
--------------
|
||||
|
||||

|
||||
|
||||
- Pomocí tohoto pohledu můžete vizualizovat úkoly s datem splnění.
|
||||
- V závislosti na nastavení můžete také vidět probíhající úlohy.
|
||||
- K přepnutí do zobrazení kalendáře můžete také použít klávesovou zkratku **"v c"**.
|
||||
- [Další informace o konfiguraci kalendáře](calendar-configuration.markdown)
|
||||
|
||||
Zobrazení seznamu
|
||||
---------
|
||||
|
||||

|
||||
|
||||
- V tomto zobrazení jsou všechny výsledky vašeho vyhledávání zobrazeny v tabulce.
|
||||
- K přepnutí do zobrazení seznamu můžete také použít klávesovou zkratku **"v l"**.
|
||||
|
||||
Zobrazení jako Gantt
|
||||
-----------------
|
||||
|
||||

|
||||
|
||||
- Zobrazení Gantt zobrazuje úkoly na horizontální časové ose.
|
||||
- Datum zahájení a datum splnění se používají k zobrazení grafu.
|
||||
- Pro rychlý přístup použijte klávesovou zkratku: **v g**.
|
||||
|
||||
Přehled projektu
|
||||
----------------
|
||||
|
||||

|
||||
|
||||
- Zobrazení popisu projektu.
|
||||
- Připojit a nahrát dokumenty do projektu.
|
||||
- Zobrazit seznam členů projektu.
|
||||
- Zobrazit poslední aktivity projektu.
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
Odstranění projektů
|
||||
=================
|
||||
|
||||
Chcete-li projekt odebrat, musíte být správcem projektu nebo správcem.
|
||||
|
||||
Přejděte na položku **"Nastavení projektu"** a v nabídce vlevo, v dolní části zvolte možnost "Odstranit"**.
|
||||
|
||||

|
||||
|
||||
Odstranění projektu odstraní všechny úkoly, které patří tomuto projektu.
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
Co je Kanban?
|
||||
===============
|
||||
|
||||
Kanban je metodika původně vyvinutá společností Toyota aby byla efektivnější.
|
||||
|
||||
Kanban si klade za cíl dva úkoly:
|
||||
|
||||
- Vizualizujte svůj pracovní postup
|
||||
- Omezte množství své rozdělané práce
|
||||
|
||||
Vizualizujte svůj pracovní postup
|
||||
-----------------------
|
||||
|
||||
- Vaše práce je zobrazena na nástěnce, takže máte přehled o vašem projektu
|
||||
- Každý sloupec představuje krok ve vašem pracovním postupu
|
||||
|
||||
Omezte množství své rozdělané práce
|
||||
--------------------------------------------------
|
||||
- Slepšuje soustředění, tím že se vyhne souběžné práci
|
||||
- Každá fáze může mít limity pro rozdělanou práci
|
||||
- Limity pomáhají identifikovat překážky
|
||||
- Limity pomáhají vyhnout se práci na příliš mnoha úlohách současně
|
||||
|
||||
Měření výkonu
|
||||
=======================
|
||||
|
||||
Kanban využívá doby potřebné k realizaci a doby cyklů k měření výkonu:
|
||||
|
||||
- ** Doba potřebná k realizaci **: Čas mezi vytvořením a dokončením úlohy
|
||||
- ** Doba cyklu **: Čas mezi zahájením a dokončením úlohy
|
||||
|
||||
Můžete například mít 100 dní doby potřebné k realizaci, ale musíte dokončit úkol pouze za 1 hodinu.
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
Custom CSS
|
||||
==========
|
||||
|
||||
Einstellung > Anwendungskonfiguration > benutzerdefiniertes Stylesheet
|
||||
|
||||
Inviduelle Kategorien Darstellung
|
||||
---------------------------------
|
||||
|
||||
Für den Kategorien-Container allgemeine Darstellung:
|
||||
|
||||
```css
|
||||
.task-board-category-container-color span {
|
||||
border: solid 0.5px grey;
|
||||
color: black;
|
||||
}
|
||||
```
|
||||
|
||||
Für den Text-Inhalt:
|
||||
|
||||
```css
|
||||
[class*="category-Patchkanditat"] {
|
||||
background-color: rgba(255, 0, 0, 0.50);
|
||||
border: none!important;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
box-shadow: 0 1px 1px rgba(186, 186, 186, 0.55);
|
||||
color: white!important;
|
||||
font-size:11px;
|
||||
}
|
||||
```
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
Two-Factor Authentication
|
||||
=========================
|
||||
|
||||
Each user can enable the [two-factor authentication](http://en.wikipedia.org/wiki/Two_factor_authentication).
|
||||
After a successful login, a one-time code (6 characters) is asked to the user to allow access to Kanboard.
|
||||
|
||||
This code has to be provided by a compatible software usually installed on your smartphone.
|
||||
|
||||
Kanboard use the [Time-based One-time Password Algorithm](http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm) defined in the [RFC 6238](http://tools.ietf.org/html/rfc6238).
|
||||
|
||||
There are many software compatible with the standard TOTP system.
|
||||
For example, you can use these applications:
|
||||
|
||||
- [Google Authenticator](https://github.com/google/google-authenticator/) (Android, iOS, Blackberry)
|
||||
- [FreeOTP](https://freeotp.github.io/) (Android, iOS)
|
||||
- [OATH Toolkit](http://www.nongnu.org/oath-toolkit/) (Command line utility on Unix/Linux)
|
||||
|
||||
This system can work offline and you don't necessarily need to have a mobile phone.
|
||||
|
||||
Setup
|
||||
-----
|
||||
|
||||
1. Go to your user profile
|
||||
2. On the left, click on **Two factor authentication** and check the box
|
||||
3. A secret key is generated for you
|
||||
|
||||

|
||||
|
||||
- You have to save the secret key in your TOTP software. If you use a smartphone, the easiest solution is to scan the QR code with FreeOTP or Google Authenticator.
|
||||
- Each time you will open a new session, a new code will be asked
|
||||
- Don't forget to test your device before closing your session
|
||||
|
||||
A new secret key is generated each time you enable/disable this feature.
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
Analytics for tasks
|
||||
===================
|
||||
|
||||
Each task has an analytics section available from the left menu in the task view.
|
||||
|
||||
Lead and cycle time
|
||||
-------------------
|
||||
|
||||

|
||||
|
||||
- The lead time is the time between the task creation and the date of completion (task closed).
|
||||
- The cycle time is the time between the start date and the date of completion.
|
||||
- If the task is not closed the current time is used instead of the date of completion.
|
||||
- If the start date is not specified, the cycle time is not calculated.
|
||||
|
||||
Note: You can configure an automatic action to define the start date automatically when you move a task to the column of your choice.
|
||||
|
||||
Time spent into each column
|
||||
---------------------------
|
||||
|
||||

|
||||
|
||||
- This chart shows the total time spent into each column for the task.
|
||||
- The time spent is calculated until the task is closed.
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
Project Analytics
|
||||
=================
|
||||
|
||||
Each project have an analytics section. Depending on how you are using Kanboard, you can see those reports:
|
||||
|
||||
User repartition
|
||||
----------------
|
||||
|
||||

|
||||
|
||||
This pie chart show the number of open tasks assigned per user.
|
||||
|
||||
Task distribution
|
||||
-----------------
|
||||
|
||||

|
||||
|
||||
This pie chart gives an overview of the number of open tasks per column.
|
||||
|
||||
Cumulative flow diagram
|
||||
-----------------------
|
||||
|
||||

|
||||
|
||||
- This chart shows the number of tasks cumulatively for each column over the time.
|
||||
- The legend order is the same as the stack in the chart.
|
||||
- The color of each column is determined automatically.
|
||||
- Every day, the number of tasks is recorded for each column.
|
||||
- If you would like to exclude closed tasks, change the [global project settings](project-configuration.markdown).
|
||||
|
||||
Note: You need to have at least two days of data to see the graph.
|
||||
|
||||
Burn down chart
|
||||
---------------
|
||||
|
||||

|
||||
|
||||
The [burn down chart](http://en.wikipedia.org/wiki/Burn_down_chart) is available for each project.
|
||||
|
||||
- This chart is a graphical representation of work left to do versus time.
|
||||
- Kanboard use the complexity or story point to generate this diagram.
|
||||
- Everyday, the sum of the story points for each column is calculated.
|
||||
|
||||
Average time spent into each column
|
||||
-----------------------------------
|
||||
|
||||

|
||||
|
||||
This chart shows the average time spent into each column for the last 1000 tasks.
|
||||
|
||||
- Kanboard uses the task transitions to calculate the data.
|
||||
- The time spent is calculated until the task is closed.
|
||||
|
||||
Average Lead and Cycle time
|
||||
---------------------------
|
||||
|
||||

|
||||
|
||||
This chart show the average lead and cycle time for the last 1000 tasks over time.
|
||||
|
||||
- The lead time is the time between the task creation and the date of completion.
|
||||
- The cycle time is time between the specified start date of the task to the completion date.
|
||||
- If the task is not closed, the current time is used instead of the date of completion.
|
||||
|
||||
Those metrics are calculated and recorded every day for the whole project.
|
||||
|
||||
Note: Don't forget to run the [daily cronjob](cronjob.markdown) to have accurate statistics.
|
||||
|
|
@ -1,245 +0,0 @@
|
|||
API Automatic Actions Procedures
|
||||
================================
|
||||
|
||||
## getAvailableActions
|
||||
|
||||
- Purpose: **Get list of available automatic actions**
|
||||
- Parameters: none
|
||||
- Result on success: **list of actions**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAvailableActions",
|
||||
"id": 1217735483
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1217735483,
|
||||
"result": {
|
||||
"\Kanboard\Action\TaskLogMoveAnotherColumn": "Add a comment logging moving the task between columns",
|
||||
"\Kanboard\Action\TaskAssignColorUser": "Assign a color to a specific user",
|
||||
"\Kanboard\Action\TaskAssignColorColumn": "Assign a color when the task is moved to a specific column",
|
||||
"\Kanboard\Action\TaskAssignCategoryColor": "Assign automatically a category based on a color",
|
||||
"\Kanboard\Action\TaskAssignColorCategory": "Assign automatically a color based on a category",
|
||||
"\Kanboard\Action\TaskAssignSpecificUser": "Assign the task to a specific user",
|
||||
"\Kanboard\Action\TaskAssignCurrentUser": "Assign the task to the person who does the action",
|
||||
"\Kanboard\Action\TaskUpdateStartDate": "Automatically update the start date",
|
||||
"\Kanboard\Action\TaskAssignUser": "Change the assignee based on an external username",
|
||||
"\Kanboard\Action\TaskAssignCategoryLabel": "Change the category based on an external label",
|
||||
"\Kanboard\Action\TaskClose": "Close a task",
|
||||
"\Kanboard\Action\CommentCreation": "Create a comment from an external provider",
|
||||
"\Kanboard\Action\TaskCreation": "Create a task from an external provider",
|
||||
"\Kanboard\Action\TaskDuplicateAnotherProject": "Duplicate the task to another project",
|
||||
"\Kanboard\Action\TaskMoveColumnAssigned": "Move the task to another column when assigned to a user",
|
||||
"\Kanboard\Action\TaskMoveColumnUnAssigned": "Move the task to another column when assignee is cleared",
|
||||
"\Kanboard\Action\TaskMoveAnotherProject": "Move the task to another project",
|
||||
"\Kanboard\Action\TaskOpen": "Open a task"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAvailableActionEvents
|
||||
|
||||
- Purpose: **Get list of available events for actions**
|
||||
- Parameters: none
|
||||
- Result on success: **list of events**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAvailableActionEvents",
|
||||
"id": 2116665643
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2116665643,
|
||||
"result": {
|
||||
"bitbucket.webhook.commit": "Bitbucket commit received",
|
||||
"task.close": "Closing a task",
|
||||
"github.webhook.commit": "Github commit received",
|
||||
"github.webhook.issue.assignee": "Github issue assignee change",
|
||||
"github.webhook.issue.closed": "Github issue closed",
|
||||
"github.webhook.issue.commented": "Github issue comment created",
|
||||
"github.webhook.issue.label": "Github issue label change",
|
||||
"github.webhook.issue.opened": "Github issue opened",
|
||||
"github.webhook.issue.reopened": "Github issue reopened",
|
||||
"gitlab.webhook.commit": "Gitlab commit received",
|
||||
"gitlab.webhook.issue.closed": "Gitlab issue closed",
|
||||
"gitlab.webhook.issue.opened": "Gitlab issue opened",
|
||||
"task.move.column": "Move a task to another column",
|
||||
"task.open": "Open a closed task",
|
||||
"task.assignee_change": "Task assignee change",
|
||||
"task.create": "Task creation",
|
||||
"task.create_update": "Task creation or modification",
|
||||
"task.update": "Task modification"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getCompatibleActionEvents
|
||||
|
||||
- Purpose: **Get list of events compatible with an action**
|
||||
- Parameters:
|
||||
- **action_name** (string, required)
|
||||
- Result on success: **list of events**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getCompatibleActionEvents",
|
||||
"id": 899370297,
|
||||
"params": [
|
||||
"\Kanboard\Action\TaskClose"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 899370297,
|
||||
"result": {
|
||||
"bitbucket.webhook.commit": "Bitbucket commit received",
|
||||
"github.webhook.commit": "Github commit received",
|
||||
"github.webhook.issue.closed": "Github issue closed",
|
||||
"gitlab.webhook.commit": "Gitlab commit received",
|
||||
"gitlab.webhook.issue.closed": "Gitlab issue closed",
|
||||
"task.move.column": "Move a task to another column"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getActions
|
||||
|
||||
- Purpose: **Get list of actions for a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **list of actions properties**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getActions",
|
||||
"id": 1433237746,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1433237746,
|
||||
"result": [
|
||||
{
|
||||
"id" : "13",
|
||||
"project_id" : "2",
|
||||
"event_name" : "task.move.column",
|
||||
"action_name" : "\Kanboard\Action\TaskAssignSpecificUser",
|
||||
"params" : {
|
||||
"column_id" : "5",
|
||||
"user_id" : "1"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## createAction
|
||||
|
||||
- Purpose: **Create an action**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **event_name** (string, required)
|
||||
- **action_name** (string, required)
|
||||
- **params** (key/value parameters, required)
|
||||
- Result on success: **action_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createAction",
|
||||
"id": 1433237746,
|
||||
"params": {
|
||||
"project_id" : "2",
|
||||
"event_name" : "task.move.column",
|
||||
"action_name" : "\Kanboard\Action\TaskAssignSpecificUser",
|
||||
"params" : {
|
||||
"column_id" : "3",
|
||||
"user_id" : "2"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1433237746,
|
||||
"result": 14
|
||||
}
|
||||
```
|
||||
|
||||
## removeAction
|
||||
|
||||
- Purpose: **Remove an action**
|
||||
- Parameters:
|
||||
- **action_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeAction",
|
||||
"id": 1510741671,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1510741671,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,291 +0,0 @@
|
|||
API Application Procedures
|
||||
==========================
|
||||
|
||||
## getVersion
|
||||
|
||||
- Purpose: **Get the application version**
|
||||
- Parameters: none
|
||||
- Result: **version** (Example: 1.0.12, master)
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getVersion",
|
||||
"id": 1661138292
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1661138292,
|
||||
"result": "1.0.13"
|
||||
}
|
||||
```
|
||||
|
||||
## getTimezone
|
||||
|
||||
- Purpose: **Get the application timezone**
|
||||
- Parameters: none
|
||||
- Result on success: **Timezone** (Example: UTC, Europe/Paris)
|
||||
- Result on failure: **Default timezone** (UTC)
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getTimezone",
|
||||
"id": 1661138292
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1661138292,
|
||||
"result": "Europe\/Paris"
|
||||
}
|
||||
```
|
||||
|
||||
## 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"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getApplicationRoles
|
||||
|
||||
- Purpose: **Get the application roles**
|
||||
- Parameters: none
|
||||
- Result: **Dictionary of role => role_name**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getApplicationRoles",
|
||||
"id": 317154243
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 317154243,
|
||||
"result": {
|
||||
"app-admin": "Administrator",
|
||||
"app-manager": "Manager",
|
||||
"app-user": "User"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectRoles
|
||||
|
||||
- Purpose: **Get the project roles**
|
||||
- Parameters: none
|
||||
- Result: **Dictionary of role => role_name**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectRoles",
|
||||
"id": 8981960
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 8981960,
|
||||
"result": {
|
||||
"project-manager": "Project Manager",
|
||||
"project-member": "Project Member",
|
||||
"project-viewer": "Project Viewer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
API Authentication
|
||||
==================
|
||||
|
||||
API endpoint
|
||||
------------
|
||||
|
||||
URL: `https://YOUR_SERVER/jsonrpc.php`
|
||||
|
||||
|
||||
Default method (HTTP Basic)
|
||||
---------------------------
|
||||
|
||||
### Application credentials
|
||||
|
||||
- Username: `jsonrpc`
|
||||
- Password: API token on the settings page
|
||||
|
||||
### User credentials
|
||||
|
||||
- Username: username
|
||||
- Password: user password or personal access token
|
||||
|
||||
The API use the [HTTP Basic Authentication Scheme described in the RFC2617](http://www.ietf.org/rfc/rfc2617.txt).
|
||||
|
||||
|
||||
Custom HTTP header
|
||||
------------------
|
||||
|
||||
You can use an alternative HTTP header for the authentication if your server have a very specific configuration.
|
||||
|
||||
- The header name can be anything you want, by example `X-API-Auth`.
|
||||
- The header value is the `username:password` encoded in Base64.
|
||||
|
||||
Configuration:
|
||||
|
||||
1. Define your custom header in your `config.php`: `define('API_AUTHENTICATION_HEADER', 'X-API-Auth');`
|
||||
2. Encode the credentials in Base64, example with PHP `base64_encode('jsonrpc:19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929');`
|
||||
3. Test with curl:
|
||||
|
||||
```bash
|
||||
curl \
|
||||
-H 'X-API-Auth: anNvbnJwYzoxOWZmZDk3MDlkMDNjZTUwNjc1YzNhNDNkMWM0OWMxYWMyMDdmNGJjNDVmMDZjNWIyNzAxZmJkZjg5Mjk=' \
|
||||
-d '{"jsonrpc": "2.0", "method": "getAllProjects", "id": 1}' \
|
||||
http://localhost/kanboard/jsonrpc.php
|
||||
```
|
||||
|
||||
Authentication error
|
||||
--------------------
|
||||
|
||||
If the credentials are wrong, you will receive a `401 Not Authorized` and the corresponding JSON response.
|
||||
|
||||
|
||||
Authorization error
|
||||
-------------------
|
||||
|
||||
If the connected user is not allowed to access to the resource, you will receive a `403 Forbidden`.
|
||||
|
|
@ -1,158 +0,0 @@
|
|||
API Board Procedures
|
||||
====================
|
||||
|
||||
## getBoard
|
||||
|
||||
- Purpose: **Get all necessary information to display a board**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **board properties**
|
||||
- Result on failure: **empty list**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getBoard",
|
||||
"id": 827046470,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 827046470,
|
||||
"result": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "Default swimlane",
|
||||
"columns": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Backlog",
|
||||
"position": "1",
|
||||
"project_id": "1",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"tasks": [],
|
||||
"nb_tasks": 0,
|
||||
"score": 0
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Ready",
|
||||
"position": "2",
|
||||
"project_id": "1",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"tasks": [
|
||||
{
|
||||
"nb_comments":"0",
|
||||
"nb_files":"0",
|
||||
"nb_subtasks":"0",
|
||||
"nb_completed_subtasks":"0",
|
||||
"nb_links":"0",
|
||||
"id":"2",
|
||||
"reference":"",
|
||||
"title":"Test",
|
||||
"description":"",
|
||||
"date_creation":"1430870507",
|
||||
"date_modification":"1430870507",
|
||||
"date_completed":null,
|
||||
"date_due":"0",
|
||||
"color_id":"yellow",
|
||||
"project_id":"1",
|
||||
"column_id":"2",
|
||||
"swimlane_id":"0",
|
||||
"owner_id":"0",
|
||||
"creator_id":"1",
|
||||
"position":"1",
|
||||
"is_active":"1",
|
||||
"score":"0",
|
||||
"category_id":"0",
|
||||
"date_moved":"1430870507",
|
||||
"recurrence_status":"0",
|
||||
"recurrence_trigger":"0",
|
||||
"recurrence_factor":"0",
|
||||
"recurrence_timeframe":"0",
|
||||
"recurrence_basedate":"0",
|
||||
"recurrence_parent":null,
|
||||
"recurrence_child":null,
|
||||
"assignee_username":null,
|
||||
"assignee_name":null
|
||||
}
|
||||
],
|
||||
"nb_tasks": 1,
|
||||
"score": 0
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"title": "Work in progress",
|
||||
"position": "3",
|
||||
"project_id": "1",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"tasks": [
|
||||
{
|
||||
"nb_comments":"0",
|
||||
"nb_files":"0",
|
||||
"nb_subtasks":"1",
|
||||
"nb_completed_subtasks":"0",
|
||||
"nb_links":"0",
|
||||
"id":"1",
|
||||
"reference":"",
|
||||
"title":"Task with comment",
|
||||
"description":"",
|
||||
"date_creation":"1430783188",
|
||||
"date_modification":"1430783188",
|
||||
"date_completed":null,
|
||||
"date_due":"0",
|
||||
"color_id":"red",
|
||||
"project_id":"1",
|
||||
"column_id":"3",
|
||||
"swimlane_id":"0",
|
||||
"owner_id":"1",
|
||||
"creator_id":"0",
|
||||
"position":"1",
|
||||
"is_active":"1",
|
||||
"score":"0",
|
||||
"category_id":"0",
|
||||
"date_moved":"1430783191",
|
||||
"recurrence_status":"0",
|
||||
"recurrence_trigger":"0",
|
||||
"recurrence_factor":"0",
|
||||
"recurrence_timeframe":"0",
|
||||
"recurrence_basedate":"0",
|
||||
"recurrence_parent":null,
|
||||
"recurrence_child":null,
|
||||
"assignee_username":"admin",
|
||||
"assignee_name":null
|
||||
}
|
||||
],
|
||||
"nb_tasks": 1,
|
||||
"score": 0
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"title": "Done",
|
||||
"position": "4",
|
||||
"project_id": "1",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"tasks": [],
|
||||
"nb_tasks": 0,
|
||||
"score": 0
|
||||
}
|
||||
],
|
||||
"nb_columns": 4,
|
||||
"nb_tasks": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
@ -1,172 +0,0 @@
|
|||
API Category Procedures
|
||||
=======================
|
||||
|
||||
## createCategory
|
||||
|
||||
- Purpose: **Create a new category**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **name** (string, required, must be unique for the given project)
|
||||
- Result on success: **category_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createCategory",
|
||||
"id": 541909890,
|
||||
"params": {
|
||||
"name": "Super category",
|
||||
"project_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 541909890,
|
||||
"result": 4
|
||||
}
|
||||
```
|
||||
|
||||
## getCategory
|
||||
|
||||
- Purpose: **Get category information**
|
||||
- Parameters:
|
||||
- **category_id** (integer, required)
|
||||
- Result on success: **category properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getCategory",
|
||||
"id": 203539163,
|
||||
"params": {
|
||||
"category_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
"jsonrpc": "2.0",
|
||||
"id": 203539163,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"name": "Super category",
|
||||
"project_id": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAllCategories
|
||||
|
||||
- Purpose: **Get all available categories**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **List of categories**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllCategories",
|
||||
"id": 1261777968,
|
||||
"params": {
|
||||
"project_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1261777968,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "Super category",
|
||||
"project_id": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## updateCategory
|
||||
|
||||
- Purpose: **Update a category**
|
||||
- Parameters:
|
||||
- **id** (integer, required)
|
||||
- **name** (string, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateCategory",
|
||||
"id": 570195391,
|
||||
"params": {
|
||||
"id": 1,
|
||||
"name": "Renamed category"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 570195391,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeCategory
|
||||
|
||||
- Purpose: **Remove a category**
|
||||
- Parameters:
|
||||
- **category_id** (integer)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeCategory",
|
||||
"id": 88225706,
|
||||
"params": {
|
||||
"category_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 88225706,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,229 +0,0 @@
|
|||
API Column Procedures
|
||||
=====================
|
||||
|
||||
## getColumns
|
||||
|
||||
- Purpose: **Get all columns information for a given project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **columns properties**
|
||||
- Result on failure: **empty list**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getColumns",
|
||||
"id": 887036325,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 887036325,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Backlog",
|
||||
"position": "1",
|
||||
"project_id": "1",
|
||||
"task_limit": "0"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Ready",
|
||||
"position": "2",
|
||||
"project_id": "1",
|
||||
"task_limit": "0"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"title": "Work in progress",
|
||||
"position": "3",
|
||||
"project_id": "1",
|
||||
"task_limit": "0"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getColumn
|
||||
|
||||
- Purpose: **Get a single column**
|
||||
- Parameters:
|
||||
- **column_id** (integer, required)
|
||||
- Result on success: **column properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getColumn",
|
||||
"id": 1242049935,
|
||||
"params": [
|
||||
2
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1242049935,
|
||||
"result": {
|
||||
"id": "2",
|
||||
"title": "Youpi",
|
||||
"position": "2",
|
||||
"project_id": "1",
|
||||
"task_limit": "5"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## changeColumnPosition
|
||||
|
||||
- Purpose: **Change the column position**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **column_id** (integer, required)
|
||||
- **position** (integer, required, must be >= 1)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "changeColumnPosition",
|
||||
"id": 99275573,
|
||||
"params": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 99275573,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## updateColumn
|
||||
|
||||
- Purpose: **Update column properties**
|
||||
- Parameters:
|
||||
- **column_id** (integer, required)
|
||||
- **title** (string, required)
|
||||
- **task_limit** (integer, optional)
|
||||
- **description** (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateColumn",
|
||||
"id": 480740641,
|
||||
"params": [
|
||||
2,
|
||||
"Boo",
|
||||
5
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 480740641,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## addColumn
|
||||
|
||||
- Purpose: **Add a new column**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **title** (string, required)
|
||||
- **task_limit** (integer, optional)
|
||||
- **description** (string, optional)
|
||||
- Result on success: **column_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "addColumn",
|
||||
"id": 638544704,
|
||||
"params": [
|
||||
1,
|
||||
"Boo"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 638544704,
|
||||
"result": 5
|
||||
}
|
||||
```
|
||||
|
||||
## removeColumn
|
||||
|
||||
- Purpose: **Remove a column**
|
||||
- Parameters:
|
||||
- **column_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeColumn",
|
||||
"id": 1433237746,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1433237746,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,182 +0,0 @@
|
|||
API Comment Procedures
|
||||
======================
|
||||
|
||||
## createComment
|
||||
|
||||
- Purpose: **Create a new comment**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- **content** Markdown content (string, required)
|
||||
- Result on success: **comment_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createComment",
|
||||
"id": 1580417921,
|
||||
"params": {
|
||||
"task_id": 1,
|
||||
"user_id": 1,
|
||||
"content": "Comment #1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1580417921,
|
||||
"result": 11
|
||||
}
|
||||
```
|
||||
|
||||
## getComment
|
||||
|
||||
- Purpose: **Get comment information**
|
||||
- Parameters:
|
||||
- **comment_id** (integer, required)
|
||||
- Result on success: **comment properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getComment",
|
||||
"id": 867839500,
|
||||
"params": {
|
||||
"comment_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 867839500,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"task_id": "1",
|
||||
"user_id": "1",
|
||||
"date_creation": "1410881970",
|
||||
"comment": "Comment #1",
|
||||
"username": "admin",
|
||||
"name": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAllComments
|
||||
|
||||
- Purpose: **Get all available comments**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **List of comments**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllComments",
|
||||
"id": 148484683,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 148484683,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"date_creation": "1410882272",
|
||||
"task_id": "1",
|
||||
"user_id": "1",
|
||||
"comment": "Comment #1",
|
||||
"username": "admin",
|
||||
"name": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## updateComment
|
||||
|
||||
- Purpose: **Update a comment**
|
||||
- Parameters:
|
||||
- **id** (integer, required)
|
||||
- **content** Markdown content (string, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateComment",
|
||||
"id": 496470023,
|
||||
"params": {
|
||||
"id": 1,
|
||||
"content": "Comment #1 updated"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1493368950,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeComment
|
||||
|
||||
- Purpose: **Remove a comment**
|
||||
- Parameters:
|
||||
- **comment_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeComment",
|
||||
"id": 328836871,
|
||||
"params": {
|
||||
"comment_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 328836871,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,152 +0,0 @@
|
|||
API Examples
|
||||
============
|
||||
|
||||
Example with cURL
|
||||
-----------------
|
||||
|
||||
From the command line:
|
||||
|
||||
```bash
|
||||
curl \
|
||||
-u "jsonrpc:19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929" \
|
||||
-d '{"jsonrpc": "2.0", "method": "getAllProjects", "id": 1}' \
|
||||
http://localhost/kanboard/jsonrpc.php
|
||||
```
|
||||
|
||||
Response from the server:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc":"2.0",
|
||||
"id":1,
|
||||
"result":[
|
||||
{
|
||||
"id":"1",
|
||||
"name":"API test",
|
||||
"is_active":"1",
|
||||
"token":"6bd0932fe7f4b5e6e4bc3c72800bfdef36a2c5de2f38f756dfb5bd632ebf",
|
||||
"last_modified":"1403392631"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Example with Python
|
||||
-------------------
|
||||
|
||||
You can use the [official Python client for Kanboard](https://github.com/kanboard/kanboard-api-python):
|
||||
|
||||
```bash
|
||||
pip install kanboard
|
||||
```
|
||||
|
||||
Here an example to create a project and a task:
|
||||
|
||||
```python
|
||||
from kanboard import Kanboard
|
||||
|
||||
kb = Kanboard("http://localhost/jsonrpc.php", "jsonrpc", "your_api_token")
|
||||
|
||||
project_id = kb.create_project(name="My project")
|
||||
|
||||
task_id = kb.create_task(project_id=project_id, title="My task title")
|
||||
```
|
||||
|
||||
There are more examples on the [official website](https://github.com/kanboard/kanboard-api-python).
|
||||
|
||||
Example with a PHP client
|
||||
-------------------------
|
||||
|
||||
You can use this [Json-RPC Client/Server library for PHP](https://github.com/fguillot/JsonRPC), here an example:
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
$client = new JsonRPC\Client('http://localhost:8000/jsonrpc.php');
|
||||
$client->authentication('jsonrpc', '19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929');
|
||||
|
||||
print_r($client->getAllProjects());
|
||||
|
||||
```
|
||||
|
||||
The response:
|
||||
|
||||
```
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[id] => 1
|
||||
[name] => API test
|
||||
[is_active] => 1
|
||||
[token] => 6bd0932fe7f4b5e6e4bc3c72800bfdef36a2c5de2f38f756dfb5bd632ebf
|
||||
[last_modified] => 1403392631
|
||||
)
|
||||
|
||||
)
|
||||
```
|
||||
|
||||
Example with Ruby
|
||||
-----------------
|
||||
|
||||
This example can be used with Kanboard configured with Reverse-Proxy authentication and the API configured with a custom authentication header:
|
||||
|
||||
```ruby
|
||||
require 'faraday'
|
||||
|
||||
conn = Faraday.new(:url => 'https://kanboard.example.com') do |faraday|
|
||||
faraday.response :logger
|
||||
faraday.headers['X-API-Auth'] = 'XXX' # base64_encode('jsonrpc:API_KEY')
|
||||
faraday.basic_auth(ENV['user'], ENV['pw']) # user/pass to get through basic auth
|
||||
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
|
||||
end
|
||||
|
||||
response = conn.post do |req|
|
||||
req.url '/jsonrpc.php'
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
req.body = '{ "jsonrpc": "2.0", "id": 1, "method": "getAllProjects" }'
|
||||
end
|
||||
|
||||
puts response.body
|
||||
```
|
||||
|
||||
|
||||
Example with Java
|
||||
-----------------
|
||||
|
||||
This is a basic example using Spring. For proper usage see [this link](http://spring.io/guides/gs/consuming-rest).
|
||||
|
||||
```java
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Base64;
|
||||
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
public class ProjectService {
|
||||
|
||||
public void getAllProjects() throws UnsupportedEncodingException {
|
||||
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
|
||||
String url = "http://localhost/kanboard/jsonrpc.php";
|
||||
String requestJson = "{\"jsonrpc\": \"2.0\", \"method\": \"getAllProjects\", \"id\": 1}";
|
||||
String user = "jsonrpc";
|
||||
String apiToken = "19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929";
|
||||
|
||||
// encode api token
|
||||
byte[] xApiAuthTokenBytes = String.join(":", user, apiToken).getBytes("utf-8");
|
||||
String xApiAuthToken = Base64.getEncoder().encodeToString(xApiAuthTokenBytes);
|
||||
|
||||
// consume request
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("X-API-Auth", xApiAuthToken);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
HttpEntity<String> entity = new HttpEntity<String>(requestJson, headers);
|
||||
String answer = restTemplate.postForObject(url, entity, String.class);
|
||||
System.out.println(answer);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
|
@ -1,221 +0,0 @@
|
|||
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
|
||||
}
|
||||
```
|
||||
|
|
@ -1,188 +0,0 @@
|
|||
Group Member API Procedures
|
||||
===========================
|
||||
|
||||
## getMemberGroups
|
||||
|
||||
- Purpose: **Get all groups for a given user**
|
||||
- Parameters:
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **List of groups**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getMemberGroups",
|
||||
"id": 1987176726,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1987176726,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "My Group A"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getGroupMembers
|
||||
|
||||
- Purpose: **Get all members of a group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- Result on success: **List of users**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getGroupMembers",
|
||||
"id": 1987176726,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1987176726,
|
||||
"result": [
|
||||
{
|
||||
"group_id": "1",
|
||||
"user_id": "1",
|
||||
"id": "1",
|
||||
"username": "admin",
|
||||
"is_ldap_user": "0",
|
||||
"name": null,
|
||||
"email": null,
|
||||
"notifications_enabled": "0",
|
||||
"timezone": null,
|
||||
"language": null,
|
||||
"disable_login_form": "0",
|
||||
"notifications_filter": "4",
|
||||
"nb_failed_login": "0",
|
||||
"lock_expiration_date": "0",
|
||||
"is_project_admin": "0",
|
||||
"gitlab_id": null,
|
||||
"role": "app-admin"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## addGroupMember
|
||||
|
||||
- Purpose: **Add a user to a group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "addGroupMember",
|
||||
"id": 1589058273,
|
||||
"params": [
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1589058273,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeGroupMember
|
||||
|
||||
- Purpose: **Remove a user from a group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeGroupMember",
|
||||
"id": 1730416406,
|
||||
"params": [
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1730416406,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## isGroupMember
|
||||
|
||||
- Purpose: **Check if a user is member of a group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "isGroupMember",
|
||||
"id": 1052800865,
|
||||
"params": [
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1052800865,
|
||||
"result": false
|
||||
}
|
||||
```
|
||||
|
|
@ -1,174 +0,0 @@
|
|||
Group API Procedures
|
||||
====================
|
||||
|
||||
## createGroup
|
||||
|
||||
- Purpose: **Create a new group**
|
||||
- Parameters:
|
||||
- **name** (string, required)
|
||||
- **external_id** (string, optional)
|
||||
- Result on success: **link_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createGroup",
|
||||
"id": 1416806551,
|
||||
"params": [
|
||||
"My Group B",
|
||||
"1234"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1416806551,
|
||||
"result": 2
|
||||
}
|
||||
```
|
||||
|
||||
## updateGroup
|
||||
|
||||
- Purpose: **Update a group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- **name** (string, optional)
|
||||
- **external_id** (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateGroup",
|
||||
"id": 866078030,
|
||||
"params": {
|
||||
"group_id": "1",
|
||||
"name": "ABC",
|
||||
"external_id": "something"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 866078030,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeGroup
|
||||
|
||||
- Purpose: **Remove a group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeGroup",
|
||||
"id": 566000661,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 566000661,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## getGroup
|
||||
|
||||
- Purpose: **Get one group**
|
||||
- Parameters:
|
||||
- **group_id** (integer, required)
|
||||
- Result on success: **Group dictionary**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getGroup",
|
||||
"id": 1968647622,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1968647622,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"external_id": "",
|
||||
"name": "My Group A"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAllGroups
|
||||
|
||||
- Purpose: **Get all groups**
|
||||
- Parameters: none
|
||||
- Result on success: **list of groups**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllGroups",
|
||||
"id": 546070742
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 546070742,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"external_id": "",
|
||||
"name": "My Group A"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"external_id": "1234",
|
||||
"name": "My Group B"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
@ -1,187 +0,0 @@
|
|||
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
|
||||
}
|
||||
```
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
Json-RPC API
|
||||
============
|
||||
|
||||
User and application API
|
||||
------------------------
|
||||
|
||||
There are two types of API access:
|
||||
|
||||
### Application API
|
||||
|
||||
- Access to the API with the user "jsonrpc" and the token available on the settings page
|
||||
- Access to all procedures
|
||||
- No permission checked
|
||||
- There is no user session on the server
|
||||
- No access to procedures that starts with "My..." (example: "getMe" or "getMyProjects")
|
||||
- Example of possible clients: tools to migrate/import data, create tasks from another system, etc...
|
||||
|
||||
### User API
|
||||
|
||||
- Access to the API with the user credentials (username and password)
|
||||
- You can also generate a personal access token instead of your password
|
||||
- Application role and project permissions are checked for each procedure
|
||||
- A user session is created on the server
|
||||
- Example of possible clients: native mobile/desktop application, command line utility, etc...
|
||||
|
||||
Security
|
||||
--------
|
||||
|
||||
- Always use HTTPS with a valid certificate (avoid clear text communication)
|
||||
- If you make a mobile application, it's your responsability to store securely the user credentials on the device
|
||||
- After 3 authentication failure on the user api, the end-user have to unlock his account by using the login form
|
||||
- Two factor authentication is not yet available through the API
|
||||
|
||||
Protocol
|
||||
--------
|
||||
|
||||
Kanboard use the protocol Json-RPC to interact with external programs.
|
||||
|
||||
JSON-RPC is a remote procedure call protocol encoded in JSON.
|
||||
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.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
- [Authentication](api-authentication.markdown)
|
||||
- [Examples](api-examples.markdown)
|
||||
- [Application](api-application-procedures.markdown)
|
||||
- [Projects](api-project-procedures.markdown)
|
||||
- [Project Permissions](api-project-permission-procedures.markdown)
|
||||
- [Boards](api-board-procedures.markdown)
|
||||
- [Columns](api-column-procedures.markdown)
|
||||
- [Swimlanes](api-swimlane-procedures.markdown)
|
||||
- [Categories](api-category-procedures.markdown)
|
||||
- [Automatic Actions](api-action-procedures.markdown)
|
||||
- [Tasks](api-task-procedures.markdown)
|
||||
- [Subtasks](api-subtask-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)
|
||||
- [Tags](api-tags-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)
|
||||
- [Group Members](api-group-member-procedures.markdown)
|
||||
- [Me](api-me-procedures.markdown)
|
||||
|
|
@ -1,285 +0,0 @@
|
|||
API Link Procedures
|
||||
===================
|
||||
|
||||
## getAllLinks
|
||||
|
||||
- Purpose: **Get the list of possible relations between tasks**
|
||||
- Parameters: none
|
||||
- Result on success: **List of links**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllLinks",
|
||||
"id": 113057196
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 113057196,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"label": "relates to",
|
||||
"opposite_id": "0"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"label": "blocks",
|
||||
"opposite_id": "3"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"label": "is blocked by",
|
||||
"opposite_id": "2"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"label": "duplicates",
|
||||
"opposite_id": "5"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"label": "is duplicated by",
|
||||
"opposite_id": "4"
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"label": "is a child of",
|
||||
"opposite_id": "7"
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"label": "is a parent of",
|
||||
"opposite_id": "6"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"label": "targets milestone",
|
||||
"opposite_id": "9"
|
||||
},
|
||||
{
|
||||
"id": "9",
|
||||
"label": "is a milestone of",
|
||||
"opposite_id": "8"
|
||||
},
|
||||
{
|
||||
"id": "10",
|
||||
"label": "fixes",
|
||||
"opposite_id": "11"
|
||||
},
|
||||
{
|
||||
"id": "11",
|
||||
"label": "is fixed by",
|
||||
"opposite_id": "10"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getOppositeLinkId
|
||||
|
||||
- Purpose: **Get the opposite link id of a task link**
|
||||
- Parameters:
|
||||
- **link_id** (integer, required)
|
||||
- Result on success: **link_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getOppositeLinkId",
|
||||
"id": 407062448,
|
||||
"params": [
|
||||
2
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 407062448,
|
||||
"result": "3"
|
||||
}
|
||||
```
|
||||
|
||||
## getLinkByLabel
|
||||
|
||||
- Purpose: **Get a link by label**
|
||||
- Parameters:
|
||||
- **label** (integer, required)
|
||||
- Result on success: **link properties**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getLinkByLabel",
|
||||
"id": 1796123316,
|
||||
"params": [
|
||||
"blocks"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1796123316,
|
||||
"result": {
|
||||
"id": "2",
|
||||
"label": "blocks",
|
||||
"opposite_id": "3"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getLinkById
|
||||
|
||||
- Purpose: **Get a link by id**
|
||||
- Parameters:
|
||||
- **link_id** (integer, required)
|
||||
- Result on success: **link properties**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getLinkById",
|
||||
"id": 1190238402,
|
||||
"params": [
|
||||
4
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1190238402,
|
||||
"result": {
|
||||
"id": "4",
|
||||
"label": "duplicates",
|
||||
"opposite_id": "5"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## createLink
|
||||
|
||||
- Purpose: **Create a new task relation**
|
||||
- Parameters:
|
||||
- **label** (integer, required)
|
||||
- **opposite_label** (integer, optional)
|
||||
- Result on success: **link_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createLink",
|
||||
"id": 1040237496,
|
||||
"params": [
|
||||
"foo",
|
||||
"bar"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1040237496,
|
||||
"result": 13
|
||||
}
|
||||
```
|
||||
|
||||
## updateLink
|
||||
|
||||
- Purpose: **Update a link**
|
||||
- Parameters:
|
||||
- **link_id** (integer, required)
|
||||
- **opposite_link_id** (integer, required)
|
||||
- **label** (string, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateLink",
|
||||
"id": 2110446926,
|
||||
"params": [
|
||||
"14",
|
||||
"12",
|
||||
"boo"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2110446926,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeLink
|
||||
|
||||
- Purpose: **Remove a link**
|
||||
- Parameters:
|
||||
- **link_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeLink",
|
||||
"id": 2136522739,
|
||||
"params": [
|
||||
"14"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2136522739,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,383 +0,0 @@
|
|||
User API Specific Procedures
|
||||
============================
|
||||
|
||||
## getMe
|
||||
|
||||
- Purpose: **Get logged user session**
|
||||
- Parameters: None
|
||||
- Result on success: **user session data**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getMe",
|
||||
"id": 1718627783
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1718627783,
|
||||
"result": {
|
||||
"id": 2,
|
||||
"username": "user",
|
||||
"role": "app-user",
|
||||
"is_ldap_user": false,
|
||||
"name": "",
|
||||
"email": "",
|
||||
"google_id": null,
|
||||
"github_id": null,
|
||||
"notifications_enabled": "0",
|
||||
"timezone": null,
|
||||
"language": null,
|
||||
"disable_login_form": "0",
|
||||
"twofactor_activated": false,
|
||||
"twofactor_secret": null,
|
||||
"token": "",
|
||||
"notifications_filter": "4"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getMyDashboard
|
||||
|
||||
- Purpose: **Get the dashboard of the logged user without pagination**
|
||||
- Parameters: None
|
||||
- Result on success: **Dashboard information**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getMyDashboard",
|
||||
"id": 447898718
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1563664593,
|
||||
"result": {
|
||||
"projects": [
|
||||
{
|
||||
"id": "2",
|
||||
"name": "my project",
|
||||
"is_active": "1",
|
||||
"token": "",
|
||||
"last_modified": "1438205337",
|
||||
"is_public": "0",
|
||||
"is_private": "1",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"show_default_swimlane": "1",
|
||||
"description": null,
|
||||
"identifier": "",
|
||||
"columns": [
|
||||
{
|
||||
"id": "5",
|
||||
"title": "Backlog",
|
||||
"position": "1",
|
||||
"project_id": "2",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"nb_tasks": 0
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"title": "Ready",
|
||||
"position": "2",
|
||||
"project_id": "2",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"nb_tasks": 0
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"title": "Work in progress",
|
||||
"position": "3",
|
||||
"project_id": "2",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"nb_tasks": 0
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"title": "Done",
|
||||
"position": "4",
|
||||
"project_id": "2",
|
||||
"task_limit": "0",
|
||||
"description": "",
|
||||
"nb_tasks": 0
|
||||
}
|
||||
],
|
||||
"url": {
|
||||
"board": "http:\/\/127.0.0.1:8000\/?controller=board&action=show&project_id=2",
|
||||
"calendar": "http:\/\/127.0.0.1:8000\/?controller=calendar&action=show&project_id=2",
|
||||
"list": "http:\/\/127.0.0.1:8000\/?controller=listing&action=show&project_id=2"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tasks": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "new title",
|
||||
"date_due": "0",
|
||||
"date_creation": "1438205336",
|
||||
"project_id": "2",
|
||||
"color_id": "yellow",
|
||||
"time_spent": "0",
|
||||
"time_estimated": "0",
|
||||
"project_name": "my project",
|
||||
"url": "http:\/\/127.0.0.1:8000\/?controller=task&action=show&task_id=1&project_id=2"
|
||||
}
|
||||
],
|
||||
"subtasks": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getMyActivityStream
|
||||
|
||||
- Purpose: **Get the last 100 events for the logged user**
|
||||
- Parameters: None
|
||||
- Result on success: **List of events**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getMyActivityStream",
|
||||
"id": 1132562181
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1132562181,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"date_creation": "1438205054",
|
||||
"event_name": "task.create",
|
||||
"creator_id": "2",
|
||||
"project_id": "2",
|
||||
"task_id": "1",
|
||||
"author_username": "user",
|
||||
"author_name": "",
|
||||
"email": "",
|
||||
"task": {
|
||||
"id": "1",
|
||||
"reference": "",
|
||||
"title": "my user title",
|
||||
"description": "",
|
||||
"date_creation": "1438205054",
|
||||
"date_completed": null,
|
||||
"date_modification": "1438205054",
|
||||
"date_due": "0",
|
||||
"date_started": null,
|
||||
"time_estimated": "0",
|
||||
"time_spent": "0",
|
||||
"color_id": "yellow",
|
||||
"project_id": "2",
|
||||
"column_id": "5",
|
||||
"owner_id": "0",
|
||||
"creator_id": "2",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"score": "0",
|
||||
"category_id": "0",
|
||||
"swimlane_id": "0",
|
||||
"date_moved": "1438205054",
|
||||
"recurrence_status": "0",
|
||||
"recurrence_trigger": "0",
|
||||
"recurrence_factor": "0",
|
||||
"recurrence_timeframe": "0",
|
||||
"recurrence_basedate": "0",
|
||||
"recurrence_parent": null,
|
||||
"recurrence_child": null,
|
||||
"category_name": null,
|
||||
"swimlane_name": null,
|
||||
"project_name": "my project",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"column_title": "Backlog",
|
||||
"assignee_username": null,
|
||||
"assignee_name": null,
|
||||
"creator_username": "user",
|
||||
"creator_name": ""
|
||||
},
|
||||
"changes": [],
|
||||
"author": "user",
|
||||
"event_title": "user created the task #1",
|
||||
"event_content": "\n<p class=\"activity-title\">\n user created the task <a href=\"\/?controller=task&action=show&task_id=1&project_id=2\" class=\"\" title=\"\" >#1<\/a><\/p>\n<p class=\"activity-description\">\n <em>my user title<\/em>\n<\/p>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## createMyPrivateProject
|
||||
|
||||
- Purpose: **Create a private project for the logged user**
|
||||
- Parameters:
|
||||
- **name** (string, required)
|
||||
- **description** (string, optional)
|
||||
- Result on success: **project_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createMyPrivateProject",
|
||||
"id": 1271580569,
|
||||
"params": [
|
||||
"my project"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1271580569,
|
||||
"result": 2
|
||||
}
|
||||
```
|
||||
|
||||
## getMyProjectsList
|
||||
|
||||
- Purpose: **Get projects of the connected user**
|
||||
- Parameters: None
|
||||
- Result on success: **dictionary of project_id => project_name**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getMyProjectsList",
|
||||
"id": 987834805
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 987834805,
|
||||
"result": {
|
||||
"2": "my project"
|
||||
}
|
||||
}
|
||||
```
|
||||
## getMyOverdueTasks
|
||||
|
||||
- Purpose: **Get my overdue tasks**
|
||||
- Result on success: **List of tasks**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to fetch all tasks on the board:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getMyOverdueTasks",
|
||||
"id": 133280317
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Task #1",
|
||||
"date_due": "1409961789",
|
||||
"project_id": "1",
|
||||
"project_name": "Test",
|
||||
"assignee_username":"admin",
|
||||
"assignee_name": null
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Test",
|
||||
"date_due": "1409962115",
|
||||
"project_id": "1",
|
||||
"project_name": "Test",
|
||||
"assignee_username":"admin",
|
||||
"assignee_name": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getMyProjects
|
||||
|
||||
- Purpose: **Get projects of connected user with full details**
|
||||
- Parameters:
|
||||
- **none**
|
||||
- Result on success: **List of projects with details**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getmyProjects",
|
||||
"id": 2134420212
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2134420212,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "API test",
|
||||
"is_active": "1",
|
||||
"token": "",
|
||||
"last_modified": "1436119570",
|
||||
"is_public": "0",
|
||||
"is_private": "0",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"show_default_swimlane": "1",
|
||||
"description": null,
|
||||
"identifier": "",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
@ -1,221 +0,0 @@
|
|||
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
|
||||
}
|
||||
```
|
||||
|
|
@ -1,307 +0,0 @@
|
|||
Project Permission API Procedures
|
||||
=================================
|
||||
|
||||
## getProjectUsers
|
||||
|
||||
- Purpose: **Get all members of a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **Dictionary of user_id => user name**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectUsers",
|
||||
"id": 1601016721,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1601016721,
|
||||
"result": {
|
||||
"1": "admin"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAssignableUsers
|
||||
|
||||
- Purpose: **Get users that can be assigned to a task for a project** (all members except viewers)
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **prepend_unassigned** (boolean, optional, default is false)
|
||||
- Result on success: **Dictionary of user_id => user name**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAssignableUsers",
|
||||
"id": 658294870,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 658294870,
|
||||
"result": {
|
||||
"1": "admin"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## addProjectUser
|
||||
|
||||
- Purpose: **Grant access to a project for a user**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- **role** (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "addProjectUser",
|
||||
"id": 1294688355,
|
||||
"params": [
|
||||
"1",
|
||||
"1",
|
||||
"project-viewer"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1294688355,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## addProjectGroup
|
||||
|
||||
- Purpose: **Grant access to a project for a group**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **group_id** (integer, required)
|
||||
- **role** (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "addProjectGroup",
|
||||
"id": 1694959089,
|
||||
"params": [
|
||||
"1",
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1694959089,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeProjectUser
|
||||
|
||||
- Purpose: **Revoke user access to a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeProjectUser",
|
||||
"id": 645233805,
|
||||
"params": [
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 645233805,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeProjectGroup
|
||||
|
||||
- Purpose: **Revoke group access to a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **group_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeProjectGroup",
|
||||
"id": 557146966,
|
||||
"params": [
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 557146966,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## changeProjectUserRole
|
||||
|
||||
- Purpose: **Change role of a user for a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- **role** (string, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "changeProjectUserRole",
|
||||
"id": 193473170,
|
||||
"params": [
|
||||
"1",
|
||||
"1",
|
||||
"project-viewer"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 193473170,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## changeProjectGroupRole
|
||||
|
||||
- Purpose: **Change role of a group for a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **group_id** (integer, required)
|
||||
- **role** (string, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "changeProjectGroupRole",
|
||||
"id": 2114673298,
|
||||
"params": [
|
||||
"1",
|
||||
"1",
|
||||
"project-viewer"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2114673298,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectUserRole
|
||||
|
||||
- Purpose: **Get the role of a user for a given project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **role name**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectUserRole",
|
||||
"id": 2114673298,
|
||||
"params": [
|
||||
"2",
|
||||
"3"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2114673298,
|
||||
"result": "project-viewer"
|
||||
}
|
||||
```
|
||||
|
|
@ -1,509 +0,0 @@
|
|||
API Project Procedures
|
||||
======================
|
||||
|
||||
## createProject
|
||||
|
||||
- Purpose: **Create a new project**
|
||||
- Parameters:
|
||||
- **name** (string, required)
|
||||
- **description** (string, optional)
|
||||
- **owner_id** (integer, optional)
|
||||
- **identifier** (string, optional)
|
||||
- Result on success: **project_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createProject",
|
||||
"id": 1797076613,
|
||||
"params": {
|
||||
"name": "PHP client"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1797076613,
|
||||
"result": 2
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectById
|
||||
|
||||
- Purpose: **Get project information**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **project properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectById",
|
||||
"id": 226760253,
|
||||
"params": {
|
||||
"project_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 226760253,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"name": "API test",
|
||||
"is_active": "1",
|
||||
"token": "",
|
||||
"last_modified": "1436119135",
|
||||
"is_public": "0",
|
||||
"is_private": "0",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"show_default_swimlane": "1",
|
||||
"description": "test",
|
||||
"identifier": "",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectByName
|
||||
|
||||
- Purpose: **Get project information**
|
||||
- Parameters:
|
||||
- **name** (string, required)
|
||||
- Result on success: **project properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectByName",
|
||||
"id": 1620253806,
|
||||
"params": {
|
||||
"name": "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",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"show_default_swimlane": "1",
|
||||
"description": "test",
|
||||
"identifier": "",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 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",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectByEmail
|
||||
|
||||
- Purpose: **Get project information**
|
||||
- Parameters:
|
||||
- **email** (string, required)
|
||||
- Result on success: **project properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectByEmail",
|
||||
"id": 1620253806,
|
||||
"params": {
|
||||
"email": "my_project@my_domain.tld"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
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",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"show_default_swimlane": "1",
|
||||
"description": "test",
|
||||
"identifier": "",
|
||||
"email": "my_project@my_domain.tld",
|
||||
"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**
|
||||
- Parameters:
|
||||
- **none**
|
||||
- Result on success: **List of projects**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllProjects",
|
||||
"id": 2134420212
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2134420212,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "API test",
|
||||
"is_active": "1",
|
||||
"token": "",
|
||||
"last_modified": "1436119570",
|
||||
"is_public": "0",
|
||||
"is_private": "0",
|
||||
"default_swimlane": "Default swimlane",
|
||||
"show_default_swimlane": "1",
|
||||
"description": null,
|
||||
"identifier": "",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## updateProject
|
||||
|
||||
- Purpose: **Update a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **name** (string, optional)
|
||||
- **description** (string, optional)
|
||||
- **owner_id** (integer, optional)
|
||||
- **identifier** (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateProject",
|
||||
"id": 1853996288,
|
||||
"params": {
|
||||
"project_id": 1,
|
||||
"name": "PHP client update"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1853996288,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeProject
|
||||
|
||||
- Purpose: **Remove a project**
|
||||
- Parameters:
|
||||
**project_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeProject",
|
||||
"id": 46285125,
|
||||
"params": {
|
||||
"project_id": "2"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 46285125,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## enableProject
|
||||
|
||||
- Purpose: **Enable a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "enableProject",
|
||||
"id": 1775494839,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1775494839,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## disableProject
|
||||
|
||||
- Purpose: **Disable a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "disableProject",
|
||||
"id": 1734202312,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1734202312,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## enableProjectPublicAccess
|
||||
|
||||
- Purpose: **Enable public access for a given project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "enableProjectPublicAccess",
|
||||
"id": 103792571,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 103792571,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## disableProjectPublicAccess
|
||||
|
||||
- Purpose: **Disable public access for a given project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "disableProjectPublicAccess",
|
||||
"id": 942472945,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 942472945,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectActivity
|
||||
|
||||
- Purpose: **Get activity stream for a project**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **List of events**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectActivity",
|
||||
"id": 942472945,
|
||||
"params": [
|
||||
"project_id": 1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getProjectActivities
|
||||
|
||||
- Purpose: **Get Activityfeed for Project(s)**
|
||||
- Parameters:
|
||||
- **project_ids** (integer array, required)
|
||||
- Result on success: **List of events**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getProjectActivities",
|
||||
"id": 942472945,
|
||||
"params": [
|
||||
"project_ids": [1,2]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
@ -1,194 +0,0 @@
|
|||
API Subtask procedures
|
||||
======================
|
||||
|
||||
## createSubtask
|
||||
|
||||
- Purpose: **Create a new subtask**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **title** (integer, required)
|
||||
- **user_id** (int, optional)
|
||||
- **time_estimated** (int, optional)
|
||||
- **time_spent** (int, optional)
|
||||
- **status** (int, optional)
|
||||
- Result on success: **subtask_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createSubtask",
|
||||
"id": 2041554661,
|
||||
"params": {
|
||||
"task_id": 1,
|
||||
"title": "Subtask #1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2041554661,
|
||||
"result": 45
|
||||
}
|
||||
```
|
||||
|
||||
## getSubtask
|
||||
|
||||
- Purpose: **Get subtask information**
|
||||
- Parameters:
|
||||
- **subtask_id** (integer)
|
||||
- Result on success: **subtask properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getSubtask",
|
||||
"id": 133184525,
|
||||
"params": {
|
||||
"subtask_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133184525,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"title": "Subtask #1",
|
||||
"status": "0",
|
||||
"time_estimated": "0",
|
||||
"time_spent": "0",
|
||||
"task_id": "1",
|
||||
"user_id": "0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAllSubtasks
|
||||
|
||||
- Purpose: **Get all available subtasks**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **List of subtasks**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllSubtasks",
|
||||
"id": 2087700490,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2087700490,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Subtask #1",
|
||||
"status": "0",
|
||||
"time_estimated": "0",
|
||||
"time_spent": "0",
|
||||
"task_id": "1",
|
||||
"user_id": "0",
|
||||
"username": null,
|
||||
"name": null,
|
||||
"status_name": "Todo"
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## updateSubtask
|
||||
|
||||
- Purpose: **Update a subtask**
|
||||
- Parameters:
|
||||
- **id** (integer, required)
|
||||
- **task_id** (integer, required)
|
||||
- **title** (integer, optional)
|
||||
- **user_id** (integer, optional)
|
||||
- **time_estimated** (integer, optional)
|
||||
- **time_spent** (integer, optional)
|
||||
- **status** (integer, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateSubtask",
|
||||
"id": 191749979,
|
||||
"params": {
|
||||
"id": 1,
|
||||
"task_id": 1,
|
||||
"status": 1,
|
||||
"time_spent": 5,
|
||||
"user_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 191749979,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeSubtask
|
||||
|
||||
- Purpose: **Remove a subtask**
|
||||
- Parameters:
|
||||
- **subtask_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeSubtask",
|
||||
"id": 1382487306,
|
||||
"params": {
|
||||
"subtask_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1382487306,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
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
|
||||
}
|
||||
```
|
||||
|
|
@ -1,405 +0,0 @@
|
|||
API Swimlane Procedures
|
||||
=======================
|
||||
|
||||
## getActiveSwimlanes
|
||||
|
||||
- Purpose: **Get the list of enabled swimlanes of a project (include default swimlane if enabled)**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **List of swimlanes**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getActiveSwimlanes",
|
||||
"id": 934789422,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 934789422,
|
||||
"result": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "Default swimlane"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Swimlane A"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getAllSwimlanes
|
||||
|
||||
- Purpose: **Get the list of all swimlanes of a project (enabled or disabled) and sorted by position**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- Result on success: **List of swimlanes**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllSwimlanes",
|
||||
"id": 509791576,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 509791576,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "Another swimlane",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"project_id": "1"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "Swimlane A",
|
||||
"position": "2",
|
||||
"is_active": "1",
|
||||
"project_id": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getSwimlane
|
||||
|
||||
- Purpose: **Get the a swimlane by id**
|
||||
- Parameters:
|
||||
- **swimlane_id** (integer, required)
|
||||
- Result on success: **swimlane properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getSwimlane",
|
||||
"id": 131071870,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 131071870,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"name": "Swimlane 1",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"project_id": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getSwimlaneById
|
||||
|
||||
- Purpose: **Get the a swimlane by id**
|
||||
- Parameters:
|
||||
- **swimlane_id** (integer, required)
|
||||
- Result on success: **swimlane properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getSwimlaneById",
|
||||
"id": 131071870,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 131071870,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"name": "Swimlane 1",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"project_id": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getSwimlaneByName
|
||||
|
||||
- Purpose: **Get the a swimlane by name**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **name** (string, required)
|
||||
- Result on success: **swimlane properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getSwimlaneByName",
|
||||
"id": 824623567,
|
||||
"params": [
|
||||
1,
|
||||
"Swimlane 1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 824623567,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"name": "Swimlane 1",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"project_id": "1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## changeSwimlanePosition
|
||||
|
||||
- Purpose: **Move up the swimlane position** (only for active swimlanes)
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, required)
|
||||
- **position** (integer, required, must be >= 1)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "changeSwimlanePosition",
|
||||
"id": 99275573,
|
||||
"params": [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 99275573,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## updateSwimlane
|
||||
|
||||
- Purpose: **Update swimlane properties**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, required)
|
||||
- **name** (string, required)
|
||||
- **description** (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateSwimlane",
|
||||
"id": 87102426,
|
||||
"params": [
|
||||
"1",
|
||||
"1",
|
||||
"Another swimlane"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 87102426,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## addSwimlane
|
||||
|
||||
- Purpose: **Add a new swimlane**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **name** (string, required)
|
||||
- **description** (string, optional)
|
||||
- Result on success: **swimlane_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "addSwimlane",
|
||||
"id": 849940086,
|
||||
"params": [
|
||||
1,
|
||||
"Swimlane 1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 849940086,
|
||||
"result": 1
|
||||
}
|
||||
```
|
||||
|
||||
## removeSwimlane
|
||||
|
||||
- Purpose: **Remove a swimlane**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeSwimlane",
|
||||
"id": 1433237746,
|
||||
"params": [
|
||||
2,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1433237746,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## disableSwimlane
|
||||
|
||||
- Purpose: **Disable a swimlane**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "disableSwimlane",
|
||||
"id": 1433237746,
|
||||
"params": [
|
||||
2,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1433237746,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## enableSwimlane
|
||||
|
||||
- Purpose: **Enable a swimlane**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "enableSwimlane",
|
||||
"id": 1433237746,
|
||||
"params": [
|
||||
2,
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1433237746,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,195 +0,0 @@
|
|||
API Tags Procedures
|
||||
===================
|
||||
|
||||
getAllTags
|
||||
----------
|
||||
|
||||
- Purpose: **Get all tags**
|
||||
- Parameters: none
|
||||
- Result on success: **List of tags**
|
||||
- Result on failure: **false|null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"getAllTags","id":45253426}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "another tag",
|
||||
"project_id": "33"
|
||||
}
|
||||
],
|
||||
"id": 45253426
|
||||
}
|
||||
```
|
||||
|
||||
getTagsByProject
|
||||
----------------
|
||||
|
||||
- Purpose: **Get all tags for a given project**
|
||||
- Parameters:
|
||||
- **project_id** (integer)
|
||||
- Result on success: **List of tags**
|
||||
- Result on failure: **false|null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"getTagsByProject","id":1217591720,"params":[33]}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "some tag",
|
||||
"project_id": "33"
|
||||
}
|
||||
],
|
||||
"id": 1217591720
|
||||
}
|
||||
```
|
||||
|
||||
createTag
|
||||
---------
|
||||
|
||||
- Purpose: **Create a new tag**
|
||||
- Parameters:
|
||||
- **project_id** (integer)
|
||||
- **tag** (string)
|
||||
- Result on success: **tag_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"createTag","id":1775436017,"params":[33,"some tag"]}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": 1,
|
||||
"id": 1775436017
|
||||
}
|
||||
```
|
||||
|
||||
updateTag
|
||||
---------
|
||||
|
||||
- Purpose: **Rename a tag**
|
||||
- Parameters:
|
||||
- **tag_id** (integer)
|
||||
- **tag** (string)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"updateTag","id":2037516512,"params":["1","another tag"]}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": true,
|
||||
"id": 2037516512
|
||||
}
|
||||
```
|
||||
|
||||
removeTag
|
||||
---------
|
||||
|
||||
- Purpose: **removeTag**
|
||||
- Parameters:
|
||||
- **tag_id** (integer)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"removeTag","id":907581298,"params":["1"]}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": true,
|
||||
"id": 907581298
|
||||
}
|
||||
```
|
||||
|
||||
setTaskTags
|
||||
-----------
|
||||
|
||||
- Purpose: **Assign/Create/Update tags for a task**
|
||||
- Parameters:
|
||||
- **project_id** (integer)
|
||||
- **task_id** (integer)
|
||||
- **tags** List of tags ([]string)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"setTaskTags","id":1524522873,"params":[39,17,["tag1","tag2"]]}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": true,
|
||||
"id": 1524522873
|
||||
}
|
||||
```
|
||||
|
||||
getTaskTags
|
||||
-----------
|
||||
|
||||
- Purpose: **Get assigned tags to a task**
|
||||
- Parameters:
|
||||
- **task_id** (integer)
|
||||
- Result on success: **Dictionary of tags**
|
||||
- Result on failure: **false|null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{"jsonrpc":"2.0","method":"getTaskTags","id":1667157705,"params":[17]}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"result": {
|
||||
"1": "tag1",
|
||||
"2": "tag2"
|
||||
},
|
||||
"id": 1667157705
|
||||
}
|
||||
```
|
||||
|
|
@ -1,217 +0,0 @@
|
|||
Task File API Procedures
|
||||
========================
|
||||
|
||||
## createTaskFile
|
||||
|
||||
- Purpose: **Create and upload a new task attachment**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **task_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": "createTaskFile",
|
||||
"id": 94500810,
|
||||
"params": [
|
||||
1,
|
||||
1,
|
||||
"My file",
|
||||
"cGxhaW4gdGV4dCBmaWxl"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 94500810,
|
||||
"result": 1
|
||||
}
|
||||
```
|
||||
|
||||
## getAllTaskFiles
|
||||
|
||||
- Purpose: **Get all files attached to task**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **list of files**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllTaskFiles",
|
||||
"id": 1880662820,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1880662820,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "My file",
|
||||
"path": "1\/1\/0db4d0a897a4c852f6e12f0239d4805f7b4ab596",
|
||||
"is_image": "0",
|
||||
"task_id": "1",
|
||||
"date": "1432509941",
|
||||
"user_id": "0",
|
||||
"size": "15",
|
||||
"username": null,
|
||||
"user_name": null
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getTaskFile
|
||||
|
||||
- Purpose: **Get file information**
|
||||
- Parameters:
|
||||
- **file_id** (integer, required)
|
||||
- Result on success: **file properties**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getTaskFile",
|
||||
"id": 318676852,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 318676852,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"name": "My file",
|
||||
"path": "1\/1\/0db4d0a897a4c852f6e12f0239d4805f7b4ab596",
|
||||
"is_image": "0",
|
||||
"task_id": "1",
|
||||
"date": "1432509941",
|
||||
"user_id": "0",
|
||||
"size": "15"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## downloadTaskFile
|
||||
|
||||
- Purpose: **Download file contents (encoded in base64)**
|
||||
- Parameters:
|
||||
- **file_id** (integer, required)
|
||||
- Result on success: **base64 encoded string**
|
||||
- Result on failure: **empty string**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "downloadTaskFile",
|
||||
"id": 235943344,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 235943344,
|
||||
"result": "cGxhaW4gdGV4dCBmaWxl"
|
||||
}
|
||||
```
|
||||
|
||||
## removeTaskFile
|
||||
|
||||
- Purpose: **Remove file**
|
||||
- Parameters:
|
||||
- **file_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeTaskFile",
|
||||
"id": 447036524,
|
||||
"params": [
|
||||
"1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 447036524,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeAllTaskFiles
|
||||
|
||||
- Purpose: **Remove all files associated to a task**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeAllTaskFiles",
|
||||
"id": 593312993,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 593312993,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,855 +0,0 @@
|
|||
API Task Procedures
|
||||
===================
|
||||
|
||||
## createTask
|
||||
|
||||
- Purpose: **Create a new task**
|
||||
- Parameters:
|
||||
- **title** (string, required)
|
||||
- **project_id** (integer, required)
|
||||
- **color_id** (string, optional)
|
||||
- **column_id** (integer, optional)
|
||||
- **owner_id** (integer, optional)
|
||||
- **creator_id** (integer, optional)
|
||||
- **date_due**: ISO8601 format (string, optional)
|
||||
- **description** Markdown content (string, optional)
|
||||
- **category_id** (integer, optional)
|
||||
- **score** (integer, optional)
|
||||
- **swimlane_id** (integer, optional)
|
||||
- **priority** (integer, optional)
|
||||
- **recurrence_status** (integer, optional)
|
||||
- **recurrence_trigger** (integer, optional)
|
||||
- **recurrence_factor** (integer, optional)
|
||||
- **recurrence_timeframe** (integer, optional)
|
||||
- **recurrence_basedate** (integer, optional)
|
||||
- **tags** ([]string, optional)
|
||||
- **date_started**: ISO8601 format (string, optional)
|
||||
- Result on success: **task_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createTask",
|
||||
"id": 1176509098,
|
||||
"params": {
|
||||
"owner_id": 1,
|
||||
"creator_id": 0,
|
||||
"date_due": "",
|
||||
"description": "",
|
||||
"category_id": 0,
|
||||
"score": 0,
|
||||
"title": "Test",
|
||||
"project_id": 1,
|
||||
"color_id": "green",
|
||||
"column_id": 2,
|
||||
"recurrence_status": 0,
|
||||
"recurrence_trigger": 0,
|
||||
"recurrence_factor": 0,
|
||||
"recurrence_timeframe": 0,
|
||||
"recurrence_basedate": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1176509098,
|
||||
"result": 3
|
||||
}
|
||||
```
|
||||
|
||||
## getTask
|
||||
|
||||
- Purpose: **Get task by the unique id**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **task properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getTask",
|
||||
"id": 700738119,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 700738119,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"title": "Task #1",
|
||||
"description": "",
|
||||
"date_creation": "1409963206",
|
||||
"color_id": "blue",
|
||||
"project_id": "1",
|
||||
"column_id": "2",
|
||||
"owner_id": "1",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"date_completed": null,
|
||||
"score": "0",
|
||||
"date_due": "0",
|
||||
"category_id": "0",
|
||||
"creator_id": "0",
|
||||
"date_modification": "1409963206",
|
||||
"reference": "",
|
||||
"date_started": null,
|
||||
"time_spent": "0",
|
||||
"time_estimated": "0",
|
||||
"swimlane_id": "0",
|
||||
"date_moved": "1430875287",
|
||||
"recurrence_status": "0",
|
||||
"recurrence_trigger": "0",
|
||||
"recurrence_factor": "0",
|
||||
"recurrence_timeframe": "0",
|
||||
"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",
|
||||
"color": {
|
||||
"name": "Yellow",
|
||||
"background": "rgb(245, 247, 196)",
|
||||
"border": "rgb(223, 227, 45)"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getTaskByReference
|
||||
|
||||
- Purpose: **Get task by the external reference**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **reference** (string, required)
|
||||
- Result on success: **task properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getTaskByReference",
|
||||
"id": 1992081213,
|
||||
"params": {
|
||||
"project_id": 1,
|
||||
"reference": "TICKET-1234"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1992081213,
|
||||
"result": {
|
||||
"id": "5",
|
||||
"title": "Task with external ticket number",
|
||||
"description": "[Link to my ticket](http:\/\/my-ticketing-system\/1234)",
|
||||
"date_creation": "1434227446",
|
||||
"color_id": "yellow",
|
||||
"project_id": "1",
|
||||
"column_id": "1",
|
||||
"owner_id": "0",
|
||||
"position": "4",
|
||||
"is_active": "1",
|
||||
"date_completed": null,
|
||||
"score": "0",
|
||||
"date_due": "0",
|
||||
"category_id": "0",
|
||||
"creator_id": "0",
|
||||
"date_modification": "1434227446",
|
||||
"reference": "TICKET-1234",
|
||||
"date_started": null,
|
||||
"time_spent": "0",
|
||||
"time_estimated": "0",
|
||||
"swimlane_id": "0",
|
||||
"date_moved": "1434227446",
|
||||
"recurrence_status": "0",
|
||||
"recurrence_trigger": "0",
|
||||
"recurrence_factor": "0",
|
||||
"recurrence_timeframe": "0",
|
||||
"recurrence_basedate": "0",
|
||||
"recurrence_parent": null,
|
||||
"recurrence_child": null,
|
||||
"url": "http:\/\/127.0.0.1:8000\/?controller=task&action=show&task_id=5&project_id=1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAllTasks
|
||||
|
||||
- Purpose: **Get all available tasks**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **status_id**: The value 1 for active tasks and 0 for inactive (integer, required)
|
||||
- Result on success: **List of tasks**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to fetch all tasks on the board:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllTasks",
|
||||
"id": 133280317,
|
||||
"params": {
|
||||
"project_id": 1,
|
||||
"status_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Task #1",
|
||||
"description": "",
|
||||
"date_creation": "1409961789",
|
||||
"color_id": "blue",
|
||||
"project_id": "1",
|
||||
"column_id": "2",
|
||||
"owner_id": "1",
|
||||
"position": "1",
|
||||
"is_active": "1",
|
||||
"date_completed": null,
|
||||
"score": "0",
|
||||
"date_due": "0",
|
||||
"category_id": "0",
|
||||
"creator_id": "0",
|
||||
"date_modification": "1409961789",
|
||||
"reference": "",
|
||||
"date_started": null,
|
||||
"time_spent": "0",
|
||||
"time_estimated": "0",
|
||||
"swimlane_id": "0",
|
||||
"date_moved": "1430783191",
|
||||
"recurrence_status": "0",
|
||||
"recurrence_trigger": "0",
|
||||
"recurrence_factor": "0",
|
||||
"recurrence_timeframe": "0",
|
||||
"recurrence_basedate": "0",
|
||||
"recurrence_parent": null,
|
||||
"recurrence_child": null,
|
||||
"priority": "0",
|
||||
"external_provider": null,
|
||||
"external_uri": null,
|
||||
"url": "http:\/\/127.0.0.1:8000\/?controller=task&action=show&task_id=1&project_id=1",
|
||||
"color": {
|
||||
"name": "Blue",
|
||||
"background": "rgb(219, 235, 255)",
|
||||
"border": "rgb(168, 207, 255)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Test",
|
||||
"description": "",
|
||||
"date_creation": "1409962115",
|
||||
"color_id": "green",
|
||||
"project_id": "1",
|
||||
"column_id": "2",
|
||||
"owner_id": "1",
|
||||
"position": "2",
|
||||
"is_active": "1",
|
||||
"date_completed": null,
|
||||
"score": "0",
|
||||
"date_due": "0",
|
||||
"category_id": "0",
|
||||
"creator_id": "0",
|
||||
"date_modification": "1409962115",
|
||||
"reference": "",
|
||||
"date_started": null,
|
||||
"time_spent": "0",
|
||||
"time_estimated": "0",
|
||||
"swimlane_id": "0",
|
||||
"date_moved": "1430783191",
|
||||
"recurrence_status": "0",
|
||||
"recurrence_trigger": "0",
|
||||
"recurrence_factor": "0",
|
||||
"recurrence_timeframe": "0",
|
||||
"recurrence_basedate": "0",
|
||||
"recurrence_parent": null,
|
||||
"recurrence_child": null,
|
||||
"priority": "0",
|
||||
"external_provider": null,
|
||||
"external_uri": null,
|
||||
"url": "http:\/\/127.0.0.1:8000\/?controller=task&action=show&task_id=2&project_id=1",
|
||||
"color": {
|
||||
"name": "Green",
|
||||
"background": "rgb(189, 244, 203)",
|
||||
"border": "rgb(74, 227, 113)"
|
||||
}
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getOverdueTasks
|
||||
|
||||
- Purpose: **Get all overdue tasks**
|
||||
- Result on success: **List of tasks**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to fetch all tasks on the board:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getOverdueTasks",
|
||||
"id": 133280317
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Task #1",
|
||||
"date_due": "1409961789",
|
||||
"project_id": "1",
|
||||
"project_name": "Test",
|
||||
"assignee_username":"admin",
|
||||
"assignee_name": null
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Test",
|
||||
"date_due": "1409962115",
|
||||
"project_id": "1",
|
||||
"project_name": "Test",
|
||||
"assignee_username":"admin",
|
||||
"assignee_name": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getOverdueTasksByProject
|
||||
|
||||
- Purpose: **Get all overdue tasks for a special project**
|
||||
- Result on success: **List of tasks**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to fetch all tasks on the board:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getOverdueTasksByProject",
|
||||
"id": 133280317,
|
||||
"params": {
|
||||
"project_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Task #1",
|
||||
"date_due": "1409961789",
|
||||
"project_id": "1",
|
||||
"project_name": "Test",
|
||||
"assignee_username":"admin",
|
||||
"assignee_name": null
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Test",
|
||||
"date_due": "1409962115",
|
||||
"project_id": "1",
|
||||
"project_name": "Test",
|
||||
"assignee_username":"admin",
|
||||
"assignee_name": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## updateTask
|
||||
|
||||
- Purpose: **Update a task**
|
||||
- Parameters:
|
||||
- **id** (integer, required)
|
||||
- **title** (string, optional)
|
||||
- **color_id** (string, optional)
|
||||
- **owner_id** (integer, optional)
|
||||
- **date_due**: ISO8601 format (string, optional)
|
||||
- **description** Markdown content (string, optional)
|
||||
- **category_id** (integer, optional)
|
||||
- **score** (integer, optional)
|
||||
- **priority** (integer, optional)
|
||||
- **recurrence_status** (integer, optional)
|
||||
- **recurrence_trigger** (integer, optional)
|
||||
- **recurrence_factor** (integer, optional)
|
||||
- **recurrence_timeframe** (integer, optional)
|
||||
- **recurrence_basedate** (integer, optional)
|
||||
- **tags** ([]string, optional)
|
||||
- **date_started**: ISO8601 format (string, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to change the task color:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateTask",
|
||||
"id": 1406803059,
|
||||
"params": {
|
||||
"id": 1,
|
||||
"color_id": "blue"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1406803059,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## openTask
|
||||
|
||||
- Purpose: **Set a task to the status open**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "openTask",
|
||||
"id": 1888531925,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1888531925,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## closeTask
|
||||
|
||||
- Purpose: **Set a task to the status close**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "closeTask",
|
||||
"id": 1654396960,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1654396960,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeTask
|
||||
|
||||
- Purpose: **Remove a task**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeTask",
|
||||
"id": 1423501287,
|
||||
"params": {
|
||||
"task_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1423501287,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## moveTaskPosition
|
||||
|
||||
- Purpose: **Move a task to another column, position or swimlane inside the same board**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **task_id** (integer, required)
|
||||
- **column_id** (integer, required)
|
||||
- **position** (integer, required)
|
||||
- **swimlane_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "moveTaskPosition",
|
||||
"id": 117211800,
|
||||
"params": {
|
||||
"project_id": 1,
|
||||
"task_id": 1,
|
||||
"column_id": 2,
|
||||
"position": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 117211800,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## moveTaskToProject
|
||||
|
||||
- Purpose: **Move a task to another project**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, optional)
|
||||
- **column_id** (integer, optional)
|
||||
- **category_id** (integer, optional)
|
||||
- **owner_id** (integer, optional)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "moveTaskToProject",
|
||||
"id": 15775829,
|
||||
"params": [
|
||||
4,
|
||||
5
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 15775829,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## duplicateTaskToProject
|
||||
|
||||
- Purpose: **Move a task to another column or another position**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **project_id** (integer, required)
|
||||
- **swimlane_id** (integer, optional)
|
||||
- **column_id** (integer, optional)
|
||||
- **category_id** (integer, optional)
|
||||
- **owner_id** (integer, optional)
|
||||
- Result on success: **task_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "duplicateTaskToProject",
|
||||
"id": 1662458687,
|
||||
"params": [
|
||||
5,
|
||||
7
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1662458687,
|
||||
"result": 6
|
||||
}
|
||||
```
|
||||
|
||||
## searchTasks
|
||||
|
||||
- Purpose: **Find tasks by using the search engine**
|
||||
- Parameters:
|
||||
- **project_id** (integer, required)
|
||||
- **query** (string, required)
|
||||
- Result on success: **list of tasks**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "searchTasks",
|
||||
"id": 1468511716,
|
||||
"params": {
|
||||
"project_id": 2,
|
||||
"query": "assignee:nobody"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1468511716,
|
||||
"result": [
|
||||
{
|
||||
"nb_comments": "0",
|
||||
"nb_files": "0",
|
||||
"nb_subtasks": "0",
|
||||
"nb_completed_subtasks": "0",
|
||||
"nb_links": "0",
|
||||
"nb_external_links": "0",
|
||||
"is_milestone": null,
|
||||
"id": "3",
|
||||
"reference": "",
|
||||
"title": "T3",
|
||||
"description": "",
|
||||
"date_creation": "1461365164",
|
||||
"date_modification": "1461365164",
|
||||
"date_completed": null,
|
||||
"date_started": null,
|
||||
"date_due": "0",
|
||||
"color_id": "yellow",
|
||||
"project_id": "2",
|
||||
"column_id": "5",
|
||||
"swimlane_id": "0",
|
||||
"owner_id": "0",
|
||||
"creator_id": "0"
|
||||
// ...
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getTaskMetadata
|
||||
|
||||
- Purpose: **Get all metadata related to a task by task unique id**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- Result on success: **list of metadata**
|
||||
- Result on failure: **empty array**
|
||||
|
||||
Request example to fetch all the metada of a task:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getTaskMetadata",
|
||||
"id": 133280317,
|
||||
"params": [
|
||||
1
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": [
|
||||
{
|
||||
"metaKey1": "metaValue1",
|
||||
"metaKey2": "metaValue2",
|
||||
...
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## getTaskMetadataByName
|
||||
|
||||
- Purpose: **Get metadata related to a task by task unique id and metakey (name)**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **name** (string, required)
|
||||
- Result on success: **metadata value**
|
||||
- Result on failure: **empty string**
|
||||
|
||||
Request example to fetch metada of a task by name:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getTaskMetadataByName",
|
||||
"id": 133280317,
|
||||
"params": [
|
||||
1,
|
||||
"metaKey1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": "metaValue1"
|
||||
}
|
||||
```
|
||||
|
||||
## saveTaskMetadata
|
||||
|
||||
- Purpose: **Save/update task metadata**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **array("name" => "value")** (array, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to add/update metada of a task:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "saveTaskMetadata",
|
||||
"id": 133280317,
|
||||
"params": [
|
||||
1,
|
||||
{
|
||||
"metaName" : "metaValue"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeTaskMetadata
|
||||
|
||||
- Purpose: **Remove task metadata by name**
|
||||
- Parameters:
|
||||
- **task_id** (integer, required)
|
||||
- **name** (string, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example to remove metada of a task by name:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeTaskMetadata",
|
||||
"id": 133280317,
|
||||
"params": [
|
||||
1,
|
||||
"metaKey1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 133280317,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,357 +0,0 @@
|
|||
API User Procedures
|
||||
===================
|
||||
|
||||
## createUser
|
||||
|
||||
- Purpose: **Create a new user**
|
||||
- Parameters:
|
||||
- **username** Must be unique (string, required)
|
||||
- **password** Must have at least 6 characters (string, required)
|
||||
- **name** (string, optional)
|
||||
- **email** (string, optional)
|
||||
- **role** (string, optional, example: app-admin, app-manager, app-user)
|
||||
- Result on success: **user_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createUser",
|
||||
"id": 1518863034,
|
||||
"params": {
|
||||
"username": "biloute",
|
||||
"password": "123456"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1518863034,
|
||||
"result": 22
|
||||
}
|
||||
```
|
||||
|
||||
## createLdapUser
|
||||
|
||||
- Purpose: **Create a new user authentified by LDAP**
|
||||
- Parameters:
|
||||
- **username** (string, required)
|
||||
- Result on success: **user_id**
|
||||
- Result on failure: **false**
|
||||
|
||||
The user will only be created if he is found on the LDAP server.
|
||||
This method works only with LDAP authentication configured in proxy or anonymous mode.
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "createLdapUser",
|
||||
"id": 1518863034,
|
||||
"params": {
|
||||
"username": "my_ldap_user",
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1518863034,
|
||||
"result": 22
|
||||
}
|
||||
```
|
||||
|
||||
## getUser
|
||||
|
||||
- Purpose: **Get user information**
|
||||
- Parameters:
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **user properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getUser",
|
||||
"id": 1769674781,
|
||||
"params": {
|
||||
"user_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1769674781,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"username": "biloute",
|
||||
"password": "$2y$10$dRs6pPoBu935RpmsrhmbjevJH5MgZ7Kr9QrnVINwwyZ3.MOwqg.0m",
|
||||
"role": "app-user",
|
||||
"is_ldap_user": "0",
|
||||
"name": "",
|
||||
"email": "",
|
||||
"google_id": null,
|
||||
"github_id": null,
|
||||
"notifications_enabled": "0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getUserByName
|
||||
|
||||
- Purpose: **Get user information**
|
||||
- Parameters:
|
||||
- **username** (string, required)
|
||||
- Result on success: **user properties**
|
||||
- Result on failure: **null**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getUserByName",
|
||||
"id": 1769674782,
|
||||
"params": {
|
||||
"username": "biloute"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1769674782,
|
||||
"result": {
|
||||
"id": "1",
|
||||
"username": "biloute",
|
||||
"password": "$2y$10$dRs6pPoBu935RpmsrhmbjevJH5MgZ7Kr9QrnVINwwyZ3.MOwqg.0m",
|
||||
"role": "app-user",
|
||||
"is_ldap_user": "0",
|
||||
"name": "",
|
||||
"email": "",
|
||||
"google_id": null,
|
||||
"github_id": null,
|
||||
"notifications_enabled": "0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## getAllUsers
|
||||
|
||||
- Purpose: **Get all available users**
|
||||
- Parameters:
|
||||
- **none**
|
||||
- Result on success: **List of users**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "getAllUsers",
|
||||
"id": 1438712131
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1438712131,
|
||||
"result": [
|
||||
{
|
||||
"id": "1",
|
||||
"username": "biloute",
|
||||
"name": "",
|
||||
"email": "",
|
||||
"role": "app-user",
|
||||
"is_ldap_user": "0",
|
||||
"notifications_enabled": "0",
|
||||
"google_id": null,
|
||||
"github_id": null
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## updateUser
|
||||
|
||||
- Purpose: **Update a user**
|
||||
- Parameters:
|
||||
- **id** (integer)
|
||||
- **username** (string, optional)
|
||||
- **name** (string, optional)
|
||||
- **email** (string, optional)
|
||||
- **role** (string, optional, example: app-admin, app-manager, app-user)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "updateUser",
|
||||
"id": 322123657,
|
||||
"params": {
|
||||
"id": 1,
|
||||
"role": "app-manager"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 322123657,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## removeUser
|
||||
|
||||
- Purpose: **Remove a user**
|
||||
- Parameters:
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "removeUser",
|
||||
"id": 2094191872,
|
||||
"params": {
|
||||
"user_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2094191872,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## disableUser
|
||||
|
||||
- Purpose: **Disable a user**
|
||||
- Parameters:
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "disableUser",
|
||||
"id": 2094191872,
|
||||
"params": {
|
||||
"user_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2094191872,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## enableUser
|
||||
|
||||
- Purpose: **Enable a user**
|
||||
- Parameters:
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "enableUser",
|
||||
"id": 2094191872,
|
||||
"params": {
|
||||
"user_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2094191872,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
||||
## isActiveUser
|
||||
|
||||
- Purpose: **Check if a user is active**
|
||||
- Parameters:
|
||||
- **user_id** (integer, required)
|
||||
- Result on success: **true**
|
||||
- Result on failure: **false**
|
||||
|
||||
Request example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "isActiveUser",
|
||||
"id": 2094191872,
|
||||
"params": {
|
||||
"user_id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Response example:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 2094191872,
|
||||
"result": true
|
||||
}
|
||||
```
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
Application settings
|
||||
====================
|
||||
|
||||
Some parameters for the application can be changed on the settings page.
|
||||
Only administrators can change those settings.
|
||||
|
||||
Go to the menu **Settings**, then choose **Application settings** on the left.
|
||||
|
||||

|
||||
|
||||
### Application URL
|
||||
|
||||
This parameter is used for email notifications.
|
||||
The email footer will contain a link to the Kanboard task.
|
||||
|
||||
### Language
|
||||
|
||||
The application language can be changed at anytime.
|
||||
The language will be set for all users.
|
||||
|
||||
### Time zone
|
||||
|
||||
By default, Kanboard use UTC as time zone, but you can define your own time zone.
|
||||
The list contains all supported time zones by your web server.
|
||||
|
||||
### Date format
|
||||
|
||||
Input format used for date fields, for examples the due date for tasks.
|
||||
|
||||
Kanboard offers 4 different formats:
|
||||
|
||||
- DD/MM/YYYY
|
||||
- MM/DD/YYYY (default)
|
||||
- YYYY/MM/DD
|
||||
- MM.DD.YYYY
|
||||
|
||||
The [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) format is always accepted (YYYY-MM-DD or YYYY_MM_DD).
|
||||
|
||||
### Custom Stylesheet
|
||||
|
||||
Write your own CSS to override or improve Kanboard default style.
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
How to build assets (Javascript and CSS files)
|
||||
==============================================
|
||||
|
||||
Stylesheet and Javascript files are merged together and minified.
|
||||
|
||||
- Original CSS files are stored in the folder `assets/css/src/*.css`
|
||||
- Original Javascript code is stored in the folder `assets/js/src/*.js`
|
||||
- `assets/*/vendor.min.*` are external dependencies merged and minified
|
||||
- `assets/*/app.min.*` are application source code merged and minified
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
- [NodeJS](https://nodejs.org/) with `npm`
|
||||
|
||||
Building Javascript and CSS files
|
||||
---------------------------------
|
||||
|
||||
Kanboard use [Gulp](http://gulpjs.com/) to build the assets and [Bower](http://bower.io/) to manage dependencies.
|
||||
These tools are installed as NodeJS dependencies into the project.
|
||||
|
||||
### Run everything
|
||||
|
||||
```bash
|
||||
make static
|
||||
```
|
||||
|
||||
### Build `vendor.min.js` and `vendor.min.css`
|
||||
|
||||
```bash
|
||||
gulp vendor
|
||||
```
|
||||
|
||||
### Build `app.min.js`
|
||||
|
||||
```bash
|
||||
gulp js
|
||||
```
|
||||
|
||||
### Build `app.min.css`
|
||||
|
||||
```bash
|
||||
gulp css
|
||||
```
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
Building assets is not possible from the Kanboard's archive, you have to clone the repository.
|
||||
|
|
@ -1,108 +0,0 @@
|
|||
Automatic Actions
|
||||
=================
|
||||
|
||||
To minimize user interaction, Kanboard support automated actions.
|
||||
|
||||
Each automatic action is defined with these properties:
|
||||
|
||||
- An event to listen
|
||||
- Action linked to the event
|
||||
- Additional parameters
|
||||
|
||||
Each project has a different set of automatic actions. The configuration panel is located on the project listing page - just click on the link **Automatic actions**.
|
||||
|
||||
Add a new action
|
||||
----------------
|
||||
|
||||
Click on the link **Add a new automatic action**.
|
||||
|
||||

|
||||
|
||||
1. Choose an action
|
||||
2. Select an event
|
||||
3. Define the parameters
|
||||
|
||||
Available actions
|
||||
-------------------------
|
||||
|
||||
- Create a comment from an external provider
|
||||
- Add a comment log when moving the task between columns
|
||||
- Automatically assign a category based on a color
|
||||
- Change the category based on an external label
|
||||
- Automatically assign a category based on a link
|
||||
- Automatically assign a color based on a category
|
||||
- Assign a color when the task is moved to a specific column
|
||||
- Change task color when using a specific task link
|
||||
- Assign a color to a specific user
|
||||
- Assign the task to the person who does the action
|
||||
- Assign the task to the person who does the action when the column is changed
|
||||
- Assign the task to a specific user
|
||||
- Change the assignee based on an external username
|
||||
- Close the task
|
||||
- Close a task in a specific column
|
||||
- Create a task from an external provider
|
||||
- Duplicate the task to another project
|
||||
- Send a task by email to someone
|
||||
- Move the task to another project
|
||||
- Move the task to another column when assigned to a user
|
||||
- Move the task to another column when the category is changed
|
||||
- Move the task to another column when assignee is cleared
|
||||
- Open a task
|
||||
- Automatically update the start date
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
Here are some examples used in real life:
|
||||
|
||||
### When I move a task to the column "Done", automatically close this task
|
||||
|
||||
- Choose action: **Close a task in a specific column**
|
||||
- Choose the event: **Move a task to another column**
|
||||
- Define action parameter: **Column = Done** (this is the destination column)
|
||||
|
||||
### When I move a task to the column "To be validated", assign this task to a specific user
|
||||
|
||||
- Choose the action: **Assign the task to a specific user**
|
||||
- Choose the event: **Move a task to another column**
|
||||
- Define the action parameters: **Column = To be validated** and **User = Bob** (Bob is our tester)
|
||||
|
||||
### When I move a task to the column "Work in progress", assign this task to the current user
|
||||
|
||||
- Choose action: **Assign the task to the person who does the action when the column is changed**
|
||||
- Choose the event: **Move a task to another column**
|
||||
- Define action parameter: **Column = Work in progress**
|
||||
|
||||
### When a task is completed, duplicate this task to another project
|
||||
|
||||
Let's say we have two projects: "Customer orders" and "Production". Once the order is validated, swap it to the "Production" project.
|
||||
|
||||
- Choose action: **Duplicate the task to another project**
|
||||
- Choose the event: **Closing a task**
|
||||
- Define action parameters: **Column = Validated** and **Project = Production**
|
||||
|
||||
### When a task is moved to the last column, move the exact same task to another project
|
||||
|
||||
Let's say we have two projects: "Ideas" and "Development". Once the idea is validated, swap it to the "Development" project.
|
||||
|
||||
- Choose action: **Move the task to another project**
|
||||
- Choose the event: **Move a task to another column**
|
||||
- Define action parameters: **Column = Validated** and **Project = Development**
|
||||
|
||||
### I want to assign automatically a color to the user Bob
|
||||
|
||||
- Choose action: **Assign a color to a specific user**
|
||||
- Choose the event: **Task assignee change**
|
||||
- Define action parameters: **Color = Green** and **Assignee = Bob**
|
||||
|
||||
### I want to assign a color automatically to the defined category "Feature Request"
|
||||
|
||||
- Choose action: **Assign automatically a color based on a category**
|
||||
- Choose the event: **Task creation or modification**
|
||||
- Define action parameters: **Color = Blue** and **Category = Feature Request**
|
||||
|
||||
### I want to set the start date automatically when the task is moved to the column "Work in progress"
|
||||
|
||||
- Choose action: **Automatically update the start date**
|
||||
- Choose the event: **Move a task to another column**
|
||||
- Define action parameters: **Column = Work in progress**
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
Collapsed and Expanded mode
|
||||
===========================
|
||||
|
||||
Tasks on the board can be displayed in collapsed or in expanded mode.
|
||||
Switching from one view to another can be done with the keyboard shortcut **"s"** or by using the drop-down menu on the left.
|
||||
|
||||
Collapsed mode
|
||||
--------------
|
||||
|
||||

|
||||
|
||||
- If the task is assigned to someone, the initials of the person are shown next to the task number.
|
||||
- If the task title is too long, you can put your mouse over the task to show a tooltip with the full title.
|
||||
|
||||
Expanded mode
|
||||
-------------
|
||||
|
||||

|
||||
|
|
@ -1,24 +0,0 @@
|
|||
Board settings
|
||||
==============
|
||||
|
||||
Go to the menu **Settings**, then choose **Board settings** on the left.
|
||||
|
||||

|
||||
|
||||
### Task highlighting
|
||||
|
||||
This feature displays a shadow around the task when a task is moved recently.
|
||||
|
||||
Set the value 0 to disable this feature, 2 days by default (172800 seconds).
|
||||
|
||||
Everything moved since 2 days will have shadow around the task.
|
||||
|
||||
### Refresh interval for public board
|
||||
|
||||
When you share a board, the page will refresh every 60 seconds automatically by default.
|
||||
|
||||
### Refresh interval for private board
|
||||
|
||||
When your web browser is open on a board, Kanboard checks every 10 seconds if something has been changed by someone else.
|
||||
|
||||
Technically this process is done by Ajax polling.
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
Horizontal scrolling and compact mode
|
||||
=====================================
|
||||
|
||||
When the board cannot fit on your screen, a horizontal scroll bar will appear at the bottom.
|
||||
|
||||
However, it's possible to switch to the compact the view to display all columns in your screen.
|
||||
|
||||

|
||||
|
||||
Switching between horizontal scrolling and compact view can be done with the keyboard shortcut **"c"** or by using the drop-down menu on the top left.
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
Show and hide columns on the board
|
||||
==================================
|
||||
|
||||
You can hide or display columns very easily on the board:
|
||||
|
||||

|
||||
|
||||
To hide a column, click on the column dropdown menu and choose "Hide this column":
|
||||
|
||||

|
||||
|
||||
To show the column again, click on the "plus icon".
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
Brute Force Protection
|
||||
======================
|
||||
|
||||
The brute force protection of Kanboard works at the user account level:
|
||||
|
||||
- After 3 authentication failure for the same username, the login form shows a captcha image to prevent automated bot tentatives.
|
||||
- After 6 authentication failure, the user account is locked down for a period of 15 minutes.
|
||||
|
||||
This feature works only for authentication methods that use the login form.
|
||||
|
||||
However, **after three authentication failure through the user API**, the account has to be unlocked by using the login form.
|
||||
|
||||
Kanboard doesn't block any IP addresses since bots can use several anonymous proxies. However, you can use external tools like [fail2ban](http://www.fail2ban.org) to avoid massive scans.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
Default settings can be changed with these configuration variables:
|
||||
|
||||
```php
|
||||
// Enable captcha after 3 authentication failure
|
||||
define('BRUTEFORCE_CAPTCHA', 3);
|
||||
|
||||
// Lock the account after 6 authentication failure
|
||||
define('BRUTEFORCE_LOCKDOWN', 6);
|
||||
|
||||
// Lock account duration in minutes
|
||||
define('BRUTEFORCE_LOCKDOWN_DURATION', 15);
|
||||
```
|
||||
|
||||
Unlocking users
|
||||
---------------
|
||||
|
||||
If you don't want to wait 15 minutes, you can unlock a user from the user interface.
|
||||
As administrator, go to the user profile and click on "Unlock this user".
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
Calendar settings
|
||||
=================
|
||||
|
||||
Go to the menu **Settings**, then choose **Calendar settings** on the left.
|
||||
|
||||

|
||||
|
||||
There are two different calendars in Kanboard:
|
||||
|
||||
- Project calendar
|
||||
- User calendar (available from the dashboard)
|
||||
|
||||
Project calendar
|
||||
----------------
|
||||
|
||||
This calendar shows tasks with defined due date and tasks based on the creation date or the start date.
|
||||
|
||||
### Show tasks based on the creation date
|
||||
|
||||
- The start date of the calendar event is the creation date of the task.
|
||||
- The end date of the event is the date of completion.
|
||||
|
||||
### Show tasks based on the start date
|
||||
|
||||
- The start date of the calendar event is the start date of the task.
|
||||
- This date can be defined manually.
|
||||
- The end date of the event is the date of completion.
|
||||
- If there is no start date the task will not appear on the calendar.
|
||||
|
||||
User calendar
|
||||
-------------
|
||||
|
||||
This calendar shows only tasks assigned to the user and optionally sub-tasks information.
|
||||
|
||||
### Show sub-tasks based on the time tracking
|
||||
|
||||
- Display sub-tasks in the calendar from the information recorded in the time tracking table.
|
||||
- The intersection with the user timetable is also calculated.
|
||||
|
||||
### Show sub-task estimates (forecast of future work)
|
||||
|
||||
- Display the estimate of future work for sub-tasks in status "todo" and with a defined "estimate" value.
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
Calendar
|
||||
========
|
||||
|
||||
There are two different views for the calendar:
|
||||
|
||||
- The project view with filters (available from the board)
|
||||
- The user view (available from the dashboard and from the user section)
|
||||
|
||||
At this time the calendar is able to display this information:
|
||||
|
||||
- Tasks with a due date, displayed at the top. **The due date can be changed by moving the task to another day**.
|
||||
- Tasks based on the creation date or the start date. **These events cannot be modified with the calendar**.
|
||||
- Sub-task time tracking, all recorded time slot will be shown in the calendar.
|
||||
- Sub-task estimates, forecasts of work left
|
||||
|
||||

|
||||
|
||||
The calendar configuration can be changed in the settings page.
|
||||
|
||||
Note: The due date doesn't contain time information.
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
Kanboard Installation on CentOS
|
||||
===============================
|
||||
|
||||
Centos 7
|
||||
--------
|
||||
|
||||
Install PHP and Apache:
|
||||
|
||||
```bash
|
||||
yum install -y php php-xml php-mbstring php-pdo php-gd unzip wget
|
||||
```
|
||||
|
||||
By default, Centos 7 use PHP 5.4.16 and Apache 2.4.6.
|
||||
|
||||
Restart Apache:
|
||||
|
||||
```bash
|
||||
systemctl restart httpd.service
|
||||
```
|
||||
|
||||
Install Kanboard:
|
||||
|
||||
```bash
|
||||
cd /var/www/html
|
||||
|
||||
# Download the latest release from https://github.com/kanboard/kanboard/releases
|
||||
wget https://github.com/kanboard/kanboard/archive/v<version>.zip
|
||||
|
||||
unzip kanboard-<version>.zip
|
||||
chown -R apache:apache kanboard-<version>/data
|
||||
rm kanboard-<version>.zip
|
||||
```
|
||||
|
||||
Centos 6.x
|
||||
----------
|
||||
|
||||
Install PHP and Apache:
|
||||
|
||||
```bash
|
||||
yum install -y php php-xml php-mbstring php-pdo php-gd unzip wget
|
||||
```
|
||||
|
||||
By default, Centos 6.5 use PHP 5.3.3 and Apache 2.2.15.
|
||||
|
||||
Enable short tags:
|
||||
|
||||
- Edit the file `/etc/php.ini`
|
||||
- Change the line `short_open_tag = On`
|
||||
|
||||
Restart Apache:
|
||||
|
||||
```bash
|
||||
service httpd restart
|
||||
```
|
||||
|
||||
Install Kanboard:
|
||||
|
||||
```bash
|
||||
cd /var/www/html
|
||||
|
||||
# Download the latest release from https://github.com/kanboard/kanboard/releases
|
||||
wget https://github.com/kanboard/kanboard/archive/v<version>.zip
|
||||
|
||||
unzip kanboard-<version>.zip
|
||||
chown -R apache:apache kanboard-<version>/data
|
||||
rm kanboard-<version>.zip
|
||||
```
|
||||
|
||||
SELinux restrictions
|
||||
--------------------
|
||||
|
||||
If SELinux is enabled, be sure that the Apache user can write to the directory data:
|
||||
|
||||
```bash
|
||||
chcon -R -t httpd_sys_content_rw_t /var/www/html/kanboard/data
|
||||
```
|
||||
|
||||
Be sure to configure your server to allow Kanboard to send emails and make external network requests, by example with SELinux:
|
||||
|
||||
```bash
|
||||
setsebool -P httpd_can_network_connect=1
|
||||
```
|
||||
|
||||
Allowing external connections is necessary if you use LDAP, SMTP, Web hooks or any third-party integration.
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
Some features of Kanboard require that you run [a daily background job](cronjob.markdown).
|
||||
|
|
@ -1,247 +0,0 @@
|
|||
Command Line Interface
|
||||
======================
|
||||
|
||||
Kanboard provides a simple command line interface that can be used from any Unix terminal.
|
||||
This tool can be used only on the local machine.
|
||||
|
||||
This feature is useful to run commands outside of the web server processes.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
- Open a terminal and go to your Kanboard directory (example: `cd /var/www/kanboard`)
|
||||
- Run the command `./cli` or `php cli`
|
||||
|
||||
```bash
|
||||
Kanboard version master
|
||||
|
||||
Usage:
|
||||
command [options] [arguments]
|
||||
|
||||
Options:
|
||||
-h, --help Display this help message
|
||||
-q, --quiet Do not output any message
|
||||
-V, --version Display this application version
|
||||
--ansi Force ANSI output
|
||||
--no-ansi Disable ANSI output
|
||||
-n, --no-interaction Do not ask any interactive question
|
||||
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
|
||||
|
||||
Available commands:
|
||||
cronjob Execute daily cronjob
|
||||
help Displays help for a command
|
||||
job Execute individual job (read payload from stdin)
|
||||
list Lists commands
|
||||
version Display Kanboard version
|
||||
worker Execute queue worker
|
||||
db
|
||||
db:migrate Execute SQL migrations
|
||||
db:version Show database schema version
|
||||
export
|
||||
export:daily-project-column-stats Daily project column stats CSV export (number of tasks per column and per day)
|
||||
export:subtasks Subtasks CSV export
|
||||
export:tasks Tasks CSV export
|
||||
export:transitions Task transitions CSV export
|
||||
locale
|
||||
locale:compare Compare application translations with the fr_FR locale
|
||||
locale:sync Synchronize all translations based on the fr_FR locale
|
||||
notification
|
||||
notification:overdue-tasks Send notifications for overdue tasks
|
||||
plugin
|
||||
plugin:install Install a plugin from a remote Zip archive
|
||||
plugin:uninstall Remove a plugin
|
||||
plugin:upgrade Update all installed plugins
|
||||
projects
|
||||
projects:archive Disable projects not touched during one year
|
||||
projects:archive-activities Remove project activities after one year
|
||||
projects:daily-stats Calculate daily statistics for all projects
|
||||
trigger
|
||||
trigger:tasks Trigger scheduler event for all tasks
|
||||
user
|
||||
user:reset-2fa Remove two-factor authentication for a user
|
||||
user:reset-password Change user password
|
||||
```
|
||||
|
||||
Available commands
|
||||
------------------
|
||||
|
||||
### Tasks CSV export
|
||||
|
||||
Usage:
|
||||
|
||||
```bash
|
||||
./cli export:tasks <project_id> <start_date> <end_date>
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
./cli export:tasks 1 2014-10-01 2014-11-30 > /tmp/my_custom_export.csv
|
||||
```
|
||||
|
||||
CSV data are sent to `stdout`.
|
||||
|
||||
### Subtasks CSV export
|
||||
|
||||
Usage:
|
||||
|
||||
```bash
|
||||
./cli export:subtasks <project_id> <start_date> <end_date>
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
./cli export:subtasks 1 2014-10-01 2014-11-30 > /tmp/my_custom_export.csv
|
||||
```
|
||||
|
||||
### Task transitions CSV export
|
||||
|
||||
Usage:
|
||||
|
||||
```bash
|
||||
./cli export:transitions <project_id> <start_date> <end_date>
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
./cli export:transitions 1 2014-10-01 2014-11-30 > /tmp/my_custom_export.csv
|
||||
```
|
||||
|
||||
### Export daily summaries data in CSV
|
||||
|
||||
The exported data will be printed on the standard output:
|
||||
|
||||
```bash
|
||||
./cli export:daily-project-column-stats <project_id> <start_date> <end_date>
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```bash
|
||||
./cli export:daily-project-column-stats 1 2014-10-01 2014-11-30 > /tmp/my_custom_export.csv
|
||||
```
|
||||
|
||||
### Send notifications for overdue tasks
|
||||
|
||||
Emails will be sent to all users with notifications enabled.
|
||||
|
||||
```bash
|
||||
./cli notification:overdue-tasks
|
||||
```
|
||||
|
||||
Optional parameters:
|
||||
|
||||
- `--show`: Display notifications sent
|
||||
- `--group`: Group all overdue tasks for one user (from all projects) in one email
|
||||
- `--manager`: Send all overdue tasks to project manager(s) in one email
|
||||
- `-p|--project project_id|identifier`: Send notifications only for the given project
|
||||
|
||||
You can also display the overdue tasks with the flag `--show`:
|
||||
|
||||
```bash
|
||||
./cli notification:overdue-tasks --show
|
||||
+-----+---------+------------+------------+--------------+----------+
|
||||
| Id | Title | Due date | Project Id | Project name | Assignee |
|
||||
+-----+---------+------------+------------+--------------+----------+
|
||||
| 201 | Test | 2014-10-26 | 1 | Project #0 | admin |
|
||||
| 202 | My task | 2014-10-28 | 1 | Project #0 | |
|
||||
+-----+---------+------------+------------+--------------+----------+
|
||||
```
|
||||
|
||||
Example to filter by project:
|
||||
|
||||
```bash
|
||||
./cli notification:overdue-tasks --project 123
|
||||
```
|
||||
|
||||
Or if you have defined a project identifier:
|
||||
|
||||
```bash
|
||||
./cli notification:overdue-tasks --project MY_PROJECT
|
||||
```
|
||||
|
||||
### Run daily project stats calculation
|
||||
|
||||
This command calculate the statistics of each project:
|
||||
|
||||
```bash
|
||||
./cli projects:daily-stats
|
||||
Run calculation for Project #0
|
||||
Run calculation for Project #1
|
||||
Run calculation for Project #10
|
||||
```
|
||||
|
||||
### Trigger for tasks
|
||||
|
||||
This command send a "daily cronjob event" to all open tasks of each project.
|
||||
|
||||
```bash
|
||||
./cli trigger:tasks
|
||||
Trigger task event: project_id=2, nb_tasks=1
|
||||
```
|
||||
|
||||
### Reset user password
|
||||
|
||||
```bash
|
||||
./cli user:reset-password my_user
|
||||
```
|
||||
|
||||
You will be prompted for a password and confirmation. Characters are not printed to the screen.
|
||||
|
||||
### Remove two-factor authentication for a user
|
||||
|
||||
```bash
|
||||
./cli user:reset-2fa my_user
|
||||
```
|
||||
|
||||
### Install a plugin
|
||||
|
||||
```bash
|
||||
./cli plugin:install https://github.com/kanboard/plugin-github-auth/releases/download/v1.0.1/GithubAuth-1.0.1.zip
|
||||
```
|
||||
|
||||
Note: Installed files will have the same permissions as the current user
|
||||
|
||||
### Remove a plugin
|
||||
|
||||
```bash
|
||||
./cli plugin:uninstall Budget
|
||||
```
|
||||
|
||||
### Upgrade all plugins
|
||||
|
||||
```bash
|
||||
./cli plugin:upgrade
|
||||
* Updating plugin: Budget Planning
|
||||
* Plugin up to date: Github Authentication
|
||||
```
|
||||
|
||||
### Run Background worker
|
||||
|
||||
```bash
|
||||
./cli worker
|
||||
```
|
||||
|
||||
### Execute individual job (mostly for debugging)
|
||||
|
||||
```bash
|
||||
echo 'RAW_JOB_DATA' | ./cli job
|
||||
```
|
||||
|
||||
### Execute database migrations
|
||||
|
||||
If the parameter `DB_RUN_MIGRATIONS` is set to `false`, you have run the database migrations manually:
|
||||
|
||||
```bash
|
||||
./cli db:migrate
|
||||
```
|
||||
|
||||
### Check database schema version
|
||||
|
||||
```bash
|
||||
./cli db:version
|
||||
Current version: 95
|
||||
Last version: 96
|
||||
```
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
Closing tasks
|
||||
=============
|
||||
|
||||
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 drop-down.
|
||||
|
||||
There are two different ways to close a task, from the task drop-down menu on the board:
|
||||
|
||||

|
||||
|
||||
Or from the task sidebar menu in the task detail view:
|
||||
|
||||

|
||||
|
||||
Note: When you close a task, all sub-tasks not completed will be changed to the status "Done".
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
How to run Kanboard on Cloudron
|
||||
================================
|
||||
|
||||
[Cloudron](https://cloudron.io) is a private smartserver on which you can install web
|
||||
apps like Kanboard. You can install Kanboard into a custom domain and each
|
||||
installation is backed up and kept up-to-date with Kanboard releases automatically.
|
||||
|
||||
[](https://cloudron.io/button.html?app=net.kanboard.cloudronapp)
|
||||
|
||||
Accounts
|
||||
--------
|
||||
|
||||
The app integrates tightly with the Cloudron User Management (via LDAP). Only
|
||||
Cloudron users can access the Kanboard. In addition, any Cloudron administrator
|
||||
becomes a Kanboard administrator automatically.
|
||||
|
||||
Installing Plugins
|
||||
------------------
|
||||
|
||||
Plugins can be installed and configured using the [Cloudron CLI](https://git.cloudron.io/cloudron/cloudron-cli)
|
||||
tool. See the [app description](https://cloudron.io/appstore.html?app=net.kanboard.cloudronapp) for
|
||||
more information.
|
||||
|
||||
Application Source code
|
||||
----------------------
|
||||
|
||||
The source code for the Cloudron app is [here](https://git.cloudron.io/cloudron/kanboard-app).
|
||||
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
Coding standards
|
||||
================
|
||||
|
||||
PHP code
|
||||
--------
|
||||
|
||||
- Indentation: 4 spaces
|
||||
- Line return: Unix => `\n`
|
||||
- Encoding: UTF-8
|
||||
- Use only the opening tags `<?php` or `<?=` for templates, but **never** use `<?`
|
||||
- Always write PHPdoc comments for methods and class properties
|
||||
- Coding style: [PSR-1](http://www.php-fig.org/psr/psr-1/) and [PSR-2](http://www.php-fig.org/psr/psr-2/)
|
||||
|
||||
JavaScript code
|
||||
---------------
|
||||
|
||||
- Indentation: 4 spaces
|
||||
- Line return: Unix => `\n`
|
||||
|
||||
CSS code
|
||||
--------
|
||||
|
||||
- Indentation: 4 spaces
|
||||
- Line return: Unix => `\n`
|
||||
|
|
@ -1,342 +0,0 @@
|
|||
Config File
|
||||
===========
|
||||
|
||||
You can customize the default settings of Kanboard by adding a file `config.php` at the project root or in the `data` folder.
|
||||
You can also rename the file `config.default.php` to `config.php` and change the desired values.
|
||||
|
||||
Enable/Disable debug mode
|
||||
-------------------------
|
||||
|
||||
```php
|
||||
define('DEBUG', true);
|
||||
define('LOG_DRIVER', 'file'); // Other drivers are: syslog, stdout, stderr, system or file
|
||||
|
||||
// By default, the log file is in data/debug.log but you can change the path:
|
||||
define('LOG_FILE', '/path/to/debug.log');
|
||||
```
|
||||
|
||||
- The log driver must be defined if you enable the debug mode.
|
||||
- The debug mode logs all SQL queries and the time taken to generate pages.
|
||||
- The `system` driver use the built-in PHP logger which could be configured in the [php.ini](http://php.net/manual/en/errorfunc.configuration.php#ini.error-log). By default, log messages are sent to the web server logs.
|
||||
|
||||
Plugins
|
||||
-------
|
||||
|
||||
Plugin folder:
|
||||
|
||||
```php
|
||||
define('PLUGINS_DIR', 'data/plugins');
|
||||
```
|
||||
|
||||
Enable/disable plugin installation from the user interface:
|
||||
|
||||
```php
|
||||
define('PLUGIN_INSTALLER', true); // Default is true
|
||||
```
|
||||
|
||||
Change default plugin directory URL:
|
||||
|
||||
```php
|
||||
define('PLUGIN_API_URL', 'https://kanboard.org/plugins.json');
|
||||
```
|
||||
|
||||
Folder for uploaded files
|
||||
-------------------------
|
||||
|
||||
```php
|
||||
define('FILES_DIR', 'data/files');
|
||||
```
|
||||
|
||||
Cache parameters
|
||||
----------------
|
||||
|
||||
```php
|
||||
// Available cache drivers are "file" and "memory"
|
||||
define('CACHE_DRIVER', 'memory');
|
||||
|
||||
// Cache folder to use if cache driver is "file" (must be writeable by the web server user)
|
||||
define('CACHE_DIR', DATA_DIR.DIRECTORY_SEPARATOR.'cache');
|
||||
```
|
||||
|
||||
Enable/disable url rewrite
|
||||
--------------------------
|
||||
|
||||
```php
|
||||
define('ENABLE_URL_REWRITE', false);
|
||||
```
|
||||
|
||||
Email configuration
|
||||
-------------------
|
||||
|
||||
```php
|
||||
// Enable/disable email configuration from the user interface
|
||||
define('MAIL_CONFIGURATION', true);
|
||||
|
||||
// E-mail address used for the "From" header (notifications)
|
||||
define('MAIL_FROM', 'notifications@kanboard.local');
|
||||
|
||||
// Mail transport to use: "smtp", "sendmail" or "mail" (PHP mail function)
|
||||
define('MAIL_TRANSPORT', 'mail');
|
||||
|
||||
// SMTP configuration to use when the "smtp" transport is chosen
|
||||
define('MAIL_SMTP_HOSTNAME', '');
|
||||
define('MAIL_SMTP_PORT', 25);
|
||||
define('MAIL_SMTP_USERNAME', '');
|
||||
define('MAIL_SMTP_PASSWORD', '');
|
||||
define('MAIL_SMTP_ENCRYPTION', null); // Valid values are "null", "ssl" or "tls"
|
||||
|
||||
// Sendmail command to use when the transport is "sendmail"
|
||||
define('MAIL_SENDMAIL_COMMAND', '/usr/sbin/sendmail -bs');
|
||||
```
|
||||
|
||||
Database settings
|
||||
-----------------
|
||||
|
||||
```php
|
||||
// Run automatically database migrations
|
||||
// If set to false, you will have to run manually the SQL migrations from the CLI during the next Kanboard upgrade
|
||||
// Do not run the migrations from multiple processes at the same time (example: web page + background worker)
|
||||
define('DB_RUN_MIGRATIONS', true);
|
||||
|
||||
// Database driver: sqlite, mysql or postgres (sqlite by default)
|
||||
define('DB_DRIVER', 'sqlite');
|
||||
|
||||
// Mysql/Postgres username
|
||||
define('DB_USERNAME', 'root');
|
||||
|
||||
// Mysql/Postgres password
|
||||
define('DB_PASSWORD', '');
|
||||
|
||||
// Mysql/Postgres hostname
|
||||
define('DB_HOSTNAME', 'localhost');
|
||||
|
||||
// Mysql/Postgres database name
|
||||
define('DB_NAME', 'kanboard');
|
||||
|
||||
// Mysql/Postgres custom port (null = default port)
|
||||
define('DB_PORT', null);
|
||||
|
||||
// Mysql SSL key
|
||||
define('DB_SSL_KEY', null);
|
||||
|
||||
// Mysql SSL certificate
|
||||
define('DB_SSL_CERT', null);
|
||||
|
||||
// Mysql SSL CA
|
||||
define('DB_SSL_CA', null);
|
||||
```
|
||||
|
||||
LDAP settings
|
||||
-------------
|
||||
|
||||
```php
|
||||
// Enable LDAP authentication (false by default)
|
||||
define('LDAP_AUTH', false);
|
||||
|
||||
// LDAP server hostname
|
||||
define('LDAP_SERVER', '');
|
||||
|
||||
// LDAP server port (389 by default)
|
||||
define('LDAP_PORT', 389);
|
||||
|
||||
// By default, require certificate to be verified for ldaps:// style URL. Set to false to skip the verification
|
||||
define('LDAP_SSL_VERIFY', true);
|
||||
|
||||
// Enable LDAP START_TLS
|
||||
define('LDAP_START_TLS', false);
|
||||
|
||||
// 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);
|
||||
|
||||
// LDAP bind type: "anonymous", "user" or "proxy"
|
||||
define('LDAP_BIND_TYPE', 'anonymous');
|
||||
|
||||
// LDAP username to use with proxy mode
|
||||
// LDAP username pattern to use with user mode
|
||||
define('LDAP_USERNAME', null);
|
||||
|
||||
// LDAP password to use for proxy mode
|
||||
define('LDAP_PASSWORD', null);
|
||||
|
||||
// LDAP DN for users
|
||||
// Example for ActiveDirectory: CN=Users,DC=kanboard,DC=local
|
||||
// Example for OpenLDAP: ou=People,dc=example,dc=com
|
||||
define('LDAP_USER_BASE_DN', '');
|
||||
|
||||
// LDAP pattern to use when searching for a user account
|
||||
// Example for ActiveDirectory: '(&(objectClass=user)(sAMAccountName=%s))'
|
||||
// Example for OpenLDAP: 'uid=%s'
|
||||
define('LDAP_USER_FILTER', '');
|
||||
|
||||
// LDAP attribute for username
|
||||
// Example for ActiveDirectory: 'samaccountname'
|
||||
// Example for OpenLDAP: 'uid'
|
||||
define('LDAP_USER_ATTRIBUTE_USERNAME', 'uid');
|
||||
|
||||
// LDAP attribute for user full name
|
||||
// Example for ActiveDirectory: 'displayname'
|
||||
// Example for OpenLDAP: 'cn'
|
||||
define('LDAP_USER_ATTRIBUTE_FULLNAME', 'cn');
|
||||
|
||||
// LDAP attribute for user email
|
||||
define('LDAP_USER_ATTRIBUTE_EMAIL', 'mail');
|
||||
|
||||
// LDAP attribute to find groups in user profile
|
||||
define('LDAP_USER_ATTRIBUTE_GROUPS', 'memberof');
|
||||
|
||||
// LDAP attribute for user avatar image: thumbnailPhoto or jpegPhoto
|
||||
define('LDAP_USER_ATTRIBUTE_PHOTO', '');
|
||||
|
||||
// LDAP attribute for user language, example: 'preferredlanguage'
|
||||
// Put an empty string to disable language sync
|
||||
define('LDAP_USER_ATTRIBUTE_LANGUAGE', '');
|
||||
|
||||
// Allow automatic LDAP user creation
|
||||
define('LDAP_USER_CREATION', true);
|
||||
|
||||
// LDAP DN for administrators
|
||||
// Example: CN=Kanboard-Admins,CN=Users,DC=kanboard,DC=local
|
||||
define('LDAP_GROUP_ADMIN_DN', '');
|
||||
|
||||
// LDAP DN for managers
|
||||
// Example: CN=Kanboard Managers,CN=Users,DC=kanboard,DC=local
|
||||
define('LDAP_GROUP_MANAGER_DN', '');
|
||||
|
||||
// Enable LDAP group provider for project permissions
|
||||
// The end-user will be able to browse LDAP groups from the user interface and allow access to specified projects
|
||||
define('LDAP_GROUP_PROVIDER', false);
|
||||
|
||||
// LDAP Base DN for groups
|
||||
define('LDAP_GROUP_BASE_DN', '');
|
||||
|
||||
// LDAP group filter
|
||||
// Example for ActiveDirectory: (&(objectClass=group)(sAMAccountName=%s*))
|
||||
define('LDAP_GROUP_FILTER', '');
|
||||
|
||||
// LDAP user group filter
|
||||
// If this filter is configured, Kanboard will search user groups in LDAP_GROUP_BASE_DN
|
||||
// Example for OpenLDAP: (&(objectClass=posixGroup)(memberUid=%s))
|
||||
define('LDAP_GROUP_USER_FILTER', '');
|
||||
|
||||
// LDAP attribute for the group name
|
||||
define('LDAP_GROUP_ATTRIBUTE_NAME', 'cn');
|
||||
```
|
||||
|
||||
Reverse-Proxy Authentication settings
|
||||
-------------------------------------
|
||||
|
||||
```php
|
||||
// Enable/disable the reverse proxy authentication
|
||||
define('REVERSE_PROXY_AUTH', false);
|
||||
|
||||
// Header name to use for the username
|
||||
define('REVERSE_PROXY_USER_HEADER', 'REMOTE_USER');
|
||||
|
||||
// Username of the admin, by default blank
|
||||
define('REVERSE_PROXY_DEFAULT_ADMIN', '');
|
||||
|
||||
// Default domain to use for setting the email address
|
||||
define('REVERSE_PROXY_DEFAULT_DOMAIN', '');
|
||||
```
|
||||
|
||||
RememberMe Authentication settings
|
||||
----------------------------------
|
||||
|
||||
```php
|
||||
// Enable/disable remember me authentication
|
||||
define('REMEMBER_ME_AUTH', true);
|
||||
```
|
||||
|
||||
Secure HTTP headers settings
|
||||
----------------------------
|
||||
|
||||
```php
|
||||
// Enable or disable "Strict-Transport-Security" HTTP header
|
||||
define('ENABLE_HSTS', true);
|
||||
|
||||
// Enable or disable "X-Frame-Options: DENY" HTTP header
|
||||
define('ENABLE_XFRAME', true);
|
||||
```
|
||||
|
||||
Logging
|
||||
-------
|
||||
|
||||
By default, Kanboard do not log anything.
|
||||
If you want to enable the logging, you have to set a log driver.
|
||||
|
||||
```php
|
||||
// Available log drivers: syslog, stderr, stdout or file
|
||||
define('LOG_DRIVER', '');
|
||||
|
||||
// Log filename if the log driver is "file"
|
||||
define('LOG_FILE', __DIR__.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'debug.log');
|
||||
```
|
||||
|
||||
Brute-force protection
|
||||
----------------------
|
||||
|
||||
```php
|
||||
// Enable captcha after 3 authentication failure
|
||||
define('BRUTEFORCE_CAPTCHA', 3);
|
||||
|
||||
// Lock the account after 6 authentication failure
|
||||
define('BRUTEFORCE_LOCKDOWN', 6);
|
||||
|
||||
// Lock account duration in minute
|
||||
define('BRUTEFORCE_LOCKDOWN_DURATION', 15);
|
||||
```
|
||||
|
||||
Session
|
||||
-------
|
||||
|
||||
```php
|
||||
// Session duration in second (0 = until the browser is closed)
|
||||
// See http://php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime
|
||||
define('SESSION_DURATION', 0);
|
||||
```
|
||||
|
||||
HTTP Client
|
||||
-----------
|
||||
|
||||
If external HTTP requests need to be sent through a proxy:
|
||||
|
||||
```php
|
||||
define('HTTP_PROXY_HOSTNAME', '');
|
||||
define('HTTP_PROXY_PORT', '3128');
|
||||
define('HTTP_PROXY_USERNAME', '');
|
||||
define('HTTP_PROXY_PASSWORD', '');
|
||||
```
|
||||
|
||||
To allow self-signed certificates:
|
||||
|
||||
```php
|
||||
// Set to false to allow self-signed certificates
|
||||
define('HTTP_VERIFY_SSL_CERTIFICATE', true);
|
||||
```
|
||||
|
||||
Various settings
|
||||
----------------
|
||||
|
||||
```php
|
||||
// Escape html inside markdown text
|
||||
define('MARKDOWN_ESCAPE_HTML', true);
|
||||
|
||||
// API alternative authentication header, the default is HTTP Basic Authentication defined in RFC2617
|
||||
define('API_AUTHENTICATION_HEADER', '');
|
||||
|
||||
// Hide login form, useful if all your users use Google/Github/ReverseProxy authentication
|
||||
define('HIDE_LOGIN_FORM', false);
|
||||
|
||||
// Disabling logout (for external SSO authentication)
|
||||
define('DISABLE_LOGOUT', false);
|
||||
|
||||
// Override API token stored in the database, useful for automated tests
|
||||
define('API_AUTHENTICATION_TOKEN', 'My unique API Token');
|
||||
|
||||
// TOTP (2FA) issuer name
|
||||
define('TOTP_ISSUER', 'Kanboard');
|
||||
|
||||
// Comma separated list of fields to not synchronize when using external authentication providers
|
||||
define('EXTERNAL_AUTH_EXCLUDE_FIELDS', 'username');
|
||||
```
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
Contributor Guidelines
|
||||
======================
|
||||
|
||||
How can I help?
|
||||
---------------
|
||||
|
||||
Kanboard is not perfect but there are many ways to help:
|
||||
|
||||
- Give feedback
|
||||
- Report bugs
|
||||
- Add or update translations
|
||||
- Improve the documentation
|
||||
- Writing code
|
||||
- Tell your friends that Kanboard is awesome :)
|
||||
|
||||
Before doing any large undertaking, open a new issue and explain your proposal.
|
||||
|
||||
I want to give feedback
|
||||
-----------------------
|
||||
|
||||
- You think something should be improved (user interface, feature requests)
|
||||
- Check if your idea is not already proposed
|
||||
- Open a new issue
|
||||
- Describe your idea
|
||||
- You can also up-vote with +1 on existing proposals
|
||||
|
||||
I want to report a bug
|
||||
----------------------
|
||||
|
||||
- Check if the issue is not already reported
|
||||
- Open a new ticket
|
||||
- Explain what is broken
|
||||
- Describe how to reproduce the bug
|
||||
- Describe your environment (Kanboard version, OS, web server, PHP version, database version, hosting provider)
|
||||
|
||||
I want to translate Kanboard
|
||||
----------------------------
|
||||
|
||||
Kanboard is translated in many languages.
|
||||
However, translations are not complete, take look at the [translation guide to contribute](translations.markdown).
|
||||
|
||||
I want to improve the documentation
|
||||
-----------------------------------
|
||||
|
||||
- You think something is not clear, there is grammatical errors, typo errors, anything.
|
||||
- The documentation is written in Markdown and stored in the folder `docs`.
|
||||
- Edit the files and send a pull-request.
|
||||
- The documentation on the official website is synchronized with the repository.
|
||||
|
||||
I want to contribute to the code
|
||||
--------------------------------
|
||||
|
||||
Pull-requests are always welcome however, to be accepted you have to follow those directives:
|
||||
|
||||
- **Before doing any large change or design proposal, open a new ticket to start a discussion.**
|
||||
- If you want to add a new feature, respect the philosophy behind Kanboard. **We focus on simplicity**, we don't want to have a bloated software.
|
||||
- The same apply for the user interface, **simplicity and efficiency**.
|
||||
- Send only one pull-request per feature or bug fix.
|
||||
- A smaller pull-request is easier to review and faster it will be merged.
|
||||
- Make sure the [unit tests pass](tests.markdown).
|
||||
- Respect the [coding standards](coding-standards.markdown).
|
||||
- Write maintainable code, avoid code duplication, use PHP good practices.
|
||||
|
||||
In any case, if you are not sure about something open a new ticket.
|
||||
|
||||
Tell your friends that Kanboard is awesome :)
|
||||
---------------------------------------------
|
||||
|
||||
If you use Kanboard, spread the word around you.
|
||||
Tell them that free and open source software are cool :)
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
Create tasks by email
|
||||
=====================
|
||||
|
||||
You can create tasks directly by sending an email.
|
||||
This feature is available by using plugins.
|
||||
|
||||
At the moment, Kanboard is integrated with 3 external services:
|
||||
|
||||
- [Mailgun](https://github.com/kanboard/plugin-mailgun)
|
||||
- [Sendgrid](https://github.com/kanboard/plugin-sendgrid)
|
||||
- [Postmark](https://github.com/kanboard/plugin-postmark)
|
||||
|
||||
These services handle incoming emails without having to configure any SMTP server.
|
||||
|
||||
When an email is received, Kanboard receive the message on a specific end-point.
|
||||
All complicated works are already handled by those services.
|
||||
|
||||
Incoming emails workflow
|
||||
------------------------
|
||||
|
||||
1. You send an email to a specific address, for example **myproject@inbound.mydomain.tld**
|
||||
2. Your email is forwarded to the third-party SMTP servers
|
||||
3. The SMTP provider call the Kanboard web hook with the email in JSON or multipart/form-data formats
|
||||
4. Kanboard parses the received email and create the task to the right project
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
- The Kanboard web hook is protected by a random token
|
||||
- The sender email address must match a Kanboard user
|
||||
- The Kanboard user must be a member of the project
|
||||
- Kanboard is able to convert only simple HTML emails to Markdown
|
||||
- New tasks are automatically created in the first column
|
||||
- Refer to the documentation of each plugin for the configuration
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
Creating Projects
|
||||
=================
|
||||
|
||||
Kanboard can handle multiple projects. There are two kinds of projects:
|
||||
|
||||
- Team projects
|
||||
- Private project for a single user
|
||||
|
||||
Creating projects for multiple users
|
||||
-------------------------------------
|
||||
|
||||
- Only administrators and project administrators can create those projects
|
||||
- User management is available
|
||||
|
||||
From the dashboard, click on the link **New project**:
|
||||
|
||||

|
||||
|
||||
It's very easy: you just have to find a name for your project!
|
||||
|
||||
Creating a private project
|
||||
--------------------------
|
||||
|
||||
- Anybody can create a private project
|
||||
- There is **NO** user management
|
||||
- Only the owner and administrators can access the project
|
||||
|
||||
From the dashboard, click on the link **New private project**.
|
||||
|
||||
Creating projects from another project
|
||||
--------------------------------------
|
||||
|
||||
When you create a new project, you can choose to duplicate the properties of another project:
|
||||
|
||||
- Permissions
|
||||
- Actions
|
||||
- Swimlanes
|
||||
- Categories
|
||||
- Tasks
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
Creating Tasks
|
||||
==============
|
||||
|
||||
From the board, click on the plus sign next to the column name:
|
||||
|
||||

|
||||
|
||||
Then the task creation form appears:
|
||||
|
||||

|
||||
|
||||
Field description:
|
||||
|
||||
- **Title**: The title of your task, which will be displayed on the board.
|
||||
- **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 (visible only if the projects have categories).
|
||||
- **Column**: The column where the task will be created, your task will be positioned at the bottom.
|
||||
- **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.
|
||||
- **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.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue