X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=metaform.php;h=cee8033d4c4f6ba2798c4dbbf3aa5e55e23b6232;hb=697d643083cb5829c96ed7854bd63309c8f325f3;hp=1bdd940d996969ba6dc6123cba9d34ec88c4ffb7;hpb=83825f3ade87a6432b63e64b39725f68b03afee8;p=wfpl.git diff --git a/metaform.php b/metaform.php index 1bdd940..cee8033 100644 --- a/metaform.php +++ b/metaform.php @@ -52,7 +52,9 @@ $GLOBALS['types'] = array( '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() { @@ -80,9 +82,11 @@ function tem_set_globals(&$tem) { 'opt_db', 'opt_listing', 'opt_display', - 'opt_pass'); + 'opt_pass', + 'opt_public_form', + 'opt_public_display'); foreach($bools as $bool) { - if(format_bool($GLOBALS[$bool])) { + if($GLOBALS[$bool]) { $tem->set($bool); } } @@ -99,11 +103,13 @@ function metaform() { } $GLOBALS['singular'] = format_oneline($_REQUEST['singular']); - $GLOBALS['opt_email'] = format_yesno($_REQUEST['opt_email']); - $GLOBALS['opt_db'] = format_yesno($_REQUEST['opt_db']); - $GLOBALS['opt_listing'] = format_yesno($_REQUEST['opt_listing']); - $GLOBALS['opt_display'] = format_yesno($_REQUEST['opt_display']); - $GLOBALS['opt_pass'] = format_yesno($_REQUEST['opt_pass']); + $GLOBALS['opt_email'] = format_bool($_REQUEST['opt_email']); + $GLOBALS['opt_db'] = format_bool($_REQUEST['opt_db']); + $GLOBALS['opt_listing'] = format_bool($_REQUEST['opt_listing']); + $GLOBALS['opt_display'] = format_bool($_REQUEST['opt_display']); + $GLOBALS['opt_pass'] = format_bool($_REQUEST['opt_pass']); + $GLOBALS['opt_public_form'] = format_bool($_REQUEST['opt_public_form']); + $GLOBALS['opt_public_display'] = format_bool($_REQUEST['opt_public_display']); tem_init(); tem_set_globals($GLOBALS['wfpl_template']); @@ -159,14 +165,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']; } @@ -218,7 +236,7 @@ function view_sql() { function find_always_field($fields) { foreach($fields as $field) { list($name, $type, $input, $format, $sql) = $field; - if($input != 'submit' && $input != 'image' && $input != 'file' && $input != 'checkbox' && $input != 'radio') { + if($input != 'submit' && $input != 'image' && $input != 'file' && $input != 'checkbox' && $input != 'radio' && $type != '{') { return $name; } } @@ -271,8 +289,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)); @@ -291,7 +311,7 @@ function make_html($whole_file = true) { } # Submit/Send button - if($GLOBALS['opt_email'] == 'Yes' && $GLOBALS['opt_db'] != 'Yes') { + if($GLOBALS['opt_email'] == 'Yes' && !$GLOBALS['opt_db']) { $visible_fields[] = array('submit' => array( 'name' => 'send', 'caption' => 'Send')); @@ -301,9 +321,12 @@ function make_html($whole_file = true) { 'caption' => 'Save')); } - $tem->set('form', array( - 'visible_fields' => $visible_fields, - 'hidden_fields' => $hidden_fields)); + $form_fields = array(); + $form_fields['visible_fields'] = $visible_fields; + if($hidden_fields) { + $form_fields['hidden_fields'] = $hidden_fields; + } + $tem->set('form', $form_fields); # opt_display and opt_listing control whether these are actually displayed $tem->set('display_fields', $display_fields); @@ -337,6 +360,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 +371,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 +396,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); @@ -382,14 +422,18 @@ function make_php() { if($input == 'html') { $has_html_editors = true; } 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'); + } } } - if($GLOBALS['opt_listing'] == 'Yes') { + if($GLOBALS['opt_listing']) { if(show_in_listing($type, $input, $format, $sql)) { $tem->show('listing_fields_1'); $tem->show('listing_fields_2'); @@ -410,7 +454,7 @@ function make_php() { $tem->set('always_field', $always_field); $tem->set('db_fields', $db_fields); $tem->set('metaform_url', edit_url()); - if($GLOBALS['opt_email'] == 'Yes') { + if($GLOBALS['opt_email']) { $this_domain = $_SERVER['HTTP_HOST']; if(substr($this_domain, -2) == '.l') { $this_domain = substr($this_domain, 0, -1) . 'com'; @@ -473,14 +517,14 @@ function preview() { tem_set('fields', $_REQUEST['fields']); $preview_tem = new tem(); $preview_tem->load_str(make_html(false)); - if($GLOBALS['opt_db'] == 'Yes') { + if($GLOBALS['opt_db']) { $preview_tem->show('new_msg'); } $fields = get_fields(); foreach($fields as $field) { - list($name, $type, $input, $format, $sql) = $field; + list($name, $type, $input, $format, $sql, $options) = $field; if($type == 'pulldown' || $type == 'radio') { - pulldown($name, array('option 1', 'option 2', 'option 3')); + pulldown($name, eval('return ' . pulldown_options_array($options) . ';')); } } $preview = $preview_tem->run(); @@ -498,13 +542,14 @@ function download_tar() { "INSTALL" => read_whole_file('code/wfpl/metaform/INSTALL'), ".htaccess" => make_htaccess(), #"run.php ->" => 'code/wfpl/run.php', - "style.css" => read_whole_file('code/wfpl/metaform/style.css'), + "style.less" => read_whole_file('code/wfpl/metaform/style.less'), + "template.html" => read_whole_file('code/wfpl/metaform/site-template.html'), "$name.html" => make_html(), "$name.php" => make_php()); - if($GLOBALS['opt_db'] == 'Yes') { + if($GLOBALS['opt_db']) { $data["$name.sql"] = make_sql(); } - if($GLOBALS['opt_email'] == 'Yes') { + if($GLOBALS['opt_email']) { $data["$name.email.txt"] = make_email(); } make_tar($name, $data);