├── tasklists.png
├── locales
├── cs_CZ.mo
├── en_GB.mo
├── es_419.mo
├── es_EC.mo
├── es_ES.mo
├── es_MX.mo
├── es_VE.mo
├── fi_FI.mo
├── fr_FR.mo
├── ja_JP.mo
├── pl_PL.mo
├── pt_BR.mo
├── ru_RU.mo
├── ja_JP.po
├── es_VE.po
├── es_MX.po
├── es_EC.po
├── es_ES.po
├── pt_BR.po
├── pl_PL.po
├── fi_FI.po
├── en_GB.po
├── es_419.po
├── cs_CZ.po
└── ru_RU.po
├── screenshots
├── kanban.png
├── addTask.png
└── Tasks list from Dashboard.png
├── public
└── lib
│ ├── kanban
│ ├── images
│ │ └── dragger.png
│ ├── LICENSE
│ ├── js
│ │ ├── SearchTokenizer
│ │ │ ├── SearchToken.min.js
│ │ │ ├── SearchTokenizerResult.min.js
│ │ │ ├── SearchToken.js
│ │ │ ├── SearchTokenizerResult.js
│ │ │ ├── SearchTokenizer.min.js
│ │ │ └── SearchTokenizer.js
│ │ └── kanban-actions.js
│ └── README.md
│ └── jquery-ui
│ └── images
│ ├── ui-icons_444444_256x240.png
│ ├── ui-icons_555555_256x240.png
│ ├── ui-icons_777620_256x240.png
│ ├── ui-icons_777777_256x240.png
│ ├── ui-icons_cc0000_256x240.png
│ └── ui-icons_ffffff_256x240.png
├── sql
├── update-2.1.4.sql
├── update-1.6.1.sql
├── update-2.0.0.sql
├── update-1.6.0.sql
├── update-2.1.5.sql
├── update-2.1.0.sql
├── update-1.5.1.sql
├── empty-1.0.0.sql
├── empty-1.3.0.sql
├── update-1.4.0.sql
├── update-1.4.1.sql
└── empty-1.4.0.sql
├── SECURITY.md
├── TODO.txt
├── ISSUE_TEMPLATE.md
├── tools
├── update_mo.pl
├── update_po.pl
└── extract_template.sh
├── .github
└── workflows
│ ├── updatepot.yml
│ ├── generatemo.yml
│ └── release.yml
├── index.php
├── ajax
├── index.php
├── inputEntity.php
├── dropdownState.php
├── contextForm.php
├── getTaskComment.php
├── dropdownTypeTasks.php
├── updatetask.php
├── getUserPicture.php
├── seetask.php
└── addOptions.php
├── front
├── index.php
├── preference.form.php
├── ticket.form.php
├── setup.templates.php
├── task.php
├── typevisibility.form.php
├── comment.form.php
├── kanban.php
├── task_comment.form.php
└── task.form.php
├── README.md
├── templates
└── kanban.html.twig
├── src
├── Menu.php
├── Item_Kanban.php
└── Preference.php
└── setup.php
/tasklists.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/tasklists.png
--------------------------------------------------------------------------------
/locales/cs_CZ.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/cs_CZ.mo
--------------------------------------------------------------------------------
/locales/en_GB.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/en_GB.mo
--------------------------------------------------------------------------------
/locales/es_419.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/es_419.mo
--------------------------------------------------------------------------------
/locales/es_EC.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/es_EC.mo
--------------------------------------------------------------------------------
/locales/es_ES.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/es_ES.mo
--------------------------------------------------------------------------------
/locales/es_MX.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/es_MX.mo
--------------------------------------------------------------------------------
/locales/es_VE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/es_VE.mo
--------------------------------------------------------------------------------
/locales/fi_FI.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/fi_FI.mo
--------------------------------------------------------------------------------
/locales/fr_FR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/fr_FR.mo
--------------------------------------------------------------------------------
/locales/ja_JP.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/ja_JP.mo
--------------------------------------------------------------------------------
/locales/pl_PL.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/pl_PL.mo
--------------------------------------------------------------------------------
/locales/pt_BR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/pt_BR.mo
--------------------------------------------------------------------------------
/locales/ru_RU.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/locales/ru_RU.mo
--------------------------------------------------------------------------------
/screenshots/kanban.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/screenshots/kanban.png
--------------------------------------------------------------------------------
/screenshots/addTask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/screenshots/addTask.png
--------------------------------------------------------------------------------
/public/lib/kanban/images/dragger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/kanban/images/dragger.png
--------------------------------------------------------------------------------
/screenshots/Tasks list from Dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/screenshots/Tasks list from Dashboard.png
--------------------------------------------------------------------------------
/sql/update-2.1.4.sql:
--------------------------------------------------------------------------------
1 | UPDATE `glpi_documents_items` SET `itemtype` = 'GlpiPlugin\\Tasklists\\Task' WHERE `itemtype` = 'PluginTasklistsTask';
2 |
--------------------------------------------------------------------------------
/sql/update-1.6.1.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `glpi_plugin_tasklists_tasks`
2 | ADD `users_id_requester` int(11) NOT NULL DEFAULT '0';
3 |
4 |
5 |
--------------------------------------------------------------------------------
/sql/update-2.0.0.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `glpi_plugin_tasklists_tasks`
2 | CHANGE `comment` `content` text collate utf8mb4_unicode_ci;
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/lib/jquery-ui/images/ui-icons_444444_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/jquery-ui/images/ui-icons_444444_256x240.png
--------------------------------------------------------------------------------
/public/lib/jquery-ui/images/ui-icons_555555_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/jquery-ui/images/ui-icons_555555_256x240.png
--------------------------------------------------------------------------------
/public/lib/jquery-ui/images/ui-icons_777620_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/jquery-ui/images/ui-icons_777620_256x240.png
--------------------------------------------------------------------------------
/public/lib/jquery-ui/images/ui-icons_777777_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/jquery-ui/images/ui-icons_777777_256x240.png
--------------------------------------------------------------------------------
/public/lib/jquery-ui/images/ui-icons_cc0000_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/jquery-ui/images/ui-icons_cc0000_256x240.png
--------------------------------------------------------------------------------
/public/lib/jquery-ui/images/ui-icons_ffffff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/InfotelGLPI/tasklists/master/public/lib/jquery-ui/images/ui-icons_ffffff_256x240.png
--------------------------------------------------------------------------------
/sql/update-1.6.0.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE `glpi_plugin_tasklists_preferences`
2 | ADD `automatic_refresh` TINYINT(1) NOT NULL DEFAULT '0';
3 | ALTER TABLE `glpi_plugin_tasklists_preferences`
4 | ADD `automatic_refresh_delay` INT(11) NOT NULL DEFAULT '10';
5 |
6 |
--------------------------------------------------------------------------------
/sql/update-2.1.5.sql:
--------------------------------------------------------------------------------
1 | UPDATE `glpi_savedsearches` SET `itemtype` = 'GlpiPlugin\\Tasklists\\Tasklist' WHERE `itemtype` = 'PluginTasklistsTask';
2 | UPDATE `glpi_savedsearches_users` SET `itemtype` = 'GlpiPlugin\\Tasklists\\Tasklist' WHERE `itemtype` = 'PluginTasklistsTask';
3 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | | Version | Supported |
6 | | ------- | ------------------ |
7 | | 2.0.x | :white_check_mark: |
8 |
9 | ## Reporting a Vulnerability
10 |
11 | Please send an email to thetsmr[@]gmail.com
12 |
--------------------------------------------------------------------------------
/TODO.txt:
--------------------------------------------------------------------------------
1 | Add notification for revive user in charge ?
2 | Add min - max by state
3 | Add notifications to comments ?
4 |
5 | **************
6 | ordonner les contextes - pref ?
7 | **************
8 |
9 | GLPI 10
10 |
11 | move teams to specific table for display
12 | Drop context for states
13 | drop clone
14 | drop glpi_plugin_tasklists_stateorders
15 | drop glpi_plugin_tasklists_items_kanbans
16 | drop addoptions.php
17 |
18 | fix see archived
19 |
--------------------------------------------------------------------------------
/sql/update-2.1.0.sql:
--------------------------------------------------------------------------------
1 | UPDATE `glpi_plugin_tasklists_items_kanbans` SET `itemtype` = 'GlpiPlugin\\Tasklists\\TaskType' WHERE `itemtype` = 'PluginTasklistsTaskType';
2 | UPDATE `glpi_items_kanbans` SET `itemtype` = 'GlpiPlugin\\Tasklists\\TaskType' WHERE `itemtype` = 'PluginTasklistsTaskType';
3 | UPDATE `glpi_notifications` SET `itemtype` = 'GlpiPlugin\\Releases\\Task' WHERE `itemtype` = 'PluginTasklistsTask';
4 | UPDATE `glpi_notificationtemplates` SET `itemtype` = 'GlpiPlugin\\Releases\\Task' WHERE `itemtype` = 'PluginTasklistsTask';
5 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Dear GLPi user.
2 |
3 | BEFORE SUBMITTING YOUR ISSUE, please make sure to read and follow these steps :
4 |
5 | * Verify that your question has not already been asked
6 | * Please use the below template.
7 | * Delete this text before submiting your issue.
8 |
9 | The Plugin team.
10 |
11 | ------------
12 | * Version of the plugin :
13 |
14 |
15 | * Version of your GLPI :
16 |
17 |
18 | * Steps to reproduce (which actions have you made) :
19 |
20 |
21 | * Expected result :
22 |
23 |
24 | * Actual result :
25 |
26 |
27 | * URL of the page :
28 |
29 |
30 | * Screenshot of the problem (if pertinent) :
31 |
32 |
--------------------------------------------------------------------------------
/tools/update_mo.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 | #!/usr/bin/perl -w
3 |
4 | if (@ARGV!=0){
5 | print "USAGE update_mo.pl\n\n";
6 |
7 | exit();
8 | }
9 |
10 |
11 | opendir(DIRHANDLE,'locales')||die "ERROR: can not read current directory\n";
12 | foreach (readdir(DIRHANDLE)){
13 | if ($_ ne '..' && $_ ne '.'){
14 |
15 | if(!(-l "$dir/$_")){
16 | if (index($_,".po",0)==length($_)-3) {
17 | $lang=$_;
18 | $lang=~s/\.po//;
19 |
20 | `msgfmt locales/$_ -o locales/$lang.mo`;
21 | }
22 | }
23 |
24 | }
25 | }
26 | closedir DIRHANDLE;
27 |
28 | #
29 | #
30 |
--------------------------------------------------------------------------------
/.github/workflows/updatepot.yml:
--------------------------------------------------------------------------------
1 | name: Update POT
2 | on:
3 | push:
4 | branches: [ master ]
5 | paths-ignore:
6 | - 'locales/**'
7 |
8 | env:
9 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
10 | jobs:
11 | run:
12 |
13 | name: Update POT
14 |
15 | runs-on: ubuntu-latest
16 | steps:
17 | - name: Checkout repo
18 | uses: actions/checkout@v4
19 |
20 | - name: install xgettext
21 |
22 | run: sudo apt-get install gettext;
23 | - name: Update POT
24 | run: sh tools/extract_template.sh;
25 |
26 | - name: Commit changes
27 | uses: EndBug/add-and-commit@v9
28 | with:
29 | message: "Update POT"
30 |
31 | - name: Push changes
32 | uses: actions-go/push@master
33 | with:
34 | commit-message: ''
35 |
36 |
--------------------------------------------------------------------------------
/tools/update_po.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 | #!/usr/bin/perl -w
3 |
4 | if (@ARGV!=2){
5 | print "USAGE update_po.pl transifex_login transifex_password\n\n";
6 |
7 | exit();
8 | }
9 | $user = $ARGV[0];
10 | $password = $ARGV[1];
11 |
12 | opendir(DIRHANDLE,'locales')||die "ERROR: can not read current directory\n";
13 | foreach (readdir(DIRHANDLE)){
14 | if ($_ ne '..' && $_ ne '.'){
15 |
16 | if(!(-l "$dir/$_")){
17 | if (index($_,".po",0)==length($_)-3) {
18 | $lang=$_;
19 | $lang=~s/\.po//;
20 |
21 | `wget --user=$user --password=$password --output-document=locales/$_ http://www.transifex.com/api/2/project/GLPI_tasklists/resource/glpi/translation/$lang/?file=$_`;
22 | }
23 | }
24 |
25 | }
26 | }
27 | closedir DIRHANDLE;
28 |
29 | #
30 | #
31 |
--------------------------------------------------------------------------------
/.github/workflows/generatemo.yml:
--------------------------------------------------------------------------------
1 | name: Generate MO
2 | on:
3 | push:
4 | branches: [ master ]
5 | paths:
6 | - '**.po'
7 | env:
8 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9 | jobs:
10 | run:
11 |
12 | name: Generate mo
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Checkout repo
16 | uses: actions/checkout@v4
17 |
18 | - name: Setup Perl environment
19 | # You may pin to the exact commit or the version.
20 | # uses: shogo82148/actions-setup-perl@8d2e3d59a9516b785ed32169d48a4888eaa9b514
21 | uses: shogo82148/actions-setup-perl@v1
22 | - name: msgfmt
23 | # You may pin to the exact commit or the version.
24 | # uses: whtsky/msgfmt-action@6b2181f051b002182d01a1e1f1aff216230c5a4d
25 | uses: whtsky/msgfmt-action@20190305
26 | - name: Generate mo
27 | run: perl tools/update_mo.pl;
28 |
29 | - name: Commit changes
30 | uses: EndBug/add-and-commit@v9
31 | with:
32 |
33 | message: "Generate mo"
34 | - name: Push changes
35 |
36 | uses: actions-go/push@master
37 |
38 |
--------------------------------------------------------------------------------
/public/lib/kanban/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 craig-davey96
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
--------------------------------------------------------------------------------
/ajax/index.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
--------------------------------------------------------------------------------
/front/index.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
--------------------------------------------------------------------------------
/sql/update-1.5.1.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `glpi_plugin_tasklists_items_kanbans`
2 | (
3 | `id` INT(11) NOT NULL AUTO_INCREMENT, -- id
4 | `itemtype` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
5 | `items_id` int(11) DEFAULT NULL,
6 | `users_id` int(11) NOT NULL,
7 | `plugin_tasklists_taskstates_id` int(11) NOT NULL,
8 | `state` int(1) NOT NULL DEFAULT 0,
9 | `date_mod` timestamp NULL DEFAULT NULL,
10 | `date_creation` timestamp NULL DEFAULT NULL,
11 | PRIMARY KEY (`id`),
12 | UNIQUE KEY `unicity` (`itemtype`, `items_id`, `users_id`, `plugin_tasklists_taskstates_id`)
13 | ) ENGINE = InnoDB
14 | DEFAULT CHARSET = utf8
15 | COLLATE = utf8_unicode_ci;
16 |
17 | ALTER TABLE `glpi_plugin_tasklists_preferences`
18 | ADD `automatic_refresh` TINYINT(1) NOT NULL DEFAULT '0';
19 | ALTER TABLE `glpi_plugin_tasklists_preferences`
20 | ADD `automatic_refresh_delay` INT(11) NOT NULL DEFAULT '10';
21 |
22 |
--------------------------------------------------------------------------------
/front/preference.form.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Preference;
31 |
32 | Session::checkLoginUser();
33 |
34 | //Save user preferences
35 | if (isset ($_POST['update'])) {
36 | $pref = new Preference();
37 | $pref->check(-1, UPDATE, $_POST);
38 | $pref->update($_POST);
39 | Html::back();
40 | }
41 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/SearchTokenizer/SearchToken.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ---------------------------------------------------------------------
3 | *
4 | * GLPI - Gestionnaire Libre de Parc Informatique
5 | *
6 | * http://glpi-project.org
7 | *
8 | * @copyright 2015-2024 Teclib' and contributors.
9 | * @copyright 2003-2014 by the INDEPNET Development Team.
10 | * @licence https://www.gnu.org/licenses/gpl-3.0.html
11 | *
12 | * ---------------------------------------------------------------------
13 | *
14 | * LICENSE
15 | *
16 | * This file is part of GLPI.
17 | *
18 | * This program is free software: you can redistribute it and/or modify
19 | * it under the terms of the GNU General Public License as published by
20 | * the Free Software Foundation, either version 3 of the License, or
21 | * (at your option) any later version.
22 | *
23 | * This program is distributed in the hope that it will be useful,
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 | * GNU General Public License for more details.
27 | *
28 | * You should have received a copy of the GNU General Public License
29 | * along with this program. If not, see .
30 | *
31 | * ---------------------------------------------------------------------
32 | */
33 | export default class SearchToken{constructor(t,s,i,e,h,l=null){this.term=t;this.tag=s||null;this.exclusion=i;this.position=e;this.raw=h;this.prefix=l}}
--------------------------------------------------------------------------------
/ajax/inputEntity.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | header("Content-Type: text/html; charset=UTF-8");
31 | Html::header_nocache();
32 |
33 | Session::checkLoginUser();
34 | Session::checkRight('plugin_tasklists', UPDATE);
35 |
36 | if (isset($_POST["entities_id"])) {
37 | echo Html::hidden('entities_id', ['value' => $_POST["entities_id"]]);
38 | }
39 |
--------------------------------------------------------------------------------
/front/ticket.form.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use Glpi\Exception\Http\BadRequestHttpException;
31 | use GlpiPlugin\Tasklists\Ticket;
32 |
33 | Session::checkLoginUser();
34 |
35 | $ticket = new Ticket();
36 | if (isset($_POST["add"])) {
37 | $ticket->check(-1, CREATE, $_POST);
38 |
39 | $ticket->add($_POST);
40 | Html::back();
41 |
42 | }
43 |
44 | throw new BadRequestHttpException("lost");
45 |
--------------------------------------------------------------------------------
/ajax/dropdownState.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Task;
31 |
32 | header("Content-Type: text/html; charset=UTF-8");
33 | Html::header_nocache();
34 |
35 | Session::checkLoginUser();
36 | Session::checkRight('plugin_tasklists', UPDATE);
37 |
38 | if (isset($_POST["plugin_tasklists_tasktypes_id"])) {
39 |
40 | Task::displayState($_POST['plugin_tasklists_tasktypes_id']);
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/front/setup.templates.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Menu;
31 | use GlpiPlugin\Tasklists\Task;
32 |
33 | global $CFG_GLPI;
34 | $task = new Task();
35 |
36 | if ($task->canView() || Session::haveRight("config", UPDATE)) {
37 | Html::header(Task::getTypeName(2), '', "helpdesk", Menu::class);
38 |
39 | $task->listOfTemplates($CFG_GLPI['root_doc'] . "/plugins/tasklists/front/task.form.php", $_GET["add"]);
40 |
41 | Html::footer();
42 | }
43 |
--------------------------------------------------------------------------------
/front/task.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use Glpi\Exception\Http\AccessDeniedHttpException;
31 | use GlpiPlugin\Tasklists\Menu;
32 | use GlpiPlugin\Tasklists\Task;
33 |
34 | Html::header(Task::getTypeName(2), '', "helpdesk", Menu::class);
35 |
36 | $task = new Task();
37 |
38 | if ($task->canView() || Session::haveRight("config", CREATE)) {
39 |
40 | Search::show(Task::class);
41 |
42 | } else {
43 | throw new AccessDeniedHttpException();
44 | }
45 |
46 | Html::footer();
47 |
--------------------------------------------------------------------------------
/front/typevisibility.form.php:
--------------------------------------------------------------------------------
1 | .
28 | --------------------------------------------------------------------------
29 | */
30 |
31 | use GlpiPlugin\Tasklists\TypeVisibility;
32 |
33 | $group = new TypeVisibility();
34 |
35 | if (isset($_POST["add_groups"])) {
36 | $group->check(-1, UPDATE, $_POST);
37 | //add groups
38 | foreach ($_POST['groups_id'] as $groups_id) {
39 | $group->add(['groups_id' => $groups_id,
40 | 'plugin_tasklists_tasktypes_id' => $_POST['plugin_tasklists_tasktypes_id']]);
41 | }
42 | Html::back();
43 | }
44 |
--------------------------------------------------------------------------------
/front/comment.form.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Menu;
31 | use GlpiPlugin\Tasklists\Task;
32 |
33 | if (!isset($_GET["id"])) {
34 | $_GET["id"] = "";
35 | }
36 | if (!isset($_GET["withtemplate"])) {
37 | $_GET["withtemplate"] = "";
38 | }
39 |
40 | Html::header(Task::getTypeName(2), '', "helpdesk", Menu::class);
41 |
42 | $task = new Task();
43 | $task->checkGlobal(READ);
44 | $task->getFromDB($_GET['id']);
45 | $note = new Notepad();
46 | $note->showForItem($task);
47 |
48 | Html::footer();
49 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/SearchTokenizer/SearchTokenizerResult.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ---------------------------------------------------------------------
3 | *
4 | * GLPI - Gestionnaire Libre de Parc Informatique
5 | *
6 | * http://glpi-project.org
7 | *
8 | * @copyright 2015-2024 Teclib' and contributors.
9 | * @copyright 2003-2014 by the INDEPNET Development Team.
10 | * @licence https://www.gnu.org/licenses/gpl-3.0.html
11 | *
12 | * ---------------------------------------------------------------------
13 | *
14 | * LICENSE
15 | *
16 | * This file is part of GLPI.
17 | *
18 | * This program is free software: you can redistribute it and/or modify
19 | * it under the terms of the GNU General Public License as published by
20 | * the Free Software Foundation, either version 3 of the License, or
21 | * (at your option) any later version.
22 | *
23 | * This program is distributed in the hope that it will be useful,
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 | * GNU General Public License for more details.
27 | *
28 | * You should have received a copy of the GNU General Public License
29 | * along with this program. If not, see .
30 | *
31 | * ---------------------------------------------------------------------
32 | */
33 | export default class SearchTokenizerResult{constructor(){this.tokens=[]}getTag(t){return this.tokens.filter((e=>e.tag===t))}getTaggedTerms(){return this.tokens.filter((t=>t.tag!==null))}getUntaggedTerms(){return this.tokens.filter((t=>t.tag===null))}getFullPhrase(){let t="";this.getUntaggedTerms().forEach((e=>t+=` ${e.term}`));return t.trim()}}
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Plugin Tasklists for GLPI
2 |
3 | 
4 |
5 | This plugin is on Transifex - Help us to translate :
6 | https://www.transifex.com/infotelGLPI/GLPI_tasklists/
7 |
8 | See wiki for use it ? https://github.com/InfotelGLPI/tasklists/wiki
9 |
10 | Adding a management of tasks & a kanban. This plugin adds in GLPI, an interface to add tasks & manage them into a kanban
11 |
12 | Last features :
13 |
14 | - [X] Clone task
15 | - [X] Add comments to tasks
16 | - [X] See authors tasks filter
17 | - [X] See archived tasks filter
18 | - [X] See in progress tasks filter
19 | - [X] Send notifications for add / change / delete task
20 | - [X] Use richtext on tasks
21 | - [X] Add templates by context
22 | - [X] Add entity pre-selection
23 | - [X] Use a default Backlog from list
24 | - [X] Link to tickets
25 | - [X] Preference : context by default
26 | - [X] See percentage of completion from tasks
27 | - [X] Order States
28 | - [X] Add context to States
29 | - [X] Add color to States
30 | - [X] Minimize closed tasks
31 | - [X] Can be used with mail collector to create tasks
32 | - [ ] Add notification for revive user in charge
33 | - [ ] Add min - max by state
34 | - [ ] Add notifications to comments
35 |
36 | For GLPI versions <9.1, for use it with mail collector you must to modify "inc/rulemailcollector.class.php" file, into "executeActions" fonction, into switch : switch ($action->fields["action_type"]), add a default case :
37 |
38 | ```
39 | default:
40 | //plugins actions
41 | $executeaction = clone $this;
42 | $output = $executeaction->executePluginsActions($action, $output, $params);
43 | break;
44 | ```
45 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/SearchTokenizer/SearchToken.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ---------------------------------------------------------------------
3 | *
4 | * GLPI - Gestionnaire Libre de Parc Informatique
5 | *
6 | * http://glpi-project.org
7 | *
8 | * @copyright 2015-2024 Teclib' and contributors.
9 | * @copyright 2003-2014 by the INDEPNET Development Team.
10 | * @licence https://www.gnu.org/licenses/gpl-3.0.html
11 | *
12 | * ---------------------------------------------------------------------
13 | *
14 | * LICENSE
15 | *
16 | * This file is part of GLPI.
17 | *
18 | * This program is free software: you can redistribute it and/or modify
19 | * it under the terms of the GNU General Public License as published by
20 | * the Free Software Foundation, either version 3 of the License, or
21 | * (at your option) any later version.
22 | *
23 | * This program is distributed in the hope that it will be useful,
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 | * GNU General Public License for more details.
27 | *
28 | * You should have received a copy of the GNU General Public License
29 | * along with this program. If not, see .
30 | *
31 | * ---------------------------------------------------------------------
32 | */
33 |
34 | class SearchToken {
35 | constructor(term, tag, exclusion, position, raw, prefix = null) {
36 | this.term = term;
37 | this.tag = tag || null; // Prevent undefined value
38 | this.exclusion = exclusion;
39 | this.position = position;
40 | this.raw = raw;
41 | this.prefix = prefix;
42 | }
43 | }
44 | window.SearchToken = SearchToken;
45 |
--------------------------------------------------------------------------------
/ajax/contextForm.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\TaskState;
31 |
32 | Session::checkLoginUser();
33 | Session::checkRight('plugin_tasklists_config', UPDATE);
34 |
35 | Html::header_nocache();
36 | header("Content-Type: text/html; charset=UTF-8");
37 |
38 | //Html::requireJs('tinymce');
39 | echo "";
40 |
41 | if (isset($_GET['newContext'])) {
42 | $options = [
43 | 'from_edit_ajax' => true,
44 |
45 | 'withtemplate' => 0
46 | ];
47 | $task = new TaskState();
48 | $task->showForm(0, $options);
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/ajax/getTaskComment.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Task_Comment;
31 |
32 | header("Content-Type: text/html; charset=UTF-8");
33 | Html::header_nocache();
34 |
35 | Session::checkLoginUser();
36 | Session::checkRight('plugin_tasklists', UPDATE);
37 |
38 | if (!isset($_POST['plugin_tasklists_tasks_id'])) {
39 | throw new \RuntimeException('Required argument missing!');
40 | }
41 |
42 | $plugin_tasklists_tasks_id = $_POST['plugin_tasklists_tasks_id'];
43 | $lang = null;
44 | if (isset($_POST['language'])) {
45 | $lang = $_POST['language'];
46 | }
47 |
48 | $edit = false;
49 | if (isset($_POST['edit'])) {
50 | $edit = $_POST['edit'];
51 | }
52 |
53 | $answer = false;
54 | if (isset($_POST['answer'])) {
55 | $answer = $_POST['answer'];
56 | }
57 |
58 | echo Task_Comment::getCommentForm($plugin_tasklists_tasks_id, $lang, $edit, $answer);
59 |
--------------------------------------------------------------------------------
/public/lib/kanban/README.md:
--------------------------------------------------------------------------------
1 | # Kanban-jQuery
2 | # https://github.com/craig-davey96/Kanban-jQuery
3 | Kanban Board jQuery Plugin
4 |
5 | # Requirements
6 |
7 | 1. jQuery v3.2.1+ (https://jquery.com/download/)
8 | 2. jQuery UI v1.12.1+ (https://jqueryui.com/)
9 |
10 | # Example
11 |
12 | Include styles and script
13 | ```html
14 |
15 |
16 | ```
17 |
18 | Example of the HTML element
19 | ```html
20 |
21 | ```
22 |
23 | Example of the javascript call to create a Kanban Board
24 | ```js
25 | $('#kanban').kanban({
26 | titles: ['Task' , 'Estimate' , 'Complete' , 'Invoiced' , 'Paid'],
27 | colours: ['#00aaff','#ff921d','#00ff40','#ffe54b','#8454ff'],
28 | items: [
29 | {
30 | id: 1,
31 | title: 'Test',
32 | block: 'Task',
33 | link: '[URL]',
34 | link_text: 'TEST001',
35 | footer: ' 1 1/4
'
36 | },
37 | {
38 | id: 2,
39 | title: 'Test 2',
40 | block: 'Estimate',
41 | footer: ' 1 1/4
'
42 | },
43 | {
44 | id: 3,
45 | title: 'Test 3',
46 | block: 'Estimate',
47 | footer: ' 1 1/4
'
48 | },
49 | {
50 | id: 4,
51 | title: 'Test 5',
52 | block: 'Estimate',
53 | footer: ' 1 1/4
'
54 | },
55 | {
56 | id: 5,
57 | title: 'Test 5',
58 | block: 'Estimate',
59 | footer: ' 1 1/4
'
60 | },
61 | ]
62 | });
63 | ```
64 |
--------------------------------------------------------------------------------
/ajax/dropdownTypeTasks.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Task;
31 |
32 | if (strpos($_SERVER['PHP_SELF'], "dropdownTypeTasks.php")) {
33 | header("Content-Type: text/html; charset=UTF-8");
34 | Html::header_nocache();
35 | }
36 |
37 | Session::checkCentralAccess();
38 | Session::checkRight('plugin_tasklists', UPDATE);
39 |
40 | global $DB;
41 |
42 | // Make a select box
43 | if (isset($_POST["tasktypes"])) {
44 | $used = [];
45 |
46 | // Clean used array
47 | if (
48 | isset($_POST['used'])
49 | && is_array($_POST['used'])
50 | && (count($_POST['used']) > 0)
51 | ) {
52 | $options = [
53 | 'id' => $_POST['used'],
54 | 'plugin_tasklists_tasktypes_id' => $_POST['tasktypes']
55 | ];
56 | foreach (
57 | $DB->request([
58 | 'FROM' => 'glpi_plugin_tasklists_tasks',
59 | 'WHERE' => $options
60 | ]) as $data
61 | ) {
62 | $used[$data['id']] = $data['id'];
63 | }
64 | }
65 |
66 |
67 | Dropdown::show(
68 | Task::class,
69 | [
70 | 'name' => $_POST['myname'],
71 | 'used' => $used,
72 | 'width' => '50%',
73 | 'entity' => $_POST['entity'],
74 | 'rand' => $_POST['rand'],
75 | 'condition' => ["glpi_plugin_tasklists_tasks.plugin_tasklists_tasktypes_id" => $_POST["tasktypes"]]
76 | ]
77 | );
78 | }
79 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/SearchTokenizer/SearchTokenizerResult.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ---------------------------------------------------------------------
3 | *
4 | * GLPI - Gestionnaire Libre de Parc Informatique
5 | *
6 | * http://glpi-project.org
7 | *
8 | * @copyright 2015-2024 Teclib' and contributors.
9 | * @copyright 2003-2014 by the INDEPNET Development Team.
10 | * @licence https://www.gnu.org/licenses/gpl-3.0.html
11 | *
12 | * ---------------------------------------------------------------------
13 | *
14 | * LICENSE
15 | *
16 | * This file is part of GLPI.
17 | *
18 | * This program is free software: you can redistribute it and/or modify
19 | * it under the terms of the GNU General Public License as published by
20 | * the Free Software Foundation, either version 3 of the License, or
21 | * (at your option) any later version.
22 | *
23 | * This program is distributed in the hope that it will be useful,
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 | * GNU General Public License for more details.
27 | *
28 | * You should have received a copy of the GNU General Public License
29 | * along with this program. If not, see .
30 | *
31 | * ---------------------------------------------------------------------
32 | */
33 |
34 | class SearchTokenizerResult {
35 |
36 | constructor() {
37 | /**
38 | * @type {SearchToken[]}
39 | */
40 | this.tokens = [];
41 | }
42 |
43 | /**
44 | * Get all tokens with a specific tag
45 | * @param name
46 | * @return {SearchToken[]}
47 | */
48 | getTag(name) {
49 | return this.tokens.filter(t => t.tag === name);
50 | }
51 |
52 | /**
53 | * Get all tokens with a tag
54 | * @return {SearchToken[]}
55 | */
56 | getTaggedTerms() {
57 | return this.tokens.filter(t => t.tag !== null);
58 | }
59 |
60 | /**
61 | * Get all tokens without a tag
62 | * @return {SearchToken[]}
63 | */
64 | getUntaggedTerms() {
65 | return this.tokens.filter(t => t.tag === null);
66 | }
67 |
68 | /**
69 | * Get all untagged terms as a concatenated string
70 | *
71 | * The terms in the resulting string should be in the same order they appeared in the tokenizer input string.
72 | * @return {string}
73 | */
74 | getFullPhrase() {
75 | let full_phrase = '';
76 | this.getUntaggedTerms().forEach(t => full_phrase += ` ${t.term}`);
77 | return full_phrase.trim();
78 | }
79 | }
80 | window.SearchTokenizerResult = SearchTokenizerResult;
81 |
--------------------------------------------------------------------------------
/front/kanban.php:
--------------------------------------------------------------------------------
1 | .
28 | --------------------------------------------------------------------------
29 | */
30 |
31 |
32 | global $CFG_GLPI;
33 |
34 | use Glpi\Exception\Http\AccessDeniedHttpException;
35 | use GlpiPlugin\Tasklists\Menu;
36 | use GlpiPlugin\Tasklists\Task;
37 | use GlpiPlugin\Tasklists\Kanban;
38 |
39 | Html::header(Task::getTypeName(2), '', "helpdesk", Menu::class);
40 |
41 | $kanban = new Kanban();
42 |
43 | if ($kanban->canView() || Session::haveRight("config", CREATE)) {
44 | //AS module for SearchTokenizer
45 | // echo "";
46 | echo "";
47 | echo "";
48 | echo "";
49 | echo "";
50 | echo "";
51 |
52 | Html::requireJs('sortable');
53 | // Html::requireJs('kanban');
54 | echo Html::css(PLUGIN_TASKLISTS_WEBDIR . '/lib/kanban/css/kanban.css');
55 | // echo Html::script(PLUGIN_TASKLISTS_WEBDIR . "/lib/kanban/js/kanban-actions.js");
56 | if (!isset($_GET["context_id"])) {
57 | $_GET["context_id"] = -1;
58 | }
59 | Kanban::showKanban($_GET["context_id"]);
60 | } else {
61 | throw new AccessDeniedHttpException();
62 | }
63 |
64 | Html::footer();
65 |
--------------------------------------------------------------------------------
/tools/extract_template.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | # --- Étape 1 : Extraction des chaînes PHP ---
5 | find . -name '*.php' > php_files.list
6 |
7 | xgettext --files-from=php_files.list \
8 | --copyright-holder='Tasklists Development Team' \
9 | --package-name='Tasklists plugin' \
10 | -o locales/glpi.pot \
11 | -L PHP \
12 | --add-comments=TRANS \
13 | --from-code=UTF-8 \
14 | --force-po \
15 | --sort-output \
16 | --keyword=_n:1,2,4t \
17 | --keyword=__s:1,2t \
18 | --keyword=__:1,2t \
19 | --keyword=_e:1,2t \
20 | --keyword=_x:1c,2,3t \
21 | --keyword=_ex:1c,2,3t \
22 | --keyword=_nx:1c,2,3,5t \
23 | --keyword=_sx:1c,2,3t
24 |
25 | rm php_files.list
26 |
27 | # --- Étape 2 : Extraction des chaînes Twig ---
28 |
29 | SCRIPT_DIR=$(dirname "$0")
30 | WORKING_DIR=$(readlink -f "$SCRIPT_DIR/..")
31 | OUTPUT_FILE="$WORKING_DIR/locales/glpi.pot"
32 |
33 | F_ARGS_N="1,2"
34 | F_ARGS__S="1"
35 | F_ARGS__="1"
36 | F_ARGS_X="1c,2"
37 | F_ARGS_SX="1c,2"
38 | F_ARGS_NX="1c,2,3"
39 | F_ARGS_SN="1,2"
40 |
41 | find "$WORKING_DIR/templates" -type f -name "*.twig" | while read -r file; do
42 |
43 | # Convertit les blocs Twig {{ ... }} en pseudo-code PHP pour xgettext
44 | perl -0pe 's/\{\{\s*(.*?)\s*\}\}//g' "$file" \
45 | | xgettext -o "$OUTPUT_FILE" -L PHP \
46 | --add-comments=TRANS \
47 | --from-code=UTF-8 \
48 | --force-po \
49 | --join-existing \
50 | --sort-output \
51 | --keyword=_n:$F_ARGS_N \
52 | --keyword=__:$F_ARGS__ \
53 | --keyword=_x:$F_ARGS_X \
54 | --keyword=_nx:$F_ARGS_NX \
55 | --keyword=_sn:$F_ARGS_SN \
56 | -
57 |
58 | # Corrige les références de fichier dans le POT
59 | sed -i -r "s|standard input:([0-9]+)|$file:\1|g" "$OUTPUT_FILE"
60 | done
61 | # --- Étape 3 : Extraction des chaînes JavaScript ---
62 | KANBAN_DIR="$WORKING_DIR/public/lib/kanban/js"
63 | OUTPUT_FILE="$WORKING_DIR/locales/glpi.pot"
64 |
65 | # Crée le fichier de sortie s'il n'existe pas
66 | mkdir -p "$(dirname "$OUTPUT_FILE")"
67 | touch "$OUTPUT_FILE"
68 |
69 | if [ -d "$KANBAN_DIR" ]; then
70 | echo "Extraction depuis JavaScript : $KANBAN_DIR"
71 | find "$KANBAN_DIR" -type f -name "*.js" > js_files.list
72 |
73 | # xgettext a besoin du fichier de sortie en paramètre explicite APRÈS -j
74 | xgettext --files-from=js_files.list \
75 | -L JavaScript \
76 | --add-comments=TRANS \
77 | --from-code=UTF-8 \
78 | --force-po \
79 | --sort-output \
80 | --keyword=_n:1,2 \
81 | --keyword=__:1 \
82 | --keyword=_x:1c,2 \
83 | --keyword=_nx:1c,2,3 \
84 | -o "$OUTPUT_FILE" -j
85 |
86 | rm js_files.list
87 | else
88 | echo "⚠️ Dossier $KANBAN_DIR introuvable — étape JavaScript ignorée."
89 | fi
90 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 |
2 | on:
3 | push:
4 | # Sequence of patterns matched against refs/tags
5 | tags:
6 | - '*.*.*' # Push events to matching ex:20.15.10
7 |
8 | name: Create release with tag
9 | env:
10 | TAG_VALUE: ${GITHUB_REF/refs\/tags\//}
11 | jobs:
12 | build:
13 | name: Upload Release Asset
14 | runs-on: ubuntu-latest
15 | steps:
16 | - name: Checkout code
17 | uses: actions/checkout@v2
18 | - name: Build project # This would actually build your project, using zip for an example artifact
19 | id: build_
20 | env:
21 | GITHUB_NAME: ${{ github.event.repository.name }}
22 |
23 |
24 | run: sudo apt-get install libxml-xpath-perl;echo $(xpath -e '/root/versions/version[num="'${GITHUB_REF/refs\/tags\//}'"]/compatibility/text()' $GITHUB_NAME.xml);echo ::set-output name=version_glpi::$(xpath -e '/root/versions/version[num="'${GITHUB_REF/refs\/tags\//}'"]/compatibility/text()' $GITHUB_NAME.xml); rm -rf $GITHUB_NAME.xml tools wiki screenshots test .git .github ISSUE_TEMPLATE.md TODO.txt $GITHUB_NAME.png;cd ..; tar jcvf glpi-$GITHUB_NAME-${GITHUB_REF/refs\/tags\//}.tar.bz2 $GITHUB_NAME;ls -al;echo ::set-output name=tag::${GITHUB_REF/refs\/tags\//};echo ${{ steps.getxml.outputs.info }};
25 | # run: rm -rf $GITHUB_NAME.xml tools wiki screenshots test ISSUE_TEMPLATE.md TODO.txt $GITHUB_NAME.png; tar -zcvf glpi-$GITHUB_NAME-$GITHUB_TAG.tar.gz $GITHUB_NAME
26 | - name: Create Release
27 | id: create_release
28 | uses: actions/create-release@v1
29 | env:
30 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31 | with:
32 | tag_name: ${{ github.ref }}
33 | release_name: |
34 | GLPI ${{ steps.build_.outputs.version_glpi }} : Version ${{ github.ref }} disponible / available
35 | body : Version ${{ steps.build_.outputs.tag }} released for GLPI ${{ steps.build_.outputs.version_glpi }}
36 | draft: false
37 | prerelease: true
38 | - name: Upload Release Asset
39 | id: upload-release-asset
40 | uses: actions/upload-release-asset@v1
41 | env:
42 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
43 | GITHUB_NAME: ${{ github.event.repository.name }}
44 | with:
45 | upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
46 | asset_path: /home/runner/work/${{ github.event.repository.name }}/glpi-${{ github.event.repository.name }}-${{ steps.build_.outputs.tag }}.tar.bz2
47 | asset_name: glpi-${{ github.event.repository.name }}-${{ steps.build_.outputs.tag }}.tar.bz2
48 | asset_content_type: application/zip
49 |
50 |
--------------------------------------------------------------------------------
/templates/kanban.html.twig:
--------------------------------------------------------------------------------
1 | {#
2 | # ---------------------------------------------------------------------
3 | # GLPI - Gestionnaire Libre de Parc Informatique
4 | # Copyright (C) 2015-2022 Teclib' and contributors.
5 | #
6 | # http://glpi-project.org
7 | #
8 | # based on GLPI - Gestionnaire Libre de Parc Informatique
9 | # Copyright (C) 2003-2014 by the INDEPNET Development Team.
10 | #
11 | # ---------------------------------------------------------------------
12 | #
13 | # LICENSE
14 | #
15 | # This file is part of GLPI.
16 | #
17 | # GLPI is free software; you can redistribute it and/or modify
18 | # it under the terms of the GNU General Public License as published by
19 | # the Free Software Foundation; either version 2 of the License, or
20 | # (at your option) any later version.
21 | #
22 | # GLPI is distributed in the hope that it will be useful,
23 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
24 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 | # GNU General Public License for more details.
26 | #
27 | # You should have received a copy of the GNU General Public License
28 | # along with GLPI. If not, see .
29 | # ---------------------------------------------------------------------
30 | #}
31 |
32 | {% import 'components/form/fields_macros.html.twig' as fields %}
33 | {% import 'components/form/modals_macros.html.twig' as modals %}
34 |
35 | {% if rights is not defined %}
36 | {% set rights = {
37 | 'create_item': false,
38 | 'delete_item': false,
39 | 'create_column': false,
40 | 'modify_view': false,
41 | 'order_card': false,
42 | 'create_card_limited_columns': [0],
43 | } %}
44 | {% endif %}
45 |
46 |
47 | {{ modals.modal('', '', {
48 | 'id': 'kanban-modal'
49 | }) }}
50 |
51 | {% for supported_itemtype, info in supported_itemtypes %}
52 |
53 | {{ fields.dropdownArrayField('role', null, info.team_roles, __('Role')) }}
54 | {{ fields.dropdownItemsFromItemtypes('add-teammember', '', {
55 | 'itemtypes': info.team_itemtypes
56 | }) }}
57 |
58 | {% endfor %}
59 |
60 |
78 |
--------------------------------------------------------------------------------
/ajax/updatetask.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Task;
31 |
32 | Session::checkLoginUser();
33 | Session::checkRight('plugin_tasklists', UPDATE);
34 |
35 | if (isset($_POST['data_id'])
36 | && isset($_POST['percent_done'])) {
37 | $task = new Task();
38 | $input['percent_done'] = $_POST['percent_done'];
39 | $input['id'] = $_POST['data_id'];
40 | $task->update($input);
41 |
42 | } else if (isset($_POST['data_id'])
43 | && isset($_POST['updatepriority'])) {
44 | $task = new Task();
45 | if ($task->getFromDB($_POST['data_id'])) {
46 | if ($task->fields["priority"] < 5) {
47 | $input['priority'] = $task->fields["priority"] + 1;
48 | }
49 | $input['id'] = $_POST['data_id'];
50 | $task->update($input);
51 | }
52 | } else if (isset($_POST['data_id'])
53 | && isset($_POST['archivetask'])) {
54 | $task = new Task();
55 | $input['is_archived'] = 1;
56 | $input['id'] = $_POST['data_id'];
57 | $task->update($input);
58 |
59 | } else if (isset($_POST['archivealltasks'])
60 | && isset($_POST['state_id'])
61 | && isset($_POST['context_id'])) {
62 |
63 | $task = new Task();
64 | $dbu = new DbUtils();
65 | $cond = ["plugin_tasklists_taskstates_id" => $_POST['state_id'],
66 | "plugin_tasklists_tasktypes_id" => $_POST['context_id'],
67 | "is_deleted" => 0,
68 | "is_archived" => 0];
69 | $tasks = $dbu->getAllDataFromTable($dbu->getTableForItemType(Task::class),
70 | $cond);
71 | foreach ($tasks as $key => $row) {
72 | if ($task->getFromDB($row['id'])) {
73 | $input['is_archived'] = 1;
74 | $input['id'] = $row['id'];
75 | $task->update($input);
76 | }
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/front/task_comment.form.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use Glpi\Exception\Http\BadRequestHttpException;
31 | use GlpiPlugin\Tasklists\Task;
32 | use GlpiPlugin\Tasklists\Task_Comment;
33 |
34 | Session::checkLoginUser();
35 |
36 | $comment = new Task_Comment();
37 | if (!isset($_POST['plugin_tasklists_tasks_id'])) {
38 | $message = __('Mandatory fields are not filled!');
39 | Session::addMessageAfterRedirect($message, false, ERROR);
40 | Html::back();
41 | }
42 | $task = new Task();
43 | $task->getFromDB($_POST['plugin_tasklists_tasks_id']);
44 | //if (!$task->canComment()) {
45 | // Html::displayRightError();
46 | //}
47 |
48 | if (isset($_POST["add"])) {
49 | if (!isset($_POST['plugin_tasklists_tasks_id']) || !isset($_POST['comment'])) {
50 | $message = __('Mandatory fields are not filled!');
51 | Session::addMessageAfterRedirect($message, false, ERROR);
52 | Html::back();
53 | }
54 |
55 | if ($newid = $comment->add($_POST)) {
56 | Session::addMessageAfterRedirect(
57 | "" . __('Your comment has been added') . "",
58 | false,
59 | INFO
60 | );
61 | }
62 | Html::back();
63 | }
64 |
65 | if (isset($_POST["edit"])) {
66 | if (!isset($_POST['plugin_tasklists_tasks_id']) || !isset($_POST['id']) || !isset($_POST['comment'])) {
67 | $message = __('Mandatory fields are not filled!');
68 | Session::addMessageAfterRedirect($message, false, ERROR);
69 | Html::back();
70 | }
71 |
72 | $comment->getFromDB($_POST['id']);
73 | $data = array_merge($comment->fields, $_POST);
74 | if ($comment->update($data)) {
75 | Session::addMessageAfterRedirect(
76 | "" . __('Your comment has been edited') . "",
77 | false,
78 | INFO
79 | );
80 | }
81 | Html::back();
82 | }
83 |
84 | throw new BadRequestHttpException("lost");
85 |
--------------------------------------------------------------------------------
/sql/empty-1.0.0.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasks`;
2 | CREATE TABLE `glpi_plugin_tasklists_tasks`
3 | (
4 | `id` int(11) NOT NULL auto_increment,
5 | `entities_id` int(11) NOT NULL default '0',
6 | `is_recursive` tinyint(1) NOT NULL default '0',
7 | `name` varchar(255) collate utf8_unicode_ci default NULL,
8 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_plugin_tasklists_tasktypes (id)',
9 | `priority` int(11) NOT NULL DEFAULT '1',
10 | `visibility` int(11) NOT NULL DEFAULT '1',
11 | `actiontime` int(11) NOT NULL DEFAULT '0',
12 | `percent_done` int(11) NOT NULL DEFAULT '0',
13 | `state` int(11) NOT NULL DEFAULT '1',
14 | `due_date` date default NULL,
15 | `users_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (id)',
16 | `groups_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_groups (id)',
17 | `comment` text collate utf8_unicode_ci,
18 | `notepad` longtext collate utf8_unicode_ci,
19 | `date_mod` datetime default NULL,
20 | `is_deleted` tinyint(1) NOT NULL default '0',
21 | PRIMARY KEY (`id`),
22 | KEY `name` (`name`),
23 | KEY `entities_id` (`entities_id`),
24 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
25 | KEY `users_id` (`users_id`),
26 | KEY `groups_id` (`groups_id`),
27 | KEY `date_mod` (`date_mod`),
28 | KEY `is_deleted` (`is_deleted`)
29 | ) ENGINE = MyISAM
30 | DEFAULT CHARSET = utf8
31 | COLLATE = utf8_unicode_ci;
32 |
33 |
34 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasktypes`;
35 | CREATE TABLE `glpi_plugin_tasklists_tasktypes`
36 | (
37 | `id` int(11) NOT NULL AUTO_INCREMENT,
38 | `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
39 | `entities_id` int(11) NOT NULL DEFAULT '0',
40 | `is_recursive` tinyint(1) NOT NULL DEFAULT '0',
41 | `comment` text COLLATE utf8_unicode_ci,
42 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL DEFAULT '0',
43 | `completename` text COLLATE utf8_unicode_ci,
44 | `level` int(11) NOT NULL DEFAULT '0',
45 | `ancestors_cache` longtext COLLATE utf8_unicode_ci,
46 | `sons_cache` longtext COLLATE utf8_unicode_ci,
47 | PRIMARY KEY (`id`),
48 | KEY `name` (`name`),
49 | KEY `unicity` (`plugin_tasklists_tasktypes_id`, `name`)
50 | ) ENGINE = MyISAM
51 | DEFAULT CHARSET = utf8
52 | COLLATE = utf8_unicode_ci;
--------------------------------------------------------------------------------
/sql/empty-1.3.0.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasks`;
2 | CREATE TABLE `glpi_plugin_tasklists_tasks`
3 | (
4 | `id` int(11) NOT NULL auto_increment,
5 | `entities_id` int(11) NOT NULL default '0',
6 | `is_recursive` tinyint(1) NOT NULL default '0',
7 | `name` varchar(255) collate utf8_unicode_ci default NULL,
8 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_plugin_tasklists_tasktypes (id)',
9 | `priority` int(11) NOT NULL DEFAULT '1',
10 | `visibility` int(11) NOT NULL DEFAULT '1',
11 | `actiontime` int(11) NOT NULL DEFAULT '0',
12 | `percent_done` int(11) NOT NULL DEFAULT '0',
13 | `state` int(11) NOT NULL DEFAULT '1',
14 | `due_date` date default NULL,
15 | `users_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (id)',
16 | `groups_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_groups (id)',
17 | `comment` text collate utf8_unicode_ci,
18 | `notepad` longtext collate utf8_unicode_ci,
19 | `date_mod` datetime default NULL,
20 | `is_deleted` tinyint(1) NOT NULL default '0',
21 | PRIMARY KEY (`id`),
22 | KEY `name` (`name`),
23 | KEY `entities_id` (`entities_id`),
24 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
25 | KEY `users_id` (`users_id`),
26 | KEY `groups_id` (`groups_id`),
27 | KEY `date_mod` (`date_mod`),
28 | KEY `is_deleted` (`is_deleted`)
29 | ) ENGINE = InnoDB
30 | DEFAULT CHARSET = utf8
31 | COLLATE = utf8_unicode_ci;
32 |
33 |
34 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasktypes`;
35 | CREATE TABLE `glpi_plugin_tasklists_tasktypes`
36 | (
37 | `id` int(11) NOT NULL AUTO_INCREMENT,
38 | `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
39 | `entities_id` int(11) NOT NULL DEFAULT '0',
40 | `is_recursive` tinyint(1) NOT NULL DEFAULT '0',
41 | `comment` text COLLATE utf8_unicode_ci,
42 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL DEFAULT '0',
43 | `completename` text COLLATE utf8_unicode_ci,
44 | `level` int(11) NOT NULL DEFAULT '0',
45 | `ancestors_cache` longtext COLLATE utf8_unicode_ci,
46 | `sons_cache` longtext COLLATE utf8_unicode_ci,
47 | PRIMARY KEY (`id`),
48 | KEY `name` (`name`),
49 | KEY `unicity` (`plugin_tasklists_tasktypes_id`, `name`)
50 | ) ENGINE = InnoDB
51 | DEFAULT CHARSET = utf8
52 | COLLATE = utf8_unicode_ci;
--------------------------------------------------------------------------------
/src/Menu.php:
--------------------------------------------------------------------------------
1 | .
28 | --------------------------------------------------------------------------
29 | */
30 |
31 | namespace GlpiPlugin\Tasklists;
32 |
33 | use CommonGLPI;
34 | use Session;
35 |
36 | /**
37 | * Class Menu
38 | */
39 | class Menu extends CommonGLPI
40 | {
41 | public static $rightname = 'plugin_tasklists';
42 |
43 | /**
44 | * @param int $nb
45 | *
46 | * @return string
47 | */
48 | public static function getMenuName($nb = 1)
49 | {
50 | return __('Tasks list', 'tasklists');
51 | }
52 |
53 | /**
54 | * @return array
55 | */
56 | public static function getMenuContent()
57 | {
58 |
59 | $menu = [];
60 | $menu['title'] = self::getMenuName(2);
61 | $menu['page'] = Kanban::getSearchURL(false) ;
62 |
63 | $menu['links']['search'] = Task::getSearchURL(false);
64 | if (Task::canCreate()) {
65 | $menu['links']['add'] = PLUGIN_TASKLISTS_WEBDIR . '/front/setup.templates.php?add=1';
66 | $menu['links']['template'] = PLUGIN_TASKLISTS_WEBDIR . '/front/setup.templates.php?add=0';
67 | }
68 | $menu['links']['summary'] = Kanban::getSearchURL(false);
69 |
70 | $image = " " . Task::getTypeName(Session::getPluralNumber());
71 | $menu['links'][$image] = Task::getSearchURL(false);
72 |
73 | $menu['icon'] = self::getIcon();
74 |
75 | return $menu;
76 | }
77 |
78 | /**
79 | * @return string
80 | */
81 | public static function getIcon()
82 | {
83 | return "ti ti-layout-kanban";
84 | }
85 |
86 | public static function removeRightsFromSession()
87 | {
88 | if (isset($_SESSION['glpimenu']['helpdesk']['types'][Menu::class])) {
89 | unset($_SESSION['glpimenu']['helpdesk']['types'][Menu::class]);
90 | }
91 | if (isset($_SESSION['glpimenu']['helpdesk']['content'][Menu::class])) {
92 | unset($_SESSION['glpimenu']['helpdesk']['content'][Menu::class]);
93 | }
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/SearchTokenizer/SearchTokenizer.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ---------------------------------------------------------------------
3 | *
4 | * GLPI - Gestionnaire Libre de Parc Informatique
5 | *
6 | * http://glpi-project.org
7 | *
8 | * @copyright 2015-2024 Teclib' and contributors.
9 | * @copyright 2003-2014 by the INDEPNET Development Team.
10 | * @licence https://www.gnu.org/licenses/gpl-3.0.html
11 | *
12 | * ---------------------------------------------------------------------
13 | *
14 | * LICENSE
15 | *
16 | * This file is part of GLPI.
17 | *
18 | * This program is free software: you can redistribute it and/or modify
19 | * it under the terms of the GNU General Public License as published by
20 | * the Free Software Foundation, either version 3 of the License, or
21 | * (at your option) any later version.
22 | *
23 | * This program is distributed in the hope that it will be useful,
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 | * GNU General Public License for more details.
27 | *
28 | * You should have received a copy of the GNU General Public License
29 | * along with this program. If not, see .
30 | *
31 | * ---------------------------------------------------------------------
32 | */
33 | import SearchToken from"./SearchToken.js";import SearchTokenizerResult from"./SearchTokenizerResult.js";export default class SearchTokenizer{constructor(e={},t=false,s={}){this.token_pattern=/([^\s"']?\w+:)?("[^"]*"|'[^']*'|[^\s]+)/g;this.EXCLUSION_PREFIX="!";this.allowed_tags=e;this.drop_unallowed_tags=t;this.options=Object.assign({custom_prefixes:{}},s);delete this.options.custom_prefixes[this.EXCLUSION_PREFIX];delete this.options.custom_prefixes["'"];delete this.options.custom_prefixes['"']}isAllowedTag(e){if(e===null||e===undefined){return true}const t=Object.keys(this.allowed_tags).length===0||e in this.allowed_tags;return t}clearAutocomplete(){Object.keys(this.allowed_tags).forEach((e=>{this.allowed_tags[e].autocomplete_values=[]}))}setAutocomplete(e,t){if(e in this.allowed_tags){this.allowed_tags[e].autocomplete_values=t}}getAutocomplete(e){let t=[];if(e in this.allowed_tags){if(typeof this.allowed_tags[e].autocomplete_values==="function"){t=this.allowed_tags[e].autocomplete_values()}else{t=this.allowed_tags[e].autocomplete_values}}return t||[]}tokenize(e){e=e||"";e=e.trim();const t=new SearchTokenizerResult;let s=null;let l=0;while((s=this.token_pattern.exec(e))!==null){let e=false;let i=s[1]||null;let o=s[2].trim();if(i){i=i.slice(0,-1)}if(i===null&&o.endsWith(":")){i=o.slice(0,-1);o=""}let a=null;if(i&&i.length>1){const t=i.slice(0,1);const s=Object.keys(this.options.custom_prefixes);if(t===this.EXCLUSION_PREFIX){e=true;i=i.slice(1)}else{if(s.includes(t)){const e=i.slice(1);if(this.allowed_tags[e]&&this.allowed_tags[e].supported_prefixes.includes(t)){a=t;i=e}}}}if(!this.allowed_tags[i]||!(this.allowed_tags[i].supported_prefixes||[]).includes(this.EXCLUSION_PREFIX)){e=false}o=o||"";if(o.length>0){if(/^".+"$/.test(o)){o=o.trim().replace(/^"/,"").replace(/"$/,"").trim()}if(/^'.+'$/.test(o)){o=o.trim().replace(/^'/,"").replace(/'$/,"").trim()}}if(this.isAllowedTag(i)){t.tokens.push(new SearchToken(o,i,e,l++,s[0],a))}else if(!this.drop_unallowed_tags){t.tokens.push(new SearchToken(s[0],null,false,l++,s[0]))}}return t}}
--------------------------------------------------------------------------------
/ajax/getUserPicture.php:
--------------------------------------------------------------------------------
1 | .
32 | *
33 | * ---------------------------------------------------------------------
34 | */
35 |
36 | use Glpi\Exception\Http\BadRequestHttpException;
37 | use function Safe\json_encode;
38 |
39 | header("Content-Type: application/json; charset=UTF-8");
40 | Html::header_nocache();
41 |
42 | if (!isset($_REQUEST['users_id'])) {
43 | throw new BadRequestHttpException("Missing users_id parameter");
44 | } elseif (!is_array($_REQUEST['users_id'])) {
45 | $_REQUEST['users_id'] = [$_REQUEST['users_id']];
46 | }
47 |
48 | $_REQUEST['users_id'] = array_unique($_REQUEST['users_id']);
49 |
50 | if (!isset($_REQUEST['size'])) {
51 | $_REQUEST['size'] = '100%';
52 | }
53 |
54 | if (!isset($_REQUEST['allow_blank'])) {
55 | $_REQUEST['allow_blank'] = false;
56 | }
57 |
58 | $user = new User();
59 | $imgs = [];
60 |
61 | foreach ($_REQUEST['users_id'] as $user_id) {
62 | if ($user->getFromDB($user_id)) {
63 | if (!empty($user->fields['picture']) || $_REQUEST['allow_blank']) {
64 | if (isset($_REQUEST['type']) && $_REQUEST['type'] == 'thumbnail') {
65 | $path = User::getThumbnailURLForPicture($user->fields['picture']);
66 | } else {
67 | $path = User::getURLForPicture($user->fields['picture']);
68 | }
69 | $img = Html::image($path, [
70 | 'title' => getUserName($user_id),
71 | 'data-bs-toggle' => 'tooltip',
72 | 'width' => $_REQUEST['size'],
73 | 'height' => $_REQUEST['size'],
74 | 'class' => $_REQUEST['class'] ?? '',
75 | ]);
76 | if (isset($_REQUEST['link']) && $_REQUEST['link']) {
77 | $imgs[$user_id] = sprintf(
78 | '%2$s',
79 | htmlescape(User::getFormURLWithID($user_id)),
80 | $img
81 | );
82 | } else {
83 | $imgs[$user_id] = $img;
84 | }
85 | } else {
86 | // No picture and default image is not allowed.
87 | continue;
88 | }
89 | }
90 | }
91 |
92 | echo json_encode($imgs, JSON_FORCE_OBJECT);
93 |
--------------------------------------------------------------------------------
/front/task.form.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | Session::checkRight("plugin_tasklists", READ);
31 |
32 | use GlpiPlugin\Tasklists\Menu;
33 | use GlpiPlugin\Tasklists\Task;
34 | use GlpiPlugin\Tasklists\Ticket;
35 |
36 | if (!isset($_GET["id"])) {
37 | $_GET["id"] = "";
38 | }
39 | if (!isset($_GET["withtemplate"])) {
40 | $_GET["withtemplate"] = "";
41 | }
42 |
43 | $task = new Task();
44 |
45 | if (isset($_POST["add"])) {
46 | $task->check(-1, CREATE, $_POST);
47 | $newID = $task->add($_POST);
48 | //if ($_SESSION['glpibackcreated']) {
49 | // Html::redirect($task->getFormURL() . "?id=" . $newID);
50 | //}
51 | Html::back();
52 | } else if (isset($_POST["delete"])) {
53 | $task->check($_POST['id'], DELETE);
54 | $task->delete($_POST);
55 | if (!isset($_POST["from_edit_ajax"])) {
56 | $task->redirectToList();
57 | } else {
58 | Html::back();
59 | }
60 |
61 | } else if (isset($_POST["restore"])) {
62 | $task->check($_POST['id'], PURGE);
63 | $task->restore($_POST);
64 | $task->redirectToList();
65 |
66 | } else if (isset($_POST["purge"])) {
67 | $task->check($_POST['id'], PURGE);
68 | $task->delete($_POST, 1);
69 | if (!isset($_POST["from_edit_ajax"])) {
70 | $task->redirectToList();
71 | } else {
72 | Html::back();
73 | }
74 |
75 | } else if (isset($_POST["update"])) {
76 | $task->check($_POST['id'], UPDATE);
77 | $task->update($_POST);
78 | Html::back();
79 |
80 | } else if (isset($_POST["done"])) {
81 | $task->check($_POST['id'], UPDATE);
82 | $options['id'] = $_POST['id'];
83 | $options['state'] = 2;
84 | $options['percent_done'] = 100;
85 | $task->update($options);
86 | Html::back();
87 |
88 | } else if (isset($_POST["ticket_link"])) {
89 |
90 | $ticket = new Ticket();
91 | $task = new Task();
92 | $task->check($_POST['plugin_tasklists_tasks_id'], UPDATE);
93 | $ticket->add(['tickets_id' => $_POST['tickets_id'],
94 | 'plugin_tasklists_tasks_id' => $_POST['plugin_tasklists_tasks_id']]);
95 | Html::back();
96 |
97 | } else {
98 |
99 | $task->checkGlobal(READ);
100 |
101 | Html::header(Task::getTypeName(2), '', "helpdesk", Menu::class);
102 |
103 | Html::requireJs('tinymce');
104 | $task->display(['id' => $_GET["id"], 'withtemplate' => $_GET["withtemplate"]]);
105 |
106 | Html::footer();
107 | }
108 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/kanban-actions.js:
--------------------------------------------------------------------------------
1 | $(document.body).on("kanban:post_build_toolbar", "#kanban", () => {
2 |
3 | var datas = $("#kanban").data('js_class');
4 | var kcolumns = datas.columns;
5 | // console.log(datas);
6 |
7 | //Infotel add link on toolbar for archive all tasks on this column
8 | $.each(kcolumns, function( index, value ) {
9 | var finishState = value.finished;
10 | if (datas.rights.canCreateItem) {
11 | if (finishState === 1) {
12 | var archive_all_tasks = __('Archive all tasks of this state', 'tasklists');
13 | // datas.toolbar_el = "";
14 | }
15 | }
16 | });
17 |
18 | // this.root_taslists = PLUGIN_TASKLISTS_WEBDIR + "/ajax/";
19 | // self.tasklist_root = self.root_taslists + "/ajax/";
20 |
21 | // var archiveColumnTask = function (column) {
22 | // var archivealltasks = 1;
23 | // var state_id = column;
24 | // var context_id = self.item.items_id;
25 | // var data = {archivealltasks, state_id, context_id};
26 | // var alert_archive_all_tasks = __('Are you sure you want to archive all tasks ?', 'tasklists');
27 | // if (confirm(alert_archive_all_tasks)) {
28 | // $.ajax({
29 | // data: data,
30 | // type: 'POST',
31 | // url: (self.tasklist_root + "updatetask.php"),
32 | // success: function (data) {
33 | // self.refresh();
34 | // }
35 | // });
36 | // }
37 | // };
38 | });
39 |
40 | $(document.body).on("kanban:post_build", "#kanban", () => {
41 |
42 | //Infotel add card background
43 | //
46 |
47 |
48 | //Infotel add link for update priority & archive task
49 | // let link = "";
50 | // if (card.finished == 1 && card.archived == 0) {
51 | // let title_archive = __('Archive this task', 'tasklists');
52 | // link += ' ';
53 | // }
54 | // if (card.finished == 0 && card.priority_id < self.max_priority) {
55 | // let title_priority = __('Update priority of task', 'tasklists');
56 | // link += '';
57 | // }
58 | // card_el += link;
59 |
60 | // $("a#archivetask" + items_id).click(function () {
61 | // var archivetask = 1;
62 | // var data_id = items_id;
63 | // var data = {archivetask, data_id};
64 | // let title_archive = __('Are you sure you want to archive this task ?', 'tasklists');
65 | // if (confirm(title_archive)) {
66 | // $.ajax({
67 | // data: data,
68 | // type: 'POST',
69 | // url: (self.tasklist_root + "updatetask.php"),
70 | // success: function (data) {
71 | // self.refresh();
72 | // }
73 | // });
74 | // }
75 | // });
76 | // $("a#updatepriority" + items_id).click(function () {
77 | // var updatepriority = 1;
78 | // var data_id = items_id;
79 | // var data = {updatepriority, data_id};
80 | // $.ajax({
81 | // data: data,
82 | // type: 'POST',
83 | // url: (self.tasklist_root + "updatetask.php"),
84 | // success: function (data) {
85 | // self.refresh();
86 | // }
87 | // });
88 | // });
89 | });
90 |
--------------------------------------------------------------------------------
/setup.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | global $CFG_GLPI;
31 |
32 | use GlpiPlugin\Tasklists\Preference;
33 | use GlpiPlugin\Tasklists\Dashboard;
34 | use GlpiPlugin\Tasklists\Menu;
35 | use GlpiPlugin\Tasklists\Profile;
36 | use GlpiPlugin\Tasklists\Ticket;
37 | use GlpiPlugin\Tasklists\Task;
38 |
39 | define('PLUGIN_TASKLISTS_VERSION', '2.1.5');
40 |
41 | if (!defined("PLUGIN_TASKLISTS_DIR")) {
42 | define("PLUGIN_TASKLISTS_DIR", Plugin::getPhpDir("tasklists"));
43 | // define("PLUGIN_TASKLISTS_WEBDIR", Plugin::getPhpDir("tasklists",false));
44 | $root = $CFG_GLPI['root_doc'] . '/plugins/tasklists';
45 | define("PLUGIN_TASKLISTS_WEBDIR", $root);
46 | }
47 | // Init the hooks of the plugins -Needed
48 | function plugin_init_tasklists()
49 | {
50 | global $PLUGIN_HOOKS, $CFG_GLPI;
51 |
52 | $PLUGIN_HOOKS['csrf_compliant']['tasklists'] = true;
53 | $PLUGIN_HOOKS['change_profile']['tasklists'] = [Profile::class, 'initProfile'];
54 | $PLUGIN_HOOKS['use_rules']['tasklists'] = ['RuleMailCollector'];
55 | // $PLUGIN_HOOKS[Hooks::ADD_CSS]['tasklists'][] = "kanban.css";
56 | if (Session::getLoginUserID()) {
57 |
58 | Plugin::registerClass(Task::class, [
59 | 'document_types' => true,
60 | 'notificationtemplates_types' => true,
61 | ]);
62 |
63 | Plugin::registerClass(
64 | Ticket::class,
65 | ['addtabon' => 'Ticket']
66 | );
67 |
68 | $PLUGIN_HOOKS['item_purge']['tasklists']['Ticket'] = [Ticket::class, 'cleanForTicket'];
69 |
70 | Plugin::registerClass(
71 | Profile::class,
72 | ['addtabon' => 'Profile']
73 | );
74 |
75 | Plugin::registerClass(
76 | Preference::class,
77 | ['addtabon' => 'Preference']
78 | );
79 |
80 | if (Session::haveRight("plugin_tasklists", READ)) {
81 | $PLUGIN_HOOKS['menu_toadd']['tasklists'] = ['helpdesk' => Menu::class];
82 | }
83 |
84 | if (class_exists('PluginMydashboardMenu')) {
85 | $PLUGIN_HOOKS['mydashboard']['tasklists'] = [Dashboard::class];
86 | }
87 |
88 | if (Session::haveRight("plugin_tasklists", CREATE)) {
89 | $PLUGIN_HOOKS['use_massive_action']['tasklists'] = 1;
90 | }
91 | }
92 | }
93 |
94 | // Get the name and the version of the plugin - Needed
95 | /**
96 | * @return array
97 | */
98 | function plugin_version_tasklists()
99 | {
100 |
101 | return [
102 | 'name' => __('Tasks list', 'tasklists'),
103 | 'version' => PLUGIN_TASKLISTS_VERSION,
104 | 'license' => 'GPLv2+',
105 | 'author' => "Infotel, Xavier CAILLAUD",
106 | 'homepage' => 'https://github.com/InfotelGLPI/tasklists',
107 | 'requirements' => [
108 | 'glpi' => [
109 | 'min' => '11.0',
110 | 'max' => '12.0',
111 | 'dev' => false,
112 | ],
113 | ],
114 | ];
115 |
116 | }
117 |
--------------------------------------------------------------------------------
/ajax/seetask.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use GlpiPlugin\Tasklists\Task;
31 |
32 | Session::checkLoginUser();
33 | Session::checkRight('plugin_tasklists', UPDATE);
34 |
35 | Html::header_nocache();
36 | header("Content-Type: text/html; charset=UTF-8");
37 |
38 | //Html::requireJs('tinymce');
39 | echo "";
40 |
41 | if (isset($_GET['id'])) {
42 | $options = [
43 | 'from_edit_ajax' => true,
44 | 'id' => $_GET['id'],
45 | 'withtemplate' => 0
46 | ];
47 | echo "";
50 | echo "
";
51 | $task = new Task();
52 | $task->showForm($_GET['id'],$options);
53 | } else if (isset($_GET['plugin_tasklists_tasktypes_id'])
54 | && isset($_GET['plugin_tasklists_taskstates_id'])) {
55 | $options = [
56 | 'from_edit_ajax' => true,
57 | 'plugin_tasklists_tasktypes_id' => $_GET['plugin_tasklists_tasktypes_id'],
58 | 'plugin_tasklists_taskstates_id' => $_GET['plugin_tasklists_taskstates_id'],
59 | 'withtemplate' => 0
60 | ];
61 | $task = new Task();
62 | if ($id = $task->hasTemplate($options)) {
63 | $options['withtemplate'] = 2;
64 | $task->showForm($id, $options);
65 | } else {
66 | $task->showForm(0, $options);
67 | }
68 | } else if (isset($_GET['clone_id'])) {
69 | $id = $_GET['clone_id'];
70 | $task = new Task();
71 | if ($task->getFromDB($id)) {
72 | $options = [
73 | 'from_edit_ajax' => true,
74 | 'plugin_tasklists_tasktypes_id' => $task->fields['plugin_tasklists_tasktypes_id'],
75 | 'plugin_tasklists_taskstates_id' => $task->fields['plugin_tasklists_taskstates_id'],
76 | 'priority' => $task->fields['priority'],
77 | 'users_id' => Session::getLoginUserID(),
78 | 'groups_id' => $task->fields['groups_id'],
79 | 'client' => $task->fields['client'],
80 | 'entities_id' => $task->fields['entities_id'],
81 | 'visibility' => $task->fields['visibility'],
82 | 'withtemplate' => 0
83 | ];
84 | $taskcloned = new Task();
85 | $taskcloned->showForm(0, $options);
86 | }
87 | } else if (isset($_GET['task_id'])) {
88 | $id = $_GET['task_id'];
89 | $task = new Task();
90 | if ($task->getFromDB($id)) {
91 | $options = [
92 | 'from_edit_ajax' => true,
93 | //'plugin_tasklists_tasktypes_id' => $task->fields['plugin_tasklists_tasktypes_id'],
94 | //'plugin_tasklists_taskstates_id' => $task->fields['plugin_tasklists_taskstates_id'],
95 | //'priority' => $task->fields['priority'],
96 | //'users_id' => Session::getLoginUserID(),
97 | //'groups_id' => $task->fields['groups_id'],
98 | //'client' => $task->fields['client'],
99 | 'entities_id' => $task->fields['entities_id'],
100 | 'name' => $task->fields['name'],
101 | 'content' => $task->fields['comment'],
102 | 'withtemplate' => 0
103 | ];
104 | $ticket = new Ticket();
105 | $ticket->showForm(0, $options);
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/sql/update-1.4.0.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `glpi_plugin_tasklists_taskstates`
2 | (
3 | `id` int(11) NOT NULL AUTO_INCREMENT,
4 | `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
5 | `entities_id` int(11) NOT NULL DEFAULT '0',
6 | `is_recursive` tinyint(1) NOT NULL DEFAULT '0',
7 | `is_finished` tinyint(1) NOT NULL DEFAULT '0',
8 | `tasktypes` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
9 | `color` varchar(200) DEFAULT '#CCC' NOT NULL,
10 | `comment` text COLLATE utf8_unicode_ci,
11 | PRIMARY KEY (`id`),
12 | KEY `name` (`name`),
13 | KEY `entities_id` (`entities_id`)
14 | ) ENGINE = InnoDB
15 | DEFAULT CHARSET = utf8
16 | COLLATE = utf8_unicode_ci;
17 |
18 | INSERT INTO `glpi_plugin_tasklists_taskstates` (`id`, `name`, `entities_id`, `is_recursive`, `comment`, `color`,
19 | `tasktypes`)
20 | VALUES (1, 'To do', '0', '1', NULL, '#CCC', NULL);
21 | INSERT INTO `glpi_plugin_tasklists_taskstates` (`id`, `name`, `entities_id`, `is_recursive`, `comment`, `color`,
22 | `tasktypes`)
23 | VALUES (2, 'Done', '0', '1', NULL, '#CCC', NULL);
24 |
25 | ALTER TABLE `glpi_plugin_tasklists_tasks`
26 | CHANGE `state` `plugin_tasklists_taskstates_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'RELATION to glpi_plugin_tasklists_taskstates (id)';
27 | ALTER TABLE `glpi_plugin_tasklists_tasks`
28 | ADD `is_archived` tinyint(1) NOT NULL default '0';
29 | ALTER TABLE `glpi_plugin_tasklists_tasks`
30 | ADD `client` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL;
31 | ALTER TABLE `glpi_plugin_tasklists_tasks`
32 | ADD `date_creation` datetime default NULL;
33 | ALTER TABLE `glpi_plugin_tasklists_tasks`
34 | ADD `due_date` date default NULL;
35 | ALTER TABLE `glpi_plugin_tasklists_tasks`
36 | ADD `is_template` smallint(6) NOT NULL default '0';
37 | ALTER TABLE `glpi_plugin_tasklists_tasks`
38 | ADD `template_name` varchar(200) collate utf8_unicode_ci NOT NULL default '';
39 |
40 | CREATE TABLE `glpi_plugin_tasklists_stateorders`
41 | (
42 | `id` int(11) NOT NULL auto_increment, -- id
43 | `plugin_tasklists_taskstates_id` int(11) NOT NULL DEFAULT 0,
44 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL DEFAULT 0,
45 | `ranking` int(11) NULL,
46 | PRIMARY KEY (`id`),
47 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
48 | KEY `plugin_tasklists_taskstates_id` (`plugin_tasklists_taskstates_id`)
49 | ) ENGINE = InnoDB
50 | DEFAULT CHARSET = utf8
51 | COLLATE = utf8_unicode_ci;
52 |
53 | CREATE TABLE `glpi_plugin_tasklists_typevisibilities`
54 | (
55 | `id` int(11) NOT NULL AUTO_INCREMENT,
56 | `groups_id` int(11) NOT NULL default '0',
57 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL default '0',
58 | PRIMARY KEY (`id`),
59 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
60 | KEY `groups_id` (`groups_id`)
61 | ) ENGINE = InnoDB
62 | DEFAULT CHARSET = utf8
63 | COLLATE = utf8_unicode_ci;
64 |
65 | CREATE TABLE `glpi_plugin_tasklists_preferences`
66 | (
67 | `id` int(11) NOT NULL COMMENT 'RELATION to glpi_users(id)',
68 | `default_type` int(11) NOT NULL DEFAULT 0,
69 | PRIMARY KEY (`id`)
70 | ) ENGINE = InnoDB
71 | DEFAULT CHARSET = utf8
72 | COLLATE = utf8_unicode_ci;
73 |
74 | CREATE TABLE `glpi_plugin_tasklists_tickets`
75 | (
76 | `id` int(11) NOT NULL AUTO_INCREMENT,
77 | `tickets_id` int(11) NOT NULL DEFAULT '0',
78 | `plugin_tasklists_tasks_id` int(11) NOT NULL DEFAULT '0',
79 | PRIMARY KEY (`id`),
80 | KEY `plugin_tasklists_tasks_id` (`plugin_tasklists_tasks_id`),
81 | KEY `tickets_id` (`tickets_id`)
82 | ) ENGINE = InnoDB
83 | DEFAULT CHARSET = utf8
84 | COLLATE = utf8_unicode_ci;
85 |
86 | CREATE TABLE `glpi_plugin_tasklists_tasks_comments`
87 | (
88 | `id` int(11) NOT NULL AUTO_INCREMENT,
89 | `plugin_tasklists_tasks_id` int(11) NOT NULL,
90 | `users_id` int(11) NOT NULL DEFAULT '0',
91 | `language` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
92 | `comment` text COLLATE utf8_unicode_ci NOT NULL,
93 | `parent_comment_id` int(11) DEFAULT NULL,
94 | `date_creation` datetime DEFAULT NULL,
95 | `date_mod` datetime DEFAULT NULL,
96 | PRIMARY KEY (`id`)
97 | ) ENGINE = InnoDB
98 | DEFAULT CHARSET = utf8
99 | COLLATE = utf8_unicode_ci;
--------------------------------------------------------------------------------
/src/Item_Kanban.php:
--------------------------------------------------------------------------------
1 | .
28 | --------------------------------------------------------------------------
29 | */
30 |
31 | namespace GlpiPlugin\Tasklists;
32 |
33 | use CommonDBRelation;
34 | use Session;
35 |
36 | class Item_Kanban extends CommonDBRelation
37 | {
38 | public static $itemtype_1 = 'itemtype';
39 | public static $items_id_1 = 'items_id';
40 | public static $itemtype_2 = 'User';
41 | public static $items_id_2 = 'users_id';
42 | public static $checkItem_1_Rights = 'plugin_tasklists';
43 |
44 |
45 | /**
46 | * Load the state of a Kanban's column for a specific kanban for the current user
47 | *
48 | * @param string $itemtype Type of the item.
49 | * @param int $items_id ID of the item.
50 | * @param int $plugin_tasklists_taskstates_id column id
51 | * @param string $timestamp Timestamp string of last check or null to always get the state.
52 | *
53 | * @return return the state of the collummn for the user
54 | * if the state doesn't exist it is created
55 | * @since 9.5.0
56 | */
57 | public static function loadStateForItem($itemtype, $items_id, $plugin_tasklists_taskstates_id, $timestamp = null)
58 | {
59 | global $DB;
60 |
61 |
62 | $item = new self();
63 | if ($item->getFromDBByCrit([
64 | 'users_id' => Session::getLoginUserID(),
65 | 'itemtype' => $itemtype,
66 | 'items_id' => $items_id,
67 | 'plugin_tasklists_taskstates_id' => $plugin_tasklists_taskstates_id,
68 | ])) {
69 | return $item->getField('state');
70 |
71 | } else {
72 | $input = [
73 | 'users_id' => Session::getLoginUserID(),
74 | 'itemtype' => $itemtype,
75 | 'items_id' => $items_id,
76 | 'state' => false,
77 | 'plugin_tasklists_taskstates_id' => $plugin_tasklists_taskstates_id,
78 | 'date_creation' => $_SESSION['glpi_currenttime'],
79 | 'date_mod' => $_SESSION['glpi_currenttime'],
80 | ];
81 | $item->add($input);
82 | return false;
83 | }
84 | }
85 |
86 |
87 | public static function collapseColumn($itemtype, $items_id, $column)
88 | {
89 | $item = new self();
90 | $item->getFromDBByCrit([
91 | 'users_id' => Session::getLoginUserID(),
92 | 'itemtype' => $itemtype,
93 | 'items_id' => $items_id,
94 | 'plugin_tasklists_taskstates_id' => $column,
95 | ]);
96 | $input = $item->fields;
97 | $input["state"] = true;
98 | $input["date_mod"] = $_SESSION['glpi_currenttime'];
99 | $item->update($input);
100 | }
101 |
102 | public static function expandColumn($itemtype, $items_id, $column)
103 | {
104 |
105 | $item = new self();
106 | $item->getFromDBByCrit([
107 | 'users_id' => Session::getLoginUserID(),
108 | 'itemtype' => $itemtype,
109 | 'items_id' => $items_id,
110 | 'plugin_tasklists_taskstates_id' => $column,
111 | ]);
112 | $input = $item->fields;
113 | $input["state"] = false;
114 | $input["date_mod"] = $_SESSION['glpi_currenttime'];
115 | $item->update($input);
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/sql/update-1.4.1.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `glpi_plugin_tasklists_taskstates`
2 | (
3 | `id` INT(11) NOT NULL AUTO_INCREMENT,
4 | `name` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
5 | `entities_id` INT(11) NOT NULL DEFAULT '0',
6 | `is_recursive` TINYINT(1) NOT NULL DEFAULT '0',
7 | `is_finished` TINYINT(1) NOT NULL DEFAULT '0',
8 | `tasktypes` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL,
9 | `color` VARCHAR(200) DEFAULT '#CCC' NOT NULL,
10 | `comment` TEXT COLLATE utf8_unicode_ci,
11 | PRIMARY KEY (`id`),
12 | KEY `name` (`name`),
13 | KEY `entities_id` (`entities_id`)
14 | )
15 | ENGINE = InnoDB
16 | DEFAULT CHARSET = utf8
17 | COLLATE = utf8_unicode_ci;
18 |
19 | INSERT INTO `glpi_plugin_tasklists_taskstates` (`id`, `name`, `entities_id`, `is_recursive`, `comment`, `color`,
20 | `tasktypes`)
21 | VALUES (1, 'To do', '0', '1', NULL, '#CCC', NULL);
22 | INSERT INTO `glpi_plugin_tasklists_taskstates` (`id`, `name`, `entities_id`, `is_recursive`, `comment`, `color`,
23 | `tasktypes`)
24 | VALUES (2, 'Done', '0', '1', NULL, '#CCC', NULL);
25 |
26 | ALTER TABLE `glpi_plugin_tasklists_tasks`
27 | CHANGE `state` `plugin_tasklists_taskstates_id` INT(11) NOT NULL DEFAULT '0'
28 | COMMENT 'RELATION to glpi_plugin_tasklists_taskstates (id)';
29 | ALTER TABLE `glpi_plugin_tasklists_tasks`
30 | ADD `is_archived` TINYINT(1) NOT NULL DEFAULT '0';
31 | ALTER TABLE `glpi_plugin_tasklists_tasks`
32 | ADD `client` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL;
33 | ALTER TABLE `glpi_plugin_tasklists_tasks`
34 | ADD `date_creation` DATETIME DEFAULT NULL;
35 | ALTER TABLE `glpi_plugin_tasklists_tasks`
36 | ADD `is_template` SMALLINT(6) NOT NULL DEFAULT '0';
37 | ALTER TABLE `glpi_plugin_tasklists_tasks`
38 | ADD `template_name` VARCHAR(200) COLLATE utf8_unicode_ci NOT NULL DEFAULT '';
39 |
40 | CREATE TABLE `glpi_plugin_tasklists_stateorders`
41 | (
42 | `id` INT(11) NOT NULL AUTO_INCREMENT, -- id
43 | `plugin_tasklists_taskstates_id` INT(11) NOT NULL DEFAULT 0,
44 | `plugin_tasklists_tasktypes_id` INT(11) NOT NULL DEFAULT 0,
45 | `ranking` INT(11) NULL,
46 | PRIMARY KEY (`id`),
47 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
48 | KEY `plugin_tasklists_taskstates_id` (`plugin_tasklists_taskstates_id`)
49 | )
50 | ENGINE = InnoDB
51 | DEFAULT CHARSET = utf8
52 | COLLATE = utf8_unicode_ci;
53 |
54 | CREATE TABLE `glpi_plugin_tasklists_typevisibilities`
55 | (
56 | `id` INT(11) NOT NULL AUTO_INCREMENT,
57 | `groups_id` INT(11) NOT NULL DEFAULT '0',
58 | `plugin_tasklists_tasktypes_id` INT(11) NOT NULL DEFAULT '0',
59 | PRIMARY KEY (`id`),
60 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
61 | KEY `groups_id` (`groups_id`)
62 | )
63 | ENGINE = InnoDB
64 | DEFAULT CHARSET = utf8
65 | COLLATE = utf8_unicode_ci;
66 |
67 | CREATE TABLE `glpi_plugin_tasklists_preferences`
68 | (
69 | `id` INT(11) NOT NULL
70 | COMMENT 'RELATION to glpi_users(id)',
71 | `default_type` INT(11) NOT NULL DEFAULT 0,
72 | PRIMARY KEY (`id`)
73 | )
74 | ENGINE = InnoDB
75 | DEFAULT CHARSET = utf8
76 | COLLATE = utf8_unicode_ci;
77 |
78 | CREATE TABLE `glpi_plugin_tasklists_tickets`
79 | (
80 | `id` INT(11) NOT NULL AUTO_INCREMENT,
81 | `tickets_id` INT(11) NOT NULL DEFAULT '0',
82 | `plugin_tasklists_tasks_id` INT(11) NOT NULL DEFAULT '0',
83 | PRIMARY KEY (`id`),
84 | KEY `plugin_tasklists_tasks_id` (`plugin_tasklists_tasks_id`),
85 | KEY `tickets_id` (`tickets_id`)
86 | )
87 | ENGINE = InnoDB
88 | DEFAULT CHARSET = utf8
89 | COLLATE = utf8_unicode_ci;
90 |
91 | CREATE TABLE `glpi_plugin_tasklists_tasks_comments`
92 | (
93 | `id` INT(11) NOT NULL AUTO_INCREMENT,
94 | `plugin_tasklists_tasks_id` INT(11) NOT NULL,
95 | `users_id` INT(11) NOT NULL DEFAULT '0',
96 | `language` VARCHAR(5) COLLATE utf8_unicode_ci DEFAULT NULL,
97 | `comment` TEXT COLLATE utf8_unicode_ci NOT NULL,
98 | `parent_comment_id` INT(11) DEFAULT NULL,
99 | `date_creation` DATETIME DEFAULT NULL,
100 | `date_mod` DATETIME DEFAULT NULL,
101 | PRIMARY KEY (`id`)
102 | )
103 | ENGINE = InnoDB
104 | DEFAULT CHARSET = utf8
105 | COLLATE = utf8_unicode_ci;
--------------------------------------------------------------------------------
/ajax/addOptions.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | use Glpi\Exception\Http\BadRequestHttpException;
31 | use GlpiPlugin\Tasklists\TaskType;
32 |
33 | header("Content-Type: text/html; charset=UTF-8");
34 | Html::header_nocache();
35 |
36 | Session::checkLoginUser();
37 | Session::checkRight('plugin_tasklists', UPDATE);
38 | if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
39 | // Get AJAX input and load it into $_REQUEST
40 | $input = file_get_contents('php://input');
41 | parse_str($input, $_REQUEST);
42 | }
43 |
44 | if (!isset($_REQUEST['action'])) {
45 | throw new BadRequestHttpException("Missing action parameter");
46 | }
47 | $action = $_REQUEST['action'];
48 |
49 |
50 | if ($_REQUEST['action'] == 'addArchived') {
51 |
52 | header("Content-Type: application/json; charset=UTF-8", true);
53 | $states = [];
54 | $states[0] = __("Not archived", 'tasklists');
55 | $states[1] = __("Archived", 'tasklists');
56 |
57 | if (!isset($_SESSION["archive"][Session::getLoginUserID()])) {
58 | $_SESSION["archive"][Session::getLoginUserID()] = json_encode([0]);
59 | }
60 | if ($_SESSION["archive"][Session::getLoginUserID()] != "" && $_SESSION["archive"][Session::getLoginUserID()] != "null") {
61 | $arch = Dropdown::showFromArray("archive", $states,
62 | ['id' => 'archive',
63 | 'multiple' => true,
64 | 'values' => json_decode($_SESSION["archive"][Session::getLoginUserID()], true),
65 | "display" => false]);
66 | } else {
67 | $arch = Dropdown::showFromArray("archive", $states, ['id' => 'archive',
68 | 'multiple' => true,
69 | 'value' => 0,
70 | "display" => false]);
71 |
72 | }
73 |
74 | echo json_encode($arch, JSON_FORCE_OBJECT);
75 |
76 | } else if ($_REQUEST['action'] == 'changeArchive') {
77 | if (!empty($_REQUEST['vals']))
78 | $_SESSION["archive"][Session::getLoginUserID()] = json_encode($_REQUEST['vals']);
79 |
80 | }
81 | if ($_REQUEST['action'] == 'addUsers') {
82 |
83 | header("Content-Type: application/json; charset=UTF-8", true);
84 | $users = TaskType::findUsers($_REQUEST['context']);
85 |
86 | if (!isset($_SESSION["usersKanban"][Session::getLoginUserID()])) {
87 | $_SESSION["usersKanban"][Session::getLoginUserID()] = json_encode([-1]);
88 | }
89 | if ($_SESSION["usersKanban"][Session::getLoginUserID()] != "" && isset($_SESSION["archive"]) && $_SESSION["archive"][Session::getLoginUserID()] != "null") {
90 | $arch = Dropdown::showFromArray("usersKanban", $users, ['id' => 'users',
91 | 'multiple' => true,
92 | 'values' => json_decode($_SESSION["usersKanban"][Session::getLoginUserID()], true),
93 | "display" => false]);
94 | } else {
95 | $arch = Dropdown::showFromArray("usersKanban", $users, ['id' => 'users',
96 | 'multiple' => true,
97 | 'value' => -1,
98 | "display" => false]);
99 | }
100 |
101 | echo json_encode($arch, JSON_FORCE_OBJECT);
102 |
103 | } else if ($_REQUEST['action'] == 'changeUsers') {
104 | if (!empty($_REQUEST['vals']))
105 | $_SESSION["usersKanban"][Session::getLoginUserID()] = json_encode($_REQUEST['vals']);
106 |
107 | }
108 |
--------------------------------------------------------------------------------
/locales/ja_JP.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # INOUE Daisuke, 2024
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2024-12-30 13:49+0000\n"
15 | "PO-Revision-Date: 2020-11-02 16:28+0000\n"
16 | "Last-Translator: INOUE Daisuke, 2024\n"
17 | "Language-Team: Japanese (Japan) (https://app.transifex.com/infotelGLPI/teams/79675/ja_JP/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: ja_JP\n"
22 | "Plural-Forms: nplurals=1; plural=0;\n"
23 |
24 | #: setup.php:87 inc/dashboard.class.php:60 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "タスクリスト"
29 |
30 | #: ajax/addOptions.php:30
31 | msgid "Not archived"
32 | msgstr "未保管"
33 |
34 | #: ajax/addOptions.php:31 inc/task.class.php:197 inc/task.class.php:686
35 | msgid "Archived"
36 | msgstr "保管済み"
37 |
38 | #: inc/dashboard.class.php:59
39 | msgid "Tables"
40 | msgstr "テーブル"
41 |
42 | #: inc/dashboard.class.php:102 inc/task.class.php:96 inc/task.class.php:478
43 | #: inc/taskstate.class.php:137 inc/taskstate.class.php:189
44 | #: inc/tasktype.class.php:52
45 | msgid "Context"
46 | msgid_plural "Contexts"
47 | msgstr[0] "コンテキスト"
48 |
49 | #: inc/dashboard.class.php:108 inc/notificationtargettask.class.php:213
50 | #: inc/notificationtargettask.class.php:259 inc/task.class.php:134
51 | #: inc/task.class.php:568 inc/tasktype.class.php:229
52 | msgid "Due date"
53 | msgstr "期限"
54 |
55 | #: inc/dashboard.class.php:163 inc/dashboard.class.php:164
56 | #: inc/dashboard.class.php:169 inc/ticket.class.php:154
57 | msgid "Add task"
58 | msgstr "タスクの追加"
59 |
60 | #: inc/kanban.class.php:76
61 | msgid "Kanban"
62 | msgstr "カンバン"
63 |
64 | #: inc/kanban.class.php:148
65 | msgid "You don't have the right to see any context"
66 | msgstr "コンテキストを表示する権限がありません"
67 |
68 | #: inc/kanban.class.php:185
69 | msgid "There is no accessible context"
70 | msgstr "開くことができるコンテキストがありません"
71 |
72 | #: inc/notificationtargettask.class.php:51
73 | msgid "A task has been added"
74 | msgstr "タスクを追加しました"
75 |
76 | #: inc/notificationtargettask.class.php:52
77 | msgid "A task has been updated"
78 | msgstr "タスクを更新しました"
79 |
80 | #: inc/notificationtargettask.class.php:53
81 | msgid "A task has been removed"
82 | msgstr "タスクを削除しました"
83 |
84 | #: inc/notificationtargettask.class.php:217
85 | #: inc/notificationtargettask.class.php:263 inc/task.class.php:205
86 | #: inc/task.class.php:559
87 | msgid "Other client"
88 | msgstr "その他のクライアント"
89 |
90 | #: inc/notificationtargettask.class.php:271
91 | msgid "At creation, update, removal of a task"
92 | msgstr "タスクの作成、更新、削除時"
93 |
94 | #: inc/preference.class.php:88
95 | msgid "Context by default"
96 | msgstr "デフォルトのコンテキスト"
97 |
98 | #: inc/preference.class.php:96
99 | msgid "Automatic refreshing of tasklist"
100 | msgstr "タスクリストの自動画面更新"
101 |
102 | #: inc/preference.class.php:102
103 | msgid "Refresh every "
104 | msgstr "更新間隔"
105 |
106 | #: inc/preference.class.php:106
107 | msgid "minute(s)"
108 | msgstr "分"
109 |
110 | #: inc/profile.class.php:164 inc/profile.class.php:208
111 | msgid "See and update all tasks"
112 | msgstr "すべてのタスクを表示・更新"
113 |
114 | #: inc/profile.class.php:173 inc/profile.class.php:211
115 | msgid "Configure contexts and statuses"
116 | msgstr "コンテキストと状態の設定"
117 |
118 | #: inc/task.class.php:254
119 | msgctxt "quantity"
120 | msgid "Number of comments"
121 | msgstr "コメント数"
122 |
123 | #: inc/task.class.php:392
124 | msgid "You cannot archive a task with this state"
125 | msgstr "この状態のタスクを保管できません"
126 |
127 | #: inc/task.class.php:522
128 | msgid "Existing client"
129 | msgstr "既存のクライアント"
130 |
131 | #: inc/task.class.php:709 inc/task.class.php:790 inc/task.class.php:1085
132 | #: inc/tasktype.class.php:165 inc/tasktype.class.php:526
133 | msgid "Backlog"
134 | msgstr "バックログ"
135 |
136 | #: inc/task.class.php:1143
137 | msgctxt "visibility"
138 | msgid "This user"
139 | msgstr "このユーザー"
140 |
141 | #: inc/task.class.php:1146
142 | msgctxt "visibility"
143 | msgid "This user and this group"
144 | msgstr "このユーザーとグループ"
145 |
146 | #: inc/task.class.php:1149
147 | msgctxt "visibility"
148 | msgid "All"
149 | msgstr "すべて"
150 |
151 | #: inc/task.class.php:1192
152 | msgid "Affect entity for create task"
153 | msgstr "タスクを作成してエンティティ―に影響を与える"
154 |
155 | #: inc/taskstate.class.php:84
156 | msgid "Status"
157 | msgid_plural "Statuses"
158 | msgstr[0] "状態"
159 |
160 | #: inc/ticket.class.php:74 inc/ticket.class.php:184
161 | msgid "Linked task"
162 | msgid_plural "Linked tasks"
163 | msgstr[0] "リンクしたタスク"
164 |
165 | #: inc/ticket.class.php:228
166 | msgid "No task linked to this ticket yet"
167 | msgstr "このチケットにリンクしているタスクはありません"
168 |
169 | #: inc/ticket.class.php:259
170 | msgid "Link a existant ticket"
171 | msgstr "既存のチケットにリンクする"
172 |
173 | #: inc/ticket.class.php:285
174 | msgid "Linked tickets"
175 | msgstr "リンクしているチケット"
176 |
177 | #: inc/typevisibility.class.php:138
178 | msgid "Add a group"
179 | msgstr "グループを追加"
180 |
181 | #: inc/typevisibility.class.php:179
182 | msgid "Groups allowed to use context"
183 | msgstr "コンテキストの利用を許可しているグループ"
184 |
--------------------------------------------------------------------------------
/locales/es_VE.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Francisco Bolivar, 2024
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2024-12-30 13:49+0000\n"
15 | "PO-Revision-Date: 2020-11-02 16:28+0000\n"
16 | "Last-Translator: Francisco Bolivar, 2024\n"
17 | "Language-Team: Spanish (Venezuela) (https://app.transifex.com/infotelGLPI/teams/79675/es_VE/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: es_VE\n"
22 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
23 |
24 | #: setup.php:87 inc/dashboard.class.php:60 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Lista de tareas"
29 |
30 | #: ajax/addOptions.php:30
31 | msgid "Not archived"
32 | msgstr "No archivado"
33 |
34 | #: ajax/addOptions.php:31 inc/task.class.php:197 inc/task.class.php:686
35 | msgid "Archived"
36 | msgstr "Archivado"
37 |
38 | #: inc/dashboard.class.php:59
39 | msgid "Tables"
40 | msgstr "Tablas"
41 |
42 | #: inc/dashboard.class.php:102 inc/task.class.php:96 inc/task.class.php:478
43 | #: inc/taskstate.class.php:137 inc/taskstate.class.php:189
44 | #: inc/tasktype.class.php:52
45 | msgid "Context"
46 | msgid_plural "Contexts"
47 | msgstr[0] "Contexto"
48 | msgstr[1] "De contextos"
49 | msgstr[2] "Contextos"
50 |
51 | #: inc/dashboard.class.php:108 inc/notificationtargettask.class.php:213
52 | #: inc/notificationtargettask.class.php:259 inc/task.class.php:134
53 | #: inc/task.class.php:568 inc/tasktype.class.php:229
54 | msgid "Due date"
55 | msgstr "Fecha de vencimiento"
56 |
57 | #: inc/dashboard.class.php:163 inc/dashboard.class.php:164
58 | #: inc/dashboard.class.php:169 inc/ticket.class.php:154
59 | msgid "Add task"
60 | msgstr "Añadir tarea"
61 |
62 | #: inc/kanban.class.php:76
63 | msgid "Kanban"
64 | msgstr "Kanban"
65 |
66 | #: inc/kanban.class.php:148
67 | msgid "You don't have the right to see any context"
68 | msgstr "No tienes permisos para ver ningún contexto"
69 |
70 | #: inc/kanban.class.php:185
71 | msgid "There is no accessible context"
72 | msgstr "No hay un contexto accesible"
73 |
74 | #: inc/notificationtargettask.class.php:51
75 | msgid "A task has been added"
76 | msgstr "Se ha añadido una tarea"
77 |
78 | #: inc/notificationtargettask.class.php:52
79 | msgid "A task has been updated"
80 | msgstr "Se ha actualizado una tarea"
81 |
82 | #: inc/notificationtargettask.class.php:53
83 | msgid "A task has been removed"
84 | msgstr "Se ha eliminado una tarea"
85 |
86 | #: inc/notificationtargettask.class.php:217
87 | #: inc/notificationtargettask.class.php:263 inc/task.class.php:205
88 | #: inc/task.class.php:559
89 | msgid "Other client"
90 | msgstr "Otro cliente"
91 |
92 | #: inc/notificationtargettask.class.php:271
93 | msgid "At creation, update, removal of a task"
94 | msgstr "En la creación, actualización, eliminación de una tarea"
95 |
96 | #: inc/preference.class.php:88
97 | msgid "Context by default"
98 | msgstr "Contexto por defecto"
99 |
100 | #: inc/preference.class.php:96
101 | msgid "Automatic refreshing of tasklist"
102 | msgstr "Actualización automática de la lista de tareas"
103 |
104 | #: inc/preference.class.php:102
105 | msgid "Refresh every "
106 | msgstr "Actualizar cada "
107 |
108 | #: inc/preference.class.php:106
109 | msgid "minute(s)"
110 | msgstr "minuto(s)"
111 |
112 | #: inc/profile.class.php:164 inc/profile.class.php:208
113 | msgid "See and update all tasks"
114 | msgstr "Ver y actualizar todas las tareas"
115 |
116 | #: inc/profile.class.php:173 inc/profile.class.php:211
117 | msgid "Configure contexts and statuses"
118 | msgstr "Configurar contextos y estados"
119 |
120 | #: inc/task.class.php:254
121 | msgctxt "quantity"
122 | msgid "Number of comments"
123 | msgstr "Número de comentarios"
124 |
125 | #: inc/task.class.php:392
126 | msgid "You cannot archive a task with this state"
127 | msgstr "No puede archivar una tarea con este estado"
128 |
129 | #: inc/task.class.php:522
130 | msgid "Existing client"
131 | msgstr "Cliente existente"
132 |
133 | #: inc/task.class.php:709 inc/task.class.php:790 inc/task.class.php:1085
134 | #: inc/tasktype.class.php:165 inc/tasktype.class.php:526
135 | msgid "Backlog"
136 | msgstr "Atrasos"
137 |
138 | #: inc/task.class.php:1143
139 | msgctxt "visibility"
140 | msgid "This user"
141 | msgstr "Este usuario"
142 |
143 | #: inc/task.class.php:1146
144 | msgctxt "visibility"
145 | msgid "This user and this group"
146 | msgstr "Este usuario y este grupo"
147 |
148 | #: inc/task.class.php:1149
149 | msgctxt "visibility"
150 | msgid "All"
151 | msgstr "Todos"
152 |
153 | #: inc/task.class.php:1192
154 | msgid "Affect entity for create task"
155 | msgstr "Afectar entidad para crear tarea"
156 |
157 | #: inc/taskstate.class.php:84
158 | msgid "Status"
159 | msgid_plural "Statuses"
160 | msgstr[0] "Estado"
161 | msgstr[1] "De estados"
162 | msgstr[2] "Estados"
163 |
164 | #: inc/ticket.class.php:74 inc/ticket.class.php:184
165 | msgid "Linked task"
166 | msgid_plural "Linked tasks"
167 | msgstr[0] "Tarea vinculada"
168 | msgstr[1] "De tareas vinculadas"
169 | msgstr[2] "Tareas vinculadas"
170 |
171 | #: inc/ticket.class.php:228
172 | msgid "No task linked to this ticket yet"
173 | msgstr "Aún no hay ninguna tarea vinculada a este caso"
174 |
175 | #: inc/ticket.class.php:259
176 | msgid "Link a existant ticket"
177 | msgstr "Vincular un caso existente"
178 |
179 | #: inc/ticket.class.php:285
180 | msgid "Linked tickets"
181 | msgstr "Casos vinculados"
182 |
183 | #: inc/typevisibility.class.php:138
184 | msgid "Add a group"
185 | msgstr "Agregar un grupo"
186 |
187 | #: inc/typevisibility.class.php:179
188 | msgid "Groups allowed to use context"
189 | msgstr "Grupos autorizados a usar contexto"
190 |
--------------------------------------------------------------------------------
/locales/es_MX.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Carlos Moreno Rodríguez , 2023
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2024-12-30 13:49+0000\n"
15 | "PO-Revision-Date: 2020-11-02 16:28+0000\n"
16 | "Last-Translator: Carlos Moreno Rodríguez , 2023\n"
17 | "Language-Team: Spanish (Mexico) (https://app.transifex.com/infotelGLPI/teams/79675/es_MX/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: es_MX\n"
22 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
23 |
24 | #: setup.php:87 inc/dashboard.class.php:60 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Lista de tareas"
29 |
30 | #: ajax/addOptions.php:30
31 | msgid "Not archived"
32 | msgstr "No archivado"
33 |
34 | #: ajax/addOptions.php:31 inc/task.class.php:197 inc/task.class.php:686
35 | msgid "Archived"
36 | msgstr "Archivado"
37 |
38 | #: inc/dashboard.class.php:59
39 | msgid "Tables"
40 | msgstr "Tablas"
41 |
42 | #: inc/dashboard.class.php:102 inc/task.class.php:96 inc/task.class.php:478
43 | #: inc/taskstate.class.php:137 inc/taskstate.class.php:189
44 | #: inc/tasktype.class.php:52
45 | msgid "Context"
46 | msgid_plural "Contexts"
47 | msgstr[0] "Contexto"
48 | msgstr[1] "Contextos"
49 | msgstr[2] "Contextos"
50 |
51 | #: inc/dashboard.class.php:108 inc/notificationtargettask.class.php:213
52 | #: inc/notificationtargettask.class.php:259 inc/task.class.php:134
53 | #: inc/task.class.php:568 inc/tasktype.class.php:229
54 | msgid "Due date"
55 | msgstr "Fecha de vencimiento"
56 |
57 | #: inc/dashboard.class.php:163 inc/dashboard.class.php:164
58 | #: inc/dashboard.class.php:169 inc/ticket.class.php:154
59 | msgid "Add task"
60 | msgstr "Agregar tarea"
61 |
62 | #: inc/kanban.class.php:76
63 | msgid "Kanban"
64 | msgstr "Kanban"
65 |
66 | #: inc/kanban.class.php:148
67 | msgid "You don't have the right to see any context"
68 | msgstr "Sin derecho a visualizar ningún contexto"
69 |
70 | #: inc/kanban.class.php:185
71 | msgid "There is no accessible context"
72 | msgstr "No hay un contexto accesible"
73 |
74 | #: inc/notificationtargettask.class.php:51
75 | msgid "A task has been added"
76 | msgstr "Tarea agregada"
77 |
78 | #: inc/notificationtargettask.class.php:52
79 | msgid "A task has been updated"
80 | msgstr "Tarea actualizada"
81 |
82 | #: inc/notificationtargettask.class.php:53
83 | msgid "A task has been removed"
84 | msgstr "Tarea eliminada"
85 |
86 | #: inc/notificationtargettask.class.php:217
87 | #: inc/notificationtargettask.class.php:263 inc/task.class.php:205
88 | #: inc/task.class.php:559
89 | msgid "Other client"
90 | msgstr "Otro cliente"
91 |
92 | #: inc/notificationtargettask.class.php:271
93 | msgid "At creation, update, removal of a task"
94 | msgstr "Creación, actualización y borrado de una tarea"
95 |
96 | #: inc/preference.class.php:88
97 | msgid "Context by default"
98 | msgstr "Contexto predefinido"
99 |
100 | #: inc/preference.class.php:96
101 | msgid "Automatic refreshing of tasklist"
102 | msgstr "Actualización automática de la lista de tareas"
103 |
104 | #: inc/preference.class.php:102
105 | msgid "Refresh every "
106 | msgstr "Actualizar cada "
107 |
108 | #: inc/preference.class.php:106
109 | msgid "minute(s)"
110 | msgstr "minuto(s)"
111 |
112 | #: inc/profile.class.php:164 inc/profile.class.php:208
113 | msgid "See and update all tasks"
114 | msgstr "Ver y actualizar todas las tareas"
115 |
116 | #: inc/profile.class.php:173 inc/profile.class.php:211
117 | msgid "Configure contexts and statuses"
118 | msgstr "Configurar contextos y estados"
119 |
120 | #: inc/task.class.php:254
121 | msgctxt "quantity"
122 | msgid "Number of comments"
123 | msgstr "Número de comentarios"
124 |
125 | #: inc/task.class.php:392
126 | msgid "You cannot archive a task with this state"
127 | msgstr "No puedes archivar una tarea con este estado"
128 |
129 | #: inc/task.class.php:522
130 | msgid "Existing client"
131 | msgstr "Cliente existente"
132 |
133 | #: inc/task.class.php:709 inc/task.class.php:790 inc/task.class.php:1085
134 | #: inc/tasktype.class.php:165 inc/tasktype.class.php:526
135 | msgid "Backlog"
136 | msgstr "Reserva"
137 |
138 | #: inc/task.class.php:1143
139 | msgctxt "visibility"
140 | msgid "This user"
141 | msgstr "Este usuario"
142 |
143 | #: inc/task.class.php:1146
144 | msgctxt "visibility"
145 | msgid "This user and this group"
146 | msgstr "Este usuario y su grupo"
147 |
148 | #: inc/task.class.php:1149
149 | msgctxt "visibility"
150 | msgid "All"
151 | msgstr "Todas"
152 |
153 | #: inc/task.class.php:1192
154 | msgid "Affect entity for create task"
155 | msgstr "Afectar entidad para crear tarea"
156 |
157 | #: inc/taskstate.class.php:84
158 | msgid "Status"
159 | msgid_plural "Statuses"
160 | msgstr[0] "Estado"
161 | msgstr[1] "Estados"
162 | msgstr[2] "Estados"
163 |
164 | #: inc/ticket.class.php:74 inc/ticket.class.php:184
165 | msgid "Linked task"
166 | msgid_plural "Linked tasks"
167 | msgstr[0] "Tarea vinculada"
168 | msgstr[1] "Tareas vinculadas"
169 | msgstr[2] "Tareas vinculadas"
170 |
171 | #: inc/ticket.class.php:228
172 | msgid "No task linked to this ticket yet"
173 | msgstr "Aún no hay ninguna tarea vinculada a este ticket"
174 |
175 | #: inc/ticket.class.php:259
176 | msgid "Link a existant ticket"
177 | msgstr "Vincular un ticket existente"
178 |
179 | #: inc/ticket.class.php:285
180 | msgid "Linked tickets"
181 | msgstr "Tickets vinculados"
182 |
183 | #: inc/typevisibility.class.php:138
184 | msgid "Add a group"
185 | msgstr "Agregar un grupo"
186 |
187 | #: inc/typevisibility.class.php:179
188 | msgid "Groups allowed to use context"
189 | msgstr "Grupos permitidos para usar contexto"
190 |
--------------------------------------------------------------------------------
/locales/es_EC.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Soporte Infraestructura Standby, 2023
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2024-12-30 13:49+0000\n"
15 | "PO-Revision-Date: 2020-11-02 16:28+0000\n"
16 | "Last-Translator: Soporte Infraestructura Standby, 2023\n"
17 | "Language-Team: Spanish (Ecuador) (https://app.transifex.com/infotelGLPI/teams/79675/es_EC/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: es_EC\n"
22 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
23 |
24 | #: setup.php:87 inc/dashboard.class.php:60 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Lista de tareas"
29 |
30 | #: ajax/addOptions.php:30
31 | msgid "Not archived"
32 | msgstr "Sin archivar"
33 |
34 | #: ajax/addOptions.php:31 inc/task.class.php:197 inc/task.class.php:686
35 | msgid "Archived"
36 | msgstr "Archivado"
37 |
38 | #: inc/dashboard.class.php:59
39 | msgid "Tables"
40 | msgstr "Tablas"
41 |
42 | #: inc/dashboard.class.php:102 inc/task.class.php:96 inc/task.class.php:478
43 | #: inc/taskstate.class.php:137 inc/taskstate.class.php:189
44 | #: inc/tasktype.class.php:52
45 | msgid "Context"
46 | msgid_plural "Contexts"
47 | msgstr[0] "Contextos"
48 | msgstr[1] "Contextos"
49 | msgstr[2] "Contextos"
50 |
51 | #: inc/dashboard.class.php:108 inc/notificationtargettask.class.php:213
52 | #: inc/notificationtargettask.class.php:259 inc/task.class.php:134
53 | #: inc/task.class.php:568 inc/tasktype.class.php:229
54 | msgid "Due date"
55 | msgstr "Fecha de vencimiento"
56 |
57 | #: inc/dashboard.class.php:163 inc/dashboard.class.php:164
58 | #: inc/dashboard.class.php:169 inc/ticket.class.php:154
59 | msgid "Add task"
60 | msgstr "Agregar tarea"
61 |
62 | #: inc/kanban.class.php:76
63 | msgid "Kanban"
64 | msgstr "Kanban"
65 |
66 | #: inc/kanban.class.php:148
67 | msgid "You don't have the right to see any context"
68 | msgstr "No tienes derecho a ver ningún contexto"
69 |
70 | #: inc/kanban.class.php:185
71 | msgid "There is no accessible context"
72 | msgstr "No existe un contexto accesible"
73 |
74 | #: inc/notificationtargettask.class.php:51
75 | msgid "A task has been added"
76 | msgstr "Se ha agregado una tarea"
77 |
78 | #: inc/notificationtargettask.class.php:52
79 | msgid "A task has been updated"
80 | msgstr "Una tarea se ha actualizado"
81 |
82 | #: inc/notificationtargettask.class.php:53
83 | msgid "A task has been removed"
84 | msgstr "Una tarea ha sido eliminada"
85 |
86 | #: inc/notificationtargettask.class.php:217
87 | #: inc/notificationtargettask.class.php:263 inc/task.class.php:205
88 | #: inc/task.class.php:559
89 | msgid "Other client"
90 | msgstr "Otro cliente"
91 |
92 | #: inc/notificationtargettask.class.php:271
93 | msgid "At creation, update, removal of a task"
94 | msgstr "En la creación, actualización, eliminación de una tarea"
95 |
96 | #: inc/preference.class.php:88
97 | msgid "Context by default"
98 | msgstr "Contexto predeterminado"
99 |
100 | #: inc/preference.class.php:96
101 | msgid "Automatic refreshing of tasklist"
102 | msgstr "Actualizar automáticamente la lista de tareas"
103 |
104 | #: inc/preference.class.php:102
105 | msgid "Refresh every "
106 | msgstr "Actualizar cada"
107 |
108 | #: inc/preference.class.php:106
109 | msgid "minute(s)"
110 | msgstr "minuto(s)"
111 |
112 | #: inc/profile.class.php:164 inc/profile.class.php:208
113 | msgid "See and update all tasks"
114 | msgstr "Ver y actualizar todas las tareas"
115 |
116 | #: inc/profile.class.php:173 inc/profile.class.php:211
117 | msgid "Configure contexts and statuses"
118 | msgstr "Configurar contextos y estados"
119 |
120 | #: inc/task.class.php:254
121 | msgctxt "quantity"
122 | msgid "Number of comments"
123 | msgstr "Número de comentarios"
124 |
125 | #: inc/task.class.php:392
126 | msgid "You cannot archive a task with this state"
127 | msgstr "No se puede archivar una tarea con este estado"
128 |
129 | #: inc/task.class.php:522
130 | msgid "Existing client"
131 | msgstr "Cliente existente"
132 |
133 | #: inc/task.class.php:709 inc/task.class.php:790 inc/task.class.php:1085
134 | #: inc/tasktype.class.php:165 inc/tasktype.class.php:526
135 | msgid "Backlog"
136 | msgstr "Atrasos"
137 |
138 | #: inc/task.class.php:1143
139 | msgctxt "visibility"
140 | msgid "This user"
141 | msgstr "Este usuario"
142 |
143 | #: inc/task.class.php:1146
144 | msgctxt "visibility"
145 | msgid "This user and this group"
146 | msgstr "Este usuario y este grupo"
147 |
148 | #: inc/task.class.php:1149
149 | msgctxt "visibility"
150 | msgid "All"
151 | msgstr "Todos"
152 |
153 | #: inc/task.class.php:1192
154 | msgid "Affect entity for create task"
155 | msgstr "Entidad afectada para crear tarea"
156 |
157 | #: inc/taskstate.class.php:84
158 | msgid "Status"
159 | msgid_plural "Statuses"
160 | msgstr[0] "Estados"
161 | msgstr[1] "Estados"
162 | msgstr[2] "Estados"
163 |
164 | #: inc/ticket.class.php:74 inc/ticket.class.php:184
165 | msgid "Linked task"
166 | msgid_plural "Linked tasks"
167 | msgstr[0] "Tareas vinculadas"
168 | msgstr[1] "Tareas vinculadas"
169 | msgstr[2] "Tareas vinculadas"
170 |
171 | #: inc/ticket.class.php:228
172 | msgid "No task linked to this ticket yet"
173 | msgstr "Todavía no hay ninguna tarea vinculada a este ticket"
174 |
175 | #: inc/ticket.class.php:259
176 | msgid "Link a existant ticket"
177 | msgstr "Vincular un ticket existente"
178 |
179 | #: inc/ticket.class.php:285
180 | msgid "Linked tickets"
181 | msgstr "Tickets vinculados"
182 |
183 | #: inc/typevisibility.class.php:138
184 | msgid "Add a group"
185 | msgstr "Agregar un grupo"
186 |
187 | #: inc/typevisibility.class.php:179
188 | msgid "Groups allowed to use context"
189 | msgstr "Grupos autorizados a utilizar el contexto"
190 |
--------------------------------------------------------------------------------
/locales/es_ES.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Xavier CAILLAUD , 2020
8 | # FranciscoFJ , 2022
9 | #
10 | #, fuzzy
11 | msgid ""
12 | msgstr ""
13 | "Project-Id-Version: GLPI - Tasklists plugin\n"
14 | "Report-Msgid-Bugs-To: \n"
15 | "POT-Creation-Date: 2024-12-30 13:49+0000\n"
16 | "PO-Revision-Date: 2020-11-02 16:28+0000\n"
17 | "Last-Translator: FranciscoFJ , 2022\n"
18 | "Language-Team: Spanish (Spain) (https://app.transifex.com/infotelGLPI/teams/79675/es_ES/)\n"
19 | "MIME-Version: 1.0\n"
20 | "Content-Type: text/plain; charset=UTF-8\n"
21 | "Content-Transfer-Encoding: 8bit\n"
22 | "Language: es_ES\n"
23 | "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
24 |
25 | #: setup.php:87 inc/dashboard.class.php:60 inc/dashboard.class.php:178
26 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
27 | #: inc/preference.class.php:46 inc/profile.class.php:52
28 | msgid "Tasks list"
29 | msgstr "Lista de tareas"
30 |
31 | #: ajax/addOptions.php:30
32 | msgid "Not archived"
33 | msgstr "No archivado"
34 |
35 | #: ajax/addOptions.php:31 inc/task.class.php:197 inc/task.class.php:686
36 | msgid "Archived"
37 | msgstr "Archivado"
38 |
39 | #: inc/dashboard.class.php:59
40 | msgid "Tables"
41 | msgstr "Tableros"
42 |
43 | #: inc/dashboard.class.php:102 inc/task.class.php:96 inc/task.class.php:478
44 | #: inc/taskstate.class.php:137 inc/taskstate.class.php:189
45 | #: inc/tasktype.class.php:52
46 | msgid "Context"
47 | msgid_plural "Contexts"
48 | msgstr[0] "Contexto"
49 | msgstr[1] "Contextos"
50 | msgstr[2] "Contextos"
51 |
52 | #: inc/dashboard.class.php:108 inc/notificationtargettask.class.php:213
53 | #: inc/notificationtargettask.class.php:259 inc/task.class.php:134
54 | #: inc/task.class.php:568 inc/tasktype.class.php:229
55 | msgid "Due date"
56 | msgstr "Fecha de vencimiento"
57 |
58 | #: inc/dashboard.class.php:163 inc/dashboard.class.php:164
59 | #: inc/dashboard.class.php:169 inc/ticket.class.php:154
60 | msgid "Add task"
61 | msgstr "Agregar tarea"
62 |
63 | #: inc/kanban.class.php:76
64 | msgid "Kanban"
65 | msgstr "Kanban"
66 |
67 | #: inc/kanban.class.php:148
68 | msgid "You don't have the right to see any context"
69 | msgstr "Usted no tiene privilegios para ver ningún contexto "
70 |
71 | #: inc/kanban.class.php:185
72 | msgid "There is no accessible context"
73 | msgstr "No hay contexto accesible"
74 |
75 | #: inc/notificationtargettask.class.php:51
76 | msgid "A task has been added"
77 | msgstr "Se ha añadido una tarea."
78 |
79 | #: inc/notificationtargettask.class.php:52
80 | msgid "A task has been updated"
81 | msgstr "Se ha actualizado una tarea"
82 |
83 | #: inc/notificationtargettask.class.php:53
84 | msgid "A task has been removed"
85 | msgstr "Se ha borrado una tarea"
86 |
87 | #: inc/notificationtargettask.class.php:217
88 | #: inc/notificationtargettask.class.php:263 inc/task.class.php:205
89 | #: inc/task.class.php:559
90 | msgid "Other client"
91 | msgstr "Otro cliente"
92 |
93 | #: inc/notificationtargettask.class.php:271
94 | msgid "At creation, update, removal of a task"
95 | msgstr "En la creación, actualización, eliminación de una tarea"
96 |
97 | #: inc/preference.class.php:88
98 | msgid "Context by default"
99 | msgstr "Contexto predefinido"
100 |
101 | #: inc/preference.class.php:96
102 | msgid "Automatic refreshing of tasklist"
103 | msgstr "Actualización automática de la lista de tareas"
104 |
105 | #: inc/preference.class.php:102
106 | msgid "Refresh every "
107 | msgstr "Actualizar cada"
108 |
109 | #: inc/preference.class.php:106
110 | msgid "minute(s)"
111 | msgstr "minuto(s)"
112 |
113 | #: inc/profile.class.php:164 inc/profile.class.php:208
114 | msgid "See and update all tasks"
115 | msgstr "Ver y actualizar todas las tareas"
116 |
117 | #: inc/profile.class.php:173 inc/profile.class.php:211
118 | msgid "Configure contexts and statuses"
119 | msgstr "Configurar contextos y estados"
120 |
121 | #: inc/task.class.php:254
122 | msgctxt "quantity"
123 | msgid "Number of comments"
124 | msgstr "Número de comentarios"
125 |
126 | #: inc/task.class.php:392
127 | msgid "You cannot archive a task with this state"
128 | msgstr "No puedes archivar una tarea con este estado"
129 |
130 | #: inc/task.class.php:522
131 | msgid "Existing client"
132 | msgstr "Cliente existente"
133 |
134 | #: inc/task.class.php:709 inc/task.class.php:790 inc/task.class.php:1085
135 | #: inc/tasktype.class.php:165 inc/tasktype.class.php:526
136 | msgid "Backlog"
137 | msgstr "Reserva"
138 |
139 | #: inc/task.class.php:1143
140 | msgctxt "visibility"
141 | msgid "This user"
142 | msgstr "Este usuario"
143 |
144 | #: inc/task.class.php:1146
145 | msgctxt "visibility"
146 | msgid "This user and this group"
147 | msgstr "Este usuario y este grupo"
148 |
149 | #: inc/task.class.php:1149
150 | msgctxt "visibility"
151 | msgid "All"
152 | msgstr "Todos"
153 |
154 | #: inc/task.class.php:1192
155 | msgid "Affect entity for create task"
156 | msgstr "Afecta a la entidad para crear la tarea"
157 |
158 | #: inc/taskstate.class.php:84
159 | msgid "Status"
160 | msgid_plural "Statuses"
161 | msgstr[0] "Estado"
162 | msgstr[1] "Estados"
163 | msgstr[2] "Estados"
164 |
165 | #: inc/ticket.class.php:74 inc/ticket.class.php:184
166 | msgid "Linked task"
167 | msgid_plural "Linked tasks"
168 | msgstr[0] "Tarea vinculada"
169 | msgstr[1] "Tareas vinculadas"
170 | msgstr[2] "Tareas vinculadas"
171 |
172 | #: inc/ticket.class.php:228
173 | msgid "No task linked to this ticket yet"
174 | msgstr "Aún no hay ninguna tarea vinculada a esta petición"
175 |
176 | #: inc/ticket.class.php:259
177 | msgid "Link a existant ticket"
178 | msgstr "Vincula una petición existente"
179 |
180 | #: inc/ticket.class.php:285
181 | msgid "Linked tickets"
182 | msgstr "Peticiones vinculadas"
183 |
184 | #: inc/typevisibility.class.php:138
185 | msgid "Add a group"
186 | msgstr "Agregar un grupo"
187 |
188 | #: inc/typevisibility.class.php:179
189 | msgid "Groups allowed to use context"
190 | msgstr "Grupos permitidos para usar el contexto"
191 |
--------------------------------------------------------------------------------
/locales/pt_BR.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Paulo Henrique , 2021
8 | # Luis José Machado Sousa , 2021
9 | # Rafael Gomes , 2022
10 | # Eduardo Mozart de Oliveira , 2025
11 | #
12 | #, fuzzy
13 | msgid ""
14 | msgstr ""
15 | "Project-Id-Version: GLPI - Tasklists plugin\n"
16 | "Report-Msgid-Bugs-To: \n"
17 | "POT-Creation-Date: 2024-12-30 13:55+0000\n"
18 | "PO-Revision-Date: 2020-11-02 16:28+0000\n"
19 | "Last-Translator: Eduardo Mozart de Oliveira , 2025\n"
20 | "Language-Team: Portuguese (Brazil) (https://app.transifex.com/infotelGLPI/teams/79675/pt_BR/)\n"
21 | "MIME-Version: 1.0\n"
22 | "Content-Type: text/plain; charset=UTF-8\n"
23 | "Content-Transfer-Encoding: 8bit\n"
24 | "Language: pt_BR\n"
25 | "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
26 |
27 | #: setup.php:87 inc/dashboard.class.php:60 inc/dashboard.class.php:178
28 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
29 | #: inc/preference.class.php:46 inc/profile.class.php:52
30 | msgid "Tasks list"
31 | msgstr "Lista de tarefas"
32 |
33 | #: ajax/addOptions.php:30
34 | msgid "Not archived"
35 | msgstr "Não arquivado"
36 |
37 | #: ajax/addOptions.php:31 inc/task.class.php:197 inc/task.class.php:686
38 | msgid "Archived"
39 | msgstr "Arquivado"
40 |
41 | #: inc/dashboard.class.php:59
42 | msgid "Tables"
43 | msgstr "Tabelas"
44 |
45 | #: inc/dashboard.class.php:102 inc/task.class.php:96 inc/task.class.php:478
46 | #: inc/taskstate.class.php:137 inc/taskstate.class.php:189
47 | #: inc/tasktype.class.php:52
48 | msgid "Context"
49 | msgid_plural "Contexts"
50 | msgstr[0] "Contexto"
51 | msgstr[1] "Contextos"
52 | msgstr[2] "Contextos"
53 |
54 | #: inc/dashboard.class.php:108 inc/notificationtargettask.class.php:213
55 | #: inc/notificationtargettask.class.php:259 inc/task.class.php:134
56 | #: inc/task.class.php:568 inc/tasktype.class.php:229
57 | msgid "Due date"
58 | msgstr "Data de vencimento"
59 |
60 | #: inc/dashboard.class.php:163 inc/dashboard.class.php:164
61 | #: inc/dashboard.class.php:169 inc/ticket.class.php:154
62 | msgid "Add task"
63 | msgstr "Adicionar tarefa"
64 |
65 | #: inc/kanban.class.php:76
66 | msgid "Kanban"
67 | msgstr "Kanban"
68 |
69 | #: inc/kanban.class.php:148
70 | msgid "You don't have the right to see any context"
71 | msgstr "Você não tem o direito de ver nenhum contexto"
72 |
73 | #: inc/kanban.class.php:185
74 | msgid "There is no accessible context"
75 | msgstr "Sem contexto acessível"
76 |
77 | #: inc/notificationtargettask.class.php:51
78 | msgid "A task has been added"
79 | msgstr "Uma tarefa foi adicionada"
80 |
81 | #: inc/notificationtargettask.class.php:52
82 | msgid "A task has been updated"
83 | msgstr "Uma tarefa foi atualizada"
84 |
85 | #: inc/notificationtargettask.class.php:53
86 | msgid "A task has been removed"
87 | msgstr "Uma tarefa foi removida"
88 |
89 | #: inc/notificationtargettask.class.php:217
90 | #: inc/notificationtargettask.class.php:263 inc/task.class.php:205
91 | #: inc/task.class.php:559
92 | msgid "Other client"
93 | msgstr "Outro cliente"
94 |
95 | #: inc/notificationtargettask.class.php:271
96 | msgid "At creation, update, removal of a task"
97 | msgstr "Na criação, atualização, remoção de uma tarefa"
98 |
99 | #: inc/preference.class.php:88
100 | msgid "Context by default"
101 | msgstr "Contexto por padrão"
102 |
103 | #: inc/preference.class.php:96
104 | msgid "Automatic refreshing of tasklist"
105 | msgstr "Atualização automática da lista de tarefas"
106 |
107 | #: inc/preference.class.php:102
108 | msgid "Refresh every "
109 | msgstr "Atualizar a cada"
110 |
111 | #: inc/preference.class.php:106
112 | msgid "minute(s)"
113 | msgstr "minuto(s)"
114 |
115 | #: inc/profile.class.php:164 inc/profile.class.php:208
116 | msgid "See and update all tasks"
117 | msgstr "Veja e atualize todas as tarefas"
118 |
119 | #: inc/profile.class.php:173 inc/profile.class.php:211
120 | msgid "Configure contexts and statuses"
121 | msgstr "Configurar contextos e status"
122 |
123 | #: inc/task.class.php:254
124 | msgctxt "quantity"
125 | msgid "Number of comments"
126 | msgstr "Número de comentários"
127 |
128 | #: inc/task.class.php:392
129 | msgid "You cannot archive a task with this state"
130 | msgstr "Você não pode arquivar uma tarefa com este estado"
131 |
132 | #: inc/task.class.php:522
133 | msgid "Existing client"
134 | msgstr "Cliente existente"
135 |
136 | #: inc/task.class.php:709 inc/task.class.php:790 inc/task.class.php:1085
137 | #: inc/tasktype.class.php:165 inc/tasktype.class.php:526
138 | msgid "Backlog"
139 | msgstr "Lista de pendências"
140 |
141 | #: inc/task.class.php:1143
142 | msgctxt "visibility"
143 | msgid "This user"
144 | msgstr "Este usuário"
145 |
146 | #: inc/task.class.php:1146
147 | msgctxt "visibility"
148 | msgid "This user and this group"
149 | msgstr "Este usuário e este grupo"
150 |
151 | #: inc/task.class.php:1149
152 | msgctxt "visibility"
153 | msgid "All"
154 | msgstr "Todos"
155 |
156 | #: inc/task.class.php:1192
157 | msgid "Affect entity for create task"
158 | msgstr "Afetar entidade para criar tarefa"
159 |
160 | #: inc/taskstate.class.php:84
161 | msgid "Status"
162 | msgid_plural "Statuses"
163 | msgstr[0] "Status"
164 | msgstr[1] "Status"
165 | msgstr[2] "Status"
166 |
167 | #: inc/ticket.class.php:74 inc/ticket.class.php:184
168 | msgid "Linked task"
169 | msgid_plural "Linked tasks"
170 | msgstr[0] "Tarefa vinculada"
171 | msgstr[1] "Tarefas vinculadas"
172 | msgstr[2] "Tarefas vinculadas"
173 |
174 | #: inc/ticket.class.php:228
175 | msgid "No task linked to this ticket yet"
176 | msgstr "Nenhuma tarefa vinculada a este chamado ainda"
177 |
178 | #: inc/ticket.class.php:259
179 | msgid "Link a existant ticket"
180 | msgstr "Vincular a um chamado existente"
181 |
182 | #: inc/ticket.class.php:285
183 | msgid "Linked tickets"
184 | msgstr "Vincular chamados"
185 |
186 | #: inc/typevisibility.class.php:138
187 | msgid "Add a group"
188 | msgstr "Adicionar um grupo"
189 |
190 | #: inc/typevisibility.class.php:179
191 | msgid "Groups allowed to use context"
192 | msgstr "Grupos autorizados a usar o contexto"
193 |
--------------------------------------------------------------------------------
/src/Preference.php:
--------------------------------------------------------------------------------
1 | .
27 | --------------------------------------------------------------------------
28 | */
29 |
30 | namespace GlpiPlugin\Tasklists;
31 | use CommonDBTM;
32 | use CommonGLPI;
33 | use DbUtils;
34 | use Dropdown;
35 | use Session;
36 |
37 | /**
38 | * Class Preference
39 | */
40 | class Preference extends CommonDBTM
41 | {
42 |
43 | static $rightname = 'plugin_tasklists';
44 |
45 | /**
46 | * @param CommonGLPI $item
47 | * @param int $withtemplate
48 | *
49 | * @return string|translated
50 | */
51 | function getTabNameForItem(CommonGLPI $item, $withtemplate = 0)
52 | {
53 | if (Session::haveRight('plugin_tasklists', READ)
54 | && $item->getType() == 'Preference') {
55 | return self::createTabEntry(__('Tasks list', 'tasklists'));
56 | }
57 | return '';
58 | }
59 |
60 | /**
61 | * @return string
62 | */
63 | static function getIcon()
64 | {
65 | return Task::getIcon();
66 | }
67 |
68 |
69 | /**
70 | * @param CommonGLPI $item
71 | * @param int $tabnum
72 | * @param int $withtemplate
73 | *
74 | * @return bool
75 | */
76 | static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
77 | {
78 | $pref = new self();
79 | $pref->showPreferenceForm(Session::getLoginUserID());
80 | return true;
81 | }
82 |
83 | /**
84 | * @param $user_id
85 | */
86 | function showPreferenceForm($user_id)
87 | {
88 | //If user has no preferences yet, we set default values
89 | if (!$this->getFromDB($user_id)) {
90 | $this->initPreferences($user_id);
91 | $this->getFromDB($user_id);
92 | }
93 |
94 | //Preferences are not deletable
95 | $options['candel'] = false;
96 | $options['colspan'] = 1;
97 |
98 | $this->showFormHeader($options);
99 |
100 | echo "| " . __("Context by default", "tasklists") . " | ";
101 | echo "";
102 | $types = TypeVisibility::seeAllowedTypes();
103 | Dropdown::show(TaskType::class, ['name' => "default_type",
104 | 'value' => $this->fields['default_type'],
105 | 'condition' => ["id" => $types]]);
106 | echo " | ";
107 | echo "
";
108 | echo "| " . __("Automatic refreshing of tasklist", "tasklists") . " | ";
109 | echo "";
110 | Dropdown::showYesNo("automatic_refresh", $this->fields['automatic_refresh']);
111 | echo " | ";
112 | echo "
";
113 |
114 | echo "| " . __("Refresh every ", "tasklists") . " | ";
115 | echo "";
116 | Dropdown::showFromArray(
117 | "automatic_refresh_delay",
118 | [1 => 1, 2 => 2, 5 => 5, 10 => 10, 30 => 30, 60 => 60],
119 | ["value" => $this->fields['automatic_refresh_delay']]
120 | );
121 | echo " " . __('minute(s)', "mydashboard");
122 | echo " | ";
123 | echo "
";
124 |
125 | $this->showFormButtons($options);
126 | }
127 |
128 | /**
129 | * @param $users_id
130 | */
131 | public function initPreferences($users_id)
132 | {
133 |
134 | $input = [];
135 | $input['id'] = $users_id;
136 | $input['default_type'] = "0";
137 | $this->add($input);
138 | }
139 |
140 | /**
141 | * @param $users_id
142 | *
143 | * @return int
144 | */
145 | public static function checkDefaultType($users_id)
146 | {
147 | return self::checkPreferenceValue('default_type', $users_id);
148 | }
149 |
150 | /**
151 | * @param $field
152 | * @param int $users_id
153 | *
154 | * @return int
155 | */
156 | public static function checkPreferenceValue($field, $users_id = 0)
157 | {
158 | $dbu = new DbUtils();
159 | $data = $dbu->getAllDataFromTable($dbu->getTableForItemType(__CLASS__), ["id" => $users_id]);
160 | if (!empty($data)) {
161 | $first = array_pop($data);
162 | if ($field != "default_type") {
163 | return $first[$field];
164 | }
165 | if ($first[$field] > 0) {
166 | return $first[$field];
167 | } else {
168 | $values = TaskType::getAllForKanban();
169 | $data = [];
170 | foreach ($values as $key => $value) {
171 | if (TypeVisibility::isUserHaveRight($key)) {
172 | $data[] = $key;
173 | }
174 | }
175 | if (!empty($data)) {
176 | $first = reset($data);
177 | return $first;
178 | } else {
179 | return 0;
180 | }
181 | }
182 | } else {
183 | $values = TaskType::getAllForKanban();
184 | $data = [];
185 | foreach ($values as $key => $value) {
186 | if (TypeVisibility::isUserHaveRight($key)) {
187 | $data[] = $key;
188 | }
189 | }
190 | if (!empty($data)) {
191 | $first = reset($data);
192 | return $first;
193 | } else {
194 | return 0;
195 | }
196 | }
197 | }
198 | }
199 |
--------------------------------------------------------------------------------
/locales/pl_PL.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Ryszard Jeziorski , 2019
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin 1.4.0\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2020-07-20 15:07+0200\n"
15 | "PO-Revision-Date: 2017-10-18 16:45+0000\n"
16 | "Last-Translator: Ryszard Jeziorski , 2019\n"
17 | "Language-Team: Polish (Poland) (https://www.transifex.com/infotelGLPI/teams/79675/pl_PL/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: pl_PL\n"
22 | "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
23 |
24 | #: setup.php:89 inc/dashboard.class.php:58 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Lista zadań"
29 |
30 | #: ajax/addOptions.php:31
31 | msgid "Not archived"
32 | msgstr ""
33 |
34 | #: ajax/addOptions.php:32 inc/task.class.php:181 inc/task.class.php:599
35 | msgid "Archived"
36 | msgstr "Zarchiwizowane"
37 |
38 | #: inc/dashboard.class.php:93 inc/task.class.php:80 inc/task.class.php:418
39 | #: inc/taskstate.class.php:100 inc/taskstate.class.php:152
40 | #: inc/tasktype.class.php:48
41 | msgid "Context"
42 | msgid_plural "Contexts"
43 | msgstr[0] "Kontekst"
44 | msgstr[1] "Konteksty"
45 | msgstr[2] "Kontekstów"
46 | msgstr[3] "Kontekst"
47 |
48 | #: inc/dashboard.class.php:93 inc/notificationtargettask.class.php:203
49 | #: inc/notificationtargettask.class.php:247 inc/task.class.php:118
50 | #: inc/task.class.php:496 inc/tasktype.class.php:256
51 | msgid "Due date"
52 | msgstr "Data zakończenia"
53 |
54 | #: inc/dashboard.class.php:164 inc/dashboard.class.php:172
55 | #: inc/kanban.class.php:257 inc/ticket.class.php:154
56 | msgid "Add task"
57 | msgstr "Dodaj zadanie"
58 |
59 | #: inc/kanban.class.php:61
60 | msgid "Kanban"
61 | msgstr "Kanban"
62 |
63 | #: inc/kanban.class.php:121
64 | msgid "You don't have the right to see any context"
65 | msgstr ""
66 |
67 | #: inc/kanban.class.php:188
68 | msgid "There is no accessible context"
69 | msgstr ""
70 |
71 | #: inc/kanban.class.php:247
72 | msgid "Toggle collapse"
73 | msgstr ""
74 |
75 | #: inc/kanban.class.php:248
76 | msgid "Search"
77 | msgstr ""
78 |
79 | #: inc/kanban.class.php:249
80 | msgid "Search or filter results"
81 | msgstr ""
82 |
83 | #: inc/kanban.class.php:250
84 | msgid "Add status"
85 | msgstr ""
86 |
87 | #: inc/kanban.class.php:251
88 | msgid "Create status"
89 | msgstr ""
90 |
91 | #: inc/kanban.class.php:253
92 | msgid "Add a column from existing status"
93 | msgstr ""
94 |
95 | #: inc/kanban.class.php:254
96 | msgid "Or add a new status"
97 | msgstr ""
98 |
99 | #: inc/kanban.class.php:259
100 | msgid "Archive all tasks of this state"
101 | msgstr ""
102 |
103 | #: inc/kanban.class.php:260
104 | msgid "See archived tasks"
105 | msgstr "Zadania zarchiwizowane"
106 |
107 | #: inc/kanban.class.php:261
108 | msgid "Hide archived tasks"
109 | msgstr "Ukryj zarchiwizowane zadania"
110 |
111 | #: inc/kanban.class.php:262
112 | msgid "Clone task"
113 | msgstr "Sklonuj zadanie"
114 |
115 | #: inc/kanban.class.php:263
116 | msgid "See tasks in progress"
117 | msgstr "Zadania wykonywane"
118 |
119 | #: inc/kanban.class.php:264
120 | msgid "See tasks of"
121 | msgstr "Zadania użytkownika"
122 |
123 | #: inc/kanban.class.php:265
124 | msgid "See all tasks"
125 | msgstr "Wszystkie zadania"
126 |
127 | #: inc/kanban.class.php:266
128 | msgid "Are you sure you want to archive this task ?"
129 | msgstr ""
130 |
131 | #: inc/kanban.class.php:267
132 | msgid "Are you sure you want to archive all tasks ?"
133 | msgstr ""
134 |
135 | #: inc/kanban.class.php:268
136 | msgid "Archive this task"
137 | msgstr ""
138 |
139 | #: inc/kanban.class.php:269
140 | msgid "Update priority of task"
141 | msgstr ""
142 |
143 | #: inc/kanban.class.php:270
144 | msgid "Details of task"
145 | msgstr "Szczegóły zdania"
146 |
147 | #: inc/notificationtargettask.class.php:50
148 | msgid "A task has been added"
149 | msgstr "Dodano zadanie"
150 |
151 | #: inc/notificationtargettask.class.php:51
152 | msgid "A task has been updated"
153 | msgstr "Zaktualizowano zadanie"
154 |
155 | #: inc/notificationtargettask.class.php:52
156 | msgid "A task has been removed"
157 | msgstr "Usunięto zadanie"
158 |
159 | #: inc/notificationtargettask.class.php:207
160 | #: inc/notificationtargettask.class.php:251 inc/task.class.php:189
161 | #: inc/task.class.php:486
162 | msgid "Other client"
163 | msgstr "Inny klient"
164 |
165 | #: inc/notificationtargettask.class.php:259
166 | msgid "At creation, update, removal of a task"
167 | msgstr ""
168 |
169 | #: inc/preference.class.php:80
170 | msgid "Context by default"
171 | msgstr ""
172 |
173 | #: inc/preference.class.php:88
174 | msgid "Automatic refreshing of tasklist"
175 | msgstr ""
176 |
177 | #: inc/preference.class.php:94
178 | msgid "Refresh every "
179 | msgstr ""
180 |
181 | #: inc/preference.class.php:98
182 | msgid "minute(s)"
183 | msgstr ""
184 |
185 | #: inc/profile.class.php:153 inc/profile.class.php:196
186 | msgid "See and update all tasks"
187 | msgstr ""
188 |
189 | #: inc/profile.class.php:162 inc/profile.class.php:199
190 | msgid "Configure contexts and statuses"
191 | msgstr ""
192 |
193 | #: inc/stateorder.class.php:96
194 | msgid "States ordering"
195 | msgstr ""
196 |
197 | #: inc/stateorder.class.php:156
198 | msgid "Add states from linked Kanban"
199 | msgstr ""
200 |
201 | #: inc/task.class.php:333
202 | msgid "You cannot archive a task with this state"
203 | msgstr ""
204 |
205 | #: inc/task.class.php:457
206 | msgid "Existing client"
207 | msgstr ""
208 |
209 | #: inc/task.class.php:622 inc/task.class.php:709 inc/task.class.php:985
210 | #: inc/tasktype.class.php:161
211 | msgid "Backlog"
212 | msgstr "Zaległości"
213 |
214 | #: inc/task.class.php:1045
215 | msgctxt "visibility"
216 | msgid "This user"
217 | msgstr "Użytkownik"
218 |
219 | #: inc/task.class.php:1048
220 | msgctxt "visibility"
221 | msgid "This user and this group"
222 | msgstr "Użytkownik i grupa"
223 |
224 | #: inc/task.class.php:1051
225 | msgctxt "visibility"
226 | msgid "All"
227 | msgstr "Wszystko"
228 |
229 | #: inc/task.class.php:1093
230 | msgid "Affect entity for create task"
231 | msgstr ""
232 |
233 | #: inc/ticket.class.php:74 inc/ticket.class.php:183
234 | msgid "Linked task"
235 | msgid_plural "Linked tasks"
236 | msgstr[0] "Powiązane zadanie"
237 | msgstr[1] "Powiązane zadania"
238 | msgstr[2] "Powiązanych zadań"
239 | msgstr[3] "Powiązane zadania"
240 |
241 | #: inc/ticket.class.php:227
242 | msgid "No task linked to this ticket yet"
243 | msgstr "Brak powiązanych zadań do tego zgłoszenia"
244 |
245 | #: inc/ticket.class.php:258
246 | msgid "Link a existant ticket"
247 | msgstr "Powiąż ze zgłoszeniem"
248 |
249 | #: inc/ticket.class.php:284
250 | msgid "Linked tickets"
251 | msgstr "Powiązane zgłoszenia"
252 |
253 | #: inc/typevisibility.class.php:138
254 | msgid "Add a group"
255 | msgstr "Dodaj grupę"
256 |
257 | #: inc/typevisibility.class.php:179
258 | msgid "Groups allowed to use context"
259 | msgstr "Grupy dopuszczone do użycia w tym kontekście"
260 |
--------------------------------------------------------------------------------
/locales/fi_FI.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Markku Vepsä, 2018
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin 1.4.0\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2020-07-20 15:07+0200\n"
15 | "PO-Revision-Date: 2017-10-18 16:45+0000\n"
16 | "Last-Translator: Markku Vepsä, 2018\n"
17 | "Language-Team: Finnish (Finland) (https://www.transifex.com/infotelGLPI/teams/79675/fi_FI/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: fi_FI\n"
22 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
23 |
24 | #: setup.php:89 inc/dashboard.class.php:58 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Tehtävien luettelo"
29 |
30 | #: ajax/addOptions.php:31
31 | msgid "Not archived"
32 | msgstr ""
33 |
34 | #: ajax/addOptions.php:32 inc/task.class.php:181 inc/task.class.php:599
35 | msgid "Archived"
36 | msgstr "Arkistoitu"
37 |
38 | #: inc/dashboard.class.php:93 inc/task.class.php:80 inc/task.class.php:418
39 | #: inc/taskstate.class.php:100 inc/taskstate.class.php:152
40 | #: inc/tasktype.class.php:48
41 | msgid "Context"
42 | msgid_plural "Contexts"
43 | msgstr[0] "Asiayhteys"
44 | msgstr[1] "Asiayhteydet"
45 |
46 | #: inc/dashboard.class.php:93 inc/notificationtargettask.class.php:203
47 | #: inc/notificationtargettask.class.php:247 inc/task.class.php:118
48 | #: inc/task.class.php:496 inc/tasktype.class.php:256
49 | msgid "Due date"
50 | msgstr "Määräaika"
51 |
52 | #: inc/dashboard.class.php:164 inc/dashboard.class.php:172
53 | #: inc/kanban.class.php:257 inc/ticket.class.php:154
54 | msgid "Add task"
55 | msgstr "Lisää tehtävä"
56 |
57 | #: inc/kanban.class.php:61
58 | msgid "Kanban"
59 | msgstr "Taulu"
60 |
61 | #: inc/kanban.class.php:121
62 | msgid "You don't have the right to see any context"
63 | msgstr "Sinulla ei ole oikeutta nähdä mitään asiayhteyttä"
64 |
65 | #: inc/kanban.class.php:188
66 | msgid "There is no accessible context"
67 | msgstr ""
68 |
69 | #: inc/kanban.class.php:247
70 | msgid "Toggle collapse"
71 | msgstr ""
72 |
73 | #: inc/kanban.class.php:248
74 | msgid "Search"
75 | msgstr ""
76 |
77 | #: inc/kanban.class.php:249
78 | msgid "Search or filter results"
79 | msgstr ""
80 |
81 | #: inc/kanban.class.php:250
82 | msgid "Add status"
83 | msgstr ""
84 |
85 | #: inc/kanban.class.php:251
86 | msgid "Create status"
87 | msgstr ""
88 |
89 | #: inc/kanban.class.php:253
90 | msgid "Add a column from existing status"
91 | msgstr ""
92 |
93 | #: inc/kanban.class.php:254
94 | msgid "Or add a new status"
95 | msgstr ""
96 |
97 | #: inc/kanban.class.php:259
98 | msgid "Archive all tasks of this state"
99 | msgstr "Arkistoi kaikki tässä tilassa olevat tehtävät"
100 |
101 | #: inc/kanban.class.php:260
102 | msgid "See archived tasks"
103 | msgstr "Näytä arkistoidut tehtävät"
104 |
105 | #: inc/kanban.class.php:261
106 | msgid "Hide archived tasks"
107 | msgstr "Piilota arkistoidut tehtävät"
108 |
109 | #: inc/kanban.class.php:262
110 | msgid "Clone task"
111 | msgstr "Monista tehtävä"
112 |
113 | #: inc/kanban.class.php:263
114 | msgid "See tasks in progress"
115 | msgstr "Katso käynnissä olevat tehtävät"
116 |
117 | #: inc/kanban.class.php:264
118 | msgid "See tasks of"
119 | msgstr "Näytä tehtävät"
120 |
121 | #: inc/kanban.class.php:265
122 | msgid "See all tasks"
123 | msgstr "Näytä kaikki tehtävät"
124 |
125 | #: inc/kanban.class.php:266
126 | msgid "Are you sure you want to archive this task ?"
127 | msgstr "Haluatko varmasti arkistoida tämän tehtävän?"
128 |
129 | #: inc/kanban.class.php:267
130 | msgid "Are you sure you want to archive all tasks ?"
131 | msgstr "Haluatko varmasti arkistoida kaikki tehtävät?"
132 |
133 | #: inc/kanban.class.php:268
134 | msgid "Archive this task"
135 | msgstr "Arkistoi tämä tehtävä"
136 |
137 | #: inc/kanban.class.php:269
138 | msgid "Update priority of task"
139 | msgstr "Päivitä tehtävän prioriteetti"
140 |
141 | #: inc/kanban.class.php:270
142 | msgid "Details of task"
143 | msgstr "Tehtävän lisätiedot"
144 |
145 | #: inc/notificationtargettask.class.php:50
146 | msgid "A task has been added"
147 | msgstr "Tehtävä on lisätty"
148 |
149 | #: inc/notificationtargettask.class.php:51
150 | msgid "A task has been updated"
151 | msgstr "Tehtävä on päivitetty"
152 |
153 | #: inc/notificationtargettask.class.php:52
154 | msgid "A task has been removed"
155 | msgstr "Tehtävä on poistettu"
156 |
157 | #: inc/notificationtargettask.class.php:207
158 | #: inc/notificationtargettask.class.php:251 inc/task.class.php:189
159 | #: inc/task.class.php:486
160 | msgid "Other client"
161 | msgstr "Muu asiakas"
162 |
163 | #: inc/notificationtargettask.class.php:259
164 | msgid "At creation, update, removal of a task"
165 | msgstr "Luonti, päivitys, tehtävän poisto"
166 |
167 | #: inc/preference.class.php:80
168 | msgid "Context by default"
169 | msgstr "Asiayhteys oletuksena"
170 |
171 | #: inc/preference.class.php:88
172 | msgid "Automatic refreshing of tasklist"
173 | msgstr ""
174 |
175 | #: inc/preference.class.php:94
176 | msgid "Refresh every "
177 | msgstr ""
178 |
179 | #: inc/preference.class.php:98
180 | msgid "minute(s)"
181 | msgstr ""
182 |
183 | #: inc/profile.class.php:153 inc/profile.class.php:196
184 | msgid "See and update all tasks"
185 | msgstr "Näytä ja päivitä kaikki tehtävät"
186 |
187 | #: inc/profile.class.php:162 inc/profile.class.php:199
188 | msgid "Configure contexts and statuses"
189 | msgstr ""
190 |
191 | #: inc/stateorder.class.php:96
192 | msgid "States ordering"
193 | msgstr "Tilojen järjestely"
194 |
195 | #: inc/stateorder.class.php:156
196 | msgid "Add states from linked Kanban"
197 | msgstr ""
198 |
199 | #: inc/task.class.php:333
200 | msgid "You cannot archive a task with this state"
201 | msgstr "Et voi arkistoida tässä tilassa olevaa tehtävää"
202 |
203 | #: inc/task.class.php:457
204 | msgid "Existing client"
205 | msgstr "Olemassa oleva asiakas"
206 |
207 | #: inc/task.class.php:622 inc/task.class.php:709 inc/task.class.php:985
208 | #: inc/tasktype.class.php:161
209 | msgid "Backlog"
210 | msgstr "Jono"
211 |
212 | #: inc/task.class.php:1045
213 | msgctxt "visibility"
214 | msgid "This user"
215 | msgstr "Tämä käyttäjä"
216 |
217 | #: inc/task.class.php:1048
218 | msgctxt "visibility"
219 | msgid "This user and this group"
220 | msgstr "Tämä käyttäjä ja tämä ryhmä"
221 |
222 | #: inc/task.class.php:1051
223 | msgctxt "visibility"
224 | msgid "All"
225 | msgstr "Kaikki"
226 |
227 | #: inc/task.class.php:1093
228 | msgid "Affect entity for create task"
229 | msgstr "Kohdista tehtävä yksikköön"
230 |
231 | #: inc/ticket.class.php:74 inc/ticket.class.php:183
232 | msgid "Linked task"
233 | msgid_plural "Linked tasks"
234 | msgstr[0] "Liitetty tehtävä"
235 | msgstr[1] "Liitetyt tehtävät"
236 |
237 | #: inc/ticket.class.php:227
238 | msgid "No task linked to this ticket yet"
239 | msgstr "Tikettiin ei vielä ole liitetty tehtävää"
240 |
241 | #: inc/ticket.class.php:258
242 | msgid "Link a existant ticket"
243 | msgstr "Liitä olemassa oleva tiketti"
244 |
245 | #: inc/ticket.class.php:284
246 | msgid "Linked tickets"
247 | msgstr "Liitetyt tiketit"
248 |
249 | #: inc/typevisibility.class.php:138
250 | msgid "Add a group"
251 | msgstr "Lisää ryhmä"
252 |
253 | #: inc/typevisibility.class.php:179
254 | msgid "Groups allowed to use context"
255 | msgstr "Sallitut ryhmät"
256 |
--------------------------------------------------------------------------------
/locales/en_GB.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: GLPI - Tasklists plugin 1.4.0\n"
9 | "Report-Msgid-Bugs-To: \n"
10 | "POT-Creation-Date: 2020-07-20 15:07+0200\n"
11 | "PO-Revision-Date: 2020-07-20 15:19+0200\n"
12 | "MIME-Version: 1.0\n"
13 | "Content-Type: text/plain; charset=UTF-8\n"
14 | "Content-Transfer-Encoding: 8bit\n"
15 | "Language: en_GB\n"
16 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17 | "Last-Translator: \n"
18 | "Language-Team: \n"
19 | "X-Generator: Poedit 2.3\n"
20 |
21 | #: setup.php:89 inc/dashboard.class.php:58 inc/dashboard.class.php:178
22 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
23 | #: inc/preference.class.php:46 inc/profile.class.php:52
24 | msgid "Tasks list"
25 | msgstr "Tasks list"
26 |
27 | #: ajax/addOptions.php:31
28 | msgid "Not archived"
29 | msgstr "Not archived"
30 |
31 | #: ajax/addOptions.php:32 inc/task.class.php:181 inc/task.class.php:599
32 | msgid "Archived"
33 | msgstr "Archived"
34 |
35 | #: inc/dashboard.class.php:93 inc/task.class.php:80 inc/task.class.php:418
36 | #: inc/taskstate.class.php:100 inc/taskstate.class.php:152
37 | #: inc/tasktype.class.php:48
38 | msgid "Context"
39 | msgid_plural "Contexts"
40 | msgstr[0] "Context"
41 | msgstr[1] "Contexts"
42 |
43 | #: inc/dashboard.class.php:93 inc/notificationtargettask.class.php:203
44 | #: inc/notificationtargettask.class.php:247 inc/task.class.php:118
45 | #: inc/task.class.php:496 inc/tasktype.class.php:256
46 | msgid "Due date"
47 | msgstr "Due date"
48 |
49 | #: inc/dashboard.class.php:164 inc/dashboard.class.php:172
50 | #: inc/kanban.class.php:257 inc/ticket.class.php:154
51 | msgid "Add task"
52 | msgstr "Add task"
53 |
54 | #: inc/kanban.class.php:61
55 | msgid "Kanban"
56 | msgstr "Kanban"
57 |
58 | #: inc/kanban.class.php:121
59 | msgid "You don't have the right to see any context"
60 | msgstr "You don't have the right to see any context"
61 |
62 | #: inc/kanban.class.php:188
63 | msgid "There is no accessible context"
64 | msgstr "There is no accessible context"
65 |
66 | #: inc/kanban.class.php:247
67 | msgid "Toggle collapse"
68 | msgstr "Toggle collapse"
69 |
70 | #: inc/kanban.class.php:248
71 | msgid "Search"
72 | msgstr "Search"
73 |
74 | #: inc/kanban.class.php:249
75 | msgid "Search or filter results"
76 | msgstr "Search or filter results"
77 |
78 | #: inc/kanban.class.php:250
79 | msgid "Add status"
80 | msgstr "Add status"
81 |
82 | #: inc/kanban.class.php:251
83 | msgid "Create status"
84 | msgstr "Create status"
85 |
86 | #: inc/kanban.class.php:253
87 | msgid "Add a column from existing status"
88 | msgstr "Add a column from existing status"
89 |
90 | #: inc/kanban.class.php:254
91 | msgid "Or add a new status"
92 | msgstr "Or add a new status"
93 |
94 | #: inc/kanban.class.php:259
95 | msgid "Archive all tasks of this state"
96 | msgstr "Archive all tasks of this state"
97 |
98 | #: inc/kanban.class.php:260
99 | msgid "See archived tasks"
100 | msgstr "See archived tasks"
101 |
102 | #: inc/kanban.class.php:261
103 | msgid "Hide archived tasks"
104 | msgstr "Hide archived tasks"
105 |
106 | #: inc/kanban.class.php:262
107 | msgid "Clone task"
108 | msgstr "Clone task"
109 |
110 | #: inc/kanban.class.php:263
111 | msgid "See tasks in progress"
112 | msgstr "See tasks in progress"
113 |
114 | #: inc/kanban.class.php:264
115 | msgid "See tasks of"
116 | msgstr "See tasks of"
117 |
118 | #: inc/kanban.class.php:265
119 | msgid "See all tasks"
120 | msgstr "See all tasks"
121 |
122 | #: inc/kanban.class.php:266
123 | msgid "Are you sure you want to archive this task ?"
124 | msgstr "Are you sure you want to archive this task ?"
125 |
126 | #: inc/kanban.class.php:267
127 | msgid "Are you sure you want to archive all tasks ?"
128 | msgstr "Are you sure you want to archive all tasks ?"
129 |
130 | #: inc/kanban.class.php:268
131 | msgid "Archive this task"
132 | msgstr "Archive this task"
133 |
134 | #: inc/kanban.class.php:269
135 | msgid "Update priority of task"
136 | msgstr "Update priority of task"
137 |
138 | #: inc/kanban.class.php:270
139 | msgid "Details of task"
140 | msgstr "Details of task"
141 |
142 | #: inc/notificationtargettask.class.php:50
143 | msgid "A task has been added"
144 | msgstr "A task has been added"
145 |
146 | #: inc/notificationtargettask.class.php:51
147 | msgid "A task has been updated"
148 | msgstr "A task has been updated"
149 |
150 | #: inc/notificationtargettask.class.php:52
151 | msgid "A task has been removed"
152 | msgstr "A task has been removed"
153 |
154 | #: inc/notificationtargettask.class.php:207
155 | #: inc/notificationtargettask.class.php:251 inc/task.class.php:189
156 | #: inc/task.class.php:486
157 | msgid "Other client"
158 | msgstr "Other client"
159 |
160 | #: inc/notificationtargettask.class.php:259
161 | msgid "At creation, update, removal of a task"
162 | msgstr "At creation, update, removal of a task"
163 |
164 | #: inc/preference.class.php:80
165 | msgid "Context by default"
166 | msgstr "Context by default"
167 |
168 | #: inc/preference.class.php:88
169 | msgid "Automatic refreshing of tasklist"
170 | msgstr "Automatic refreshing of tasklist"
171 |
172 | #: inc/preference.class.php:94
173 | msgid "Refresh every "
174 | msgstr "Refresh every "
175 |
176 | #: inc/preference.class.php:98
177 | msgid "minute(s)"
178 | msgstr "minute(s)"
179 |
180 | #: inc/profile.class.php:153 inc/profile.class.php:196
181 | msgid "See and update all tasks"
182 | msgstr "See and update all tasks"
183 |
184 | #: inc/profile.class.php:162 inc/profile.class.php:199
185 | msgid "Configure contexts and statuses"
186 | msgstr "Configure contexts and statuses"
187 |
188 | #: inc/stateorder.class.php:96
189 | msgid "States ordering"
190 | msgstr "States ordering"
191 |
192 | #: inc/stateorder.class.php:156
193 | msgid "Add states from linked Kanban"
194 | msgstr "Add states from linked Kanban"
195 |
196 | #: inc/task.class.php:333
197 | msgid "You cannot archive a task with this state"
198 | msgstr "You cannot archive a task with this state"
199 |
200 | #: inc/task.class.php:457
201 | msgid "Existing client"
202 | msgstr "Existing client"
203 |
204 | #: inc/task.class.php:622 inc/task.class.php:709 inc/task.class.php:985
205 | #: inc/tasktype.class.php:161
206 | msgid "Backlog"
207 | msgstr "Backlog"
208 |
209 | #: inc/task.class.php:1045
210 | msgctxt "visibility"
211 | msgid "This user"
212 | msgstr "This user"
213 |
214 | #: inc/task.class.php:1048
215 | msgctxt "visibility"
216 | msgid "This user and this group"
217 | msgstr "This user and this group"
218 |
219 | #: inc/task.class.php:1051
220 | msgctxt "visibility"
221 | msgid "All"
222 | msgstr "All"
223 |
224 | #: inc/task.class.php:1093
225 | msgid "Affect entity for create task"
226 | msgstr "Affect entity for create task"
227 |
228 | #: inc/ticket.class.php:74 inc/ticket.class.php:183
229 | msgid "Linked task"
230 | msgid_plural "Linked tasks"
231 | msgstr[0] "Linked task"
232 | msgstr[1] "Linked tasks"
233 |
234 | #: inc/ticket.class.php:227
235 | msgid "No task linked to this ticket yet"
236 | msgstr "No task linked to this ticket yet"
237 |
238 | #: inc/ticket.class.php:258
239 | msgid "Link a existant ticket"
240 | msgstr "Link a existant ticket"
241 |
242 | #: inc/ticket.class.php:284
243 | msgid "Linked tickets"
244 | msgstr "Linked tickets"
245 |
246 | #: inc/typevisibility.class.php:138
247 | msgid "Add a group"
248 | msgstr "Add a group"
249 |
250 | #: inc/typevisibility.class.php:179
251 | msgid "Groups allowed to use context"
252 | msgstr "Groups allowed to use context"
253 |
--------------------------------------------------------------------------------
/locales/es_419.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Jorge Paniagua , 2019
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin 1.4.0\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2020-07-20 15:07+0200\n"
15 | "PO-Revision-Date: 2017-10-18 16:45+0000\n"
16 | "Last-Translator: Jorge Paniagua , 2019\n"
17 | "Language-Team: Spanish (Latin America) (https://www.transifex.com/infotelGLPI/teams/79675/es_419/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: es_419\n"
22 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
23 |
24 | #: setup.php:89 inc/dashboard.class.php:58 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Lista de tareas"
29 |
30 | #: ajax/addOptions.php:31
31 | msgid "Not archived"
32 | msgstr ""
33 |
34 | #: ajax/addOptions.php:32 inc/task.class.php:181 inc/task.class.php:599
35 | msgid "Archived"
36 | msgstr "Archivado"
37 |
38 | #: inc/dashboard.class.php:93 inc/task.class.php:80 inc/task.class.php:418
39 | #: inc/taskstate.class.php:100 inc/taskstate.class.php:152
40 | #: inc/tasktype.class.php:48
41 | msgid "Context"
42 | msgid_plural "Contexts"
43 | msgstr[0] "Contexto"
44 | msgstr[1] "Contexto"
45 |
46 | #: inc/dashboard.class.php:93 inc/notificationtargettask.class.php:203
47 | #: inc/notificationtargettask.class.php:247 inc/task.class.php:118
48 | #: inc/task.class.php:496 inc/tasktype.class.php:256
49 | msgid "Due date"
50 | msgstr "Fecha de vencimiento"
51 |
52 | #: inc/dashboard.class.php:164 inc/dashboard.class.php:172
53 | #: inc/kanban.class.php:257 inc/ticket.class.php:154
54 | msgid "Add task"
55 | msgstr "Agregar tarea"
56 |
57 | #: inc/kanban.class.php:61
58 | msgid "Kanban"
59 | msgstr "Kanban"
60 |
61 | #: inc/kanban.class.php:121
62 | msgid "You don't have the right to see any context"
63 | msgstr "Usted no tiene privilegios para ver ningún contexto"
64 |
65 | #: inc/kanban.class.php:188
66 | msgid "There is no accessible context"
67 | msgstr ""
68 |
69 | #: inc/kanban.class.php:247
70 | msgid "Toggle collapse"
71 | msgstr ""
72 |
73 | #: inc/kanban.class.php:248
74 | msgid "Search"
75 | msgstr ""
76 |
77 | #: inc/kanban.class.php:249
78 | msgid "Search or filter results"
79 | msgstr ""
80 |
81 | #: inc/kanban.class.php:250
82 | msgid "Add status"
83 | msgstr ""
84 |
85 | #: inc/kanban.class.php:251
86 | msgid "Create status"
87 | msgstr ""
88 |
89 | #: inc/kanban.class.php:253
90 | msgid "Add a column from existing status"
91 | msgstr ""
92 |
93 | #: inc/kanban.class.php:254
94 | msgid "Or add a new status"
95 | msgstr ""
96 |
97 | #: inc/kanban.class.php:259
98 | msgid "Archive all tasks of this state"
99 | msgstr "Archivar todas las tareas de este estado"
100 |
101 | #: inc/kanban.class.php:260
102 | msgid "See archived tasks"
103 | msgstr "Ver tareas archivadas"
104 |
105 | #: inc/kanban.class.php:261
106 | msgid "Hide archived tasks"
107 | msgstr "Ocultar tareas archivadas"
108 |
109 | #: inc/kanban.class.php:262
110 | msgid "Clone task"
111 | msgstr "Duplicar tarea"
112 |
113 | #: inc/kanban.class.php:263
114 | msgid "See tasks in progress"
115 | msgstr "Ver tareas en progreso"
116 |
117 | #: inc/kanban.class.php:264
118 | msgid "See tasks of"
119 | msgstr "Ver tareas de "
120 |
121 | #: inc/kanban.class.php:265
122 | msgid "See all tasks"
123 | msgstr "Ver todas las tareas"
124 |
125 | #: inc/kanban.class.php:266
126 | msgid "Are you sure you want to archive this task ?"
127 | msgstr "¿Esta seguro que quiere archivar esta tarea?"
128 |
129 | #: inc/kanban.class.php:267
130 | msgid "Are you sure you want to archive all tasks ?"
131 | msgstr "¿Esta seguro que quiere archivar todas las tareas?"
132 |
133 | #: inc/kanban.class.php:268
134 | msgid "Archive this task"
135 | msgstr "Archiva esta tarea"
136 |
137 | #: inc/kanban.class.php:269
138 | msgid "Update priority of task"
139 | msgstr "Actualizar prioridad de tarea"
140 |
141 | #: inc/kanban.class.php:270
142 | msgid "Details of task"
143 | msgstr "Detalles de tarea"
144 |
145 | #: inc/notificationtargettask.class.php:50
146 | msgid "A task has been added"
147 | msgstr "Una tarea ha sido agregada"
148 |
149 | #: inc/notificationtargettask.class.php:51
150 | msgid "A task has been updated"
151 | msgstr "Una tarea ha sido actualizada"
152 |
153 | #: inc/notificationtargettask.class.php:52
154 | msgid "A task has been removed"
155 | msgstr "Una tarea ha sido eliminada"
156 |
157 | #: inc/notificationtargettask.class.php:207
158 | #: inc/notificationtargettask.class.php:251 inc/task.class.php:189
159 | #: inc/task.class.php:486
160 | msgid "Other client"
161 | msgstr "Otro cliente"
162 |
163 | #: inc/notificationtargettask.class.php:259
164 | msgid "At creation, update, removal of a task"
165 | msgstr "En la creación, actualización, eliminación de una tarea"
166 |
167 | #: inc/preference.class.php:80
168 | msgid "Context by default"
169 | msgstr "Contexto predefinido"
170 |
171 | #: inc/preference.class.php:88
172 | msgid "Automatic refreshing of tasklist"
173 | msgstr ""
174 |
175 | #: inc/preference.class.php:94
176 | msgid "Refresh every "
177 | msgstr ""
178 |
179 | #: inc/preference.class.php:98
180 | msgid "minute(s)"
181 | msgstr ""
182 |
183 | #: inc/profile.class.php:153 inc/profile.class.php:196
184 | msgid "See and update all tasks"
185 | msgstr "Ver y actualizar todas las tareas"
186 |
187 | #: inc/profile.class.php:162 inc/profile.class.php:199
188 | msgid "Configure contexts and statuses"
189 | msgstr ""
190 |
191 | #: inc/stateorder.class.php:96
192 | msgid "States ordering"
193 | msgstr "Ordenación de estados"
194 |
195 | #: inc/stateorder.class.php:156
196 | msgid "Add states from linked Kanban"
197 | msgstr ""
198 |
199 | #: inc/task.class.php:333
200 | msgid "You cannot archive a task with this state"
201 | msgstr "Usted no puede archivar una tarea en este estado"
202 |
203 | #: inc/task.class.php:457
204 | msgid "Existing client"
205 | msgstr "Cliente existente"
206 |
207 | #: inc/task.class.php:622 inc/task.class.php:709 inc/task.class.php:985
208 | #: inc/tasktype.class.php:161
209 | msgid "Backlog"
210 | msgstr "Backlog"
211 |
212 | #: inc/task.class.php:1045
213 | msgctxt "visibility"
214 | msgid "This user"
215 | msgstr "Este usuario"
216 |
217 | #: inc/task.class.php:1048
218 | msgctxt "visibility"
219 | msgid "This user and this group"
220 | msgstr "Este usuario y su grupo"
221 |
222 | #: inc/task.class.php:1051
223 | msgctxt "visibility"
224 | msgid "All"
225 | msgstr "Todo"
226 |
227 | #: inc/task.class.php:1093
228 | msgid "Affect entity for create task"
229 | msgstr "Entidad afectada por tarea creada"
230 |
231 | #: inc/ticket.class.php:74 inc/ticket.class.php:183
232 | msgid "Linked task"
233 | msgid_plural "Linked tasks"
234 | msgstr[0] "T"
235 | msgstr[1] "Tareas vinculadas"
236 |
237 | #: inc/ticket.class.php:227
238 | msgid "No task linked to this ticket yet"
239 | msgstr "Aún no hay ninguna tarea vinculada a este ticket"
240 |
241 | #: inc/ticket.class.php:258
242 | msgid "Link a existant ticket"
243 | msgstr "Vincula un ticket existente"
244 |
245 | #: inc/ticket.class.php:284
246 | msgid "Linked tickets"
247 | msgstr "Tickets vinculados"
248 |
249 | #: inc/typevisibility.class.php:138
250 | msgid "Add a group"
251 | msgstr "Agregar un grupo"
252 |
253 | #: inc/typevisibility.class.php:179
254 | msgid "Groups allowed to use context"
255 | msgstr "Grupos permitidos para usar el contexto"
256 |
--------------------------------------------------------------------------------
/locales/cs_CZ.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Pavel Borecki , 2018
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin 1.4.0\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2020-07-20 15:07+0200\n"
15 | "PO-Revision-Date: 2017-10-18 16:45+0000\n"
16 | "Last-Translator: Pavel Borecki , 2018\n"
17 | "Language-Team: Czech (Czech Republic) (https://www.transifex.com/infotelGLPI/teams/79675/cs_CZ/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: cs_CZ\n"
22 | "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
23 |
24 | #: setup.php:89 inc/dashboard.class.php:58 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Seznam úkolů"
29 |
30 | #: ajax/addOptions.php:31
31 | msgid "Not archived"
32 | msgstr ""
33 |
34 | #: ajax/addOptions.php:32 inc/task.class.php:181 inc/task.class.php:599
35 | msgid "Archived"
36 | msgstr "Archivováno"
37 |
38 | #: inc/dashboard.class.php:93 inc/task.class.php:80 inc/task.class.php:418
39 | #: inc/taskstate.class.php:100 inc/taskstate.class.php:152
40 | #: inc/tasktype.class.php:48
41 | msgid "Context"
42 | msgid_plural "Contexts"
43 | msgstr[0] "Kontext"
44 | msgstr[1] "Kontexty"
45 | msgstr[2] "Kontextů"
46 | msgstr[3] "Kontexty"
47 |
48 | #: inc/dashboard.class.php:93 inc/notificationtargettask.class.php:203
49 | #: inc/notificationtargettask.class.php:247 inc/task.class.php:118
50 | #: inc/task.class.php:496 inc/tasktype.class.php:256
51 | msgid "Due date"
52 | msgstr "Termín"
53 |
54 | #: inc/dashboard.class.php:164 inc/dashboard.class.php:172
55 | #: inc/kanban.class.php:257 inc/ticket.class.php:154
56 | msgid "Add task"
57 | msgstr "Přidat úkol"
58 |
59 | #: inc/kanban.class.php:61
60 | msgid "Kanban"
61 | msgstr "Kanban"
62 |
63 | #: inc/kanban.class.php:121
64 | msgid "You don't have the right to see any context"
65 | msgstr "Nemáte oprávnění pro zobrazení žádného kontextu"
66 |
67 | #: inc/kanban.class.php:188
68 | msgid "There is no accessible context"
69 | msgstr ""
70 |
71 | #: inc/kanban.class.php:247
72 | msgid "Toggle collapse"
73 | msgstr ""
74 |
75 | #: inc/kanban.class.php:248
76 | msgid "Search"
77 | msgstr ""
78 |
79 | #: inc/kanban.class.php:249
80 | msgid "Search or filter results"
81 | msgstr ""
82 |
83 | #: inc/kanban.class.php:250
84 | msgid "Add status"
85 | msgstr ""
86 |
87 | #: inc/kanban.class.php:251
88 | msgid "Create status"
89 | msgstr ""
90 |
91 | #: inc/kanban.class.php:253
92 | msgid "Add a column from existing status"
93 | msgstr ""
94 |
95 | #: inc/kanban.class.php:254
96 | msgid "Or add a new status"
97 | msgstr ""
98 |
99 | #: inc/kanban.class.php:259
100 | msgid "Archive all tasks of this state"
101 | msgstr "Archivovat všechny úkoly, které mají tento stav"
102 |
103 | #: inc/kanban.class.php:260
104 | msgid "See archived tasks"
105 | msgstr "Zobrazit archivované úkoly"
106 |
107 | #: inc/kanban.class.php:261
108 | msgid "Hide archived tasks"
109 | msgstr "Skrýt archivované úkoly"
110 |
111 | #: inc/kanban.class.php:262
112 | msgid "Clone task"
113 | msgstr "Klonovat úkol"
114 |
115 | #: inc/kanban.class.php:263
116 | msgid "See tasks in progress"
117 | msgstr "Zobrazit všechny rozpracované úkoly"
118 |
119 | #: inc/kanban.class.php:264
120 | msgid "See tasks of"
121 | msgstr "Zobrazit úkoly"
122 |
123 | #: inc/kanban.class.php:265
124 | msgid "See all tasks"
125 | msgstr "Zobrazit všechny úkoly"
126 |
127 | #: inc/kanban.class.php:266
128 | msgid "Are you sure you want to archive this task ?"
129 | msgstr "Opravdu chcete tento úkol zaarchivovat?"
130 |
131 | #: inc/kanban.class.php:267
132 | msgid "Are you sure you want to archive all tasks ?"
133 | msgstr "Opravdu chcete zaarchivovat všechny úkoly?"
134 |
135 | #: inc/kanban.class.php:268
136 | msgid "Archive this task"
137 | msgstr "Zaarchivovat tento úkol"
138 |
139 | #: inc/kanban.class.php:269
140 | msgid "Update priority of task"
141 | msgstr "Změnit prioritu úkolu"
142 |
143 | #: inc/kanban.class.php:270
144 | msgid "Details of task"
145 | msgstr "Podrobnosti úkolu"
146 |
147 | #: inc/notificationtargettask.class.php:50
148 | msgid "A task has been added"
149 | msgstr "Byl přidán úkol"
150 |
151 | #: inc/notificationtargettask.class.php:51
152 | msgid "A task has been updated"
153 | msgstr "Byl aktualizován úkol"
154 |
155 | #: inc/notificationtargettask.class.php:52
156 | msgid "A task has been removed"
157 | msgstr "Byl odebrán úkol"
158 |
159 | #: inc/notificationtargettask.class.php:207
160 | #: inc/notificationtargettask.class.php:251 inc/task.class.php:189
161 | #: inc/task.class.php:486
162 | msgid "Other client"
163 | msgstr "Jiný klint"
164 |
165 | #: inc/notificationtargettask.class.php:259
166 | msgid "At creation, update, removal of a task"
167 | msgstr "Při vytvoření, aktualizaci a odebrání úkolu"
168 |
169 | #: inc/preference.class.php:80
170 | msgid "Context by default"
171 | msgstr "Kontext ve výchozím stavu"
172 |
173 | #: inc/preference.class.php:88
174 | msgid "Automatic refreshing of tasklist"
175 | msgstr ""
176 |
177 | #: inc/preference.class.php:94
178 | msgid "Refresh every "
179 | msgstr ""
180 |
181 | #: inc/preference.class.php:98
182 | msgid "minute(s)"
183 | msgstr ""
184 |
185 | #: inc/profile.class.php:153 inc/profile.class.php:196
186 | msgid "See and update all tasks"
187 | msgstr "Zobrazit a aktualizovat všechny úkoly"
188 |
189 | #: inc/profile.class.php:162 inc/profile.class.php:199
190 | msgid "Configure contexts and statuses"
191 | msgstr ""
192 |
193 | #: inc/stateorder.class.php:96
194 | msgid "States ordering"
195 | msgstr "Řazení vztahů"
196 |
197 | #: inc/stateorder.class.php:156
198 | msgid "Add states from linked Kanban"
199 | msgstr ""
200 |
201 | #: inc/task.class.php:333
202 | msgid "You cannot archive a task with this state"
203 | msgstr "Není možné archivovat úkol, který je v tomto stavu"
204 |
205 | #: inc/task.class.php:457
206 | msgid "Existing client"
207 | msgstr "Existující klient"
208 |
209 | #: inc/task.class.php:622 inc/task.class.php:709 inc/task.class.php:985
210 | #: inc/tasktype.class.php:161
211 | msgid "Backlog"
212 | msgstr "Nashromážděno"
213 |
214 | #: inc/task.class.php:1045
215 | msgctxt "visibility"
216 | msgid "This user"
217 | msgstr "Tento uživatel"
218 |
219 | #: inc/task.class.php:1048
220 | msgctxt "visibility"
221 | msgid "This user and this group"
222 | msgstr "Tento uživatel a skupina"
223 |
224 | #: inc/task.class.php:1051
225 | msgctxt "visibility"
226 | msgid "All"
227 | msgstr "Všichni"
228 |
229 | #: inc/task.class.php:1093
230 | msgid "Affect entity for create task"
231 | msgstr "Přiřadit entitu pro vytvoření úkolu"
232 |
233 | #: inc/ticket.class.php:74 inc/ticket.class.php:183
234 | msgid "Linked task"
235 | msgid_plural "Linked tasks"
236 | msgstr[0] "Propojený úkol"
237 | msgstr[1] "Propojené úkoly"
238 | msgstr[2] "Propojených úkolů"
239 | msgstr[3] "Propojené úkoly"
240 |
241 | #: inc/ticket.class.php:227
242 | msgid "No task linked to this ticket yet"
243 | msgstr "K tomuto požadavku zatím nejsou připojené žádné úkoly"
244 |
245 | #: inc/ticket.class.php:258
246 | msgid "Link a existant ticket"
247 | msgstr "Propojit s existujícím požadavkem"
248 |
249 | #: inc/ticket.class.php:284
250 | msgid "Linked tickets"
251 | msgstr "Připojené požadavky"
252 |
253 | #: inc/typevisibility.class.php:138
254 | msgid "Add a group"
255 | msgstr "Přidat skupinu"
256 |
257 | #: inc/typevisibility.class.php:179
258 | msgid "Groups allowed to use context"
259 | msgstr "Skupiny kterým je umožněno používat kontext"
260 |
--------------------------------------------------------------------------------
/locales/ru_RU.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Tasklists Development Team
3 | # This file is distributed under the same license as the GLPI - Tasklists plugin package.
4 | # FIRST AUTHOR , YEAR.
5 | #
6 | # Translators:
7 | # Denis Arkhipov , 2019
8 | #
9 | #, fuzzy
10 | msgid ""
11 | msgstr ""
12 | "Project-Id-Version: GLPI - Tasklists plugin 1.4.0\n"
13 | "Report-Msgid-Bugs-To: \n"
14 | "POT-Creation-Date: 2020-07-20 15:07+0200\n"
15 | "PO-Revision-Date: 2017-10-18 16:45+0000\n"
16 | "Last-Translator: Denis Arkhipov , 2019\n"
17 | "Language-Team: Russian (Russia) (https://www.transifex.com/infotelGLPI/teams/79675/ru_RU/)\n"
18 | "MIME-Version: 1.0\n"
19 | "Content-Type: text/plain; charset=UTF-8\n"
20 | "Content-Transfer-Encoding: 8bit\n"
21 | "Language: ru_RU\n"
22 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
23 |
24 | #: setup.php:89 inc/dashboard.class.php:58 inc/dashboard.class.php:178
25 | #: inc/dashboard.class.php:183 inc/menu.class.php:44
26 | #: inc/preference.class.php:46 inc/profile.class.php:52
27 | msgid "Tasks list"
28 | msgstr "Список задач"
29 |
30 | #: ajax/addOptions.php:31
31 | msgid "Not archived"
32 | msgstr ""
33 |
34 | #: ajax/addOptions.php:32 inc/task.class.php:181 inc/task.class.php:599
35 | msgid "Archived"
36 | msgstr "Заархивирован"
37 |
38 | #: inc/dashboard.class.php:93 inc/task.class.php:80 inc/task.class.php:418
39 | #: inc/taskstate.class.php:100 inc/taskstate.class.php:152
40 | #: inc/tasktype.class.php:48
41 | msgid "Context"
42 | msgid_plural "Contexts"
43 | msgstr[0] "Контекст"
44 | msgstr[1] "Контексты"
45 | msgstr[2] "Контексты"
46 | msgstr[3] "Контексты"
47 |
48 | #: inc/dashboard.class.php:93 inc/notificationtargettask.class.php:203
49 | #: inc/notificationtargettask.class.php:247 inc/task.class.php:118
50 | #: inc/task.class.php:496 inc/tasktype.class.php:256
51 | msgid "Due date"
52 | msgstr "Срок исполнения"
53 |
54 | #: inc/dashboard.class.php:164 inc/dashboard.class.php:172
55 | #: inc/kanban.class.php:257 inc/ticket.class.php:154
56 | msgid "Add task"
57 | msgstr "Добавить задачу"
58 |
59 | #: inc/kanban.class.php:61
60 | msgid "Kanban"
61 | msgstr "Канбан"
62 |
63 | #: inc/kanban.class.php:121
64 | msgid "You don't have the right to see any context"
65 | msgstr "У вас нет прав на просмотр контекста"
66 |
67 | #: inc/kanban.class.php:188
68 | msgid "There is no accessible context"
69 | msgstr ""
70 |
71 | #: inc/kanban.class.php:247
72 | msgid "Toggle collapse"
73 | msgstr ""
74 |
75 | #: inc/kanban.class.php:248
76 | msgid "Search"
77 | msgstr ""
78 |
79 | #: inc/kanban.class.php:249
80 | msgid "Search or filter results"
81 | msgstr ""
82 |
83 | #: inc/kanban.class.php:250
84 | msgid "Add status"
85 | msgstr ""
86 |
87 | #: inc/kanban.class.php:251
88 | msgid "Create status"
89 | msgstr ""
90 |
91 | #: inc/kanban.class.php:253
92 | msgid "Add a column from existing status"
93 | msgstr ""
94 |
95 | #: inc/kanban.class.php:254
96 | msgid "Or add a new status"
97 | msgstr ""
98 |
99 | #: inc/kanban.class.php:259
100 | msgid "Archive all tasks of this state"
101 | msgstr "Заархивировать задачи с таким статусом"
102 |
103 | #: inc/kanban.class.php:260
104 | msgid "See archived tasks"
105 | msgstr "Показать архивные задачи"
106 |
107 | #: inc/kanban.class.php:261
108 | msgid "Hide archived tasks"
109 | msgstr "Скрыть архивные задачи"
110 |
111 | #: inc/kanban.class.php:262
112 | msgid "Clone task"
113 | msgstr "Копировать задачу"
114 |
115 | #: inc/kanban.class.php:263
116 | msgid "See tasks in progress"
117 | msgstr "Посмотреть задачи в работе"
118 |
119 | #: inc/kanban.class.php:264
120 | msgid "See tasks of"
121 | msgstr "Посмотреть задачу"
122 |
123 | #: inc/kanban.class.php:265
124 | msgid "See all tasks"
125 | msgstr "Посмотреть все задачи"
126 |
127 | #: inc/kanban.class.php:266
128 | msgid "Are you sure you want to archive this task ?"
129 | msgstr "Вы уверены, что хотите заархивировать эту задачу?"
130 |
131 | #: inc/kanban.class.php:267
132 | msgid "Are you sure you want to archive all tasks ?"
133 | msgstr "Вы уверены, что хотите заархивировать все задачи?"
134 |
135 | #: inc/kanban.class.php:268
136 | msgid "Archive this task"
137 | msgstr "Архивировать эту задачу"
138 |
139 | #: inc/kanban.class.php:269
140 | msgid "Update priority of task"
141 | msgstr "Обновить приоритет задачи"
142 |
143 | #: inc/kanban.class.php:270
144 | msgid "Details of task"
145 | msgstr "Детали задачи"
146 |
147 | #: inc/notificationtargettask.class.php:50
148 | msgid "A task has been added"
149 | msgstr "Задача была добавлена"
150 |
151 | #: inc/notificationtargettask.class.php:51
152 | msgid "A task has been updated"
153 | msgstr "Задача была обновлена"
154 |
155 | #: inc/notificationtargettask.class.php:52
156 | msgid "A task has been removed"
157 | msgstr "Задача была удалена"
158 |
159 | #: inc/notificationtargettask.class.php:207
160 | #: inc/notificationtargettask.class.php:251 inc/task.class.php:189
161 | #: inc/task.class.php:486
162 | msgid "Other client"
163 | msgstr "Другой клиент"
164 |
165 | #: inc/notificationtargettask.class.php:259
166 | msgid "At creation, update, removal of a task"
167 | msgstr "При создании, изменении, удалении задачи"
168 |
169 | #: inc/preference.class.php:80
170 | msgid "Context by default"
171 | msgstr "Контекст по умолчанию"
172 |
173 | #: inc/preference.class.php:88
174 | msgid "Automatic refreshing of tasklist"
175 | msgstr ""
176 |
177 | #: inc/preference.class.php:94
178 | msgid "Refresh every "
179 | msgstr ""
180 |
181 | #: inc/preference.class.php:98
182 | msgid "minute(s)"
183 | msgstr ""
184 |
185 | #: inc/profile.class.php:153 inc/profile.class.php:196
186 | msgid "See and update all tasks"
187 | msgstr "Посмотреть и обновить все задачи"
188 |
189 | #: inc/profile.class.php:162 inc/profile.class.php:199
190 | msgid "Configure contexts and statuses"
191 | msgstr ""
192 |
193 | #: inc/stateorder.class.php:96
194 | msgid "States ordering"
195 | msgstr "Упорядочение статусов"
196 |
197 | #: inc/stateorder.class.php:156
198 | msgid "Add states from linked Kanban"
199 | msgstr ""
200 |
201 | #: inc/task.class.php:333
202 | msgid "You cannot archive a task with this state"
203 | msgstr "Вы не можете заархивировать задачу с таким статусом"
204 |
205 | #: inc/task.class.php:457
206 | msgid "Existing client"
207 | msgstr "Существующий клиент"
208 |
209 | #: inc/task.class.php:622 inc/task.class.php:709 inc/task.class.php:985
210 | #: inc/tasktype.class.php:161
211 | msgid "Backlog"
212 | msgstr "Бэклог"
213 |
214 | #: inc/task.class.php:1045
215 | msgctxt "visibility"
216 | msgid "This user"
217 | msgstr "Этот пользователь"
218 |
219 | #: inc/task.class.php:1048
220 | msgctxt "visibility"
221 | msgid "This user and this group"
222 | msgstr "Этот пользователь и эта группа"
223 |
224 | #: inc/task.class.php:1051
225 | msgctxt "visibility"
226 | msgid "All"
227 | msgstr "Все"
228 |
229 | #: inc/task.class.php:1093
230 | msgid "Affect entity for create task"
231 | msgstr "Влияние организации на создание задачи"
232 |
233 | #: inc/ticket.class.php:74 inc/ticket.class.php:183
234 | msgid "Linked task"
235 | msgid_plural "Linked tasks"
236 | msgstr[0] "Связанная задача"
237 | msgstr[1] "Связанные задачи"
238 | msgstr[2] "Связанные задачи"
239 | msgstr[3] "Связанные задачи"
240 |
241 | #: inc/ticket.class.php:227
242 | msgid "No task linked to this ticket yet"
243 | msgstr "Нет связанных с заявкой задач"
244 |
245 | #: inc/ticket.class.php:258
246 | msgid "Link a existant ticket"
247 | msgstr "Связать с существующей заявкой"
248 |
249 | #: inc/ticket.class.php:284
250 | msgid "Linked tickets"
251 | msgstr "Связанные заявки"
252 |
253 | #: inc/typevisibility.class.php:138
254 | msgid "Add a group"
255 | msgstr "Добавить группу"
256 |
257 | #: inc/typevisibility.class.php:179
258 | msgid "Groups allowed to use context"
259 | msgstr "Группы с разрешением использовать контекст"
260 |
--------------------------------------------------------------------------------
/public/lib/kanban/js/SearchTokenizer/SearchTokenizer.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ---------------------------------------------------------------------
3 | *
4 | * GLPI - Gestionnaire Libre de Parc Informatique
5 | *
6 | * http://glpi-project.org
7 | *
8 | * @copyright 2015-2024 Teclib' and contributors.
9 | * @copyright 2003-2014 by the INDEPNET Development Team.
10 | * @licence https://www.gnu.org/licenses/gpl-3.0.html
11 | *
12 | * ---------------------------------------------------------------------
13 | *
14 | * LICENSE
15 | *
16 | * This file is part of GLPI.
17 | *
18 | * This program is free software: you can redistribute it and/or modify
19 | * it under the terms of the GNU General Public License as published by
20 | * the Free Software Foundation, either version 3 of the License, or
21 | * (at your option) any later version.
22 | *
23 | * This program is distributed in the hope that it will be useful,
24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 | * GNU General Public License for more details.
27 | *
28 | * You should have received a copy of the GNU General Public License
29 | * along with this program. If not, see .
30 | *
31 | * ---------------------------------------------------------------------
32 | */
33 |
34 | // import SearchToken from "./SearchToken.js";
35 | // import SearchTokenizerResult from "./SearchTokenizerResult.js";
36 |
37 | /**
38 | * Inspired by/rebuilt from https://github.com/tatsuya/search-text-tokenizer
39 | */
40 | class SearchTokenizer {
41 |
42 | /**
43 | * @typedef TagDefinition
44 | * @property {string} description
45 | * @property {string[]|function} autocomplete_values
46 | * @property {string[]} supported_prefixes
47 | */
48 |
49 | /**
50 | * @typedef TokenizerOptions
51 | * @property {Object.} custom_prefixes Object of custom prefixes as keys and properties. These characters can be located at the start of a token's tag and will be stripped from the token's tag.
52 | * The stripped prefix is then stored in the token's `prefix` property. The properties for the custom prefixes can be unique for the implementation of the tokenizer.
53 | * The only built-in properties are `token_color` which can be used by {@link SearchInput} to change the color of the token, and `label` which can be used by {@link SearchInput} for buttons within suggestions.
54 | */
55 |
56 | /**
57 | *
58 | * @param {Object.} allowed_tags Tags the tokenizer should recognize
59 | * The object keys are the tag names. Each tag can have multiple properties to store
60 | * additional information such as descriptions.
61 | * @param {boolean} drop_unallowed_tags If true, unallowed tags are ignored. If false, the token is treated as a plain term.
62 | * @param {TokenizerOptions} options Additional tokenizer options
63 | */
64 | constructor(allowed_tags = {}, drop_unallowed_tags = false, options = {}) {
65 | this.token_pattern = /([^\s"']?\w+:)?("[^"]*"|'[^']*'|[^\s]+)/g;
66 | this.EXCLUSION_PREFIX = '!';
67 | this.allowed_tags = allowed_tags;
68 | this.drop_unallowed_tags = drop_unallowed_tags;
69 |
70 | this.options = Object.assign({
71 | custom_prefixes: {},
72 | }, options);
73 |
74 | // Ignore custom prefixes used by core
75 | delete this.options.custom_prefixes[this.EXCLUSION_PREFIX];
76 | delete this.options.custom_prefixes['\''];
77 | delete this.options.custom_prefixes['"'];
78 | }
79 |
80 | /**
81 | * Check if a given tag is allowed by the tokenizer
82 | * @param {string|null} tag
83 | * @return {boolean}
84 | */
85 | isAllowedTag(tag) {
86 | if (tag === null || tag === undefined) {
87 | return true;
88 | }
89 | const result = Object.keys(this.allowed_tags).length === 0 || (tag in this.allowed_tags);
90 | return result;
91 | }
92 |
93 | clearAutocomplete() {
94 | Object.keys(this.allowed_tags).forEach((k) => {
95 | this.allowed_tags[k].autocomplete_values = [];
96 | });
97 | }
98 |
99 | setAutocomplete(tag, values) {
100 | if (tag in this.allowed_tags) {
101 | this.allowed_tags[tag].autocomplete_values = values;
102 | }
103 | }
104 |
105 | /**
106 | * Get autocomplete values for a given tag
107 | * @param tag
108 | * @return {string[]}
109 | */
110 | getAutocomplete(tag) {
111 | let result = [];
112 | if (tag in this.allowed_tags) {
113 | if (typeof this.allowed_tags[tag].autocomplete_values === 'function') {
114 | result = this.allowed_tags[tag].autocomplete_values();
115 | } else {
116 | result = this.allowed_tags[tag].autocomplete_values;
117 | }
118 | }
119 | return result || [];
120 | }
121 |
122 | /**
123 | *
124 | * @param {string} input
125 | * @returns {SearchTokenizerResult}
126 | */
127 | tokenize(input) {
128 | input = input || '';
129 | input = input.trim();
130 |
131 | const result = new SearchTokenizerResult();
132 |
133 | let token = null;
134 | let pos = 0;
135 |
136 | while ((token = this.token_pattern.exec(input)) !== null) {
137 | let is_exclusion = false;
138 | let tag = token[1] || null;
139 | let term = token[2].trim();
140 |
141 | // Tag without the separator
142 | if (tag) {
143 | tag = tag.slice(0, -1);
144 | }
145 |
146 | if (tag === null && term.endsWith(':')) {
147 | tag = term.slice(0, -1);
148 | term = '';
149 | }
150 |
151 | let token_prefix = null;
152 | // Handle custom prefixes
153 | if (tag && tag.length > 1) {
154 | const custom_prefix = tag.slice(0, 1);
155 | const allowed_prefixes = Object.keys(this.options.custom_prefixes);
156 | if (custom_prefix === this.EXCLUSION_PREFIX) {
157 | is_exclusion = true;
158 | tag = tag.slice(1);
159 | } else {
160 | if (allowed_prefixes.includes(custom_prefix)) {
161 | const new_tag = tag.slice(1);
162 | if (this.allowed_tags[new_tag] && this.allowed_tags[new_tag].supported_prefixes.includes(custom_prefix)) {
163 | token_prefix = custom_prefix;
164 | tag = new_tag;
165 | }
166 | }
167 | }
168 | }
169 |
170 | // Remove exclusion if the tag doesn't support that prefix
171 | if (!this.allowed_tags[tag] || !(this.allowed_tags[tag].supported_prefixes || []).includes(this.EXCLUSION_PREFIX)) {
172 | is_exclusion = false;
173 | }
174 |
175 | term = term || '';
176 | if (term.length > 0) {
177 | if (/^".+"$/.test(term)) {
178 | term = term.trim().replace(/^"/, '').replace(/"$/, '').trim();
179 | }
180 | if (/^'.+'$/.test(term)) {
181 | term = term.trim().replace(/^'/, '').replace(/'$/, '').trim();
182 | }
183 | }
184 |
185 | if (this.isAllowedTag(tag)) {
186 | result.tokens.push(new SearchToken(term, tag, is_exclusion, pos++, token[0], token_prefix));
187 | } else if (!this.drop_unallowed_tags) {
188 | result.tokens.push(new SearchToken(token[0], null, false, pos++, token[0]));
189 | }
190 | }
191 |
192 | return result;
193 | }
194 | }
195 | window.SearchTokenizer = SearchTokenizer;
196 |
--------------------------------------------------------------------------------
/sql/empty-1.4.0.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasks`;
2 | CREATE TABLE `glpi_plugin_tasklists_tasks`
3 | (
4 | `id` int(11) NOT NULL auto_increment,
5 | `entities_id` int(11) NOT NULL default '0',
6 | `is_recursive` tinyint(1) NOT NULL default '0',
7 | `name` varchar(255) collate utf8_unicode_ci default NULL,
8 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_plugin_tasklists_tasktypes (id)',
9 | `plugin_tasklists_taskstates_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_plugin_tasklists_taskstates (id)',
10 | `priority` int(11) NOT NULL DEFAULT '1',
11 | `visibility` int(11) NOT NULL DEFAULT '1',
12 | `actiontime` int(11) NOT NULL DEFAULT '0',
13 | `percent_done` int(11) NOT NULL DEFAULT '0',
14 | `state` int(11) NOT NULL DEFAULT '1',
15 | `due_date` date default NULL,
16 | `users_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_users (id)',
17 | `groups_id` int(11) NOT NULL default '0' COMMENT 'RELATION to glpi_groups (id)',
18 | `client` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
19 | `comment` text collate utf8_unicode_ci,
20 | `notepad` longtext collate utf8_unicode_ci,
21 | `date_mod` datetime default NULL,
22 | `date_creation` datetime default NULL,
23 | `is_template` smallint(6) NOT NULL default '0',
24 | `template_name` varchar(200) collate utf8_unicode_ci NOT NULL default '',
25 | `is_deleted` tinyint(1) NOT NULL default '0',
26 | `is_archived` tinyint(1) NOT NULL default '0',
27 | PRIMARY KEY (`id`),
28 | KEY `name` (`name`),
29 | KEY `entities_id` (`entities_id`),
30 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
31 | KEY `is_template` (`is_template`),
32 | KEY `users_id` (`users_id`),
33 | KEY `groups_id` (`groups_id`),
34 | KEY `date_mod` (`date_mod`),
35 | KEY `is_deleted` (`is_deleted`),
36 | KEY `is_archived` (`is_archived`)
37 | ) ENGINE = InnoDB
38 | DEFAULT CHARSET = utf8
39 | COLLATE = utf8_unicode_ci;
40 |
41 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasktypes`;
42 | CREATE TABLE `glpi_plugin_tasklists_tasktypes`
43 | (
44 | `id` int(11) NOT NULL AUTO_INCREMENT,
45 | `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
46 | `entities_id` int(11) NOT NULL DEFAULT '0',
47 | `is_recursive` tinyint(1) NOT NULL DEFAULT '0',
48 | `comment` text COLLATE utf8_unicode_ci,
49 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL DEFAULT '0',
50 | `completename` text COLLATE utf8_unicode_ci,
51 | `level` int(11) NOT NULL DEFAULT '0',
52 | `ancestors_cache` longtext COLLATE utf8_unicode_ci,
53 | `sons_cache` longtext COLLATE utf8_unicode_ci,
54 | PRIMARY KEY (`id`),
55 | KEY `name` (`name`),
56 | KEY `entities_id` (`entities_id`),
57 | KEY `unicity` (`plugin_tasklists_tasktypes_id`, `name`)
58 | ) ENGINE = InnoDB
59 | DEFAULT CHARSET = utf8
60 | COLLATE = utf8_unicode_ci;
61 |
62 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_taskstates`;
63 | CREATE TABLE `glpi_plugin_tasklists_taskstates`
64 | (
65 | `id` int(11) NOT NULL AUTO_INCREMENT,
66 | `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
67 | `entities_id` int(11) NOT NULL DEFAULT '0',
68 | `is_recursive` tinyint(1) NOT NULL DEFAULT '0',
69 | `is_finished` tinyint(1) NOT NULL DEFAULT '0',
70 | `tasktypes` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
71 | `color` varchar(200) DEFAULT '#CCC' NOT NULL,
72 | `comment` text COLLATE utf8_unicode_ci,
73 | PRIMARY KEY (`id`),
74 | KEY `name` (`name`),
75 | KEY `entities_id` (`entities_id`)
76 | ) ENGINE = InnoDB
77 | DEFAULT CHARSET = utf8
78 | COLLATE = utf8_unicode_ci;
79 |
80 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_stateorders`;
81 | CREATE TABLE `glpi_plugin_tasklists_stateorders`
82 | (
83 | `id` int(11) NOT NULL auto_increment, -- id
84 | `plugin_tasklists_taskstates_id` int(11) NOT NULL DEFAULT 0,
85 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL DEFAULT 0,
86 | `ranking` int(11) NULL,
87 | PRIMARY KEY (`id`),
88 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
89 | KEY `plugin_tasklists_taskstates_id` (`plugin_tasklists_taskstates_id`)
90 | ) ENGINE = InnoDB
91 | DEFAULT CHARSET = utf8
92 | COLLATE = utf8_unicode_ci;
93 |
94 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_typevisibilities`;
95 | CREATE TABLE `glpi_plugin_tasklists_typevisibilities`
96 | (
97 | `id` int(11) NOT NULL AUTO_INCREMENT,
98 | `groups_id` int(11) NOT NULL default '0',
99 | `plugin_tasklists_tasktypes_id` int(11) NOT NULL default '0',
100 | PRIMARY KEY (`id`),
101 | KEY `plugin_tasklists_tasktypes_id` (`plugin_tasklists_tasktypes_id`),
102 | KEY `groups_id` (`groups_id`)
103 | ) ENGINE = InnoDB
104 | DEFAULT CHARSET = utf8
105 | COLLATE = utf8_unicode_ci;
106 |
107 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_preferences`;
108 | CREATE TABLE `glpi_plugin_tasklists_preferences`
109 | (
110 | `id` int(11) NOT NULL COMMENT 'RELATION to glpi_users(id)',
111 | `default_type` int(11) NOT NULL DEFAULT 0,
112 | PRIMARY KEY (`id`)
113 | ) ENGINE = InnoDB
114 | DEFAULT CHARSET = utf8
115 | COLLATE = utf8_unicode_ci;
116 |
117 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tickets`;
118 | CREATE TABLE `glpi_plugin_tasklists_tickets`
119 | (
120 | `id` int(11) NOT NULL AUTO_INCREMENT,
121 | `tickets_id` int(11) NOT NULL DEFAULT '0',
122 | `plugin_tasklists_tasks_id` int(11) NOT NULL DEFAULT '0',
123 | PRIMARY KEY (`id`),
124 | KEY `plugin_tasklists_tasks_id` (`plugin_tasklists_tasks_id`),
125 | KEY `tickets_id` (`tickets_id`)
126 | ) ENGINE = InnoDB
127 | DEFAULT CHARSET = utf8
128 | COLLATE = utf8_unicode_ci;
129 |
130 | DROP TABLE IF EXISTS `glpi_plugin_tasklists_tasks_comments`;
131 | CREATE TABLE `glpi_plugin_tasklists_tasks_comments`
132 | (
133 | `id` int(11) NOT NULL AUTO_INCREMENT,
134 | `plugin_tasklists_tasks_id` int(11) NOT NULL,
135 | `users_id` int(11) NOT NULL DEFAULT '0',
136 | `language` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
137 | `comment` text COLLATE utf8_unicode_ci NOT NULL,
138 | `parent_comment_id` int(11) DEFAULT NULL,
139 | `date_creation` datetime DEFAULT NULL,
140 | `date_mod` datetime DEFAULT NULL,
141 | PRIMARY KEY (`id`)
142 | ) ENGINE = InnoDB
143 | DEFAULT CHARSET = utf8
144 | COLLATE = utf8_unicode_ci;
--------------------------------------------------------------------------------