Création de la page modification d'un message EditPost

La page EditPost est fournie aux auteurs et administrateurs pour modifier les messages. Comme la page NewPost, elle affiche un formulaire permettant de modifier les données d'un message.

Nous créons deux fichiers protected/pages/posts/EditPost.page et protected/pages/posts/EditPost.php contenant respectivement le gabarit et la classe de notre page.

Création du gabarit

Le gabarit de la page EditPost est très proche de celui de la page NewPost template. Seul le titre et le texte du bouton sont différents.

<%@ Title="Mon Blog - Modification Message" %> <com:TContent ID="Main">

Modification message

Titre: <com:TRequiredFieldValidator ControlToValidate="TitleEdit" ErrorMessage="Veuillez indiquer un titre." Display="Dynamic" />
<com:TTextBox ID="TitleEdit" Columns="50" />
Message: <com:TRequiredFieldValidator ControlToValidate="ContentEdit" ErrorMessage="Veuillez indiquer le contenu du message." Display="Dynamic" />
<com:THtmlArea ID="ContentEdit" />
<com:TButton Text="Enregistrer" OnClick="saveButtonClicked" /> </com:TContent>

Création du fichier de classe

La classe de EditPage est un peu plus complexe que celle de la page NewPage parce qu'elle doit lire les informations auparavant. Elle doit aussi vérifier les autorisations. En particulier, elle doit s'assurer que le message ne puisse être modifié que par l'auteur ou par un administrateur. Ces vérifications d'autorisation ne sont pas fournies par PRADO.

class EditPost extends TPage { /** * initialise les contrôles de saisies avec les données du message. * cette méthode est appelée lors de l'initialisation de la page * @param mixed param : paramètres de l'évènement */ public function onInit($param) { parent::onInit($param); // récupère les données de l'utilisateur. Equivalent à: // $postRecord=$this->getPost(); $postRecord=$this->Post; // vérification des droits: seul l'auteur ou un administrateur peuvent modifier le message if($postRecord->author_id!==$this->User->Name && !$this->User->IsAdmin) throw new THttpException(500,'Vous n êtes pas autoriser à modifier ce message.'); if(!$this->IsPostBack) // est-ce le premier appel à la page { // rempli les contrôles avec les données du message $this->TitleEdit->Text=$postRecord->title; $this->ContentEdit->Text=$postRecord->content; } } /** * Enregistre si toutes les validations sont Ok * cette méthode répond à l'évènement OnClick du bouton "Enregistrer". * @param mixed sender : celui qui a généré l'évènement * @param mixed param : paramètres de l'évènement */ public function saveButtonClicked($sender,$param) { if($this->IsValid) // toutes les validations sont ok ? { // récupère les données de l'utilisateur. Equivalent à: // $postRecord=$this->getPost(); $postRecord=$this->Post; // affecte les données saisies aux champs de la BDD $postRecord->title=$this->TitleEdit->SafeText; $postRecord->content=$this->ContentEdit->SafeText; // enregistre les données par la méthode save de l'Active Record $postRecord->save(); // redirige le navigateur vers la page ReadPost $url=$this->Service->constructUrl('posts.ReadPost',array('id'=>$postRecord->post_id)); $this->Response->redirect($url); } } /** * retourne les données du message devant être modifiées. * @return PostRecord les données devant être modifiés. * @throws THttpException si le message est inexistant. */ protected function getPost() { // l'ID du message devant être modifié passé par un paramètre GET $postID=(int)$this->Request['id']; // utilise Active Record pour lire le message correspondant à cet ID $postRecord=PostRecord::finder()->findByPk($postID); if($postRecord===null) throw new THttpException(500,'Message inexistant.'); return $postRecord; } }

Test

Pour tester notre page EditPost, authentifiez-vous auparavant et allez à l'URL http://hostname/blog/index.php?page=EditPost&id=1. Cette URL peut aussi être atteinte par le bouton Modifier de notre page de détail.