From 69981561f83ba3a05217e75cac6c68e8dc671c45 Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 29 Mar 2026 21:54:40 +0200 Subject: =?UTF-8?q?erreur=20algo=20le=20remplissage=20BDD=20doit=20=C3=AAt?= =?UTF-8?q?re=20avant=20cr=C3=A9ation=20compte=20admin,=20rangement=20code?= =?UTF-8?q?=20classe=20DatabaseSettingUp,=20erreur=20mention=20extension?= =?UTF-8?q?=20GD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.php | 6 +- src/model/DatabaseSettingUp.php | 152 +++++++++++++++++++++++++++++++++++++++ src/service/Installation.php | 153 ++-------------------------------------- 3 files changed, 162 insertions(+), 149 deletions(-) create mode 100644 src/model/DatabaseSettingUp.php diff --git a/public/index.php b/public/index.php index db8808e..7d53b5c 100644 --- a/public/index.php +++ b/public/index.php @@ -48,11 +48,11 @@ AppMode::load($entityManager); if(IS_ADMIN && AppMode::is('maintenance')){ Installation::phpDependancies(); Installation::checkFilesAndFoldersRights(); - +} +if(AppMode::is('maintenance')){ // si appelée pour la 1ère fois, remplit la BDD et active le mode "run" - Installation::fillStartingDatabase($entityManager); + DatabaseSettingUp::run($entityManager); } - $request = Request::createFromGlobals(); // en mode maintenance laisser la possibilité de se logger, bloquer le reste du site aux visiteurs diff --git a/src/model/DatabaseSettingUp.php b/src/model/DatabaseSettingUp.php new file mode 100644 index 0000000..9ff7344 --- /dev/null +++ b/src/model/DatabaseSettingUp.php @@ -0,0 +1,152 @@ +getRepository(AppMetadata::class)->find('installed'); + return !$metadata || $metadata->getValue() !== '1'; + } + + // protection 2, qui vérifie vraiment que les tables concernées sont vides + static private function areTablesEmpty(EntityManager $entityManager): bool + { + $empty = true; + $entities = ['Page', 'Node', 'NodeData']; + foreach($entities as $entity){ + $entity = 'App\Entity\\' . $entity; // nécéssaire quand on insère le nom avec une variable + + if($entityManager + ->createQuery("SELECT e FROM $entity e") + ->setMaxResults(1) + ->getOneOrNullResult()){ + $empty = false; + } + } + + // cas anormal détecté, on remet en place la clé "installed" + if(!$empty){ + self::preventReinstallation($entityManager); + } + + return $empty; + } + + static private function fillStartingDatabase(EntityManager $entityManager): void + { + /* -- table page -- */ + // paramètres: name_page, end_of_path, reachable, in_menu, hidden, position, parent + $accueil = new Page('Accueil', 'accueil', "Page d'accueil", true, true, false, 1, NULL); + $article = new Page('Article', 'article', "", true, false, false, NULL, NULL); + $connection = new Page('Connexion', 'connection', "Connexion", true, false, false, NULL, NULL); + $my_account = new Page('Mon compte', 'user_edit', "Mon compte", true, false, false, NULL, NULL); + $menu_paths = new Page("Menu et chemins", 'menu_paths', "Menu et chemins", true, false, false, NULL, NULL); + $menu_paths->addCSS('menu'); + $menu_paths->addJS('menu'); + $new_page = new Page('Nouvelle page', 'new_page', "Nouvelle page", true, false, false, NULL, NULL); + $new_page->addCSS('new_page'); + $new_page->addJS('new_page'); + $emails = new Page("Courriels", 'emails', "Consulter les courriels en base de données", true, false, false, NULL, NULL); + $emails->addCSS('show_emails'); + $emails->addJS('form'); + + /* -- table node -- */ + // paramètres: name_node, article_timestamp, attributes, position, parent, page, article + $head = new Node('head', 1, NULL, NULL, NULL); + $header = new Node('header', 2, NULL, NULL, NULL); + $nav = new Node('nav', 1, $header, NULL, NULL); + $main = new Node('main', 3, NULL, NULL, NULL); + $footer = new Node('footer', 4, NULL, NULL, NULL); + $breadcrumb = new Node('breadcrumb', 2, $header, NULL, NULL); + $login = new Node('login', 1, $main, $connection, NULL); + $user_edit = new Node('user_edit', 1, $main, $my_account, NULL); + $bloc_edit_menu = new Node('menu', 1, $main, $menu_paths, NULL); + $bloc_new_page = new Node('new_page', 1, $main, $new_page, NULL); + $bloc_emails = new Node('show_emails', 1, $main, $emails, NULL); + + /* -- table node_data -- */ + // paramètres: data, node, images + $head_data = new NodeData([], $head); + $header_data = new NodeData([], $header); + $footer_data = new NodeData([], $footer); + $emails_data = new NodeData([], $bloc_emails); + + /* -- table page -- */ + $entityManager->persist($accueil); + $entityManager->persist($article); + $entityManager->persist($connection); + $entityManager->persist($my_account); + $entityManager->persist($menu_paths); + $entityManager->persist($new_page); + $entityManager->persist($emails); + + /* -- table node -- */ + $entityManager->persist($head); + $entityManager->persist($header); + $entityManager->persist($nav); + $entityManager->persist($main); + $entityManager->persist($footer); + $entityManager->persist($breadcrumb); + $entityManager->persist($login); + $entityManager->persist($user_edit); + $entityManager->persist($bloc_edit_menu); + $entityManager->persist($bloc_new_page); + $entityManager->persist($bloc_emails); + + /* -- table node_data -- */ + $entityManager->persist($head_data); + $entityManager->persist($header_data); + $entityManager->persist($footer_data); + $entityManager->persist($emails_data); + + $entityManager->flush(); + } + + // met en place la protection + static private function preventReinstallation(EntityManager $entityManager): void + { + $metadata = $entityManager->getRepository(AppMetadata::class)->find('installed'); + if($metadata){ + $metadata->setValue('1'); + } + else{ + $metadata = new AppMetadata('installed', '1'); + $entityManager->persist($metadata); + } + $entityManager->flush(); + } +} \ No newline at end of file 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 @@ declare(strict_types=1); -use App\Entity\AppMetadata; -use App\Entity\Page; -use App\Entity\Node; -use App\Entity\NodeData; -use Doctrine\ORM\EntityManager; - class Installation { static public function phpDependancies(): void { $flag = false; - //$extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer', 'zip', 'dom']; // les 5 premières sont pour doctrine - $extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer']; + $extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer', 'imagick']; // les 5 premières sont pour doctrine + // ajouter plus tard zip pour les backup foreach($extensions as $extension){ if(!extension_loaded($extension)) { @@ -23,10 +17,13 @@ class Installation $flag = true; } } - if(!extension_loaded('imagick') && !extension_loaded('gd')){ + + /*if(!extension_loaded('imagick') && !extension_loaded('gd')){ echo("

il manque une de ces extensions au choix pour le traitement des images: imagick (de préférence) ou gd.

"); $flag = true; - } + }*/ + // si imagick n'est pas disponible, essayer gd (reste encore à coder) + if($flag){ echo '

Réalisez les actions nécéssaires sur le serveur ou contactez l\'administrateur du site.
Quand le problème sera résolu, il vous suffira de recharger la page.

'; @@ -70,140 +67,4 @@ class Installation // le test de connexion à la BDD est dans le doctrine bootstrap } } - - - /* 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 */ - - // protection 1 utilisé à chaque requête - static private function isFirstRun(EntityManager $entityManager): bool - { - $metadata = $entityManager->getRepository(AppMetadata::class)->find('installed'); - return !$metadata || $metadata->getValue() !== '1'; - } - - // protection 2, qui vérifie vraiment que les tables concernées sont vides - static private function areTablesEmpty(EntityManager $entityManager): bool - { - $empty = true; - $entities = ['Page', 'Node', 'NodeData']; - foreach($entities as $entity){ - $entity = 'App\Entity\\' . $entity; // nécéssaire quand on insère le nom avec une variable - - if($entityManager - ->createQuery("SELECT e FROM $entity e") - ->setMaxResults(1) - ->getOneOrNullResult()){ - $empty = false; - } - } - - // cas anormal détecté, on remet en place la clé "installed" - if(!$empty){ - self::preventReinstallation($entityManager); - } - - return $empty; - } - - // met en place la protection - static private function preventReinstallation(EntityManager $entityManager): void - { - $metadata = $entityManager->getRepository(AppMetadata::class)->find('installed'); - if($metadata){ - $metadata->setValue('1'); - } - else{ - $metadata = new AppMetadata('installed', '1'); - $entityManager->persist($metadata); - } - $entityManager->flush(); - } - - static public function fillStartingDatabase(EntityManager $entityManager): void - { - if(!Installation::isFirstRun($entityManager)){ - return; - } - - // la BDD n'est pas vierge, on ne touche à rien - if(!self::areTablesEmpty($entityManager)){ - return; - } - - /* -- table page -- */ - // paramètres: name_page, end_of_path, reachable, in_menu, hidden, position, parent - $accueil = new Page('Accueil', 'accueil', "Page d'accueil", true, true, false, 1, NULL); - $article = new Page('Article', 'article', "", true, false, false, NULL, NULL); - $connection = new Page('Connexion', 'connection', "Connexion", true, false, false, NULL, NULL); - $my_account = new Page('Mon compte', 'user_edit', "Mon compte", true, false, false, NULL, NULL); - $menu_paths = new Page("Menu et chemins", 'menu_paths', "Menu et chemins", true, false, false, NULL, NULL); - $menu_paths->addCSS('menu'); - $menu_paths->addJS('menu'); - $new_page = new Page('Nouvelle page', 'new_page', "Nouvelle page", true, false, false, NULL, NULL); - $new_page->addCSS('new_page'); - $new_page->addJS('new_page'); - $emails = new Page("Courriels", 'emails', "Consulter les courriels en base de données", true, false, false, NULL, NULL); - $emails->addCSS('show_emails'); - $emails->addJS('form'); - - /* -- table node -- */ - // paramètres: name_node, article_timestamp, attributes, position, parent, page, article - $head = new Node('head', 1, NULL, NULL, NULL); - $header = new Node('header', 2, NULL, NULL, NULL); - $nav = new Node('nav', 1, $header, NULL, NULL); - $main = new Node('main', 3, NULL, NULL, NULL); - $footer = new Node('footer', 4, NULL, NULL, NULL); - $breadcrumb = new Node('breadcrumb', 2, $header, NULL, NULL); - $login = new Node('login', 1, $main, $connection, NULL); - $user_edit = new Node('user_edit', 1, $main, $my_account, NULL); - $bloc_edit_menu = new Node('menu', 1, $main, $menu_paths, NULL); - $bloc_new_page = new Node('new_page', 1, $main, $new_page, NULL); - $bloc_emails = new Node('show_emails', 1, $main, $emails, NULL); - - /* -- table node_data -- */ - // paramètres: data, node, images - $head_data = new NodeData([], $head); - $header_data = new NodeData([], $header); - $footer_data = new NodeData([], $footer); - $emails_data = new NodeData([], $bloc_emails); - - /* -- table page -- */ - $entityManager->persist($accueil); - $entityManager->persist($article); - $entityManager->persist($connection); - $entityManager->persist($my_account); - $entityManager->persist($menu_paths); - $entityManager->persist($new_page); - $entityManager->persist($emails); - - /* -- table node -- */ - $entityManager->persist($head); - $entityManager->persist($header); - $entityManager->persist($nav); - $entityManager->persist($main); - $entityManager->persist($footer); - $entityManager->persist($breadcrumb); - $entityManager->persist($login); - $entityManager->persist($user_edit); - $entityManager->persist($bloc_edit_menu); - $entityManager->persist($bloc_new_page); - $entityManager->persist($bloc_emails); - - /* -- table node_data -- */ - $entityManager->persist($head_data); - $entityManager->persist($header_data); - $entityManager->persist($footer_data); - $entityManager->persist($emails_data); - - $entityManager->flush(); - - // empêcher la réutilisation de cette fonction - self::preventReinstallation($entityManager); - - // fin de l'installation - AppMode::set($entityManager, 'run'); - - // recharger la page? - //header('Location: ' . new URL); - } } \ No newline at end of file -- cgit v1.2.3