From 4448a9bde1884fbb06090b1a74fb6bd6cc16ad0a Mon Sep 17 00:00:00 2001 From: JBthePenguin Date: Wed, 2 Jun 2021 15:17:34 +0200 Subject: [PATCH] Add schema.sql to create database, add php files and templates for index, entries, exits and search. --- README.md | 2 +- materiels.tar.gz | Bin 13262 -> 13784 bytes src/install.php | 5 +++ src/schema.sql | 57 ++++++++++++++++++++++++++ src/templates/_nav.tpl | 10 +++++ src/templates/config.tpl | 20 --------- src/templates/entrees_definitives.tpl | 5 +++ src/templates/entrees_provisoires.tpl | 5 +++ src/templates/index.tpl | 11 +---- src/templates/recherche.tpl | 5 +++ src/templates/sorties_definitives.tpl | 5 +++ src/templates/sorties_provisoires.tpl | 5 +++ src/upgrade.php | 0 src/www/admin/_inc.php | 5 +++ src/www/admin/config.php | 26 ------------ src/www/admin/entrees_definitives.php | 7 ++++ src/www/admin/entrees_provisoires.php | 7 ++++ src/www/admin/index.php | 7 ++++ src/www/admin/recherche.php | 7 ++++ src/www/admin/sorties_definitives.php | 7 ++++ src/www/admin/sorties_provisoires.php | 7 ++++ 21 files changed, 147 insertions(+), 56 deletions(-) create mode 100644 src/schema.sql create mode 100644 src/templates/_nav.tpl delete mode 100644 src/templates/config.tpl create mode 100644 src/templates/entrees_definitives.tpl create mode 100644 src/templates/entrees_provisoires.tpl create mode 100644 src/templates/recherche.tpl create mode 100644 src/templates/sorties_definitives.tpl create mode 100644 src/templates/sorties_provisoires.tpl create mode 100644 src/upgrade.php create mode 100644 src/www/admin/_inc.php delete mode 100644 src/www/admin/config.php create mode 100644 src/www/admin/entrees_definitives.php create mode 100644 src/www/admin/entrees_provisoires.php create mode 100644 src/www/admin/recherche.php create mode 100644 src/www/admin/sorties_definitives.php create mode 100644 src/www/admin/sorties_provisoires.php diff --git a/README.md b/README.md index 628de01..4e11690 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Cette extension permet de gérer les matériels de l'association: stock, entrée ## Installation -- Télécharger le fichier materiels.tar.gz et l'ajouter dans le répertoire garradin/plugins. +- Télécharger le fichier [materiels.tar.gz](https://gitlab.com/JBthePenguin/garradin-plugin-materiels/-/raw/main/materiels.tar.gz) et l'ajouter dans le répertoire garradin/plugins. - Installer le plugin via le menu "Configuration > Extensions" de Garradin. ## Utilisation - Fonctionnalités diff --git a/materiels.tar.gz b/materiels.tar.gz index 88e8ef2c4a86e62b69958a62504b792e50b8aa8f..e251a4afaa1f874c3277a213dc171495a748ba0a 100644 GIT binary patch literal 13784 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 O`usoa&w1@iSORED@^zc#VD=RZ<^FPpfQ& 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 diff --git a/src/install.php b/src/install.php index e69de29..07a618a 100644 --- a/src/install.php +++ b/src/install.php @@ -0,0 +1,5 @@ +import(__DIR__ . '/schema.sql'); diff --git a/src/schema.sql b/src/schema.sql new file mode 100644 index 0000000..78365bb --- /dev/null +++ b/src/schema.sql @@ -0,0 +1,57 @@ +CREATE TABLE IF NOT EXISTS plugin_materiels_category ( + id integer NOT NULL PRIMARY KEY autoincrement, + name varchar(100) NOT NULL, + CONSTRAINT u_category_name UNIQUE ( name ) +); + +CREATE TABLE IF NOT EXISTS plugin_materiels_location ( + id integer NOT NULL PRIMARY KEY autoincrement, + name varchar(100) NOT NULL, + CONSTRAINT u_location_name UNIQUE ( name ) +); + +CREATE TABLE IF NOT EXISTS plugin_materiels_equipment ( + id integer NOT NULL PRIMARY KEY autoincrement, + category_id integer NOT NULL, + designation varchar(255) NOT NULL, + localisation_id integer NOT NULL, + current_value decimal NOT NULL DEFAULT 0, + number_of_materiels integer NOT NULL DEFAULT 1, + CONSTRAINT u_equipment_designation UNIQUE ( designation ), + FOREIGN KEY ( category_id ) REFERENCES plugin_materiels_category( id ) ON DELETE RESTRICT ON UPDATE CASCADE, + FOREIGN KEY ( localisation_id ) REFERENCES plugin_materiels_location( id ) ON DELETE RESTRICT ON UPDATE CASCADE +); + +CREATE TABLE IF NOT EXISTS plugin_materiels_entry ( + id integer NOT NULL PRIMARY KEY autoincrement, + kind varchar(20) NOT NULL, + equipment_id integer NOT NULL, + date_of_entry date NOT NULL, + FOREIGN KEY ( equipment_id ) REFERENCES plugin_materiels_equipment( id ) ON DELETE RESTRICT ON UPDATE CASCADE +); + +CREATE TABLE IF NOT EXISTS plugin_materiels_temporary_entry ( + id integer NOT NULL PRIMARY KEY autoincrement, + kind varchar(20) NOT NULL, + equipment_id integer NOT NULL, + start_date date NOT NULL, + end_date date, + FOREIGN KEY ( equipment_id ) REFERENCES plugin_materiels_equipment( id ) ON DELETE RESTRICT ON UPDATE CASCADE +); + +CREATE TABLE IF NOT EXISTS plugin_materiels_output ( + id integer NOT NULL PRIMARY KEY autoincrement, + kind varchar(20) NOT NULL, + equipment_id integer NOT NULL, + output_date date NOT NULL, + FOREIGN KEY ( equipment_id ) REFERENCES plugin_materiels_entry( equipment_id ) ON DELETE RESTRICT ON UPDATE CASCADE +); + +CREATE TABLE IF NOT EXISTS plugin_materiels_temporary_output ( + id integer NOT NULL PRIMARY KEY autoincrement, + kind varchar(20) NOT NULL, + equipment_id integer NOT NULL, + start_date date NOT NULL, + end_date date, + FOREIGN KEY ( equipment_id ) REFERENCES plugin_materiels_entry( equipment_id ) ON DELETE RESTRICT ON UPDATE CASCADE +); diff --git a/src/templates/_nav.tpl b/src/templates/_nav.tpl new file mode 100644 index 0000000..1b9b263 --- /dev/null +++ b/src/templates/_nav.tpl @@ -0,0 +1,10 @@ + diff --git a/src/templates/config.tpl b/src/templates/config.tpl deleted file mode 100644 index 6c8ac79..0000000 --- a/src/templates/config.tpl +++ /dev/null @@ -1,20 +0,0 @@ -{include file="admin/_head.tpl" title="Configuration — %s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} - -{form_errors} - -
- -
- Configuration -
- {input type="checkbox" name="display_hello" value="1" default=$plugin.config label="Afficher un message de coucou"} -
-
- -

- {csrf_field key="config_plugin_%s"|args:$plugin.id} - {button type="submit" class="main" name="save" label="Enregistrer" shape="right"} -

-
- -{include file="admin/_foot.tpl"} diff --git a/src/templates/entrees_definitives.tpl b/src/templates/entrees_definitives.tpl new file mode 100644 index 0000000..131944a --- /dev/null +++ b/src/templates/entrees_definitives.tpl @@ -0,0 +1,5 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="entrees_definitives"} + +{include file="admin/_foot.tpl"} diff --git a/src/templates/entrees_provisoires.tpl b/src/templates/entrees_provisoires.tpl new file mode 100644 index 0000000..1c6b217 --- /dev/null +++ b/src/templates/entrees_provisoires.tpl @@ -0,0 +1,5 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="entrees_provisoires"} + +{include file="admin/_foot.tpl"} diff --git a/src/templates/index.tpl b/src/templates/index.tpl index ea1dd8d..6b73859 100644 --- a/src/templates/index.tpl +++ b/src/templates/index.tpl @@ -1,12 +1,5 @@ -{include file="admin/_head.tpl" title="Extension — %s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} - -

Gestion du materiel de l'association

- -{if $plugin.config.display_hello} -

L'affichage du message de bienvenue est activé

-{else} -

L'affichage du message de bienvenue est désactivé !

-{/if} +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} +{include file="%s_nav.tpl"|args:$plugin_tpl current="index"} {include file="admin/_foot.tpl"} diff --git a/src/templates/recherche.tpl b/src/templates/recherche.tpl new file mode 100644 index 0000000..894e6ed --- /dev/null +++ b/src/templates/recherche.tpl @@ -0,0 +1,5 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="recherche"} + +{include file="admin/_foot.tpl"} diff --git a/src/templates/sorties_definitives.tpl b/src/templates/sorties_definitives.tpl new file mode 100644 index 0000000..3aaee83 --- /dev/null +++ b/src/templates/sorties_definitives.tpl @@ -0,0 +1,5 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="sorties_definitives"} + +{include file="admin/_foot.tpl"} diff --git a/src/templates/sorties_provisoires.tpl b/src/templates/sorties_provisoires.tpl new file mode 100644 index 0000000..6f8b5ff --- /dev/null +++ b/src/templates/sorties_provisoires.tpl @@ -0,0 +1,5 @@ +{include file="admin/_head.tpl" title="%s"|args:$plugin.nom current="plugin_%s"|args:$plugin.id} + +{include file="%s_nav.tpl"|args:$plugin_tpl current="sorties_provisoires"} + +{include file="admin/_foot.tpl"} diff --git a/src/upgrade.php b/src/upgrade.php new file mode 100644 index 0000000..e69de29 diff --git a/src/www/admin/_inc.php b/src/www/admin/_inc.php new file mode 100644 index 0000000..d5947db --- /dev/null +++ b/src/www/admin/_inc.php @@ -0,0 +1,5 @@ +assign('plugin_tpl', PLUGIN_ROOT . '/templates/'); diff --git a/src/www/admin/config.php b/src/www/admin/config.php deleted file mode 100644 index f195b75..0000000 --- a/src/www/admin/config.php +++ /dev/null @@ -1,26 +0,0 @@ -requireAccess($session::SECTION_CONFIG, $session::ACCESS_ADMIN); - -if (f('save')) -{ - $form->check('config_plugin_' . $plugin->id(), [ - 'display_hello' => 'boolean', - ]); - - if (!$form->hasErrors()) - { - try { - $plugin->setConfig('display_hello', (bool) f('display_hello')); - utils::redirect(utils::plugin_url()); - } - catch (UserException $e) - { - $form->addError($e->getMessage()); - } - } -} - -$tpl->display(PLUGIN_ROOT . '/templates/config.tpl'); diff --git a/src/www/admin/entrees_definitives.php b/src/www/admin/entrees_definitives.php new file mode 100644 index 0000000..bddb547 --- /dev/null +++ b/src/www/admin/entrees_definitives.php @@ -0,0 +1,7 @@ +display(PLUGIN_ROOT . '/templates/entrees_definitives.tpl'); diff --git a/src/www/admin/entrees_provisoires.php b/src/www/admin/entrees_provisoires.php new file mode 100644 index 0000000..a329be4 --- /dev/null +++ b/src/www/admin/entrees_provisoires.php @@ -0,0 +1,7 @@ +display(PLUGIN_ROOT . '/templates/entrees_provisoires.tpl'); diff --git a/src/www/admin/index.php b/src/www/admin/index.php index fcd1b9c..767f302 100644 --- a/src/www/admin/index.php +++ b/src/www/admin/index.php @@ -2,4 +2,11 @@ namespace Garradin; +if ($plugin->needUpgrade()) +{ + $plugin->upgrade(); +} + +require_once __DIR__ . '/_inc.php'; + $tpl->display(PLUGIN_ROOT . '/templates/index.tpl'); diff --git a/src/www/admin/recherche.php b/src/www/admin/recherche.php new file mode 100644 index 0000000..189808f --- /dev/null +++ b/src/www/admin/recherche.php @@ -0,0 +1,7 @@ +display(PLUGIN_ROOT . '/templates/recherche.tpl'); diff --git a/src/www/admin/sorties_definitives.php b/src/www/admin/sorties_definitives.php new file mode 100644 index 0000000..359f80d --- /dev/null +++ b/src/www/admin/sorties_definitives.php @@ -0,0 +1,7 @@ +display(PLUGIN_ROOT . '/templates/sorties_definitives.tpl'); diff --git a/src/www/admin/sorties_provisoires.php b/src/www/admin/sorties_provisoires.php new file mode 100644 index 0000000..77ba811 --- /dev/null +++ b/src/www/admin/sorties_provisoires.php @@ -0,0 +1,7 @@ +display(PLUGIN_ROOT . '/templates/sorties_provisoires.tpl');