From: Jason Woofenden Date: Tue, 5 Jun 2007 08:19:16 +0000 (-0400) Subject: metaform now supports fckeditor, and email/db parts are optional X-Git-Url: https://jasonwoof.com/gitweb/?p=wfpl.git;a=commitdiff_plain;h=21c47e88810e97fe5b727c9c2689f64533bf6452 metaform now supports fckeditor, and email/db parts are optional --- diff --git a/metaform.php b/metaform.php index 5ba0f44..8215394 100644 --- a/metaform.php +++ b/metaform.php @@ -24,6 +24,7 @@ require_once('code/wfpl/template.php'); require_once('code/wfpl/http.php'); require_once('code/wfpl/tar.php'); +require_once('code/wfpl/format.php'); # see code/wfpl/metaform/template.html for the html templates for these elements $GLOBALS['types'] = array( @@ -41,6 +42,7 @@ $GLOBALS['types'] = array( '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', 'int'), 'radio' => array('radio', 'oneline', 'varchar(200)'), 'checkbox' => array('checkbox', 'yesno', 'varchar(3)'), @@ -50,43 +52,62 @@ $GLOBALS['types'] = array( 'submit' => array('submit', 'oneline', 'n/a') ); -if(isset($_REQUEST['form_name'])) { - $GLOBALS['form_name'] = ereg_replace('[^a-z0-9_-]', '', $_REQUEST['form_name']); -} else { - $GLOBALS['form_name'] = 'some_form'; +function list_available_types() { + $types = ''; + foreach($GLOBALS['types'] as $key => $value) { + if($types) { + $types .= ', '; + } + $types .= $key; + } + tem_set('available_types', $types); } -if(isset($_REQUEST['fields'])) { - if(isset($_REQUEST['view_sql'])) { - view_sql(); - exit(); - } elseif(isset($_REQUEST['view_php'])) { - view_php(); - exit(); - } elseif(isset($_REQUEST['view_template'])) { - view_template(); - exit(); - } elseif(isset($_REQUEST['view_email'])) { - view_email(); - exit(); - } elseif(isset($_REQUEST['download_tar'])) { - download_tar(); - exit(); - } elseif(isset($_REQUEST['preview'])) { - preview(); - exit(); - } elseif(isset($_REQUEST['edit'])) { - tem_set('fields', $_REQUEST['fields']); - tem_set('form_name', $GLOBALS['form_name']); - # fall through + +function metaform() { + if(isset($_REQUEST['form_name'])) { + $GLOBALS['form_name'] = ereg_replace('[^a-z0-9_-]', '', $_REQUEST['form_name']); + $GLOBALS['opt_email'] = format_yesno($_REQUEST['opt_email']); + tem_set('opt_email', $GLOBALS['opt_email']); + $GLOBALS['opt_db'] = format_yesno($_REQUEST['opt_db']); + tem_set('opt_db', $GLOBALS['opt_db']); } else { - die("Sorry... couldn't tell which button you pressed"); + $GLOBALS['form_name'] = 'some_form'; } -} -set_form_action(); -tem_output('code/wfpl/metaform/main.html'); -exit(); + if(isset($_REQUEST['fields'])) { + if(isset($_REQUEST['view_sql'])) { + view_sql(); + exit(); + } elseif(isset($_REQUEST['view_php'])) { + view_php(); + exit(); + } elseif(isset($_REQUEST['view_html'])) { + view_html(); + exit(); + } elseif(isset($_REQUEST['view_email'])) { + view_email(); + exit(); + } elseif(isset($_REQUEST['download_tar'])) { + download_tar(); + exit(); + } elseif(isset($_REQUEST['preview'])) { + preview(); + exit(); + } elseif(isset($_REQUEST['edit'])) { + tem_set('fields', $_REQUEST['fields']); + tem_set('form_name', $GLOBALS['form_name']); + # fall through + } else { + die("Sorry... couldn't tell which button you pressed"); + } + } + + + set_form_action(); + list_available_types(); + tem_output('code/wfpl/metaform/main.html'); +} function field_input($type) { return $GLOBALS['types'][$type][0]; } @@ -154,8 +175,9 @@ function view_sql() { # pass false if you want to exclude the and tag etc. -function make_template($whole_file = true) { +function make_html($whole_file = true) { $uploads_output_already = false; + $has_html_editors = false; $tem = new tem(); $tem->load('code/wfpl/metaform/template.html'); $tem->set('form_name', $GLOBALS['form_name']); @@ -172,13 +194,28 @@ function make_template($whole_file = true) { $tem->sub('uploads'); $tem->set('enctype_attr', '" enctype="multipart/form-data'); $uploads_output_already = true; + } elseif($input == 'html') { + $has_html_editors = true; + $tem->set('html_field_name', $name); + $tem->sub('replace_textarea'); } } + + if($GLOBALS['opt_db'] == 'Yes') { + $tem->sub('opt_db_1'); + } else { + $tem->sub('opt_db_1_else'); + } $tem->set('name', 'save'); $tem->set('caption', 'Save'); $tem->sub('submit'); $tem->sub('row'); $tem->sub('form'); + + if($has_html_editors) { + $tem->sub('html_editor_headers'); + } + if($whole_file) { return $tem->run(); } else { @@ -186,9 +223,9 @@ function make_template($whole_file = true) { } } -function view_template() { +function view_html() { view_headers(); - echo make_template(); + echo make_html(); } @@ -236,6 +273,17 @@ function make_php() { $tem->set('db_fields', $db_fields); $tem->set('php_fields', $php_fields); $tem->set('metaform_url', edit_url()); + if($GLOBALS['opt_db'] == 'Yes') { + $tem->sub('opt_db_1'); + $tem->sub('opt_db_2'); + $tem->sub('opt_db_3'); + $tem->sub('opt_db_4'); + $tem->sub('opt_db_5'); + } + if($GLOBALS['opt_email'] == 'Yes') { + $tem->sub('opt_email_1'); + $tem->sub('opt_email_2'); + } return $tem->run(); } @@ -272,6 +320,12 @@ function make_email() { return $tem->run(); } +function make_htaccess() { + $tem = new tem(); + $tem->set('form', $GLOBALS['form_name']); + return $tem->run('code/wfpl/metaform/template.htaccess'); +} + function view_email() { view_headers(); echo make_email(); @@ -279,26 +333,33 @@ function view_email() { function preview() { - $tem = new tem(); - $tem->load('code/wfpl/metaform/preview.html'); - $tem->set('form_name', $GLOBALS['form_name']); - $tem->set('fields', $_REQUEST['fields']); + tem_load('code/wfpl/metaform/preview.html'); + tem_set('form_name', $GLOBALS['form_name']); + tem_set('fields', $_REQUEST['fields']); $preview_tem = new tem(); - $preview = $preview_tem->run(make_template(false)); + $preview = $preview_tem->run(make_html(false)); unset($preview_tem); - $tem->set('preview', $preview); + tem_set('preview', $preview); set_form_action(); - $tem->output(); + tem_output(); } function download_tar() { $name = $GLOBALS['form_name']; $data = array( - "$name.html" => make_template(), + ".htaccess" => make_htaccess(), + "run.php ->" => 'code/wfpl/run.php', + "$name.html" => make_html(), "$name.sql" => make_sql(), - "$name.email.txt" => make_email(), "$name.php" => make_php()); + if($GLOBALS['opt_email'] == 'Yes') { + $data["$name.email.txt"] = make_email(); + } make_wfpl_tar($name, $data); } + +metaform(); +exit(); + ?> diff --git a/metaform/main.html b/metaform/main.html index c33bad3..ffd38fc 100644 --- a/metaform/main.html +++ b/metaform/main.html @@ -13,7 +13,13 @@

Form name:

-

Below, specify the fields you'd like in your form, one field per line. After each field name, put at least one space, then the field type. The following field types are available: name textbox email phone money dollars int hidden password url textarea checkbox yesno submit.

+

Features

+ +

Send form results vie e-mail.

+ +

Save form results to a database.

+ +

Below, specify the fields you'd like in your form, one field per line. After each field name, put at least one space, then the field type. The following field types are available: ~available_types.html~.

Example:

 name      textbox
 phone     phone
diff --git a/metaform/preview.html b/metaform/preview.html
index 0de8cc0..e847988 100644
--- a/metaform/preview.html
+++ b/metaform/preview.html
@@ -10,19 +10,19 @@ td.caption { text-align: right; font-weight: bold; }
 
 
   
-

This grey thing is a preview. It will NOT work. Don't click buttons in it

+

This grey thing is a preview. It will NOT work. Don't click button(s) in it

~preview~
-

+

-

+

-

+

diff --git a/metaform/template.html b/metaform/template.html index 531f416..d5a2a5a 100644 --- a/metaform/template.html +++ b/metaform/template.html @@ -7,19 +7,31 @@ td.caption { text-align: right; vertical-align: top; font-weight: bold; } td.errorcaption { text-align: right; vertical-align: top; font-weight: bold; color: red; } div.error { border: 2px solid red; padding: 13px; margin: 20px; background: #ffdddd; } ---> +--> + + + -

Add a new entryEdit entry "~~name.html~~"

+

Add a new entryEdit entry "~~name.html~~"~form_name~ entry form

~error_message.html~

- +
~caption.html~: ~caption.html~: ~caption.html~: ~caption.html~: ~caption.html~: ~caption.html~:
~caption.html~: ~caption.html~: ~caption.html~: ~caption.html~: ~caption.html~:
~caption.html~: ~caption.html~:
diff --git a/metaform/template.php b/metaform/template.php index 14836c7..fc1263b 100644 --- a/metaform/template.php +++ b/metaform/template.php @@ -8,31 +8,30 @@ # # ~metaform_url~ -# This code can send form results by e-mail and/or save them to a database. See -# the next two comments to enable either or both. - +# SETUP + # To send results by e-mail, all you have to do is set your e-mail address here: $GLOBALS['~form_name~_form_recipient'] = "fixme@example.com"; - + +# To save results to a database, you'll need to create the ~form_name~ table +# (the file ~form_name~.sql should help with this), and create a file called +# 'db_connect.php' or 'code/db_connect.php' which calls db_connect() see: +# code/wfpl/examples/db_connect.php + # Set this to the path to your uploads directory. It can be relative to the # location of this script. IT MUST END WITH A SLASH $GLOBALS['upload_directory'] = 'uploads/'; -# To save results to a database, you'll need to create the ~form_name~ table -# (the file ~form_name~.sql should help with this), and create a file called -# 'db_connect.php' which calls db_connect() see: -# code/wfpl/examples/db_connect.php if(!file_exists('code/wfpl/template.php')) { die('This form requires wfpl.'); } require_once('code/wfpl/template.php'); require_once('code/wfpl/format.php'); require_once('code/wfpl/messages.php'); -require_once('code/wfpl/email.php'); -require_once('code/wfpl/db.php'); +require_once('code/wfpl/email.php'); +require_once('code/wfpl/db.php'); require_once('code/wfpl/upload.php'); -function ~form_name~_get_fields() { - +function ~form_name~_get_fields() { $~name~ = format_~format~($_REQUEST['~name~']); $~name~ = save_uploaded_image('~name~', $GLOBALS['upload_directory']); @@ -41,7 +40,7 @@ function ~form_name~_get_fields() { return array(~php_fields~); } -function ~form_name~() { +function ~form_name~() { $edit_id = format_int($_REQUEST['~form_name~_edit_id']); unset($_REQUEST['~form_name~_edit_id']); if($edit_id) { @@ -63,20 +62,14 @@ function ~form_name~() { if(!$edit_id && !$delet_id) { tem_sub('new_msg'); - } + } if(isset($_REQUEST['~always_field~'])) { list(~php_fields~) = ~form_name~_get_fields(); - if("you're happy with the POSTed values") { - # to enable saving to a database, create a file called 'db_connect.php' - # see: code/wfpl/examples/db_connect.php - if(file_exists('db_connect.php') || file_exists('code/db_connect.php')) { - if(file_exists('db_connect.php') { - require_once('db_connect.php'); - } else { - require_once('code/db_connect.php'); - } + if("you're happy with the POSTed values") { + if(file_exists($db_connector = 'db_connect.php') || file_exists($db_connector = 'code/db_connect.php')) { + require_once($db_connector); if($edit_id) { # uploading nothing means leaving it as is. if(!$~name~ && $delete_~name~ != 'Yes') { @@ -89,7 +82,7 @@ function ~form_name~() { db_insert('~form_name~', '~db_fields~', ~php_fields~); message('Entry saved.'); } - } + } if($GLOBALS['~form_name~_form_recipient'] != "fixme@example.com") { $to = $GLOBALS['~form_name~_form_recipient']; if(isset($_REQUEST['email']) and valid_email($_REQUEST['email'])) { @@ -109,7 +102,7 @@ function ~form_name~() { tem_sub('error'); $error = true; } - } + } if($error !== true) { tem_load('~form_name~.html'); tem_sub('thankyou'); @@ -120,11 +113,11 @@ function ~form_name~() { # otherwise, we display the form again. ~form_name~_get_fields() has # already put the posted values back into the template engine, so they will # show up in the form fields. You should add some message asking people to - # fix their entry in whatever way you require. + # fix their entry in whatever way you require. } elseif($edit_id) { # we've recieved an edit id, but no data. So we grab the values to be edited from the database list(~php_fields~) = db_get_row('~form_name~', '~db_fields~', 'where id=%i', $edit_id); - ~tem_sets.tab~ + ~tem_sets.tab~ } else { # form not submitted, you can set default values like so: #tem_set('~always_field~', 'Yes');