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(
'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)'),
'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]; }
# pass false if you want to exclude the <head> and <body> 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']);
$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 {
}
}
-function view_template() {
+function view_html() {
view_headers();
- echo make_template();
+ echo make_html();
}
}
} else {
$tem->sub('formats');
- $tem->sub('tem_sets');
}
+ $tem->sub('tem_sets');
if(!$always_field and $input != 'checkbox' and $input != 'radio') {
$always_field = $name;
}
$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();
}
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();
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();
+
?>
<head>
<title>~form_name~ entry</title>
<style type="text/css"><!--
+ td.field { vertical-align: bottom; }
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; }
---></style>
+--></style><!--~html_editor_headers start~-->
+<script type="text/javascript" src="fckeditor/fckeditor.js"></script>
+ <script type="text/javascript" src="fckeditor/fckconfig.js"></script>
+ <script type="text/javascript">
+<!--
+ window.onload = function()
+ {<!--~replace_textarea start~-->
+ var fck_~html_field_name~ = new FCKeditor('~html_field_name~');
+ fck_~html_field_name~.Height = 550;
+ fck_~html_field_name~.ReplaceTextarea();<!--~end~-->
+ }
+-->
+ </script><!--~end~-->
</head>
<body>
<!--~~form start~~--><!--~form start~-->
- <h2><!--~~new_msg start~~-->Add a new entry<!--~~end~~--><!--~~edit_msg start~~-->Edit entry "~~name.html~~"<!--~~end~~--></h2>
+ <h2><!--~opt_db_1 start~--><!--~~new_msg start~~-->Add a new entry<!--~~end~~--><!--~~edit_msg start~~-->Edit entry "~~name.html~~"<!--~~end~~--><!--~end~--><!--~opt_db_1_else start~-->~form_name~ entry form<!--~end~--></h2>
<!--~error start~--><div class="error"><h3>~error_message.html~</h3></div><!--~end~-->
<form action="~form_name~.html~enctype_attr~" method="post"><!--~~editing start~~--><input type="hidden" name="~form_name~_edit_id" value="~~~form_name~_edit_id.attr~~" /><!--~~end~~--><!--~uploads start~--><input type="hidden" name="MAX_FILE_SIZE" value="~~upload_max_filesize~~" /><!--~end~-->
<table cellspacing="0" cellpadding="4" border="0" summary=""><!--~row start~-->
- <tr><!--~image start~--><td class="caption">~caption.html~: </td><td><input type="file" name="~name~" /></td><!--~end~--><!--~textbox start~--><td class="caption">~caption.html~: </td><td><input type="text" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~password start~--><td class="caption">~caption.html~: </td><td><input type="password" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textarea start~--><td class="caption">~caption.html~: </td><td><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~html start~--><td class="caption">~caption.html~: </td><td></td></tr><tr><td colspan="2"><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~radio start~--><td class="caption">~caption.html~: </td><td><input type="radio" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~checkbox start~--><td class="caption">~caption.html~: </td><td><input type="checkbox" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~submit start~--><td class="submit_row" colspan="2"><input type="submit" name="~name~" value="~caption.attr~" /></td><!--~end~--></tr><!--~end~-->
-
- <tr><!--~image start~--><td class="caption">~caption.html~: </td><td class="field"><input type="file" name="~name~" /><input type="hidden" name="old_~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textbox start~--><td class="caption">~caption.html~: </td><td class="field"><input type="text" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~password start~--><td class="caption">~caption.html~: </td><td class="field"><input type="password" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textarea start~--><td class="caption">~caption.html~: </td><td><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~radio start~--><td class="caption">~caption.html~: </td><td class="field"><input type="radio" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~checkbox start~--><td class="caption">~caption.html~: </td><td class="field"><input type="checkbox" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~submit start~--><td class="submit_row" colspan="2"><input type="submit" name="~name~" value="~caption.attr~" /></td><!--~end~--></tr><!--~end~-->
-
++ <tr><!--~image start~--><td class="caption">~caption.html~: </td><td><input type="file" name="~name~" /></td><!--~end~--><!--~textbox start~--><td class="caption">~caption.html~: </td><td><input type="text" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~password start~--><td class="caption">~caption.html~: </td><td><input type="password" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textarea start~--><td class="caption">~caption.html~: </td><td><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~html start~--><td class="caption">~caption.html~: </td><td></td></tr><tr><td colspan="2"><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~radio start~--><td class="caption">~caption.html~: </td><td class="field"><input type="radio" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~checkbox start~--><td class="caption">~caption.html~: </td><td><input type="checkbox" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~submit start~--><td class="submit_row" colspan="2"><input type="submit" name="~name~" value="~caption.attr~" /></td><!--~end~--></tr><!--~end~-->
</table>
</form>
<!--~end~--><!--~~end~~-->
#
# ~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
+<!--~opt_email_1 start~-->
# 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";
-<!--~upload_settings start~-->
+<!--~end~--><!--~opt_db_1 start~-->
+# 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
+<!--~end~--><!--~upload_settings start~-->
# 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/';
<!--~end~-->
-# 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 <a href="http://jasonwoof.org/wfpl">wfpl</a>.'); }
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');<!--~image_include start~-->
+require_once('code/wfpl/email.php');<!--~opt_db_2 start~-->
+require_once('code/wfpl/db.php');<!--~end~--><!--~image_include start~-->
require_once('code/wfpl/upload.php');<!--~end~-->
-function ~form_name~_get_fields() {
- <!--~formats start~-->
+function ~form_name~_get_fields() {<!--~formats start~-->
$~name~ = format_~format~($_REQUEST['~name~']);<!--~end~--><!--~image_upload start~-->
- $~name~ = save_uploaded_image('~name~', $GLOBALS['upload_directory']);<!--~end~-->
+ if($_FILE['~name~'] && $_FILE['~name~']['error'] == 0) {
+ $~name~ = substr(save_uploaded_image('~name~', $GLOBALS['upload_directory']), strlen($GLOBALS['upload_directory']));
+ } else {
+ $~name~ = format_filename($_REQUEST['old_~name~']);
+ }<!--~end~-->
<!--~tem_sets start~-->
tem_set('~name~', $~name~);<!--~end~-->
return array(~php_fields~);
}
-function ~form_name~() {
+function ~form_name~() {<!--~opt_db_3 start~-->
$edit_id = format_int($_REQUEST['~form_name~_edit_id']);
unset($_REQUEST['~form_name~_edit_id']);
if($edit_id) {
if(!$edit_id && !$delet_id) {
tem_sub('new_msg');
- }
+ }<!--~end~-->
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") {<!--~opt_db_4 start~-->
+ if(file_exists($db_connector = 'db_connect.php') || file_exists($db_connector = 'code/db_connect.php')) {
+ require_once($db_connector);
if($edit_id) {<!--~image_db start~-->
# uploading nothing means leaving it as is.
if(!$~name~ && $delete_~name~ != 'Yes') {
db_insert('~form_name~', '~db_fields~', ~php_fields~);
message('Entry saved.');
}
- }
+ }<!--~end~--><!--~opt_email_2 start~-->
if($GLOBALS['~form_name~_form_recipient'] != "fixme@example.com") {
$to = $GLOBALS['~form_name~_form_recipient'];
if(isset($_REQUEST['email']) and valid_email($_REQUEST['email'])) {
tem_sub('error');
$error = true;
}
- }
+ }<!--~end~-->
if($error !== true) {
tem_load('~form_name~.html');
tem_sub('thankyou');
# 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.<!--~opt_db_5 start~-->
} 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~<!--~end~-->
} else {
# form not submitted, you can set default values like so:
#tem_set('~always_field~', 'Yes');