JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform: demo pulldown syntax
[wfpl.git] / metaform.php
index a9d3956..9294189 100644 (file)
@@ -45,14 +45,16 @@ $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'),
        'image' =>      array('image',       'oneline',    'varchar(120)'),
        'thumb' =>      array('image',       'oneline',    'varchar(240)'),
        'file' =>       array('file',        'oneline',    'varchar(100)'),
-       'submit' =>     array('submit',      'oneline',    'n/a')
+       'submit' =>     array('submit',      'n/a',        'n/a'),
+       '{' =>          array('fieldset',    'n/a',        'n/a'),
+       '}' =>          array('end_fieldset','n/a',        'n/a')
 );
 
 function list_available_types() {
@@ -159,14 +161,26 @@ function get_fields() {
        $fields_str = rtrim($fields_str);
        $fields = split("\n", $fields_str);
        foreach($fields as $field) {
-               list($name, $type, $options) = split('  *', $field);
-               if($options) $options = split(',', $options);
-               if(!$type) $type = $name;
+               $field = trim($field);
+               if(substr($field, -1) == '{') {
+                       $name = trim(substr($field, 0, -1)); # FIXME: stop this from getting enc_caption()ed
+                       $type = '{';
+                       $options = null;
+               } elseif(substr($field, -1) == '{') {
+                       $name = 'ignored';
+                       $type = '}';
+                       $options = null;
+               } else {
+                       list($name, $type, $options) = split('  *', $field);
+                       if($options) $options = explode(',', $options);
+                       if(!$type) $type = $name;
+               }
                $input = field_input($type);
                $format = field_format($type);
                $sql = field_sql($type);
                $GLOBALS['gotten_fields'][] = array($name, $type, $input, $format, $sql, $options);
        }
+
        return $GLOBALS['gotten_fields'];
 }
 
@@ -271,8 +285,10 @@ function make_html($whole_file = true) {
                        default:
                                $display_type = 'short';
                }
-               $display_fields[] = array($display_type => array(
-                       'name' => $name, 'caption' => format_caption($name)));
+               if($format != 'n/a') {
+                       $display_fields[] = array($display_type => array(
+                               'name' => $name, 'caption' => format_caption($name)));
+               }
 
                if(show_in_listing($type, $input, $format, $sql)) {
                        $listing_headers[] = array('caption' => format_caption($name));
@@ -337,6 +353,8 @@ function show_in_listing($type, $input, $format, $sql) {
                case 'password':
                case 'textarea':
                case 'html':
+               case 'fieldset':
+               case 'end_fieldset':
                        return false;
        }
        if($type == 'image') {
@@ -346,6 +364,21 @@ function show_in_listing($type, $input, $format, $sql) {
        return true;
 }
 
+function pulldown_options_array($options) {
+       if($options) {
+               $pulldown_options = array();
+               foreach($options as $option) {
+                       $option = preg_replace("/['\\\\]/", '\\\\$0', $option);
+                       $pulldown_options[] = "'$option'";
+               }
+               $pulldown_options = 'array(' . join(', ', $pulldown_options) . ')';
+       } else {
+               $pulldown_options = "array(array('op1', 'Option One'), array('op2', 'Option Two'), 'n/a')";
+       }
+
+       return $pulldown_options;
+}
+
 function make_php() {
        $has_html_editors = false;
        $tem = new tem();
@@ -356,7 +389,7 @@ function make_php() {
        $always_field = find_always_field($fields);
        $image_included_yet = false;
        foreach($fields as $field) {
-               list($name, $type, $input, $format, $sql) = $field;
+               list($name, $type, $input, $format, $sql, $options) = $field;
                if($input != 'submit') {
                        $tem->set('format', $format);
                        $tem->set('name', $name);
@@ -381,11 +414,15 @@ function make_php() {
                        } else {
                                if($input == 'html') {
                                        $has_html_editors = true;
-                               } elseif($input == 'pulldown') {
+                               } elseif($input == 'pulldown' || $input == 'radio') {
+                                       $pulldown_options = pulldown_options_array($options);
+                                       $tem->set('pulldown_options', $pulldown_options);
                                        $tem->show('pulldowns');
                                        $tem->show('pulldown_format_extra');
                                }
-                               $tem->show('formats');
+                               if($format != 'n/a') {
+                                       $tem->show('formats');
+                               }
                        }
                }
 
@@ -478,9 +515,9 @@ function preview() {
        }
        $fields = get_fields();
        foreach($fields as $field) {
-               list($name, $type, $input, $format, $sql) = $field;
-               if($type == 'pulldown') {
-                       pulldown($name, array('option 1', 'option 2', 'option 3'));
+               list($name, $type, $input, $format, $sql, $options) = $field;
+               if($type == 'pulldown' || $type == 'radio') {
+                       pulldown($name, eval('return ' . pulldown_options_array($options) . ';'));
                }
        }
        $preview = $preview_tem->run();