Blacklist ZIP subtypes added in r68873, to avoid GIFAR.
[lhc/web/wiklou.git] / includes / Xml.php
index f7cfa45..b293b18 100644 (file)
@@ -102,7 +102,7 @@ class Xml {
         *
         * @param $element String element name
         * @param $attribs array of attributes
-        * @param $contents content of the element
+        * @param $contents String content of the element
         * @return string
         */
        public static function tags( $element, $attribs = null, $contents ) {
@@ -248,8 +248,8 @@ class Xml {
 
        /**
         * Shortcut to make a span element
-        * @param $text content of the element, will be escaped
-        * @param $class class name of the span element
+        * @param $text String content of the element, will be escaped
+        * @param $class String class name of the span element
         * @param $attribs other attributes
         * @return string
         */
@@ -271,7 +271,7 @@ class Xml {
 
        /**
         * Convenience function to build an HTML text input field
-        * @param $name value of the name attribute
+        * @param $name String value of the name attribute
         * @param $size value of the size attribute
         * @param $value value of the value attribute
         * @param $attribs other attributes
@@ -313,9 +313,9 @@ class Xml {
 
        /**
         * Convenience function to build an HTML checkbox
-        * @param $name value of the name attribute
-        * @param $checked Whether the checkbox is checked or not
-        * @param $attribs other attributes
+        * @param $name String value of the name attribute
+        * @param $checked Bool Whether the checkbox is checked or not
+        * @param $attribs Array other attributes
         * @return string HTML
         */
        public static function check( $name, $checked=false, $attribs=array() ) {
@@ -347,7 +347,10 @@ class Xml {
         * Convenience function to build an HTML form label
         * @param $label String text of the label
         * @param $id
-        * @param $attribs Array, other attributes
+        * @param $attribs Array an attribute array.  This will usuall be 
+        *     the same array as is passed to the corresponding input element,
+        *     so this function will cherry-pick appropriate attributes to 
+        *     apply to the label as well; currently only class is applied.
         * @return string HTML
         */
        public static function label( $label, $id, $attribs=array() ) {
@@ -445,7 +448,7 @@ class Xml {
         * @param $name Mixed: Name and id for the drop-down
         * @param $class Mixed: CSS classes for the drop-down
         * @param $other Mixed: Text for the "Other reasons" option
-        * @param $list Mixed: Correctly formatted text to be used to generate the options
+        * @param $list Mixed: Correctly formatted text (newline delimited) to be used to generate the options
         * @param $selected Mixed: Option which should be pre-selected
         * @param $tabindex Mixed: Value of the tabindex attribute
         * @return string
@@ -594,6 +597,8 @@ class Xml {
                                $s .= self::encodeJsVar( $elt );
                        }
                        $s .= ']';
+               } elseif ( $value instanceof XmlJsCode ) {
+                       $s = $value->value;
                } elseif ( is_object( $value ) || is_array( $value ) ) {
                        // Objects and associative arrays
                        $s = '{';
@@ -611,6 +616,30 @@ class Xml {
                return $s;
        }
 
+       /**
+        * Create a call to a JavaScript function. The supplied arguments will be 
+        * encoded using Xml::encodeJsVar(). 
+        *
+        * @param $name String The name of the function to call, or a JavaScript expression
+        *    which evaluates to a function object which is called.
+        * @param $args Array of arguments to pass to the function.
+        * @since 1.17
+        */
+       public static function encodeJsCall( $name, $args ) {
+               $s = "$name(";
+               $first = true;
+               foreach ( $args as $arg ) {
+                       if ( $first ) {
+                               $first = false;
+                       } else {
+                               $s .= ', ';
+                       }
+                       $s .= Xml::encodeJsVar( $arg );
+               }
+               $s .= ");\n";
+               return $s;
+       }
+
 
        /**
         * Check if a string is well-formed XML.
@@ -673,8 +702,8 @@ class Xml {
        /**
        * Generate a form (without the opening form element).
        * Output optionally includes a submit button.
-       * @param $fields Associative array, key is message corresponding to a description for the field (colon is in the message), value is appropriate input.
-       * @param $submitLabel A message containing a label for the submit button.
+       * @param $fields Array Associative array, key is message corresponding to a description for the field (colon is in the message), value is appropriate input.
+       * @param $submitLabel String A message containing a label for the submit button.
        * @return string HTML form.
        */
        public static function buildForm( $fields, $submitLabel = null ) {
@@ -813,3 +842,23 @@ class XmlSelect {
        }
 
 }
+
+/**
+ * A wrapper class which causes Xml::encodeJsVar() and Xml::encodeJsCall() to 
+ * interpret a given string as being a JavaScript expression, instead of string 
+ * data.
+ *
+ * Example:
+ *
+ *    Xml::encodeJsVar( new XmlJsCode( 'a + b' ) );
+ *
+ * Returns "a + b".
+ * @since 1.17
+ */
+class XmlJsCode {
+       public $value;
+
+       function __construct( $value ) {
+               $this->value = $value;
+       }
+}