Pass the user as an argument to 'isValidPassword' hook callbacks; see docs/hooks...
[lhc/web/wiklou.git] / includes / HTMLForm.php
index 54bbb81..0aaa076 100644 (file)
@@ -1,24 +1,26 @@
 <?php
 /**
  * This file contain a class to easily build HTML forms as well as custom
- * functions used by SpecialUserrights.php and SpecialGroups.php
- * @package MediaWiki
+ * functions used by SpecialUserrights.php
  */
 
 /**
  * Class to build various forms
  *
- * @package MediaWiki
  * @author jeluf, hashar
  */
 class HTMLForm {
        /** name of our form. Used as prefix for labels */
-       var $mName;
+       var $mName, $mRequest;
+
+       function HTMLForm( &$request ) {
+               $this->mRequest = $request;
+       }
 
        /**
-        * @access private
-        * @param string $name Name of the fieldset.
-        * @param string $content HTML content to put in.
+        * @private
+        * @param $name String: name of the fieldset.
+        * @param $content String: HTML content to put in.
         * @return string HTML fieldset
         */
        function fieldset( $name, $content ) {
@@ -27,34 +29,39 @@ class HTMLForm {
        }
 
        /**
-        * @access private
-        * @param string $varname Name of the checkbox.
-        * @param boolean $checked Set true to check the box (default False).
+        * @private
+        * @param $varname String: name of the checkbox.
+        * @param $checked Boolean: set true to check the box (default False).
         */
        function checkbox( $varname, $checked=false ) {
-               $checked = isset( $_POST[$varname] ) && $_POST[$varname] ;
+               if ( $this->mRequest->wasPosted() && !is_null( $this->mRequest->getVal( $varname ) ) ) {
+                       $checked = $this->mRequest->getCheck( $varname );
+               }
                return "<div><input type='checkbox' value=\"1\" id=\"{$varname}\" name=\"wpOp{$varname}\"" .
                        ( $checked ? ' checked="checked"' : '' ) .
                        " /><label for=\"{$varname}\">". wfMsg( $this->mName.'-'.$varname ) .
                        "</label></div>\n";
        }
 
-       /** 
-        * @access private
-        * @param string $varname Name of the textbox.
-        * @param string $value Optional value (default empty)
-        * @param integer $size Optional size of the textbox (default 20)
+       /**
+        * @private
+        * @param $varname String: name of the textbox.
+        * @param $value String: optional value (default empty)
+        * @param $size Integer: optional size of the textbox (default 20)
         */
        function textbox( $varname, $value='', $size=20 ) {
-               $value = isset( $_POST[$varname] ) ? $_POST[$varname] : $value;
+               if ( $this->mRequest->wasPosted() ) {
+                       $value = $this->mRequest->getText( $varname, $value );
+               }
+               $value = htmlspecialchars( $value );
                return "<div><label>". wfMsg( $this->mName.'-'.$varname ) .
                        "<input type='text' name=\"{$varname}\" value=\"{$value}\" size=\"{$size}\" /></label></div>\n";
        }
 
-       /** 
-        * @access private
-        * @param string $varname Name of the radiobox.
-        * @param array $fields Various fields.
+       /**
+        * @private
+        * @param $varname String: name of the radiobox.
+        * @param $fields Array: Various fields.
         */
        function radiobox( $varname, $fields ) {
                foreach ( $fields as $value => $checked ) {
@@ -62,31 +69,37 @@ class HTMLForm {
                                ( $checked ? ' checked="checked"' : '' ) . " />" . wfMsg( $this->mName.'-'.$varname.'-'.$value ) .
                                "</label></div>\n";
                }
-               return $this->fieldset( $this->mName.'-'.$varname, $s );
+               return $this->fieldset( $varname, $s );
        }
-       
-       /** 
-        * @access private
-        * @param string $varname Name of the textareabox.
-        * @param string $value Optional value (default empty)
-        * @param integer $size Optional size of the textarea (default 20)
+
+       /**
+        * @private
+        * @param $varname String: name of the textareabox.
+        * @param $value String: optional value (default empty)
+        * @param $size Integer: optional size of the textarea (default 20)
         */
        function textareabox ( $varname, $value='', $size=20 ) {
-               $value = isset( $_POST[$varname] ) ? $_POST[$varname] : $value;
+               if ( $this->mRequest->wasPosted() ) {
+                       $value = $this->mRequest->getText( $varname, $value );
+               }
+               $value = htmlspecialchars( $value );
                return '<div><label>'.wfMsg( $this->mName.'-'.$varname ).
                       "<textarea name=\"{$varname}\" rows=\"5\" cols=\"{$size}\">$value</textarea></label></div>\n";
        }
 
-       /** 
-        * @access private
-        * @param string $varname Name of the arraybox.
-        * @param integer $size Optional size of the textarea (default 20)
+       /**
+        * @private
+        * @param $varname String: name of the arraybox.
+        * @param $size Integer: Optional size of the textarea (default 20)
         */
        function arraybox( $varname , $size=20 ) {
                $s = '';
-               if ( isset( $_POST[$varname] ) && is_array( $_POST[$varname] ) ) {
-                       foreach ( $_POST[$varname] as $index=>$element ) {
-                               $s .= $element."\n";
+               if ( $this->mRequest->wasPosted() ) {
+                       $arr = $this->mRequest->getArray( $varname );
+                       if ( is_array( $arr ) ) {
+                               foreach ( $_POST[$varname] as $element ) {
+                                       $s .= htmlspecialchars( $element )."\n";
+                               }
                        }
                }
                return "<div><label>".wfMsg( $this->mName.'-'.$varname ).
@@ -94,58 +107,52 @@ class HTMLForm {
        }
 } // end class
 
-
-// functions used by SpecialUserrights.php and SpecialGroups.php
-
 /** Build a select with all defined groups
- * @param string $selectname Name of this element. Name of form is automaticly prefixed.
- * @param array $selected Array of element selected when posted. Multiples will only show them.
- * @param boolean $multiple A multiple elements select.
- * @param integer $size Number of element to be shown ignored for non multiple (default 6).
- * @param boolean $reverse If true, multiple select will hide selected elements (default false).
+ *
+ * used by SpecialUserrights.php
+ * @todo move it to there, and don't forget to copy it for SpecialMakesysop.php
+ *
+ * @param $selectname String: name of this element. Name of form is automaticly prefixed.
+ * @param $selectmsg String: FIXME
+ * @param $selected Array: array of element selected when posted. Only multiples will show them.
+ * @param $multiple Boolean: A multiple elements select.
+ * @param $size Integer: number of elements to be shown ignored for non-multiple (default 6).
+ * @param $reverse Boolean: if true, multiple select will hide selected elements (default false).
+ * @todo Document $selectmsg
 */
 function HTMLSelectGroups($selectname, $selectmsg, $selected=array(), $multiple=false, $size=6, $reverse=false) {
-       $groups =& Group::getAllGroups();
-       
-       $out = wfMsg($selectmsg);
-       $out .= '<select name="'.$selectname;
-       if($multiple) { $out.='[]" multiple="multiple" size="'.$size; }
-       $out.= "\">\n";
-       
-       foreach ( $groups as $id => $g ) {
-               if($multiple) {
+       $groups = User::getAllGroups();
+       $out = htmlspecialchars( wfMsg( $selectmsg ) );
+       $out .= "<br />";
+
+       if( $multiple ) {
+               $attribs = array(
+                       'name'    => $selectname . '[]',
+                       'multiple'=> 'multiple',
+                       'size'    => $size );
+       } else {
+               $attribs = array( 'name' => $selectname );
+       }
+       $attribs['style'] = 'width: 100%';
+       $out .= wfOpenElement( 'select', $attribs );
+
+       foreach( $groups as $group ) {
+               $attribs = array( 'value' => $group );
+               if( $multiple ) {
                        // for multiple will only show the things we want
-                       if(in_array($id, $selected) xor $reverse) { 
-                               $out .= '<option value="'.$id.'">'.$g->getExpandedName()."</option>\n";
+                       if( !in_array( $group, $selected ) xor $reverse ) {
+                               continue;
                        }
                } else {
-                       $out .= '<option ';
-                       if(in_array($id, $selected)) { $out .= 'selected="selected" '; }
-                       $out .= 'value="'.$id.'">'.$g->getExpandedName()."</option>\n";
+                       if( in_array( $group, $selected ) ) {
+                               $attribs['selected'] = 'selected';
+                       }
                }
+               $out .= wfElement( 'option', $attribs, User::getGroupName( $group ) ) . "\n";
        }
-       $out .= "</select>\n";
-       return $out;
-}
 
-/** Build a select with all existent rights
- * @param array $selected Names(?) of user rights that should be selected.
- * @return string HTML select.
- */
-function HTMLSelectRights($selected='') {
-       global $wgAvailableRights;
-       $out = '<select name="editgroup-getrights[]" multiple="multiple">';
-       $groupRights = explode(',',$selected);
-       
-       foreach($wgAvailableRights as $right) {
-       
-               // check box when right exist
-               if(in_array($right, $groupRights)) { $selected = 'selected="selected" '; }
-               else { $selected = ''; }
-                                       
-               $out .= '<option value="'.$right.'" '.$selected.'>'.$right."</option>\n";
-       }
        $out .= "</select>\n";
        return $out;
 }
-?>
+
+