WYSIWYG est un projet que j'ai fait pour l'école EEMI.
Le but recherché ici était d'avoir une interface administrateur avec un éditeur WYSIWYG, ici on utilise TinyMCE.
<?php | |
session_start(); | |
include ("database.php"); | |
$error = false; | |
$success = false; | |
$error_status = ["status" => "Request Not Processed"]; | |
$status = ["status" => ""]; | |
$filename = "Formulaire"; | |
$origin = "formulaire.php"; | |
$notification = ""; | |
$special_chars = ["?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", ".", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", "%", "+", chr(0)]; | |
function sanitize($filename): string { | |
global $special_chars; | |
$file = str_replace($special_chars, "", $filename); | |
preg_match_all('/[\x21-\x7e]/', $file, $file_array); // Only Printable ASCII char. | |
if (count($file_array[0]) != 0) { | |
return implode("", $file_array[0]); | |
} | |
$file = htmlentities($file, ENT_COMPAT, "UTF-8"); | |
$file = preg_replace('/&([a-zA-Z])(uml|acute|grave|circ|tilde|ring|slash);/','$1',$file); | |
return html_entity_decode($file); | |
} | |
function array_keys_checks(array $needles, array $haystack): bool | |
{ | |
foreach ($needles as $needle) | |
{ | |
if ( ! isset($haystack[$needle])) return false; | |
} | |
return true; | |
} | |
if ($_SERVER["REQUEST_METHOD"] === "POST") { | |
if (!array_keys_checks(["filename", "title", "decription", "html_h1", "html_content"], $_POST)) { | |
$html_filename = sanitize($_POST["filename"]); | |
$html_title = htmlspecialchars($_POST["title"]); | |
$html_h1 = htmlspecialchars($_POST["html_h1"]); | |
$html_description = htmlspecialchars($_POST["description"]); | |
$html_content = $_POST["html_content"]; | |
$html = include "components/base_html.php"; | |
// file_put_contents("pages/" . $html_filename . ".html", $html); | |
header("201 Created"); | |
$success = true; | |
$status["status"] = "Votre fichier a bien été créé... Il est disponible <a href='./pages/" . $html_filename . ".html'>ici</a>."; | |
} else { | |
$error = true; | |
$error_status["status"] = "Erreur, Il manque des données, merci de vous réitérer..."; | |
} | |
} | |
$head = '<script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js" referrerpolicy="origin"></script>'; | |
$scripts = "<script>tinymce.init({selector:'textarea'});</script>"; | |
$hero = '<div class="form_register"> | |
<form method="POST" action="formulaire.php"> | |
<label class="label has-text-left is-size-5" for="filename">Nom du Fichier<span class="required"></span></label> | |
<input class="input" type="text" name="filename" id="filename" placeholder="Nom du Fichier" required> | |
<label class="label has-text-left is-size-5" for="title">Titre de la page<span class="required"></span></label> | |
<input class="input" type="text" name="title" id="title" placeholder="Titre de la page" required> | |
<label class="label has-text-left is-size-5" for="description">Description<span class="required"></span></label> | |
<input class="input" type="text" name="description" id="description" placeholder="Description" required> | |
<label class="label has-text-left is-size-5" for="html_h1">Titre du document<span class="required"></span></label> | |
<input class="input" type="text" name="html_h1" id="html_h1" placeholder="Titre du document (h1)" required> | |
<label class="label has-text-left is-size-5" for="html_content">Main<span class="required"></span></label> | |
<textarea name="html_content">Vous pouvez commencer à créer votre page HTML !</textarea> | |
<div class="field button-field"> | |
<button class="button is-block is-info is-large">Créer Page<i class="fa fa-sign-in" aria-hidden="true"></i></button> | |
</div> | |
</form> | |
</div>'; | |
if ($error) { | |
$notification .= '<div class="notification is-danger "> | |
<button class="delete" onclick="deleteNotif(this)"></button>' . $error_status["status"] . '</div>'; | |
} | |
if ($success) { | |
$notification .= '<div class="notification is-success "> | |
<button class="delete" onclick="deleteNotif(this)"></button>' . $status["status"] . '</div>'; | |
} | |
include("components/base.php"); |
cyvax - 2024