From ffba6a1f28d2c122d248ff4e7ee740047b1d784c Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 4 Oct 2019 17:00:53 +0200 Subject: [PATCH] Aggiunti permessi gruppi sui documentali --- config/namespaces.php | 1 + modules/categorie_documenti/actions.php | 45 +++++++++---------- modules/categorie_documenti/ajax/select.php | 4 +- modules/categorie_documenti/edit.php | 8 ++-- modules/categorie_documenti/init.php | 12 ++++- modules/categorie_documenti/src/Categoria.php | 36 +++++++++++++++ modules/fatture/modutil.php | 2 +- modules/gestione_documentale/actions.php | 8 ++-- modules/gestione_documentale/init.php | 2 +- modules/utenti/user.php | 2 - update/2_4_11.php | 17 +++++++ update/2_4_11.sql | 35 ++++++++++++++- 12 files changed, 134 insertions(+), 38 deletions(-) create mode 100644 modules/categorie_documenti/src/Categoria.php diff --git a/config/namespaces.php b/config/namespaces.php index 57a7b4315..82d49225c 100644 --- a/config/namespaces.php +++ b/config/namespaces.php @@ -29,6 +29,7 @@ return [ 'modules/stati_preventivo' => 'Modules\StatiPreventivo', 'modules/stati_contratto' => 'Modules\StatiContratto', 'modules/tipi_intervento' => 'Modules\TipiIntervento', + 'modules/categorie_documenti' => 'Modules\CategorieDocumentali', 'plugins/exportFE' => 'Plugins\ExportFE', 'plugins/importFE' => 'Plugins\ImportFE', 'plugins/receiptFE' => 'Plugins\ReceiptFE', diff --git a/modules/categorie_documenti/actions.php b/modules/categorie_documenti/actions.php index 32daaa71c..44c92a3d9 100644 --- a/modules/categorie_documenti/actions.php +++ b/modules/categorie_documenti/actions.php @@ -2,20 +2,23 @@ include_once __DIR__.'/../../core.php'; +use Modules\CategorieDocumentali\Categoria; + switch (post('op')) { case 'update': $descrizione = post('descrizione'); // Verifico che il nome non sia duplicato - $count = $dbo->fetchNum('SELECT descrizione FROM zz_documenti_categorie WHERE descrizione='.prepare($descrizione).' AND deleted_at IS NULL'); + $count = $dbo->fetchNum('SELECT descrizione FROM do_categorie WHERE descrizione='.prepare($descrizione).' AND deleted_at IS NULL AND id !='.prepare($id_record)); if ($count != 0) { flash()->error(tr('Categoria _NAME_ già esistente!', [ '_NAME_' => $descrizione, ])); } else { - $dbo->update('zz_documenti_categorie', [ - 'descrizione' => $descrizione, - ], ['id' => $id_record]); + $categoria->descrizione = $descrizione; + $categoria->save(); + + $categoria->syncPermessi(post('permessi') ?: []); flash()->info(tr('Informazioni salvate correttamente!')); } @@ -25,33 +28,29 @@ switch (post('op')) { case 'add': $descrizione = post('descrizione'); - if (isset($_POST['descrizione'])) { - // Verifico che il nome non sia duplicato - $count = $dbo->fetchNum('SELECT descrizione FROM zz_documenti_categorie WHERE descrizione='.prepare($descrizione).' AND deleted_at IS NULL'); - if ($count != 0) { - flash()->error(tr('Categoria _NAME_ già esistente!', [ - '_NAME_' => $descrizione, - ])); - } else { - $dbo->insert('zz_documenti_categorie', [ - 'descrizione' => $descrizione, - ]); - $id_record = $dbo->last_inserted_id(); + // Verifico che il nome non sia duplicato + $count = $dbo->fetchNum('SELECT descrizione FROM do_categorie WHERE descrizione='.prepare($descrizione).' AND deleted_at IS NULL'); + if ($count != 0) { + flash()->error(tr('Categoria _NAME_ già esistente!', [ + '_NAME_' => $descrizione, + ])); + } else { + $categoria = Categoria::build($descrizione); + $id_record = $categoria->id; - if (isAjaxRequest()) { - echo json_encode(['id' => $id_record, 'text' => $descrizione]); - } - - flash()->info(tr('Nuova categoria documenti aggiunta!')); + if (isAjaxRequest()) { + echo json_encode(['id' => $id_record, 'text' => $descrizione]); } + + flash()->info(tr('Nuova categoria documenti aggiunta!')); } break; case 'delete': - $dbo->query('UPDATE zz_documenti_categorie SET deleted_at = NOW() WHERE id = '.prepare($id_record)); + $dbo->query('UPDATE do_categorie SET deleted_at = NOW() WHERE id = '.prepare($id_record)); - flash()->info(tr('Categoria docimenti eliminata!')); + flash()->info(tr('Categoria documenti eliminata!')); break; } diff --git a/modules/categorie_documenti/ajax/select.php b/modules/categorie_documenti/ajax/select.php index 89c04b678..17e0cbd54 100644 --- a/modules/categorie_documenti/ajax/select.php +++ b/modules/categorie_documenti/ajax/select.php @@ -4,10 +4,10 @@ include_once __DIR__.'/../../../core.php'; switch ($resource) { case 'categorie_documenti': - $query = 'SELECT id, descrizione FROM zz_documenti_categorie |where| ORDER BY descrizione ASC'; + $query = 'SELECT id, descrizione FROM do_categorie |where| ORDER BY descrizione ASC'; foreach ($elements as $element) { - $filter[] = 'zz_documenti_categorie.id='.prepare($element); + $filter[] = 'do_categorie.id='.prepare($element); } if (empty($filter)) { diff --git a/modules/categorie_documenti/edit.php b/modules/categorie_documenti/edit.php index 13d12e371..0b130db1d 100644 --- a/modules/categorie_documenti/edit.php +++ b/modules/categorie_documenti/edit.php @@ -15,11 +15,13 @@ if ($record['doc_associati'] > 0) {
- -
- {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$", "extra": "" ]} +
+ {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$" ]}
+
+ {[ "type": "select", "label": "", "name": "permessi[]", "value": "$permessi$", "values": "query=SELECT `id`, `nome` AS text FROM `zz_groups`", "multiple": 1 ]} +
diff --git a/modules/categorie_documenti/init.php b/modules/categorie_documenti/init.php index 8a494b5d3..b72813770 100644 --- a/modules/categorie_documenti/init.php +++ b/modules/categorie_documenti/init.php @@ -2,6 +2,16 @@ include_once __DIR__.'/../../core.php'; +use Modules\CategorieDocumentali\Categoria; + if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT *, (SELECT COUNT(id) FROM zz_documenti WHERE idcategoria = '.prepare($id_record).') AS doc_associati FROM zz_documenti_categorie WHERE id='.prepare($id_record)); + $categoria = Categoria::find($id_record); + + $record = $dbo->fetchOne("SELECT *, + (SELECT COUNT(id) FROM do_documenti WHERE idcategoria = '.prepare($id_record).') AS doc_associati, + GROUP_CONCAT(do_permessi.id_gruppo SEPARATOR ',') AS permessi + FROM do_categorie + LEFT JOIN do_permessi ON do_permessi.id_categoria = do_categorie.id + WHERE id=".prepare($id_record).' + GROUP BY do_categorie.id'); } diff --git a/modules/categorie_documenti/src/Categoria.php b/modules/categorie_documenti/src/Categoria.php new file mode 100644 index 000000000..79b325b9b --- /dev/null +++ b/modules/categorie_documenti/src/Categoria.php @@ -0,0 +1,36 @@ +descrizione = $descrizione; + + $model->save(); + + $gruppi = database()->fetchArray('SELECT `id` FROM `zz_groups`'); + $model->syncPermessi($gruppi); + + return $model; + } + + public function syncPermessi(array $groups) + { + $groups[] = 1; + + $database = database(); + $database->sync('do_permessi', ['id_categoria' => $this->id], [ + 'id_gruppo' => $groups, + ]); + } +} diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 83959aa11..9cff82f95 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -327,7 +327,7 @@ function aggiungi_movimento($iddocumento, $dir, $primanota = 0) // 6) Aggiungo la ritenuta enasarco se c'è // Lettura id conto ritenuta e la storno subito if ($totale_ritenutacontributi != 0) { - $query = "SELECT id, descrizione FROM co_pianodeiconti3 WHERE descrizione=\"Erario c/enasarco\""; + $query = 'SELECT id, descrizione FROM co_pianodeiconti3 WHERE descrizione="Erario c/enasarco"'; $rs = $dbo->fetchArray($query); $idconto_ritenutaenasarco = $rs[0]['id']; $descrizione_conto_ritenutaenasarco = $rs[0]['descrizione']; diff --git a/modules/gestione_documentale/actions.php b/modules/gestione_documentale/actions.php index 3ea8b6e4d..8be71dacb 100644 --- a/modules/gestione_documentale/actions.php +++ b/modules/gestione_documentale/actions.php @@ -4,19 +4,19 @@ include_once __DIR__.'/../../core.php'; switch (post('op')) { case 'add': - $dbo->insert('zz_documenti', [ + $dbo->insert('do_documenti', [ 'idcategoria' => post('idcategoria'), 'nome' => post('nome'), 'data' => post('data'), ]); - $id_record = $dbo->last_inserted_id(); + $id_record = $dbo->lastInsertedID(); flash()->info(tr('Nuova documento aggiunto!')); break; case 'update': - $dbo->update('zz_documenti', [ + $dbo->update('do_documenti', [ 'idcategoria' => post('idcategoria'), 'nome' => post('nome'), 'data' => post('data'), @@ -26,7 +26,7 @@ switch (post('op')) { break; case 'delete': - $dbo->query('DELETE FROM zz_documenti WHERE id = '.prepare($id_record)); + $dbo->query('DELETE FROM do_documenti WHERE id = '.prepare($id_record)); Uploads::deleteLinked([ 'id_module' => $id_module, diff --git a/modules/gestione_documentale/init.php b/modules/gestione_documentale/init.php index 6573b9d82..dec369e8f 100644 --- a/modules/gestione_documentale/init.php +++ b/modules/gestione_documentale/init.php @@ -3,5 +3,5 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT *, zz_documenti.`id`as id, zz_documenti.nome AS nome, zz_documenti.`data` AS `data` FROM zz_documenti WHERE zz_documenti.id = '.prepare($id_record)); + $record = $dbo->fetchOne('SELECT *, do_documenti.`id`as id, do_documenti.nome AS nome, do_documenti.`data` AS `data` FROM do_documenti WHERE do_documenti.id = '.prepare($id_record)); } diff --git a/modules/utenti/user.php b/modules/utenti/user.php index 988575e12..f3cfc6425 100644 --- a/modules/utenti/user.php +++ b/modules/utenti/user.php @@ -67,8 +67,6 @@ if (!empty($user)) { '; } - - include $structure->filepath('components/password.php'); echo ' diff --git a/update/2_4_11.php b/update/2_4_11.php index b2f335f1c..a995c45ba 100644 --- a/update/2_4_11.php +++ b/update/2_4_11.php @@ -39,6 +39,23 @@ foreach ($logs as $log) { $database->query('ALTER TABLE `zz_operations` ADD FOREIGN KEY (`id_email`) REFERENCES `em_emails`(`id`) ON DELETE SET NULL'); +// Aggiunta permessi alla gestione documentale +$gruppi = $database->fetchArray('SELECT `id` FROM `zz_groups`'); +$viste = $database->fetchArray('SELECT `id` FROM `do_categorie`'); + +$array = []; +foreach ($viste as $vista) { + foreach ($gruppi as $gruppo) { + $array[] = [ + 'id_gruppo' => $gruppo['id'], + 'id_categoria' => $vista['id'], + ]; + } +} +if (!empty($array)) { + $database->insert('do_permessi', $array); +} + // File e cartelle deprecate $files = [ 'src\API.php', diff --git a/update/2_4_11.sql b/update/2_4_11.sql index 2c4a74a01..16c73e346 100644 --- a/update/2_4_11.sql +++ b/update/2_4_11.sql @@ -681,4 +681,37 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Liste newsletter'), 'Descrizione', 'description', 3, 1, 0, 1, 1), ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Liste newsletter'), 'Dinamica', 'IF(query IS NULL, ''No'', ''Si'')', 4, 1, 0, 1, 1); -UPDATE `zz_prints` SET `is_record` = '0' WHERE `zz_prints`.`name` = 'Inventario magazzino'; \ No newline at end of file +UPDATE `zz_prints` SET `is_record` = '0' WHERE `zz_prints`.`name` = 'Inventario magazzino'; + +-- Gestione permessi per le categorie documentali +ALTER TABLE `zz_documenti` RENAME TO `do_documenti`; +ALTER TABLE `zz_documenti_categorie` RENAME TO `do_categorie`; + +CREATE TABLE IF NOT EXISTS `do_permessi` ( + `id_categoria` int(11) NOT NULL, + `id_gruppo` int(11) NOT NULL, + FOREIGN KEY (`id_categoria`) REFERENCES `do_categorie`(`id`) ON DELETE CASCADE, + FOREIGN KEY (`id_gruppo`) REFERENCES `zz_groups`(`id`) ON DELETE CASCADE +) ENGINE=InnoDB; + +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `do_categorie` +WHERE 1=1 AND `deleted_at` IS NULL AND + (SELECT `idgruppo` FROM `zz_users` WHERE `id` = |id_utente|) IN (SELECT `id_gruppo` FROM `do_permessi` WHERE `id_categoria` = `do_categorie`.`id`) +HAVING 2=2' WHERE `name` = 'Categorie documenti'; + +INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `default`, `visible`) VALUES +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Categorie documenti'), 'id', 'id', 1, 0, 0, 1, 0), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Categorie documenti'), 'Descrizione', 'descrizione', 2, 0, 0, 1, 1); + +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `do_documenti` +INNER JOIN `do_categorie` ON `do_categorie`.`id` = `do_documenti`.`idcategoria` +WHERE 1=1 AND `deleted_at` IS NULL AND + (SELECT `idgruppo` FROM `zz_users` WHERE `zz_users`.`id` = |id_utente|) IN (SELECT `id_gruppo` FROM `do_permessi` WHERE `id_categoria` = `do_documenti`.`idcategoria`) + |date_period(`data`)| +HAVING 2=2' WHERE `name` = 'Gestione documentale'; + +INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format`, `default`, `visible`) VALUES +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Gestione documentale'), '`do_documenti`.`id`', 'id', 1, 0, 0, 1, 0), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Gestione documentale'), 'Categoria', '`do_categorie`.`descrizione`', 2, 0, 0, 1, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Gestione documentale'), 'Nome', '`do_documenti`.`nome`', 3, 0, 0, 1, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Gestione documentale'), 'Data', '`do_documenti`.`data`', 4, 0, 1, 1, 1);