http://www.mediawiki.org/wiki/Special:Code/MediaWiki/99351

Revision: 99351
Author:   werdna
Date:     2011-10-09 13:15:27 +0000 (Sun, 09 Oct 2011)
Log Message:
-----------
svn add DashboardForms.php

Added Paths:
-----------
    trunk/extensions/MoodBar/DashboardForms.php

Added: trunk/extensions/MoodBar/DashboardForms.php
===================================================================
--- trunk/extensions/MoodBar/DashboardForms.php                         (rev 0)
+++ trunk/extensions/MoodBar/DashboardForms.php 2011-10-09 13:15:27 UTC (rev 
99351)
@@ -0,0 +1,194 @@
+<?php
+/**
+ * Contains assorted forms associated with the Feedback Dashboards
+ */
+
+
+abstract class MBDashboardForm {
+       /**
+        * Gets an HTMLForm object suitable for showing this form
+        */
+       public function getForm() {
+               $form = new HTMLForm( $this->getFormDescriptor() );
+               $form->setSubmitCallback( array( $this, 'submit' ) );
+               
+               return $form;
+       }
+       
+       /**
+        * Shows the form, but returns the output as HTML instead of sending it 
to $wgOut
+        */
+       public function show() {
+               global $wgOut;
+               
+               $oldText = $wgOut->getHTML();
+               $wgOut->clearHTML();
+               
+               $result = $this->getForm()->show();
+               
+               $output = $wgOut->getHTML();
+               $wgOut->clearHTML( );
+               $wgOut->addHTML( $oldText );
+               
+               if ( $result === true ) {
+                       return true;
+               }
+               
+               return $output;
+       }
+       
+       /**
+        * Gets the HTMLForm form descriptor
+        * @return A structured array suitable for the HTMLForm constructor.
+        */
+       public abstract function getFormDescriptor();
+       
+       /**
+        * Submits the form.
+        */
+       public abstract function submit( $data );
+}
+
+abstract class MBActionForm extends MBDashboardForm {
+       public function __construct( $id ) {
+               $this->id = $id;
+       }
+       
+       public function getForm() {
+               $form = parent::getForm();
+               
+               $title = SpecialPage::getTitleFor( 'FeedbackDashboard', 
$this->id );
+               $form->setTitle( $title );
+               
+               return $form;
+       }
+
+       /**
+        * Adds an 'item' field to provide built in support for doing actions 
to feedback items.
+        */
+       public function getFormDescriptor() {
+               $template = array(
+                       'item' => array(
+                               'type' => 'hidden',
+                               'required' => true,
+                               'readonly' => 'readonly',
+                               'label-message' => 'moodbar-action-item',
+                               'default' => $this->id,
+                       ),
+                       'reason' => array(
+                               'type' => 'text',
+                               'size' => '60',
+                               'maxlength' => '200',
+                               'label-message' => 'movereason',
+                       ),
+               );
+               
+               return $template;
+       }
+       
+       /**
+        * Load our item and do our thing
+        */
+       public function submit( $data ) {
+               $id = $data['item'];
+               $dbr = wfGetDB( DB_SLAVE );
+               
+               $row = $dbr->selectRow( 'moodbar_feedback', '*',
+                       array( 'mbf_id' => $id ), __METHOD__ );
+               
+               if ( ! $row ) {
+                       return wfMessage( 'moodbar-invalid-item' )->parse();
+               }
+               
+               $feedbackItem = MBFeedbackItem::load( $row );
+               
+               $this->manipulateItem( $feedbackItem, $data );
+               
+               return true;
+       }
+       
+       /**
+        * Do whatever action you need to do to the $feedbackItem in this 
function
+        * @param $feedbackItem MBFeedbackItem to manipulate.
+        * @param $data The form data.
+        */
+       protected abstract function manipulateItem( $feedbackItem, $data );
+}
+
+class MBHideForm extends MBActionForm {
+       public function getFormDescriptor() {
+               $desc = parent::getFormDescriptor();
+               $desc += array(
+                       'hide-feedback' => array(
+                               'type' => 'hidden',
+                               'default' => '1',
+                               'name' => 'hide-feedback',
+                       ),
+               );
+               
+               return $desc;
+       }
+       
+       protected function manipulateItem( $feedbackItem, $data ) {
+               $feedbackItem->setProperty('hidden-state', 255);
+               $feedbackItem->save();
+               
+               $title = SpecialPage::getTitleFor( 'FeedbackDashboard',
+                       $feedbackItem->getProperty('id') );
+               
+               $logPage = new LogPage('moodbar');
+               $logPage->addEntry( 'hide', $title, $data['reason'] );
+       }
+       
+       public function getForm() {
+               $form = parent::getForm();
+               
+               $header = Html::element( 'h3', null,
+                       wfMessage( 'moodbar-hide-header' )->parse() );
+               
+               $header .= wfMessage( 'moodbar-hide-intro' )->parse();
+               
+               $form->addPreText( $header );
+               
+               return $form;
+       }
+}
+
+class MBRestoreForm extends MBActionForm {
+       public function getFormDescriptor() {
+               $desc = parent::getFormDescriptor();
+               $desc += array(
+                       'restore-feedback' => array(
+                               'type' => 'hidden',
+                               'default' => '1',
+                               'name' => 'restore-feedback',
+                       ),
+               );
+               
+               return $desc;
+       }
+       
+       protected function manipulateItem( $feedbackItem, $data ) {
+               $feedbackItem->setProperty('hidden-state', 0);
+               $feedbackItem->save();
+               
+               $title = SpecialPage::getTitleFor( 'FeedbackDashboard',
+                       $feedbackItem->getProperty('id') );
+               
+               $logPage = new LogPage('moodbar');
+               $logPage->addEntry( 'restore', $title, $data['reason'] );
+       }
+       
+       public function getForm() {
+               $form = parent::getForm();
+               
+               $header = Html::element( 'h3', null,
+                       wfMessage( 'moodbar-restore-header' )->parse() );
+               
+               $header .= wfMessage( 'moodbar-restore-intro' )->parse();
+               
+               $form->addPreText( $header );
+               
+               return $form;
+       }
+}


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to