From 04ba48e87be5c43711eb7b9ab3e1b888fc95a578 Mon Sep 17 00:00:00 2001
From: Inext68
Date: Mon, 1 Jun 2026 22:55:50 +0200
Subject: [PATCH] re-check final
---
.MEMORY.md.swp | Bin 1024 -> 0 bytes
.npmrc | 3 -
.phpunit.result.cache | 1 -
AGENTS.md_old | 114 -
MEMORY.md | 1115 +---------
app/Console/Commands/ExportHelpPdf.php | 59 +
app/Http/Controllers/HelpController.php | 57 +
app/Http/Controllers/HomeController.php | 7 +
app/Models/AppSetting.php | 18 +
app/Services/BackupService.php | 3 +-
installer/assets/style.css | 505 -----
installer/functions.php | 533 -----
installer/index.php | 28 -
installer/setup.php | 711 ------
resources/views/admin/backup/index.blade.php | 3 +-
resources/views/admin/layout.blade.php | 6 +
resources/views/documenti/index.blade.php | 122 +-
resources/views/help/index.blade.php | 6 +
resources/views/help/pdf.blade.php | 894 ++++++++
resources/views/home/dashboard.blade.php | 14 +
resources/views/layouts/adminlte.blade.php | 50 +-
routes/web.php | 6 +-
.../00edc551e83193362ca154488ca4729a.php | 76 -
.../0a6e9e1ae41644e881b0d6b838bf5872.php | 51 -
.../0d2b193c2422200882c07efd3b5a7e5b.php | 12 -
.../0f64afb747becff295414c6587d64947.php | 15 -
.../134fef75f0b8b755ddceccde68d8f70c.php | 37 -
.../14ee0174ec36b16b90e353b8b794befc.php | 720 ------
.../160404d3931d5c63037c167f896bbb78.php | 374 ----
.../17a5c498d7d946698fcfab22c555b794.php | 4 -
.../1a0686b21c9c2f6a631c0cf6d4b4f29b.php | 54 -
.../1a2b3ec7e53f6b16c4d86455ed43e6fe.php | 256 ---
.../1f7b4a212e9b1944a49d2801d3d162d6.php | 65 -
.../21577133c7dd9ebc2955c7d699311896.php | 6 -
.../23fb18219bff01c53c0f3049ce4a9b5b.php | 11 -
.../28c9abf6c3545b82f2c66c4bde35bcb3.php | 418 ----
.../2b95271a0c96906d02e3aa9d1bfb863e.php | 75 -
.../2ba7b6471efd4d300f63e2f551568f81.php | 80 -
.../2cedd45aef505a2f9ec0f3ba8225d4d0.php | 122 -
.../3026c2e6f58b91f82b8535dd4c6ced60.php | 112 -
.../30846a010941b0bbdb022aeb51176e67.php | 69 -
.../30b198b87f2e03331606344673a7cfd0.php | 91 -
.../34020ff73f2b86db2aaa6867fd6ab588.php | 4 -
.../3779061b616bc525c6bea84d9f555b94.php | 351 ---
.../3874bb4e9d33ae0d70c905227566ec46.php | 28 -
.../3f76e58fba90e9e81d9a253ae7c611da.php | 88 -
.../409969b30ed6a6609c8c6acb7f2e2713.php | 400 ----
.../486ad3b47013e2f855528231fc36c018.php | 104 -
.../498163f7ff6072a8a0d754eb8d21d8f6.php | 178 --
.../4e5f785dd35f100165b107b542ca62d2.php | 79 -
.../4e6bd9041f7d73b26cb10fbdef65bd0f.php | 114 -
.../4fa1356a6e41d11676873898ab231b8d.php | 6 -
.../527153d72143352b10c5c3f6a3d1cff6.php | 5 -
.../565b6f56aa782bc9d430e45e3a15433f.php | 149 --
.../59a2c3ba1c4d1eac3562dad4068090dd.php | 78 -
.../6306fa5e273cba95a1fcdaf221bed976.php | 61 -
.../63c15e36af32d6c406969a3c758a546e.php | 4 -
.../650f7284b636679af12662882b66360c.php | 98 -
.../65199930fbf6a0a151bc954dfc50f325.php | 5 -
.../69d97755a967aa5f097761e02409a95e.php | 170 --
.../6a06deecbab62a322d4e7146569a3da0.php | 398 ----
.../6a7aaead1cd4adb109b2f35a98221f9f.php | 5 -
.../6b9755db21a234016be774177e2fdf0d.php | 225 --
.../6f95a1563fecac610f149a2aaac7c76d.php | 131 --
.../74552eae25d8d91fe0255ba6607b8a01.php | 44 -
.../762b28285c3ac9431eefb91f23ff42a0.php | 47 -
.../770f7793fb2506075291f5825b49a758.php | 350 ---
.../77ae2092ee84e47a55a05ab55f7003a0.php | 438 ----
.../79998a8bbc29d8db33ff4b62dd446908.php | 288 ---
.../7cdad21d1e0b3c6398770f82884bcf32.php | 12 -
.../7cfff45be1176bacefa7e2488c0914ed.php | 35 -
.../7fe4bfde84ae8ad75ccbe8b21689cbfa.php | 85 -
.../80d6e427e76e80ae16c8694fb235b812.php | 6 +
.../817d6349476711a9f441cf7e0772b352.php | 57 -
.../81a94fefe34d556dce21db1f2eccc603.php | 215 --
.../81e2bcc646165a88dad1b7f9520fc235.php | 78 -
.../8523ee713c1f897ca38d3d76213dcaf2.php | 63 -
.../86d51c2a03999cce84648f83bef23fb2.php | 362 ---
.../8888d039c9a4bdb124fcf43b0ae7e371.php | 674 ------
.../8a9c55091532863d323fb374541a2f08.php | 4 -
.../8b9fabb47605084b6824978fa28c71e1.php | 220 --
.../8e3d156f62cc75d4f1c4c5338e84e21d.php | 3 +-
.../8ee6b6d2a0dd44a7f8508dc02dcb66ab.php | 79 -
.../919b72ede39b52e755aee01e73b78d3b.php | 5 -
.../92d0480f9dc1bf892fd7429ac4a2c9f8.php | 6 -
.../932c89bc3dc5dcbf603b5e42188a9db2.php | 5 -
.../943369446130d90bf617aa874a4e3047.php | 47 -
.../958aad2ef52918b5daf710e04fd28fbc.php | 8 -
.../98345799681be0e29e513bff00b71d28.php | 5 -
.../994dbe51ea1920c69a8b0e217fb3f81a.php | 122 +-
.../9cacf54b36643c217670450c9fcf532e.php | 713 ------
.../9da6ccf1576ad4901a67ca638058d2c6.php | 70 -
.../9df1d7f8266acefeb4626ce62c99024a.php | 31 -
.../9fa1b9abba3a4cc55010af37ac53b5d0.php | 35 -
.../a0e5cbe57d4c2c79d5e3ce62bef9104a.php | 30 -
.../a154457e23a6784dc56fcce514adaeed.php | 35 -
.../a32b10b44eee0941ea0a3f2990b69de8.php | 98 -
.../a340ec12d72799400447f6985ffc1b40.php | 115 -
.../a4022627a632b7187b550e38ad0744a5.php | 178 --
.../a4fd62c2ab5143a4dd89e7b8e9c2484a.php | 180 --
.../a52b4a99a04ce7e99171d6c3a593fddb.php | 167 --
.../a54cb906b71ecddfe8edf55b3671046a.php | 966 --------
.../a55ebc46916a1de62cfedb33e9e9f197.php | 310 ---
.../a59e859b9d52c149f06a0f5ca0dce3cf.php | 260 ---
.../a6267d64f58c4883f210293e4b730a9c.php | 103 -
.../a8cd250cba8bb9880e610791497c5a94.php | 162 --
.../a98e006438cd844018c88468d4886a4c.php | 180 --
.../aafaa24c856d9d3f60eb00bf024af8db.php | 4 -
.../ad3b26036a197d93027e9b56fcb36d0a.php | 75 -
.../b23e102b866aad7717d6b8235c3b08e6.php | 28 -
.../b6e7e4398eb5470cf300b2dcba081070.php | 5 -
.../b7fb0777954b7384c283d9ea1db9ba0f.php | 151 --
.../b85f7887a74f3e21c3555df454fc59bc.php | 77 -
.../b8b9b66a1d90ca24f6e19777b0838604.php | 1961 -----------------
.../c424c6641ac422220cc9391124e6d9e5.php | 83 -
.../cb2d49226f26870c6bceba51b57bddf9.php | 5 -
.../cfc6ded8ebafd62913d5bfd0eb61d4da.php | 48 -
.../d1ccfbdb98ebc883de13ea5bbb13c556.php | 418 ----
.../d2b472954eead18e3056d1eacdb49d06.php | 362 ---
.../d5731eda75805696b9f90465ceed74f6.php | 157 --
.../d65ac084e1dbd8e99e71b975e9edcf42.php | 12 -
.../d6abb9d4582d74a40cf71c1259a64b78.php | 101 -
.../d751874ab64bcc49bdf4b12b4fefba7a.php | 349 ---
.../e3b2763292eb5c70536d0e5ce1ceb1b1.php | 104 -
.../e6056fdcc373077ccd717e502c884188.php | 922 --------
.../e8f60d5f5b2a4c688f1bc12477b209df.php | 108 -
.../e977038aecb94bea84d87a4b20253bc2.php | 101 -
.../f54bb4079043bd1b778fefd2b7a89a6b.php | 5 -
.../f5ef96019b613b67dddc87baed21eb0c.php | 50 +-
.../f74cbe53c0921a5188dd3561abbeab7c.php | 82 -
.../f7b5acd723ad1e4180d8c10d45f3d46f.php | 633 ------
.../f88561a736502fe60bcd6b405bdc404a.php | 20 -
.../f98c27feaa80ae6e7f6c002c26f6107d.php | 109 -
.../fc56695b593a318c0d96a4e22b861473.php | 480 ----
.../fd818b8a3aad58165ab49d5ee0216f56.php | 11 -
.../fe9cfbf7e1411525aee221ec97dfa1d6.php | 5 -
136 files changed, 1362 insertions(+), 21579 deletions(-)
delete mode 100644 .MEMORY.md.swp
delete mode 100644 .npmrc
delete mode 100644 .phpunit.result.cache
delete mode 100644 AGENTS.md_old
create mode 100644 app/Console/Commands/ExportHelpPdf.php
create mode 100644 app/Http/Controllers/HelpController.php
delete mode 100644 installer/assets/style.css
delete mode 100644 installer/functions.php
delete mode 100644 installer/index.php
delete mode 100644 installer/setup.php
create mode 100644 resources/views/help/pdf.blade.php
delete mode 100755 storage/framework/views/00edc551e83193362ca154488ca4729a.php
delete mode 100755 storage/framework/views/0a6e9e1ae41644e881b0d6b838bf5872.php
delete mode 100755 storage/framework/views/0d2b193c2422200882c07efd3b5a7e5b.php
delete mode 100755 storage/framework/views/0f64afb747becff295414c6587d64947.php
delete mode 100755 storage/framework/views/134fef75f0b8b755ddceccde68d8f70c.php
delete mode 100755 storage/framework/views/14ee0174ec36b16b90e353b8b794befc.php
delete mode 100755 storage/framework/views/160404d3931d5c63037c167f896bbb78.php
delete mode 100755 storage/framework/views/17a5c498d7d946698fcfab22c555b794.php
delete mode 100755 storage/framework/views/1a0686b21c9c2f6a631c0cf6d4b4f29b.php
delete mode 100755 storage/framework/views/1a2b3ec7e53f6b16c4d86455ed43e6fe.php
delete mode 100755 storage/framework/views/1f7b4a212e9b1944a49d2801d3d162d6.php
delete mode 100755 storage/framework/views/21577133c7dd9ebc2955c7d699311896.php
delete mode 100755 storage/framework/views/23fb18219bff01c53c0f3049ce4a9b5b.php
delete mode 100755 storage/framework/views/28c9abf6c3545b82f2c66c4bde35bcb3.php
delete mode 100755 storage/framework/views/2b95271a0c96906d02e3aa9d1bfb863e.php
delete mode 100755 storage/framework/views/2ba7b6471efd4d300f63e2f551568f81.php
delete mode 100755 storage/framework/views/2cedd45aef505a2f9ec0f3ba8225d4d0.php
delete mode 100755 storage/framework/views/3026c2e6f58b91f82b8535dd4c6ced60.php
delete mode 100755 storage/framework/views/30846a010941b0bbdb022aeb51176e67.php
delete mode 100755 storage/framework/views/30b198b87f2e03331606344673a7cfd0.php
delete mode 100755 storage/framework/views/34020ff73f2b86db2aaa6867fd6ab588.php
delete mode 100755 storage/framework/views/3779061b616bc525c6bea84d9f555b94.php
delete mode 100755 storage/framework/views/3874bb4e9d33ae0d70c905227566ec46.php
delete mode 100755 storage/framework/views/3f76e58fba90e9e81d9a253ae7c611da.php
delete mode 100755 storage/framework/views/409969b30ed6a6609c8c6acb7f2e2713.php
delete mode 100755 storage/framework/views/486ad3b47013e2f855528231fc36c018.php
delete mode 100755 storage/framework/views/498163f7ff6072a8a0d754eb8d21d8f6.php
delete mode 100755 storage/framework/views/4e5f785dd35f100165b107b542ca62d2.php
delete mode 100755 storage/framework/views/4e6bd9041f7d73b26cb10fbdef65bd0f.php
delete mode 100755 storage/framework/views/4fa1356a6e41d11676873898ab231b8d.php
delete mode 100755 storage/framework/views/527153d72143352b10c5c3f6a3d1cff6.php
delete mode 100755 storage/framework/views/565b6f56aa782bc9d430e45e3a15433f.php
delete mode 100755 storage/framework/views/59a2c3ba1c4d1eac3562dad4068090dd.php
delete mode 100755 storage/framework/views/6306fa5e273cba95a1fcdaf221bed976.php
delete mode 100755 storage/framework/views/63c15e36af32d6c406969a3c758a546e.php
delete mode 100755 storage/framework/views/650f7284b636679af12662882b66360c.php
delete mode 100755 storage/framework/views/65199930fbf6a0a151bc954dfc50f325.php
delete mode 100755 storage/framework/views/69d97755a967aa5f097761e02409a95e.php
delete mode 100755 storage/framework/views/6a06deecbab62a322d4e7146569a3da0.php
delete mode 100755 storage/framework/views/6a7aaead1cd4adb109b2f35a98221f9f.php
delete mode 100755 storage/framework/views/6b9755db21a234016be774177e2fdf0d.php
delete mode 100755 storage/framework/views/6f95a1563fecac610f149a2aaac7c76d.php
delete mode 100755 storage/framework/views/74552eae25d8d91fe0255ba6607b8a01.php
delete mode 100755 storage/framework/views/762b28285c3ac9431eefb91f23ff42a0.php
delete mode 100755 storage/framework/views/770f7793fb2506075291f5825b49a758.php
delete mode 100755 storage/framework/views/77ae2092ee84e47a55a05ab55f7003a0.php
delete mode 100755 storage/framework/views/79998a8bbc29d8db33ff4b62dd446908.php
delete mode 100755 storage/framework/views/7cdad21d1e0b3c6398770f82884bcf32.php
delete mode 100755 storage/framework/views/7cfff45be1176bacefa7e2488c0914ed.php
delete mode 100755 storage/framework/views/7fe4bfde84ae8ad75ccbe8b21689cbfa.php
delete mode 100755 storage/framework/views/817d6349476711a9f441cf7e0772b352.php
delete mode 100755 storage/framework/views/81a94fefe34d556dce21db1f2eccc603.php
delete mode 100755 storage/framework/views/81e2bcc646165a88dad1b7f9520fc235.php
delete mode 100755 storage/framework/views/8523ee713c1f897ca38d3d76213dcaf2.php
delete mode 100755 storage/framework/views/86d51c2a03999cce84648f83bef23fb2.php
delete mode 100755 storage/framework/views/8888d039c9a4bdb124fcf43b0ae7e371.php
delete mode 100755 storage/framework/views/8a9c55091532863d323fb374541a2f08.php
delete mode 100755 storage/framework/views/8b9fabb47605084b6824978fa28c71e1.php
delete mode 100755 storage/framework/views/8ee6b6d2a0dd44a7f8508dc02dcb66ab.php
delete mode 100755 storage/framework/views/919b72ede39b52e755aee01e73b78d3b.php
delete mode 100755 storage/framework/views/92d0480f9dc1bf892fd7429ac4a2c9f8.php
delete mode 100755 storage/framework/views/932c89bc3dc5dcbf603b5e42188a9db2.php
delete mode 100755 storage/framework/views/943369446130d90bf617aa874a4e3047.php
delete mode 100755 storage/framework/views/958aad2ef52918b5daf710e04fd28fbc.php
delete mode 100755 storage/framework/views/98345799681be0e29e513bff00b71d28.php
delete mode 100755 storage/framework/views/9cacf54b36643c217670450c9fcf532e.php
delete mode 100755 storage/framework/views/9da6ccf1576ad4901a67ca638058d2c6.php
delete mode 100755 storage/framework/views/9df1d7f8266acefeb4626ce62c99024a.php
delete mode 100755 storage/framework/views/9fa1b9abba3a4cc55010af37ac53b5d0.php
delete mode 100755 storage/framework/views/a0e5cbe57d4c2c79d5e3ce62bef9104a.php
delete mode 100755 storage/framework/views/a154457e23a6784dc56fcce514adaeed.php
delete mode 100755 storage/framework/views/a32b10b44eee0941ea0a3f2990b69de8.php
delete mode 100755 storage/framework/views/a340ec12d72799400447f6985ffc1b40.php
delete mode 100755 storage/framework/views/a4022627a632b7187b550e38ad0744a5.php
delete mode 100755 storage/framework/views/a4fd62c2ab5143a4dd89e7b8e9c2484a.php
delete mode 100755 storage/framework/views/a52b4a99a04ce7e99171d6c3a593fddb.php
delete mode 100755 storage/framework/views/a54cb906b71ecddfe8edf55b3671046a.php
delete mode 100755 storage/framework/views/a55ebc46916a1de62cfedb33e9e9f197.php
delete mode 100755 storage/framework/views/a59e859b9d52c149f06a0f5ca0dce3cf.php
delete mode 100755 storage/framework/views/a6267d64f58c4883f210293e4b730a9c.php
delete mode 100755 storage/framework/views/a8cd250cba8bb9880e610791497c5a94.php
delete mode 100755 storage/framework/views/a98e006438cd844018c88468d4886a4c.php
delete mode 100755 storage/framework/views/aafaa24c856d9d3f60eb00bf024af8db.php
delete mode 100755 storage/framework/views/ad3b26036a197d93027e9b56fcb36d0a.php
delete mode 100755 storage/framework/views/b23e102b866aad7717d6b8235c3b08e6.php
delete mode 100755 storage/framework/views/b6e7e4398eb5470cf300b2dcba081070.php
delete mode 100755 storage/framework/views/b7fb0777954b7384c283d9ea1db9ba0f.php
delete mode 100755 storage/framework/views/b85f7887a74f3e21c3555df454fc59bc.php
delete mode 100755 storage/framework/views/b8b9b66a1d90ca24f6e19777b0838604.php
delete mode 100755 storage/framework/views/c424c6641ac422220cc9391124e6d9e5.php
delete mode 100755 storage/framework/views/cb2d49226f26870c6bceba51b57bddf9.php
delete mode 100755 storage/framework/views/cfc6ded8ebafd62913d5bfd0eb61d4da.php
delete mode 100755 storage/framework/views/d1ccfbdb98ebc883de13ea5bbb13c556.php
delete mode 100755 storage/framework/views/d2b472954eead18e3056d1eacdb49d06.php
delete mode 100755 storage/framework/views/d5731eda75805696b9f90465ceed74f6.php
delete mode 100755 storage/framework/views/d65ac084e1dbd8e99e71b975e9edcf42.php
delete mode 100755 storage/framework/views/d6abb9d4582d74a40cf71c1259a64b78.php
delete mode 100755 storage/framework/views/d751874ab64bcc49bdf4b12b4fefba7a.php
delete mode 100755 storage/framework/views/e3b2763292eb5c70536d0e5ce1ceb1b1.php
delete mode 100755 storage/framework/views/e6056fdcc373077ccd717e502c884188.php
delete mode 100755 storage/framework/views/e8f60d5f5b2a4c688f1bc12477b209df.php
delete mode 100755 storage/framework/views/e977038aecb94bea84d87a4b20253bc2.php
delete mode 100755 storage/framework/views/f54bb4079043bd1b778fefd2b7a89a6b.php
delete mode 100755 storage/framework/views/f74cbe53c0921a5188dd3561abbeab7c.php
delete mode 100755 storage/framework/views/f7b5acd723ad1e4180d8c10d45f3d46f.php
delete mode 100755 storage/framework/views/f88561a736502fe60bcd6b405bdc404a.php
delete mode 100755 storage/framework/views/f98c27feaa80ae6e7f6c002c26f6107d.php
delete mode 100755 storage/framework/views/fc56695b593a318c0d96a4e22b861473.php
delete mode 100755 storage/framework/views/fd818b8a3aad58165ab49d5ee0216f56.php
delete mode 100755 storage/framework/views/fe9cfbf7e1411525aee221ec97dfa1d6.php
diff --git a/.MEMORY.md.swp b/.MEMORY.md.swp
deleted file mode 100644
index 84f4dadc588a8d7fc39d8b952a44b7ed2d955160..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1024
zcmYc?$V<%2SFq4CVL$=1uQM_f<>!~62;$&m=A~AYl;z@(MF{)4`uYb&>gA>&ghpAT
LAut*O0~i7T)AI}y
diff --git a/.npmrc b/.npmrc
deleted file mode 100644
index f03b3f93..00000000
--- a/.npmrc
+++ /dev/null
@@ -1,3 +0,0 @@
-ignore-scripts=true
-audit=true
-prefix=/home/inext/.npm-global
diff --git a/.phpunit.result.cache b/.phpunit.result.cache
deleted file mode 100644
index 78fe23d1..00000000
--- a/.phpunit.result.cache
+++ /dev/null
@@ -1 +0,0 @@
-{"version":2,"defects":{"Tests\\Feature\\ExampleTest::test_the_application_returns_a_successful_response":8,"Tests\\Feature\\CalendarEventsTest::test_generate_settimanale_events_produces_weekly_occurrences":8,"Tests\\Feature\\StorageRepositoryTest::test_can_create_webdav_repository":8,"Tests\\Feature\\StorageRepositoryTest::test_can_create_google_drive_repository":8,"Tests\\Feature\\StorageRepositoryTest::test_requires_nome_and_tipo":8,"Tests\\Feature\\StorageRepositoryTest::test_can_list_repositories_in_settings":8,"Tests\\Feature\\StorageRepositoryTest::test_can_delete_repository_with_no_documents":8,"Tests\\Feature\\StorageRepositoryTest::test_encrypts_sensitive_config_fields":8,"Tests\\Feature\\StorageRepositoryTest::test_tipo_labels":8,"Tests\\Feature\\StorageRepositoryTest::test_tipo_icons":8,"Tests\\Feature\\StorageRepositoryTest::test_can_reorder_repositories":8,"Tests\\Unit\\StorageRepositoryServiceTest::test_encrypts_webdav_password":8,"Tests\\Unit\\StorageRepositoryServiceTest::test_encrypts_google_drive_secrets":8,"Tests\\Unit\\StorageRepositoryServiceTest::test_builds_null_filesystem_for_unknown_tipo":8,"Tests\\Feature\\CalendarEventsTest::test_find_first_sunday_of_june_2026":8,"Tests\\Feature\\CalendarEventsTest::test_find_second_saturday_of_june_2026":8,"Tests\\Feature\\CalendarEventsTest::test_find_fifth_sunday_returns_null_when_not_in_month":8,"Tests\\Feature\\CalendarEventsTest::test_generate_mensile_events_for_all_months":8,"Tests\\Feature\\CalendarEventsTest::test_generate_mensile_events_respects_selected_months":8,"Tests\\Feature\\CalendarEventsTest::test_generate_annuale_events_produces_correct_dates":8},"times":{"Tests\\Unit\\ExampleTest::test_that_true_is_true":0.001,"Tests\\Feature\\ExampleTest::test_the_application_returns_a_successful_response":0.029,"Tests\\Feature\\CalendarEventsTest::test_find_first_sunday_of_june_2026":0.003,"Tests\\Feature\\CalendarEventsTest::test_find_second_saturday_of_june_2026":0.001,"Tests\\Feature\\CalendarEventsTest::test_find_fifth_sunday_returns_null_when_not_in_month":0.001,"Tests\\Feature\\CalendarEventsTest::test_generate_mensile_events_for_all_months":0.014,"Tests\\Feature\\CalendarEventsTest::test_generate_mensile_events_respects_selected_months":0.001,"Tests\\Feature\\CalendarEventsTest::test_generate_annuale_events_produces_correct_dates":0.001,"Tests\\Feature\\CalendarEventsTest::test_generate_settimanale_events_produces_weekly_occurrences":0.005,"Tests\\Unit\\StorageRepositoryServiceTest::test_encrypts_webdav_password":0.016,"Tests\\Unit\\StorageRepositoryServiceTest::test_encrypts_google_drive_secrets":0.001,"Tests\\Unit\\StorageRepositoryServiceTest::test_builds_null_filesystem_for_unknown_tipo":0.015,"Tests\\Feature\\StorageRepositoryTest::test_can_create_webdav_repository":0.026,"Tests\\Feature\\StorageRepositoryTest::test_can_create_google_drive_repository":0.005,"Tests\\Feature\\StorageRepositoryTest::test_requires_nome_and_tipo":0.006,"Tests\\Feature\\StorageRepositoryTest::test_can_delete_repository_with_no_documents":0.009,"Tests\\Feature\\StorageRepositoryTest::test_tipo_labels":0.001,"Tests\\Feature\\StorageRepositoryTest::test_tipo_icons":0.001,"Tests\\Feature\\StorageRepositoryTest::test_can_reorder_repositories":0.007}}
\ No newline at end of file
diff --git a/AGENTS.md_old b/AGENTS.md_old
deleted file mode 100644
index 6b39b377..00000000
--- a/AGENTS.md_old
+++ /dev/null
@@ -1,114 +0,0 @@
--# AGENTS.md
-## System Prompt – Senior PHP 8.4 / Laravel 13 / AdminLTE / MySQL (Enterprise)
-
-### 🎯 Ruolo
-Sei un **Senior Software Engineer** specializzato in:
-- PHP **8.4**
-- Laravel **13**
-- AdminLTE
-- MySQL
-- Architetture enterprise, scalabili e manutenibili
-
-Il tuo compito è produrre codice completo, sicuro, scalabile e conforme agli standard professionali.
-
----
-
-### 🧠 Gestione della memoria (`MEMORY.md`)
-#Prima di **ogni azione**, devi:
-#
-#1. **Leggere `MEMORY.md`** per recuperare il contesto precedente.
-#2. **Aggiornare `MEMORY.md`** con:
-# - nuove scoperte tecniche,
-# - decisioni architetturali,
-# - file creati o modificati,
-# - dipendenze aggiunte,
-# - problemi risolti o aperti,
-# - convenzioni adottate.
-#
-# `MEMORY.md` è la **fonte di verità** del progetto e garantisce continuità e coerenza.
-
-
-### 🧠 Gestione della memoria (MEMORY.md)
-Prima di ogni azione devi:
-
-1. Leggere completamente il file `MEMORY.md` per recuperare il contesto precedente.
-2. Utilizzare le informazioni contenute in `MEMORY.md` per garantire continuità, coerenza e allineamento del progetto.
-
----
-
-### 📌 Regola obbligatoria di persistenza
-Dopo ogni richiesta dell’utente, l’agente deve:
-
-1. Rileggere completamente `MEMORY.md` prima di iniziare qualsiasi operazione.
-2. Aggiornare `MEMORY.md` riscrivendolo per intero, includendo:
- - nuove informazioni apprese,
- - file creati o modificati,
- - decisioni architetturali,
- - dipendenze aggiunte,
- - problemi aperti o risolti,
- - stato corrente del progetto,
- - qualsiasi contenuto rilevante generato nella risposta.
-3. Salvare il nuovo contenuto di `MEMORY.md` nella root del repository.
-4. Ogni risposta dell’agente deve sempre contenere:
- - l’output richiesto dall’utente,
- - la nuova versione completa e aggiornata di `MEMORY.md`.
-
-Se una sezione di `MEMORY.md` non cambia, deve comunque essere mantenuta.
-
----
-
-### 🧩 Stile di lavoro
-- Produci **file completi**, mai snippet isolati.
-- Rispetta **PSR‑12**, **SOLID**, **Clean Architecture**, **DDD** quando applicabile.
-- Usa Laravel 13 con:
- - Eloquent ORM,
- - Form Request,
- - Resource / ResourceCollection,
- - Policy + Gate,
- - Eventi + Listener,
- - Modularizzazione del codice.
-- Usa AdminLTE integrato con Blade e asset pipeline. Prendi a riferimento questa pagina per le viste: https://adminlte.io/themes/AdminLTE/index2.html
-- Usa MySQL con:
- - migrazioni complete,
- - foreign key,
- - indici ottimizzati,
- - naming convention coerente.
-
----
-
-### 🔐 Sicurezza e qualità
-- Valida sempre input e output.
-- Evita SQL injection, XSS, CSRF, mass assignment.
-- Usa DTO o Resource per l’esposizione dati.
-- Scrivi test PHPUnit quando richiesto.
-- Documenta con PHPDoc e README tecnici.
-
----
-
-### ⚙️ Configurazione speciale
-Imposta sempre:
-OPENCODE_EXPERIMENTAL_LSP_TOOL=true
-
-
----
-
-### 🧭 Modalità di risposta
-Ogni volta che produci output:
-
-1. **Controlla `MEMORY.md`**
-2. Aggiorna `MEMORY.md`
-3. Genera:
- - file completi,
- - struttura delle directory,
- - istruzioni di installazione,
- - comandi artisan,
- - note architetturali,
- - eventuali script di build.
-
----
-
-### 🔗 Collegamenti utili
-- [Laravel_architettura](ca://s?q=Laravel_architettura)
-- [AdminLTE_integrazione](ca://s?q=AdminLTE_integrazione)
-- [Pattern_enterprise_PHP](ca://s?q=Pattern_enterprise_PHP)
-- [Gestione_MEMORIA_md](ca://s?q=Gestione_MEMORIA_md)
diff --git a/MEMORY.md b/MEMORY.md
index 52f3bf4d..c21928d7 100644
--- a/MEMORY.md
+++ b/MEMORY.md
@@ -1,1089 +1,48 @@
-# MEMORY.md - Glastree Project
+# 🧠 MEMORY.md — Stato Progetto
-## Project Context
-Laravel 13 / PHP 8.4 project for parish management (Glastree). Full codebase exists and is operational.
+## Goal
+- Stabilizzare il modale "Carica Documento" e migliorare la gestione cartelle durante l'upload.
----
+## Constraints & Preferences
+- (none)
-## Issues Open
-*Nessuna issue aperta.*
+## Progress
+### Done
+- Aggiunto pulsante "Scarica Guida PDF" nella sidebar di `/help` con nuovo metodo `HelpController::downloadPdf()` e route `GET /help/pdf/download`
+- Aggiunta card "Backup" in dashboard (small-box bg-navy, icona fa-hdd) con conteggio backup, visibile solo a utenti con `canManage('settings')`
+- Corretto `modal-body` nel modale `#uploadModal` che chiudeva prematuramente (pulsanti Annulla/Carica finivano fuori dal popup)
+- Aggiunto campo `visibilita` (select Pubblico/Individuo/Gruppo) nel form di upload documento, mancante e richiesto dal controller
+- Aggiunto selettore cartelle visibile (``) nel modale di upload (sostituisce il vecchio hidden input)
+- Aggiunto pulsante "Nuova cartella" sia nel modale upload (`#uploadNewFolderBtn`) che nel modale "Sposta" (`#massMoveNewFolderBtn`)
+- Sostituito SweetAlert2 per creazione cartella con il modale Bootstrap `#newFolderModal` già esistente (risolve focus trap Bootstrap 4 che bloccava l'input)
+- Aggiornato `toggleUploadRepo()` per nascondere/mostrare il gruppo cartella in base alla selezione del repository remoto
+- Aggiunto flag `window._uploadNewFolder` per comportamento differenziato: da upload aggiunge opzione al select senza ricaricare, da tooltip ricarica la pagina
+- **Fix backdrop grigio persistente dopo creazione cartella**: ora `#uploadModal` viene prima nascosto (quando si clicca "Nuova cartella") e poi ri-mostrato dopo la creazione nel success handler, risolvendo il conflitto di backdrop tra modali annidati Bootstrap 4
+- **Fix scroll modal upload**: ristrutturato `` di chiusura per `massForm` (linea 391) prima dei modali. Il form `massForm` avvolgeva tutto il contenuto incluse le modali, causando `
-
- Verifica Requisiti di Sistema
- Il sistema controlla che il server soddisfi i requisiti minimi per eseguire Glastree.
-
-
-
-
-
-
-
-
-
-
-
-
-
- = e($check['name']) ?>
- = $check['passed'] ? 'OK' : 'ERRORE' ?>
-
- = e($check['message']) ?>
-
-
-
-
-
-
-
-
- Requisiti critici non soddisfatti. Risolvi gli errori sopra e ricarica la pagina.
-
-
-
-
- Alcuni requisiti non critici non sono soddisfatti. Puoi proseguire, ma alcune funzionalita potrebbero essere limitate.
-
-
-
-
- $appUrl,
- 'db_host' => $dbHost,
- 'db_port' => (string) $dbPort,
- 'db_database' => $dbName,
- 'db_username' => $dbUser,
- 'db_password' => $dbPass,
- ]);
-
- if ($envWritten) {
- redirect('setup.php?step=4');
- } else {
- $errors[] = 'Impossibile scrivere il file .env.';
- }
- } else {
- $errors[] = $result['message'];
- }
- }
- } elseif ($action === 'test_existing') {
- // Test existing database connection
- $dbName = $_POST['db_name'] ?? '';
- $dbUser = $_POST['db_user'] ?? '';
- $dbPass = $_POST['db_pass'] ?? '';
- $appUrl = $_POST['app_url'] ?? getBaseUrl();
-
- if (empty($dbName) || empty($dbUser)) {
- $errors[] = 'Compila tutti i campi obbligatori.';
- } else {
- $result = testDatabaseConnection($dbHost, $dbPort, $dbName, $dbUser, $dbPass);
- if ($result['success']) {
- $_SESSION['db_host'] = $dbHost;
- $_SESSION['db_port'] = $dbPort;
- $_SESSION['db_name'] = $dbName;
- $_SESSION['db_user'] = $dbUser;
- $_SESSION['db_pass'] = $dbPass;
- $_SESSION['app_url'] = $appUrl;
-
- $envWritten = writeEnvFile([
- 'app_url' => $appUrl,
- 'db_host' => $dbHost,
- 'db_port' => (string) $dbPort,
- 'db_database' => $dbName,
- 'db_username' => $dbUser,
- 'db_password' => $dbPass,
- ]);
-
- if ($envWritten) {
- redirect('setup.php?step=4');
- } else {
- $errors[] = 'Impossibile scrivere il file .env.';
- }
- } else {
- $errors[] = $result['message'];
- }
- }
- } else {
- $errors[] = 'Azione non valida.';
- }
- }
-
- renderHeader('Configurazione Database', '3');
- ?>
- Configurazione Database
- Configura la connessione al database MySQL.
-
-
-
- = e($success) ?>
-
-
-
-
-
- ['--force' => true],
- 'migrate' => ['--force' => true],
- 'db:seed' => ['--force' => true],
- 'storage:link' => [],
- ];
-
- $results = runArtisanCommands($kernel, $commands);
- $allOk = true;
- $log = [];
- foreach ($results as $r) {
- $log[] = ($r['success'] ? 'OK' : 'ERRORE') . ': ' . $r['command'];
- if (!$r['success']) $allOk = false;
- }
-
- if ($allOk) {
- $_SESSION['install_done'] = true;
- $success = 'Installazione completata con successo!';
- $log[] = 'Ora puoi creare l\'amministratore.';
- } else {
- $errors[] = 'Alcuni comandi sono falliti. Verifica i log.';
- foreach ($log as $l) $errors[] = $l;
- }
- } catch (\Exception $e) {
- $errors[] = 'Errore: ' . $e->getMessage();
- }
- } elseif ($mode === 'backup') {
- // Handle backup upload
- if (!empty($_FILES['backup_file']) && $_FILES['backup_file']['error'] === UPLOAD_ERR_OK) {
- $uploadedFile = $_FILES['backup_file']['tmp_name'];
- $originalName = $_FILES['backup_file']['name'];
-
- $result = restoreFromBackup(
- $uploadedFile,
- $_SESSION['db_user'] ?? '',
- $_SESSION['db_pass'] ?? '',
- $_SESSION['db_name'] ?? ''
- );
-
- if ($result['success']) {
- $_SESSION['install_done'] = true;
- $success = 'Backup ripristinato con successo!';
- $log = $result['log'] ?? [];
- } else {
- $errors[] = $result['message'];
- if (!empty($result['log'])) {
- foreach ($result['log'] as $l) $errors[] = $l;
- }
- }
- } elseif (!empty($_POST['backup_path'])) {
- // Backup file already on server
- $serverPath = $_POST['backup_path'];
-
- if (!file_exists($serverPath)) {
- $errors[] = 'File non trovato: ' . $serverPath;
- } else {
- $result = restoreFromBackup(
- $serverPath,
- $_SESSION['db_user'] ?? '',
- $_SESSION['db_pass'] ?? '',
- $_SESSION['db_name'] ?? ''
- );
-
- if ($result['success']) {
- $_SESSION['install_done'] = true;
- $success = 'Backup ripristinato con successo!';
- } else {
- $errors[] = $result['message'];
- }
- }
- } else {
- $errors[] = 'Seleziona un file di backup o fornisci il percorso.';
- }
- }
- }
-
- renderHeader($mode === 'fresh' ? 'Installazione' : 'Ripristino Backup', '4');
- ?>
- = $mode === 'fresh' ? 'Installazione Database' : 'Ripristino Backup' ?>
-
-
-
- = e($success) ?>
-
-
-
-
-
-
-
- Installazione completata. Procedi al passo successivo.
-
-
-
-
-
-
-
-
-
-
-
- = $mode === 'fresh' ? 'Crea Amministratore' : 'Verifica Utenti' ?>
-
-
-
- = e($success) ?>
-
-
-
-
-
-
- Amministratore creato con successo!
-
- Utenti configurati.
-
-
-
-
-
-
-
-
Utenti trovati nel database ripristinato:
-
-
- = e($u['name']) ?> <= e($u['email']) ?>>
- = $u['is_admin'] ? 'Superadmin ' : '' ?>
-
-
-
-
Puoi proseguire senza creare nuovi utenti.
-
-
-
- oppure crea un nuovo amministratore:
-
-
-
-
- [],
- 'route:cache' => [],
- 'view:cache' => [],
- ];
-
- $results = runArtisanCommands($kernel, $commands);
- $allOk = true;
- foreach ($results as $r) {
- if (!$r['success']) $allOk = false;
- }
-
- if ($allOk) {
- // Self-destruct
- selfDestruct();
- $finalized = true;
- } else {
- $errors[] = 'Alcune operazioni sono fallite.';
- }
- }
- } catch (\Exception $e) {
- $errors[] = 'Errore: ' . $e->getMessage();
- }
- }
-
- if (!$finalized && empty($errors)) {
- // Initial display
- renderHeader('Finalizzazione', '6');
- ?>
- Finalizzazione
- Completa l'installazione generando la cache e rimuovendo i file di setup.
-
-
-
-
-
- Installazione Completata!
-
-
-
-
-
-
-
- = $r['success'] ? ' ' : ' ' ?>
- = e($r['command']) ?>
-
-
-
-
-
-
-
-
-
Glastree e stato installato con successo!
-
La cartella installer/ e stata eliminata per sicurezza.
-
-
-
-
Prossimi passi:
-
- Configura SSL con Let's Encrypt per connessioni sicure
- Accedi con le credenziali amministratore
- Vai su Impostazioni per configurare:
-
- Nome applicazione e logo
- Email (SMTP e IMAP)
- Repository remoti (Google Drive, Nextcloud)
-
-
- Vai su Admin per creare altri utenti
- Configura il cron per backup automatico:
- * * * * * cd = e(dirname(__DIR__)) ?> && php artisan schedule:run >> /dev/null 2>&1
-
-
-
-
-
-
- Ruoli
+
+
+
+ Backup
+
+
diff --git a/resources/views/documenti/index.blade.php b/resources/views/documenti/index.blade.php
index f534b800..935399cf 100644
--- a/resources/views/documenti/index.blade.php
+++ b/resources/views/documenti/index.blade.php
@@ -500,7 +500,7 @@ $canDeleteDocumenti = Auth::user()->canDelete('documenti');
{{-- MODAL: Nuova Cartella --}}