diff options
| author | polo <ordipolo@gmx.fr> | 2025-08-11 06:25:39 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2025-08-11 06:25:39 +0200 |
| commit | d7468fc363b5d028db84373d4abfa6d7d19bacb9 (patch) | |
| tree | 0235e6c7520bb16b939f3e753ccd45c94bfaef28 /public | |
| parent | 90673ef19133e037cf401773f4262ba3d7d050bf (diff) | |
| download | cms-d7468fc363b5d028db84373d4abfa6d7d19bacb9.tar.gz cms-d7468fc363b5d028db84373d4abfa6d7d19bacb9.tar.bz2 cms-d7468fc363b5d028db84373d4abfa6d7d19bacb9.zip | |
nouveau routeur! et contrôleurs et vues pour la connexion et la gestion du compte, début d'utilisation de Request et Response
Diffstat (limited to 'public')
| -rw-r--r-- | public/assets/user_full.svg | 22 | ||||
| -rw-r--r-- | public/assets/user_hollow.svg | 18 | ||||
| -rw-r--r-- | public/css/body.css | 52 | ||||
| -rw-r--r-- | public/css/form.css | 14 | ||||
| -rw-r--r-- | public/index.php | 65 |
5 files changed, 115 insertions, 56 deletions
diff --git a/public/assets/user_full.svg b/public/assets/user_full.svg new file mode 100644 index 0000000..b211c67 --- /dev/null +++ b/public/assets/user_full.svg | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Written by Treer (gitlab.com/Treer) --> | ||
| 3 | <svg | ||
| 4 | version="1.1" | ||
| 5 | xmlns="http://www.w3.org/2000/svg" | ||
| 6 | xmlns:xlink="http://www.w3.org/1999/xlink" | ||
| 7 | width="600" | ||
| 8 | height="600" | ||
| 9 | fill="white"> | ||
| 10 | |||
| 11 | <title>Abstract user icon</title> | ||
| 12 | |||
| 13 | <defs> | ||
| 14 | <clipPath id="circular-border"> | ||
| 15 | <circle cx="300" cy="300" r="250" /> | ||
| 16 | </clipPath> | ||
| 17 | </defs> | ||
| 18 | |||
| 19 | <circle cx="300" cy="300" r="280" fill="black" /> | ||
| 20 | <circle cx="300" cy="230" r="100" /> | ||
| 21 | <circle cx="300" cy="550" r="190" clip-path="url(#circular-border)" /> | ||
| 22 | </svg> \ No newline at end of file | ||
diff --git a/public/assets/user_hollow.svg b/public/assets/user_hollow.svg new file mode 100644 index 0000000..ca26d18 --- /dev/null +++ b/public/assets/user_hollow.svg | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | <!-- Written by Treer (gitlab.com/Treer) --> | ||
| 3 | <svg | ||
| 4 | version="1.1" | ||
| 5 | xmlns="http://www.w3.org/2000/svg" | ||
| 6 | xmlns:xlink="http://www.w3.org/1999/xlink" | ||
| 7 | width="600" | ||
| 8 | height="600" | ||
| 9 | stroke="black" | ||
| 10 | stroke-width="30" | ||
| 11 | fill="none"> | ||
| 12 | |||
| 13 | <title>Abstract user icon</title> | ||
| 14 | |||
| 15 | <circle cx="300" cy="300" r="265" /> | ||
| 16 | <circle cx="300" cy="230" r="115" /> | ||
| 17 | <path d="M106.81863443903,481.4 a205,205 1 0,1 386.36273112194,0" stroke-linecap="butt" /> | ||
| 18 | </svg> \ No newline at end of file | ||
diff --git a/public/css/body.css b/public/css/body.css index a03510f..274627c 100644 --- a/public/css/body.css +++ b/public/css/body.css | |||
| @@ -55,6 +55,13 @@ section > h3 | |||
| 55 | margin: 0; | 55 | margin: 0; |
| 56 | text-align: center; | 56 | text-align: center; |
| 57 | } | 57 | } |
| 58 | .login_form | ||
| 59 | { | ||
| 60 | background-color: white; | ||
| 61 | margin: 15px; | ||
| 62 | padding: 15px; | ||
| 63 | } | ||
| 64 | |||
| 58 | .grid_columns | 65 | .grid_columns |
| 59 | { | 66 | { |
| 60 | display: grid; | 67 | display: grid; |
| @@ -181,7 +188,7 @@ button .action_icon:hover | |||
| 181 | display: flex; | 188 | display: flex; |
| 182 | justify-content: end; | 189 | justify-content: end; |
| 183 | } | 190 | } |
| 184 | section button | 191 | section button, section input[type=submit] |
| 185 | { | 192 | { |
| 186 | color: #ff1d04; | 193 | color: #ff1d04; |
| 187 | font-size: medium; | 194 | font-size: medium; |
| @@ -189,7 +196,7 @@ section button | |||
| 189 | background-color: white; | 196 | background-color: white; |
| 190 | border: lightgrey 2px outset; /* rend identiques les boutons firefox et chromium */ | 197 | border: lightgrey 2px outset; /* rend identiques les boutons firefox et chromium */ |
| 191 | } | 198 | } |
| 192 | section button:hover | 199 | section button:hover, section input[type=submit]:hover |
| 193 | { | 200 | { |
| 194 | background-color: yellow; | 201 | background-color: yellow; |
| 195 | border-radius: 4px; | 202 | border-radius: 4px; |
| @@ -199,4 +206,45 @@ section button:hover | |||
| 199 | article a:hover | 206 | article a:hover |
| 200 | { | 207 | { |
| 201 | cursor: pointer; | 208 | cursor: pointer; |
| 209 | } | ||
| 210 | |||
| 211 | .user_edit_header | ||
| 212 | { | ||
| 213 | /*display: flex; | ||
| 214 | justify-content: space-evenly; | ||
| 215 | align-items: center;*/ | ||
| 216 | display: grid; | ||
| 217 | grid-template-columns: repeat(3, 1fr); | ||
| 218 | text-align: center; | ||
| 219 | padding: 15px; | ||
| 220 | } | ||
| 221 | .user_icon | ||
| 222 | { | ||
| 223 | height: 36px; | ||
| 224 | } | ||
| 225 | .user_edit_flex | ||
| 226 | { | ||
| 227 | /*display: flex; | ||
| 228 | flex-wrap: wrap; | ||
| 229 | justify-content: space-between;*/ | ||
| 230 | display: grid; | ||
| 231 | grid-template-columns: repeat(2, 1fr); | ||
| 232 | } | ||
| 233 | @media screen and (max-width: 900px) | ||
| 234 | { | ||
| 235 | .user_edit_flex | ||
| 236 | { | ||
| 237 | display: block; | ||
| 238 | } | ||
| 239 | } | ||
| 240 | @media screen and (max-width: 500px) | ||
| 241 | { | ||
| 242 | .empty_column | ||
| 243 | { | ||
| 244 | display: none; | ||
| 245 | } | ||
| 246 | .user_edit_header | ||
| 247 | { | ||
| 248 | grid-template-columns: repeat(2, 1fr); | ||
| 249 | } | ||
| 202 | } \ No newline at end of file | 250 | } \ No newline at end of file |
diff --git a/public/css/form.css b/public/css/form.css index 84c73ac..5bfa768 100644 --- a/public/css/form.css +++ b/public/css/form.css | |||
| @@ -14,20 +14,6 @@ | |||
| 14 | .form .full_width_column{ | 14 | .form .full_width_column{ |
| 15 | grid-column: 1 / span 2; | 15 | grid-column: 1 / span 2; |
| 16 | } | 16 | } |
| 17 | .form_inputs input[type=submit] | ||
| 18 | { | ||
| 19 | color: #ff1d04; | ||
| 20 | font-size: medium; | ||
| 21 | border-radius: 4px; | ||
| 22 | background-color: white; | ||
| 23 | border: lightgrey 2px outset; | ||
| 24 | } | ||
| 25 | .form_inputs input[type=submit]:hover | ||
| 26 | { | ||
| 27 | background-color: yellow; | ||
| 28 | border-radius: 4px; | ||
| 29 | cursor: pointer; | ||
| 30 | } | ||
| 31 | 17 | ||
| 32 | .no_recipient_warning{ | 18 | .no_recipient_warning{ |
| 33 | color: red; | 19 | color: red; |
diff --git a/public/index.php b/public/index.php index b7eeeae..89bb203 100644 --- a/public/index.php +++ b/public/index.php | |||
| @@ -1,10 +1,24 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // public/index/php | 2 | // public/index/php |
| 3 | 3 | ||
| 4 | /* plan d'action pour symfonyfier le site | ||
| 5 | 1/ intégrer les classes Request et Response sans changer modifier les liens | ||
| 6 | 2/ méthodes HTTP: GET, HEAD, POST, PUT, PATCH, DELETE, etc, pour un pré-routage (légères modifications des liens) | ||
| 7 | 3/ passer à des chemins modernes "ciblant des ressources" genre /chemin/de/la/page | ||
| 8 | le mode modification de page doit thérioquement être appelé comme ça: /chemin/de/la/page/modif_page | ||
| 9 | apparemment, le from=nom_page pour les formulaires ne se fait pas... | ||
| 10 | 4/ utiliser le routeur de symfony: nécéssite que tous les contrôleurs soient des classes avec un namespace | ||
| 11 | 5/ http-foundation possède aussi une classe Session. intéressant! | ||
| 12 | */ | ||
| 13 | |||
| 4 | declare(strict_types=1); | 14 | declare(strict_types=1); |
| 5 | 15 | ||
| 16 | use Symfony\Component\HttpFoundation\Request; | ||
| 17 | //use Symfony\Component\HttpFoundation\Session\Session; | ||
| 18 | |||
| 6 | 19 | ||
| 7 | /* -- partie 1: prétraitement -- */ | 20 | /* -- partie 1: prétraitement -- |
| 21 | code à exécuter pour toutes requêtes */ | ||
| 8 | 22 | ||
| 9 | // une nouvelle classe? taper: composer dump-autoload -o | 23 | // une nouvelle classe? taper: composer dump-autoload -o |
| 10 | require "../vendor/autoload.php"; | 24 | require "../vendor/autoload.php"; |
| @@ -12,6 +26,11 @@ require "../vendor/autoload.php"; | |||
| 12 | // configuration possible par l'utilisateur | 26 | // configuration possible par l'utilisateur |
| 13 | Config::load('../config/config.ini'); | 27 | Config::load('../config/config.ini'); |
| 14 | 28 | ||
| 29 | // générateur de liens | ||
| 30 | URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443 | ||
| 31 | URL::setPort(Config::$port); | ||
| 32 | URL::setHost($_SERVER['HTTP_HOST'] . Config::$index_path); | ||
| 33 | |||
| 15 | // les messages d'erreur de déploiement qu'on aime | 34 | // les messages d'erreur de déploiement qu'on aime |
| 16 | require('../src/installation.php'); | 35 | require('../src/installation.php'); |
| 17 | phpDependancies(); | 36 | phpDependancies(); |
| @@ -20,13 +39,10 @@ phpDependancies(); | |||
| 20 | // $entityManager | 39 | // $entityManager |
| 21 | require '../src/model/doctrine-bootstrap.php'; // isDevMode est sur "true", DSN à adapter | 40 | require '../src/model/doctrine-bootstrap.php'; // isDevMode est sur "true", DSN à adapter |
| 22 | 41 | ||
| 23 | // générateur de liens | 42 | $request = Request::createFromGlobals(); |
| 24 | URL::setProtocol(Config::$protocol); // utile si port autre que 80 ou 443 | ||
| 25 | URL::setPort(Config::$port); | ||
| 26 | URL::setHost($_SERVER['HTTP_HOST'] . Config::$index_path); | ||
| 27 | 43 | ||
| 28 | // session | 44 | // session |
| 29 | //require('controller/Session.php'); | 45 | // (symfony/http-foundation pourrait nous aider avec les sessions) |
| 30 | ini_set('session.cookie_samesite', 'Strict'); | 46 | ini_set('session.cookie_samesite', 'Strict'); |
| 31 | ini_set('session.cookie_httponly', 'On'); | 47 | ini_set('session.cookie_httponly', 'On'); |
| 32 | ini_set('session.use_strict_mode', 'On'); | 48 | ini_set('session.use_strict_mode', 'On'); |
| @@ -38,39 +54,8 @@ if($_SESSION['admin'] === false || empty($_SESSION['user'])){ // OUT !! | |||
| 38 | $_SESSION['admin'] = false; | 54 | $_SESSION['admin'] = false; |
| 39 | } | 55 | } |
| 40 | 56 | ||
| 41 | // login, mot de passe et captcha | ||
| 42 | require '../src/controller/password.php'; | ||
| 43 | existUsers($entityManager); // si la table user est vide, on en crée un | ||
| 44 | |||
| 45 | |||
| 46 | /* -- partie 2: contrôleurs -- */ | ||
| 47 | |||
| 48 | // navigation avec des GET | ||
| 49 | define('CURRENT_PAGE', !empty($_GET['page']) ? htmlspecialchars($_GET['page']) : 'accueil'); | ||
| 50 | $id = ''; | ||
| 51 | if(!empty($_GET['id'])) | ||
| 52 | { | ||
| 53 | $id = htmlspecialchars($_GET['id']); // nettoyage qui n'abime pas les id du genre "n16" | ||
| 54 | } | ||
| 55 | |||
| 56 | /* -- routeur des données de formulaires et requêtes AJAX -- */ | ||
| 57 | require '../src/request_router.php'; | ||
| 58 | |||
| 59 | |||
| 60 | /* -- affichage d'une page -- */ | ||
| 61 | // mode modification d'une page activé | ||
| 62 | if($_SESSION['admin'] && isset($_GET['page']) && isset($_GET['action']) && $_GET['action'] === 'modif_page' | ||
| 63 | && $_GET['page'] !== 'connexion' && $_GET['page'] !== 'article' && $_GET['page'] !== 'nouvelle_page' && $_GET['page'] !== 'menu_chemins') | ||
| 64 | { | ||
| 65 | // les contrôles de la 2è ligne devraient utiliser un tableau | ||
| 66 | MainBuilder::$modif_mode = true; | ||
| 67 | } | ||
| 68 | 57 | ||
| 69 | // contrôleur accédant au modèle | 58 | /* -- partie 2: routage et contrôleurs -- */ |
| 70 | $director = new Director($entityManager, true); | ||
| 71 | $director->makeRootNode($id); | ||
| 72 | $node = $director->getNode(); | ||
| 73 | 59 | ||
| 74 | // contrôleur principal des vues | 60 | define('CURRENT_PAGE', htmlspecialchars($request->query->get('page') ?? 'accueil')); |
| 75 | $view_builder = new ViewBuilder($node); | 61 | require '../src/router.php'; \ No newline at end of file |
| 76 | echo $view_builder->render(); // et voilà! \ No newline at end of file | ||
