/** * MODULE : Édition d'une news */ public function edit() { // Erreur 404 if (!$this->getData([$this->getUrl(0), $this->getUrl(2)])) { return false; } elseif ($this->getPost('submit')) { // Modifie la clef de la news si le titre a été modifié $key = $this->getPost('title') ? $this->getPost('title', helper::URL) : $this->getUrl(2); // Sauvegarde la date de création de la news $date = $this->getData([$this->getUrl(0), $this->getUrl(2), 'date']); // Si la clef à changée if ($key !== $this->getUrl(2)) { // Incrémente la nouvelle clef de la news pour éviter les doublons $key = helper::increment($key, $this->getData($this->getUrl(0))); // Supprime l'ancienne news $this->removeData([$this->getUrl(0), $this->getUrl(2)]); } // Modifie la news ou en crée une nouvelle si la clef a changée $this->setData([$this->getUrl(0), $key, ['title' => $this->getPost('title', helper::STRING), 'date' => $date, 'content' => $this->getPost('content')]]); // Enregistre les données $this->saveData(); // Notification de modification $this->setNotification('News modifiée avec succès !'); // Redirige vers l'édition de la nouvelle news si la clef à changée ou sinon vers l'ancienne helper::redirect('module/' . $this->getUrl(0) . '/edit/' . $key); } // Contenu de la page self::$content = template::openForm() . template::openRow() . template::text('title', ['label' => 'Titre de la news', 'value' => $this->getData([$this->getUrl(0), $this->getUrl(2), 'title']), 'required' => 'required']) . template::newRow() . template::textarea('content', ['class' => 'editor', 'value' => $this->getData([$this->getUrl(0), $this->getUrl(2), 'content'])]) . template::newRow() . template::button('back', ['value' => 'Retour', 'href' => helper::baseUrl() . 'module/' . $this->getUrl(0), 'col' => 2]) . template::submit('submit', ['col' => 2, 'offset' => 8]) . template::closeRow(); template::closeForm(); }
/** MODULE : Formulaire */ public function index() { // Traitement du formulaire if ($this->getPost('submit')) { // Préparation des données (index + 1 comme l'item 0 = champ de copie qui est supprimé à l'enregistrement) $data = []; $mail = ''; foreach ($this->getPost('input') as $key => $value) { // Préparation des données pour la création dans la base $data[$this->getData([$this->getUrl(0), 'inputs', $key + 1, 'name'])] = $value; // Préparation des données pour le mail $mail .= '<li>' . $this->getData([$this->getUrl(0), 'inputs', $key + 1, 'name']) . ' : ' . $value . '</li>'; } // Crée les données $this->setData([$this->getUrl(0), 'data', helper::increment(1, $this->getData([$this->getUrl(0), 'data'])), $data]); // Enregistre les données $this->saveData(); // Envoi du mail if ($this->getData([$this->getUrl(0), 'config', 'mail'])) { helper::mail(false, $this->getData([$this->getUrl(0), 'config', 'mail']), helper::translate('Mail de votre site ZwiiCMS'), '<h1>' . helper::translate('Mail en provenance de votre site ZwiiCMS') . '</h1>' . $mail . '</ul>'); } // Notification de soumission $this->setNotification('Formulaire soumis avec succès !'); // Redirige vers la page courante helper::redirect($this->getUrl()); } // Génère les inputs if ($this->getData([$this->getUrl(0), 'inputs'])) { foreach ($this->getData([$this->getUrl(0), 'inputs']) as $input) { self::$content .= $this->generateInput($input); } // Texte du bouton de validation $submitText = $this->getData([$this->getUrl(0), 'config', 'button']); // Ajout du bouton de validation self::$content .= template::openRow() . template::submit('submit', ['value' => $submitText ? $submitText : 'Enregistrer', 'col' => 2]) . template::closeRow(); } // Contenu de la page self::$content = template::openForm() . self::$content . template::closeForm(); }
/** MODULE : Édition de page */ public function edit() { // Erreur 404 if (!$this->getData(['pages', $this->getUrl(0)])) { return false; } elseif ($this->getPost('submit')) { // Modifie la clef de la page si le titre a été modifié $key = $this->getPost('title') ? $this->getPost('title', helper::URL) : $this->getUrl(0); // Sauvegarde le module de la page $module = $this->getData(['pages', $this->getUrl(0), 'module']); // Si la clef à changée if ($key !== $this->getUrl(0)) { // Incrémente la nouvelle clef de la page pour éviter les doublons $key = helper::increment($key, $this->getData('pages')); $key = helper::increment($key, self::$modules); // Evite à une page d'avoir la même clef qu'un module système // Supprime l'ancienne page $this->removeData(['pages', $this->getUrl(0)]); // Crée les nouvelles données du module de la page (avec la nouvelle clef) en copiant les anciennes $this->setData([$key, $this->getData($this->getUrl(0))]); // Supprime les données du module de l'ancienne page $this->removeData($this->getUrl(0)); // Si la page est la page d'accueil, modification la clef dans la configuration du site if ($this->getData(['config', 'index']) === $this->getUrl(0)) { $this->setData(['config', 'index', $key]); } } // Change la positions des pages suivantes si la position de la page à changée $position = $this->getPost('position', helper::INT); if ($position and $position !== $this->getData(['pages', $this->getUrl(0), 'position'])) { // Nouvelle position des pages $newPosition = $position; // Liste les pages en les triant par position en ordre croissant $pages = array_flip(helper::arrayCollumn($this->getData('pages'), 'position', 'SORT_ASC', true)); // Incrémente la position des pages suivante foreach ($pages as $pagePosition => $pageKey) { if ($pagePosition >= $position) { $newPosition++; $this->setData(['pages', $pageKey, 'position', $newPosition]); } } } // Modifie la page ou en crée une nouvelle si la clef à changée $this->setData(['pages', $key, ['title' => $this->getPost('title', helper::STRING), 'description' => $this->getPost('description', helper::STRING), 'position' => $position, 'blank' => $this->getPost('blank', helper::BOOLEAN), 'module' => $module, 'content' => $this->getPost('content')]]); // Supprime l'ancienne page si la clef à changée if ($key !== $this->getUrl(0)) { $this->removeData(['pages', $this->getUrl(0)]); } // Enregistre les données $this->saveData($key); // Notification de modification $this->setNotification('Page modifiée avec succès !'); // Redirige vers la l'édition de la nouvelle page si la clef à changée ou sinon vers l'ancienne helper::redirect('edit/' . $key); } // Liste les pages en les triant par position $listPages = ['Ne pas afficher', 'Au début']; $selected = 0; $pagePositionPrevious = 1; $pages = array_flip(helper::arrayCollumn($this->getData('pages'), 'position', 'SORT_ASC', true)); foreach ($pages as $pagePosition => $pageKey) { // Si la page est la page courante on ne l'affiche pas et on selection l'élément précédent (pas de - 1 à $pagePosition car + 1 dans $listPages) if ($pageKey === $this->getUrl(0)) { $selected = $pagePositionPrevious; } else { // Ajoute à la liste $listPages[$pagePosition + 1] = helper::translate('Après') . ' "' . $this->getData(['pages', $pageKey, 'title']) . '"'; // Enregistre la position de cette page afin de la sélectionner si la prochaine page de la liste est la page en train d'être éditée $pagePositionPrevious = $pagePosition + 1; } } self::$title = $this->getData(['pages', $this->getUrl(0), 'title']); self::$content = template::openForm() . template::openRow() . template::text('title', ['label' => 'Titre de la page', 'value' => $this->getData(['pages', $this->getUrl(0), 'title']), 'required' => true]) . template::newRow() . template::select('position', $listPages, ['label' => 'Position dans le menu', 'selected' => $selected]) . template::newRow() . template::textarea('content', ['value' => $this->getData(['pages', $this->getUrl(0), 'content']), 'class' => 'editor']) . template::newRow() . template::textarea('description', ['label' => 'Description de la page', 'help' => 'Si le champ est vide, la description du site est utilisée.', 'value' => $this->getData(['pages', $this->getUrl(0), 'description'])]) . template::newRow() . template::hidden('key', ['value' => $this->getUrl(0)]) . template::hidden('oldModule', ['value' => $this->getData(['pages', $this->getUrl(0), 'module'])]) . template::select('module', helper::listModules('Aucun module'), ['label' => 'Inclure le module', 'help' => 'En cas de changement de module, les données du module précédent seront supprimées.', 'selected' => $this->getData(['pages', $this->getUrl(0), 'module']), 'col' => 10]) . template::button('admin', ['value' => 'Administrer', 'href' => helper::baseUrl() . 'module/' . $this->getUrl(0), 'disabled' => $this->getData(['pages', $this->getUrl(0), 'module']) ? '' : 'disabled', 'col' => 2]) . template::newRow() . template::checkbox('blank', true, 'Ouvrir dans un nouvel onglet en mode public', ['checked' => $this->getData(['pages', $this->getUrl(0), 'blank'])]) . template::newRow() . template::button('delete', ['value' => 'Supprimer', 'href' => helper::baseUrl() . 'delete/' . $this->getUrl(0), 'onclick' => 'return confirm(\'' . helper::translate('Êtes-vous sûr de vouloir supprimer cette page ?') . '\');', 'col' => 2, 'offset' => 8]) . template::submit('submit', ['col' => 2]) . template::closeRow() . template::closeForm(); }