JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform: add radio button support
authorJason Woofenden <jason@jasonwoof.com>
Thu, 28 Oct 2010 23:48:20 +0000 (19:48 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Fri, 29 Oct 2010 06:49:03 +0000 (02:49 -0400)
encode.php
metaform.php
metaform/template.html

index 07bd2f8..835f7cb 100644 (file)
@@ -268,7 +268,7 @@ function pulldown($name, $options, $keys_from = PULLDOWN_ARRAY, $multiple = fals
 # output a bunch of <option> tags
 function enc_options($values, $name) {
        if(!isset($GLOBALS[$name . '_options'])) {
-               die('pulldown() must be called before this template can be run. See code/wfpl/encode.php');
+               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
        }
        if($GLOBALS[$name . '_options']['multiple']) { # FIXME test this
                $values = explode(', ', $values);
@@ -276,6 +276,54 @@ function enc_options($values, $name) {
        return encode_options($values, $GLOBALS[$name . '_options']['options'], PULLDOWN_2D);
 }
 
+function enc_radio_n($str, $name, $n) {
+       if(!isset($GLOBALS[$name . '_options'])) {
+               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
+       }
+
+       if(!isset($GLOBALS[$name . '_options']['options'][$n])) {
+               die("Template error: pulldown('$name') does not have element # $n");
+       }
+
+       $value = enc_attr($GLOBALS[$name . '_options']['options'][$n][0]);
+
+       if($str === $value) {
+               $value .= '" checked="checked';
+       }
+
+       return $value;
+}
+function enc_radio_0($str, $name) { return enc_radio_n($str, $name, 0); }
+function enc_radio_1($str, $name) { return enc_radio_n($str, $name, 1); }
+function enc_radio_2($str, $name) { return enc_radio_n($str, $name, 2); }
+function enc_radio_3($str, $name) { return enc_radio_n($str, $name, 3); }
+function enc_radio_4($str, $name) { return enc_radio_n($str, $name, 4); }
+function enc_radio_5($str, $name) { return enc_radio_n($str, $name, 5); }
+function enc_radio_6($str, $name) { return enc_radio_n($str, $name, 6); }
+function enc_radio_7($str, $name) { return enc_radio_n($str, $name, 7); }
+
+
+function enc_radio_caption_n($str, $name, $n) {
+       if(!isset($GLOBALS[$name . '_options'])) {
+               die("pulldown('$name') must be called before this template can be run. See code/wfpl/encode.php");
+       }
+
+       if(!isset($GLOBALS[$name . '_options']['options'][$n])) {
+               die("Template error: pulldown('$name') does not have element #$n");
+       }
+
+       return $GLOBALS[$name . '_options']['options'][$n][1];
+}
+function enc_radio_caption_0($str, $name) { return enc_radio_caption_n($str, $name, 0); }
+function enc_radio_caption_1($str, $name) { return enc_radio_caption_n($str, $name, 1); }
+function enc_radio_caption_2($str, $name) { return enc_radio_caption_n($str, $name, 2); }
+function enc_radio_caption_3($str, $name) { return enc_radio_caption_n($str, $name, 3); }
+function enc_radio_caption_4($str, $name) { return enc_radio_caption_n($str, $name, 4); }
+function enc_radio_caption_5($str, $name) { return enc_radio_caption_n($str, $name, 5); }
+function enc_radio_caption_6($str, $name) { return enc_radio_caption_n($str, $name, 6); }
+function enc_radio_caption_7($str, $name) { return enc_radio_caption_n($str, $name, 7); }
+
+
 # use this function along with a special template to generate the html for pulldowns and multiple select boxes.
 #
 # Parameters:
index a9d3956..1bdd940 100644 (file)
@@ -45,7 +45,7 @@ $GLOBALS['types'] = array(
        'textarea' =>   array('textarea',    'unix',       'text'),
        'html' =>       array('html',        'unix',       'text'),
        'pulldown' =>   array('pulldown',    'options',    'varchar(100)'),
-       'radio' =>      array('radio',       'oneline',    'varchar(200)'),
+       'radio' =>      array('radio',       'options',    'varchar(100)'),
        'checkbox' =>   array('checkbox',    'bool',       'int(1)'),
        'yesno' =>      array('checkbox',    'yesno',      'varchar(3)'),
        'delete' =>     array('checkbox',    'yesno',      'n/a'),
@@ -381,7 +381,7 @@ function make_php() {
                        } else {
                                if($input == 'html') {
                                        $has_html_editors = true;
-                               } elseif($input == 'pulldown') {
+                               } elseif($input == 'pulldown' || $input == 'radio') {
                                        $tem->show('pulldowns');
                                        $tem->show('pulldown_format_extra');
                                }
@@ -479,7 +479,7 @@ function preview() {
        $fields = get_fields();
        foreach($fields as $field) {
                list($name, $type, $input, $format, $sql) = $field;
-               if($type == 'pulldown') {
+               if($type == 'pulldown' || $type == 'radio') {
                        pulldown($name, array('option 1', 'option 2', 'option 3'));
                }
        }
index b7ea072..ded1b41 100644 (file)
                        <div class="caption">~caption html~</div>
                        <div class="field"><select name="~name~"><option value="">Choose One:</option><!--~~~name~ states~~--></select></div><!--~}~--><!--~radio {~-->
                        <div class="caption">~caption html~</div>
-                       <div class="field"><input type="radio" name="~name~~~~name~ checked~~"></div><!--~}~--><!--~checkbox {~-->
+                       <div class="field">
+                               <input type="radio" name="~name~" value="~~~name~ radio_0~~">~~~name~ radio_caption_0 html~~<br>
+                               <input type="radio" name="~name~" value="~~~name~ radio_1~~">~~~name~ radio_caption_1 html~~<br>
+                               <input type="radio" name="~name~" value="~~~name~ radio_2~~">~~~name~ radio_caption_2 html~~
+                       </div><!--~}~--><!--~checkbox {~-->
                        <div class="caption"><input type="checkbox" name="~name~~~~name~ checked~~"> ~caption html~</div>
                        <div class="field"></div><!--~}~--><!--~submit {~-->
                        <div class="caption">&nbsp;</div>