X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=metaform.php;h=1cfb70c7dc099299d33f312b1081d22dfe2a22c1;hb=8a5f6e7c208344736b432515d9b93a1aa78790ed;hp=274128f699a1b543c72bfcf5086bf86d50b8c3d2;hpb=716a02dbcc75c65b2add4198e08e52270664f092;p=wfpl.git diff --git a/metaform.php b/metaform.php index 274128f..1cfb70c 100644 --- a/metaform.php +++ b/metaform.php @@ -18,40 +18,41 @@ # This file writes the code for you (sql, php, html, email) to handle a form. -require_once('code/wfpl/template.php'); -require_once('code/wfpl/http.php'); -require_once('code/wfpl/tar.php'); -require_once('code/wfpl/format.php'); +require_once(__DIR__ . '/template.php'); +require_once(__DIR__ . '/http.php'); +require_once(__DIR__ . '/tar.php'); +require_once(__DIR__ . '/format.php'); # see code/wfpl/metaform/template.html for the html templates for these elements $GLOBALS['types'] = array( # type input format sql - 'varname' => array('textbox', 'varname', 'varchar(50)'), - 'name' => array('textbox', 'oneline', 'varchar(200)'), - 'textbox' => array('textbox', 'oneline', 'varchar(200)'), + 'varname' => array('textbox', 'varname', 'varchar(50) binary'), + 'name' => array('textbox', 'oneline', 'varchar(200) binary'), + 'textbox' => array('textbox', 'oneline', 'varchar(200) binary'), 'int' => array('textbox', 'int', 'int'), - 'decimal' => array('textbox', 'decimal', 'decimal(12,12)'), - 'bigint' => array('textbox', 'int', 'varchar(100)'), # up to 100 digits, stored as a string - 'zip' => array('textbox', 'zip', 'varchar(20)'), - 'email' => array('textbox', 'email', 'varchar(100)'), - 'phone' => array('textbox', 'phone', 'varchar(32)'), - 'state' => array('states', 'oneline', 'varchar(2)'), - 'money' => array('textbox', 'money', 'varchar(32)'), - 'date' => array('date', 'mdy_to_ymd', 'char(10)'), - 'dollars' => array('textbox', 'dollars', 'varchar(32)'), - 'url' => array('textbox', 'url', 'varchar(200)'), - 'hidden' => array('hidden', 'unix', 'varchar(200)'), - 'password' => array('password', 'oneline', 'varchar(200)'), - 'textarea' => array('textarea', 'unix', 'text'), - 'html' => array('html', 'unix', 'text'), - 'pulldown' => array('pulldown', 'options', 'varchar(100)'), - 'radio' => array('radio', 'options', 'varchar(100)'), + 'decimal' => array('textbox', 'decimal', 'decimal(12,2)'), + 'bigint' => array('textbox', 'int', 'varchar(100) binary'), # up to 100 digits, stored as a string + 'zip' => array('textbox', 'zip', 'varchar(20) binary'), + 'email' => array('email', 'email', 'varchar(100) binary'), + 'search' => array('search', 'oneline', 'varchar(200) binary'), + 'phone' => array('textbox', 'phone', 'varchar(32) binary'), + 'state' => array('states', 'oneline', 'varchar(2) binary'), + 'money' => array('textbox', 'money', 'varchar(32) binary'), + 'date' => array('date', 'mdy_to_ymd', 'char(10) binary'), + 'dollars' => array('textbox', 'dollars', 'varchar(32) binary'), + 'url' => array('textbox', 'url', 'varchar(200) binary'), + 'hidden' => array('hidden', 'unix', 'varchar(200) binary'), + 'password' => array('password', 'oneline', 'varchar(200) binary'), + 'textarea' => array('textarea', 'unix', 'text binary'), + 'html' => array('html', 'unix', 'mediumtext binary'), + 'pulldown' => array('pulldown', 'options', 'varchar(100) binary'), + 'radio' => array('radio', 'options', 'varchar(100) binary'), 'checkbox' => array('checkbox', 'bool', 'int(1)'), - 'yesno' => array('checkbox', 'yesno', 'varchar(3)'), + 'yesno' => array('checkbox', 'yesno', 'varchar(3) binary'), 'delete' => array('checkbox', 'yesno', 'n/a'), - 'image' => array('image', 'oneline', 'varchar(120)'), - 'thumb' => array('image', 'oneline', 'varchar(240)'), - 'file' => array('file', 'oneline', 'varchar(100)'), + 'image' => array('image', 'oneline', 'varchar(120) binary'), + 'thumb' => array('image', 'oneline', 'varchar(240) binary'), + 'file' => array('file', 'oneline', 'varchar(100) binary'), 'submit' => array('submit', 'n/a', 'n/a'), '{' => array('fieldset', 'n/a', 'n/a'), '}' => array('end_fieldset','n/a', 'n/a') @@ -70,6 +71,7 @@ function list_available_types() { function tem_set_globals(&$tem) { $vars = array( 'file_name', + 'public_file_name', 'table_name', 'plural', 'singular'); @@ -82,9 +84,12 @@ function tem_set_globals(&$tem) { 'opt_db', 'opt_listing', 'opt_display', - 'opt_pass'); + 'opt_pass', + 'opt_public_form', + 'opt_public_display', + 'opt_public_something'); foreach($bools as $bool) { - if(format_bool($GLOBALS[$bool])) { + if($GLOBALS[$bool]) { $tem->set($bool); } } @@ -101,11 +106,19 @@ 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']); + + $GLOBALS['public_file_name'] = $GLOBALS['file_name']; + if($GLOBALS['opt_public_form'] || $GLOBALS['opt_public_display']) { + $GLOBALS['opt_public_something'] = 1; + $GLOBALS['file_name'] = $GLOBALS['file_name'] . _admin; + } tem_init(); tem_set_globals($GLOBALS['wfpl_template']); @@ -166,13 +179,9 @@ function get_fields() { $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 = split(',', $options); + if($options) $options = explode(',', $options); if(!$type) $type = $name; } $input = field_input($type); @@ -232,7 +241,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; } } @@ -291,7 +300,7 @@ function make_html($whole_file = true) { } if(show_in_listing($type, $input, $format, $sql)) { - $listing_headers[] = array('caption' => format_caption($name)); + $listing_headers[] = array('caption' => format_caption($name), 'name' => $name); $listing_field = array('name' => $name); if($format == 'bool' || $format == 'yesno') { $listing_field['enc'] = 'yesno'; @@ -307,7 +316,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')); @@ -317,9 +326,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); @@ -364,6 +376,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(); @@ -374,7 +401,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); @@ -400,6 +427,9 @@ 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->set('has_pulldowns'); $tem->show('pulldowns'); $tem->show('pulldown_format_extra'); } @@ -409,7 +439,7 @@ function make_php() { } } - 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'); @@ -430,7 +460,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'; @@ -493,14 +523,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(); @@ -513,21 +543,27 @@ function preview() { } function download_tar() { - $name = $GLOBALS['file_name']; - $data = array( + $admin_name = $GLOBALS['file_name']; + $nice_name = $GLOBALS['public_file_name']; + $files = array( "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'), - "$name.html" => make_html(), - "$name.php" => make_php()); - if($GLOBALS['opt_db'] == 'Yes') { - $data["$name.sql"] = make_sql(); + "run.php ->" => 'code/wfpl/run.php', + "style.less" => read_whole_file('code/wfpl/metaform/style.less'), + "template.html" => read_whole_file('code/wfpl/metaform/site-template.html'), + "$admin_name.html" => make_html(), + "$admin_name.php" => make_php()); + if($GLOBALS['opt_public_something']) { + $files["$nice_name.html ->"] = "$admin_name.html"; + $files["$nice_name.php ->"] = "$admin_name.php"; + } + if($GLOBALS['opt_db']) { + $files["$nice_name.sql"] = make_sql(); } - if($GLOBALS['opt_email'] == 'Yes') { - $data["$name.email.txt"] = make_email(); + if($GLOBALS['opt_email']) { + $files["$nice_name.email.txt"] = make_email(); } - make_tar($name, $data); + make_tar($nice_name, $files); }