aboutsummaryrefslogtreecommitdiff
path: root/src/service/Installation.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-03-29 21:54:40 +0200
committerpolo <ordipolo@gmx.fr>2026-03-29 21:54:40 +0200
commit69981561f83ba3a05217e75cac6c68e8dc671c45 (patch)
treeb37a266f43c6fbb03530557f47d0f63d606f750a /src/service/Installation.php
parentbc24cb0e862c66475ac04a4c5fab3eac48bcf4a1 (diff)
downloadcms-69981561f83ba3a05217e75cac6c68e8dc671c45.tar.gz
cms-69981561f83ba3a05217e75cac6c68e8dc671c45.tar.bz2
cms-69981561f83ba3a05217e75cac6c68e8dc671c45.zip
erreur algo le remplissage BDD doit être avant création compte admin, rangement code classe DatabaseSettingUp, erreur mention extension GDHEADmain
Diffstat (limited to 'src/service/Installation.php')
-rw-r--r--src/service/Installation.php153
1 files changed, 7 insertions, 146 deletions
diff --git a/src/service/Installation.php b/src/service/Installation.php
index 5c2a901..059c093 100644
--- a/src/service/Installation.php
+++ b/src/service/Installation.php
@@ -3,19 +3,13 @@
3 3
4declare(strict_types=1); 4declare(strict_types=1);
5 5
6use App\Entity\AppMetadata;
7use App\Entity\Page;
8use App\Entity\Node;
9use App\Entity\NodeData;
10use Doctrine\ORM\EntityManager;
11
12class Installation 6class Installation
13{ 7{
14 static public function phpDependancies(): void 8 static public function phpDependancies(): void
15 { 9 {
16 $flag = false; 10 $flag = false;
17 //$extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer', 'zip', 'dom']; // les 5 premières sont pour doctrine 11 $extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer', 'imagick']; // les 5 premières sont pour doctrine
18 $extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer']; 12 // ajouter plus tard zip pour les backup
19 foreach($extensions as $extension){ 13 foreach($extensions as $extension){
20 if(!extension_loaded($extension)) 14 if(!extension_loaded($extension))
21 { 15 {
@@ -23,10 +17,13 @@ class Installation
23 $flag = true; 17 $flag = true;
24 } 18 }
25 } 19 }
26 if(!extension_loaded('imagick') && !extension_loaded('gd')){ 20
21 /*if(!extension_loaded('imagick') && !extension_loaded('gd')){
27 echo("<p>il manque une de ces extensions au choix pour le traitement des images: <b>imagick</b> (de préférence) ou <b>gd</b>.</p>"); 22 echo("<p>il manque une de ces extensions au choix pour le traitement des images: <b>imagick</b> (de préférence) ou <b>gd</b>.</p>");
28 $flag = true; 23 $flag = true;
29 } 24 }*/
25 // si imagick n'est pas disponible, essayer gd (reste encore à coder)
26
30 if($flag){ 27 if($flag){
31 echo '<p>Réalisez les actions nécéssaires sur le serveur ou contactez l\'administrateur du site.<br> 28 echo '<p>Réalisez les actions nécéssaires sur le serveur ou contactez l\'administrateur du site.<br>
32 Quand le problème sera résolu, il vous suffira de <a href="#">recharger la page<a>.</p>'; 29 Quand le problème sera résolu, il vous suffira de <a href="#">recharger la page<a>.</p>';
@@ -70,140 +67,4 @@ class Installation
70 // le test de connexion à la BDD est dans le doctrine bootstrap 67 // le test de connexion à la BDD est dans le doctrine bootstrap
71 } 68 }
72 } 69 }
73
74
75 /* création d'un site minimal avec une page d'accueil à la toute 1ère visite du site, ne doit surtout pas être exécutée une seconde fois */
76
77 // protection 1 utilisé à chaque requête
78 static private function isFirstRun(EntityManager $entityManager): bool
79 {
80 $metadata = $entityManager->getRepository(AppMetadata::class)->find('installed');
81 return !$metadata || $metadata->getValue() !== '1';
82 }
83
84 // protection 2, qui vérifie vraiment que les tables concernées sont vides
85 static private function areTablesEmpty(EntityManager $entityManager): bool
86 {
87 $empty = true;
88 $entities = ['Page', 'Node', 'NodeData'];
89 foreach($entities as $entity){
90 $entity = 'App\Entity\\' . $entity; // nécéssaire quand on insère le nom avec une variable
91
92 if($entityManager
93 ->createQuery("SELECT e FROM $entity e")
94 ->setMaxResults(1)
95 ->getOneOrNullResult()){
96 $empty = false;
97 }
98 }
99
100 // cas anormal détecté, on remet en place la clé "installed"
101 if(!$empty){
102 self::preventReinstallation($entityManager);
103 }
104
105 return $empty;
106 }
107
108 // met en place la protection
109 static private function preventReinstallation(EntityManager $entityManager): void
110 {
111 $metadata = $entityManager->getRepository(AppMetadata::class)->find('installed');
112 if($metadata){
113 $metadata->setValue('1');
114 }
115 else{
116 $metadata = new AppMetadata('installed', '1');
117 $entityManager->persist($metadata);
118 }
119 $entityManager->flush();
120 }
121
122 static public function fillStartingDatabase(EntityManager $entityManager): void
123 {
124 if(!Installation::isFirstRun($entityManager)){
125 return;
126 }
127
128 // la BDD n'est pas vierge, on ne touche à rien
129 if(!self::areTablesEmpty($entityManager)){
130 return;
131 }
132
133 /* -- table page -- */
134 // paramètres: name_page, end_of_path, reachable, in_menu, hidden, position, parent
135 $accueil = new Page('Accueil', 'accueil', "Page d'accueil", true, true, false, 1, NULL);
136 $article = new Page('Article', 'article', "", true, false, false, NULL, NULL);
137 $connection = new Page('Connexion', 'connection', "Connexion", true, false, false, NULL, NULL);
138 $my_account = new Page('Mon compte', 'user_edit', "Mon compte", true, false, false, NULL, NULL);
139 $menu_paths = new Page("Menu et chemins", 'menu_paths', "Menu et chemins", true, false, false, NULL, NULL);
140 $menu_paths->addCSS('menu');
141 $menu_paths->addJS('menu');
142 $new_page = new Page('Nouvelle page', 'new_page', "Nouvelle page", true, false, false, NULL, NULL);
143 $new_page->addCSS('new_page');
144 $new_page->addJS('new_page');
145 $emails = new Page("Courriels", 'emails', "Consulter les courriels en base de données", true, false, false, NULL, NULL);
146 $emails->addCSS('show_emails');
147 $emails->addJS('form');
148
149 /* -- table node -- */
150 // paramètres: name_node, article_timestamp, attributes, position, parent, page, article
151 $head = new Node('head', 1, NULL, NULL, NULL);
152 $header = new Node('header', 2, NULL, NULL, NULL);
153 $nav = new Node('nav', 1, $header, NULL, NULL);
154 $main = new Node('main', 3, NULL, NULL, NULL);
155 $footer = new Node('footer', 4, NULL, NULL, NULL);
156 $breadcrumb = new Node('breadcrumb', 2, $header, NULL, NULL);
157 $login = new Node('login', 1, $main, $connection, NULL);
158 $user_edit = new Node('user_edit', 1, $main, $my_account, NULL);
159 $bloc_edit_menu = new Node('menu', 1, $main, $menu_paths, NULL);
160 $bloc_new_page = new Node('new_page', 1, $main, $new_page, NULL);
161 $bloc_emails = new Node('show_emails', 1, $main, $emails, NULL);
162
163 /* -- table node_data -- */
164 // paramètres: data, node, images
165 $head_data = new NodeData([], $head);
166 $header_data = new NodeData([], $header);
167 $footer_data = new NodeData([], $footer);
168 $emails_data = new NodeData([], $bloc_emails);
169
170 /* -- table page -- */
171 $entityManager->persist($accueil);
172 $entityManager->persist($article);
173 $entityManager->persist($connection);
174 $entityManager->persist($my_account);
175 $entityManager->persist($menu_paths);
176 $entityManager->persist($new_page);
177 $entityManager->persist($emails);
178
179 /* -- table node -- */
180 $entityManager->persist($head);
181 $entityManager->persist($header);
182 $entityManager->persist($nav);
183 $entityManager->persist($main);
184 $entityManager->persist($footer);
185 $entityManager->persist($breadcrumb);
186 $entityManager->persist($login);
187 $entityManager->persist($user_edit);
188 $entityManager->persist($bloc_edit_menu);
189 $entityManager->persist($bloc_new_page);
190 $entityManager->persist($bloc_emails);
191
192 /* -- table node_data -- */
193 $entityManager->persist($head_data);
194 $entityManager->persist($header_data);
195 $entityManager->persist($footer_data);
196 $entityManager->persist($emails_data);
197
198 $entityManager->flush();
199
200 // empêcher la réutilisation de cette fonction
201 self::preventReinstallation($entityManager);
202
203 // fin de l'installation
204 AppMode::set($entityManager, 'run');
205
206 // recharger la page?
207 //header('Location: ' . new URL);
208 }
209} \ No newline at end of file 70} \ No newline at end of file