diff options
| author | polo <ordipolo@gmx.fr> | 2025-01-22 23:45:52 +0100 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2025-01-22 23:45:52 +0100 |
| commit | 4b21b40292de8ee08220ab901651a13ec5e35199 (patch) | |
| tree | cf3a735e604a10e6d74c30a8c2c1323169bf463a /src | |
| parent | f1dd96bc67e497f6c07291d6e5f6f23ec243b091 (diff) | |
| download | ckeditor5-4b21b40292de8ee08220ab901651a13ec5e35199.tar.gz ckeditor5-4b21b40292de8ee08220ab901651a13ec5e35199.tar.bz2 ckeditor5-4b21b40292de8ee08220ab901651a13ec5e35199.zip | |
gestion des $page, $from et $id
Diffstat (limited to 'src')
| -rw-r--r-- | src/integration/ckeditor5/CKEditor.php | 101 | ||||
| -rw-r--r-- | src/integration/ckeditor5/view.php | 14 | ||||
| -rw-r--r-- | src/view/templates/page.php | 4 |
3 files changed, 90 insertions, 29 deletions
diff --git a/src/integration/ckeditor5/CKEditor.php b/src/integration/ckeditor5/CKEditor.php index f3a60e0..6f630c8 100644 --- a/src/integration/ckeditor5/CKEditor.php +++ b/src/integration/ckeditor5/CKEditor.php | |||
| @@ -1,41 +1,94 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // src/integration/ckeditor5/CKEditor.php | ||
| 3 | |||
| 2 | class CKEditor | 4 | class CKEditor |
| 3 | { | 5 | { |
| 4 | public const string INTEGRATION_PATH = 'src/integration/ckeditor5/'; | 6 | public const string INTEGRATION_PATH = 'src/integration/ckeditor5/'; |
| 5 | private string $from = 'index.php'; | ||
| 6 | public string $open_editor_link = 'index.php?action=editor'; | ||
| 7 | private string $form_action_file = 'index.php?action=submit'; | ||
| 8 | private string $upload_ajax_url = 'index.php?action=upload_image'; | ||
| 9 | private string $php_ini_max_size; | ||
| 10 | public string $css_editor_tag = ''; | ||
| 11 | public string $css_outside_editor_tag; | ||
| 12 | private string $toolbar_language = 'fr'; | ||
| 13 | public string $storage = 'files'; | ||
| 14 | public string $data_path = 'data/page'; | ||
| 15 | public string $nom_article = "article"; | ||
| 16 | 7 | ||
| 17 | private string $server_root; | 8 | //public const string SERVER_PATH = '/'; |
| 9 | private const string SERVER_PATH = '/ckeditor5/'; | ||
| 10 | private string $server_root; // pour les "imports" en javascript | ||
| 18 | // pour l'importmap: j'ai modifié la version "installation avec CDN de la doc pour utiliser les fichiers locaux | 11 | // pour l'importmap: j'ai modifié la version "installation avec CDN de la doc pour utiliser les fichiers locaux |
| 19 | // l'"importmap" permet d'utiliser "import" (ça ressemble pas mal au python) dans le navigateur comme n'importe quel langage de programmation normal | 12 | // l'"importmap" permet d'utiliser "import" (ça ressemble pas mal au python) dans le navigateur comme n'importe quel langage de programmation normal |
| 20 | 13 | ||
| 14 | private string $storage_mode = 'files'; | ||
| 15 | private string $page = 'accueil'; | ||
| 16 | private string $from = ''; | ||
| 17 | private string $id_article = ''; | ||
| 18 | |||
| 19 | private string $php_ini_max_size; | ||
| 20 | private string $css_editor_tag = ''; | ||
| 21 | private string $css_outside_editor_tag = ''; | ||
| 22 | private string $toolbar_language = 'fr'; | ||
| 23 | private string $data_path = 'data/page'; | ||
| 24 | |||
| 21 | 25 | ||
| 22 | public function __construct() | 26 | public function __construct() |
| 23 | { | 27 | { |
| 24 | $this->makeTranslationSymLink(); | 28 | $this->makeTranslationSymLink(); |
| 25 | $this->from .= isset($_GET['from']) ? '?page=' . $_GET['from'] : ''; | 29 | |
| 26 | $this->php_ini_max_size = $this->returnBytes(ini_get('upload_max_filesize')); // = 2M par défaut dans le php.ini | 30 | $this->php_ini_max_size = $this->returnBytes(ini_get('upload_max_filesize')); // = 2M par défaut dans le php.ini |
| 27 | $this->css_outside_editor_tag = '<link rel="stylesheet" href="' . self::INTEGRATION_PATH . 'article_hors_editeur.css" />'; | 31 | $this->css_outside_editor_tag = '<link rel="stylesheet" href="' . self::INTEGRATION_PATH . 'article_hors_editeur.css" />'; |
| 28 | $this->server_root = $_SERVER['SERVER_NAME'] . '/ckeditor5/'; | 32 | $this->server_root = $_SERVER['SERVER_NAME'] . self::SERVER_PATH; |
| 29 | } | 33 | } |
| 30 | 34 | ||
| 31 | public function checkAjaxReqest() | 35 | // getters |
| 36 | public function getPage(): string | ||
| 37 | { | ||
| 38 | return $this->page; | ||
| 39 | } | ||
| 40 | public function getFrom(): string | ||
| 41 | { | ||
| 42 | return $this->from; | ||
| 43 | } | ||
| 44 | public function getIdArticle(): string | ||
| 45 | { | ||
| 46 | return $this->id_article; | ||
| 47 | } | ||
| 48 | public function getDataPath(): string | ||
| 49 | { | ||
| 50 | return $this->data_path; | ||
| 51 | } | ||
| 52 | public function getCSSOutsideEditorTag(): string | ||
| 53 | { | ||
| 54 | return $this->css_outside_editor_tag; | ||
| 55 | } | ||
| 56 | public function getCSSEditorTag(): string | ||
| 57 | { | ||
| 58 | return $this->css_editor_tag; | ||
| 59 | } | ||
| 60 | public function getStorageMode(): string | ||
| 61 | { | ||
| 62 | return $this->storage_mode; | ||
| 63 | } | ||
| 64 | |||
| 65 | // setters | ||
| 66 | public function setPage(string $page): void | ||
| 67 | { | ||
| 68 | $this->page = $page; | ||
| 69 | } | ||
| 70 | public function setFrom(string $from): void | ||
| 71 | { | ||
| 72 | $this->from = $from; | ||
| 73 | } | ||
| 74 | public function setIdArticle(string $id_article): void | ||
| 75 | { | ||
| 76 | $this->id_article = $id_article; | ||
| 77 | } | ||
| 78 | public function setStorageMode($mode): void | ||
| 79 | { | ||
| 80 | $this->storage_mode = $mode; | ||
| 81 | } | ||
| 82 | |||
| 83 | public function checkAjaxReqest(): void | ||
| 32 | { | 84 | { |
| 33 | // dans un fichier à part parce que trop de lignes | 85 | // dans un fichier à part parce que trop de lignes |
| 34 | require self::INTEGRATION_PATH . 'image_upload.php'; | 86 | require self::INTEGRATION_PATH . 'image_upload.php'; |
| 35 | die; | 87 | die; |
| 36 | } | 88 | } |
| 37 | 89 | ||
| 38 | public function checkSubmitPOST() | 90 | |
| 91 | public function checkSubmitPOST(): void | ||
| 39 | { | 92 | { |
| 40 | $html_from_editor = $this->getAndCleanEditorOutput($_POST["contenu"]); // manipule $_POST['contenu']; | 93 | $html_from_editor = $this->getAndCleanEditorOutput($_POST["contenu"]); // manipule $_POST['contenu']; |
| 41 | 94 | ||
| @@ -47,18 +100,18 @@ class CKEditor | |||
| 47 | die; | 100 | die; |
| 48 | } | 101 | } |
| 49 | 102 | ||
| 50 | public function openEditor() | 103 | public function openEditor(): string |
| 51 | { | 104 | { |
| 52 | // version "minifiée" | 105 | // version "minifiée" |
| 53 | $this->css_editor_tag = '<link rel="stylesheet" href="node_modules/ckeditor5/dist/browser/ckeditor5.css" />'; | 106 | $this->css_editor_tag = '<link rel="stylesheet" href="node_modules/ckeditor5/dist/browser/ckeditor5.css" />'; |
| 54 | // version normale aérée et commentée" | 107 | // version normale aérée et commentée" |
| 55 | $this->css_editor_tag = '<link rel="stylesheet" href="node_modules/ckeditor5/dist/ckeditor5.css" />'; | 108 | $this->css_editor_tag = '<link rel="stylesheet" href="node_modules/ckeditor5/dist/ckeditor5.css" />'; |
| 56 | 109 | ||
| 57 | if($this->storage === 'database') | 110 | if($this->getStorageMode() === 'database') |
| 58 | {} | 111 | {} |
| 59 | elseif($this->storage === 'files') | 112 | elseif($this->getStorageMode() === 'files') |
| 60 | { | 113 | { |
| 61 | $texte = file_get_contents($this->data_path . '/html/' . $this->nom_article . '.html'); | 114 | $texte = file_get_contents($this->data_path . '/html/' . $this->id_article . '.html'); |
| 62 | 115 | ||
| 63 | $texte = trim(addcslashes($texte, "'")); // échapper les simples quotes pour javascript | 116 | $texte = trim(addcslashes($texte, "'")); // échapper les simples quotes pour javascript |
| 64 | //$texte = trim(addslashes($texte)); // échappe ', ", \ et NULL, je sais pas si c'est bien | 117 | //$texte = trim(addslashes($texte)); // échappe ', ", \ et NULL, je sais pas si c'est bien |
| @@ -99,9 +152,9 @@ class CKEditor | |||
| 99 | 152 | ||
| 100 | // conversion des 2M du php.ini en 2000000 | 153 | // conversion des 2M du php.ini en 2000000 |
| 101 | // note: les kibi, mébi et gibi sont inutiles ici | 154 | // note: les kibi, mébi et gibi sont inutiles ici |
| 102 | private function returnBytes($size_str) // chaine du style '2M' | 155 | private function returnBytes(string $size_str): int // chaine du style '2M' |
| 103 | { | 156 | { |
| 104 | switch (substr ($size_str, -1)) | 157 | switch(substr($size_str, -1)) |
| 105 | { | 158 | { |
| 106 | case 'Ki': case 'ki': return (int)$size_str * 1024; | 159 | case 'Ki': case 'ki': return (int)$size_str * 1024; |
| 107 | case 'Mi': case 'mi': return (int)$size_str * 1048576; | 160 | case 'Mi': case 'mi': return (int)$size_str * 1048576; |
| @@ -109,7 +162,7 @@ class CKEditor | |||
| 109 | case 'K': case 'k': return (int)$size_str * 1000; | 162 | case 'K': case 'k': return (int)$size_str * 1000; |
| 110 | case 'M': case 'm': return (int)$size_str * 1000000; | 163 | case 'M': case 'm': return (int)$size_str * 1000000; |
| 111 | case 'G': case 'g': return (int)$size_str * 1000000000; | 164 | case 'G': case 'g': return (int)$size_str * 1000000000; |
| 112 | default: return $size_str; | 165 | default: return (int)$size_str; |
| 113 | } | 166 | } |
| 114 | } | 167 | } |
| 115 | 168 | ||
| @@ -150,4 +203,4 @@ class CKEditor | |||
| 150 | fclose($fichier); | 203 | fclose($fichier); |
| 151 | chmod('data/' . $page . '/' . $nom_fichier, 0666); | 204 | chmod('data/' . $page . '/' . $nom_fichier, 0666); |
| 152 | } | 205 | } |
| 153 | } \ No newline at end of file | 206 | } |
diff --git a/src/integration/ckeditor5/view.php b/src/integration/ckeditor5/view.php index ed1d0f7..bb1f6a2 100644 --- a/src/integration/ckeditor5/view.php +++ b/src/integration/ckeditor5/view.php | |||
| @@ -1,13 +1,21 @@ | |||
| 1 | <?php | 1 | <?php |
| 2 | // src/integration/ckeditor5/view.php | 2 | // src/integration/ckeditor5/view.php |
| 3 | 3 | ||
| 4 | $submit_action = 'index.php?from=' . $this->page . '&action=submit_editor&id=' . $this->id_article; | ||
| 5 | |||
| 6 | $cancel_button = 'index.php?page=' . $this->page; | ||
| 7 | $cancel_button .= !empty($this->id_article) ? '&id=' . $this->id_article : ''; | ||
| 8 | |||
| 9 | $upload_ajax = 'index.php?action=upload_image_editor'; | ||
| 10 | $upload_ajax .= !empty($this->id_article) ? '&id=' . $this->id_article : ''; | ||
| 11 | |||
| 4 | ob_start(); | 12 | ob_start(); |
| 5 | ?> | 13 | ?> |
| 6 | <div class="conteneur_article" > | 14 | <div class="conteneur_article" > |
| 7 | <form action="<?= $this->form_action_file ?>" method="POST" enctype="multipart/form-data" > | 15 | <form action="<?= $submit_action ?>" method="POST" enctype="multipart/form-data" > |
| 8 | <textarea id="editor" name="contenu" ></textarea> | 16 | <textarea id="editor" name="contenu" ></textarea> |
| 9 | <input class="boutonSubmitEditeur" type="submit" value="Valider"> | 17 | <input class="boutonSubmitEditeur" type="submit" value="Valider"> |
| 10 | <a class="boutonAnnuler" href="<?= $this->from ?>" > | 18 | <a class="boutonAnnuler" href="<?= $cancel_button ?>" > |
| 11 | <input type="button" value="Annuler"></a> | 19 | <input type="button" value="Annuler"></a> |
| 12 | <script type="importmap"> | 20 | <script type="importmap"> |
| 13 | { | 21 | { |
| @@ -34,7 +42,7 @@ ob_start(); | |||
| 34 | 42 | ||
| 35 | let editor; | 43 | let editor; |
| 36 | let html_existant = '<?= $texte ?>'; // $texte doit avoir été sécurisé: simple quotes échappées au minimum | 44 | let html_existant = '<?= $texte ?>'; // $texte doit avoir été sécurisé: simple quotes échappées au minimum |
| 37 | let upload_url = '<?= $this->upload_ajax_url ?>'; | 45 | let upload_url = '<?= $upload_ajax ?>'; |
| 38 | 46 | ||
| 39 | // ATTENTION: si l'éditeur ne fonctionne pas, empêcher qu'on puisse cliquer sur Valider! | 47 | // ATTENTION: si l'éditeur ne fonctionne pas, empêcher qu'on puisse cliquer sur Valider! |
| 40 | // Il y a aussi des paramètres dans le fichier de config: ckeditor/webpack.config.js | 48 | // Il y a aussi des paramètres dans le fichier de config: ckeditor/webpack.config.js |
diff --git a/src/view/templates/page.php b/src/view/templates/page.php index 5051a5f..05c7444 100644 --- a/src/view/templates/page.php +++ b/src/view/templates/page.php | |||
| @@ -4,8 +4,8 @@ | |||
| 4 | <meta charset="utf-8"> | 4 | <meta charset="utf-8"> |
| 5 | <title></title> | 5 | <title></title> |
| 6 | <link rel="icon" type="image/png" href=""> | 6 | <link rel="icon" type="image/png" href=""> |
| 7 | <?= $ckeditor->css_outside_editor_tag ?> | 7 | <?= $ckeditor->getCSSOutsideEditorTag() ?> |
| 8 | <?= $ckeditor->css_editor_tag ?> | 8 | <?= $ckeditor->getCSSEditorTag() ?> |
| 9 | </head> | 9 | </head> |
| 10 | <body> | 10 | <body> |
| 11 | <div> | 11 | <div> |
