<?php
-# Copyright (C) 2006 Jason Woofenden
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# This program is in the public domain within the United States. Additionally,
+# we waive copyright and related rights in the work worldwide through the CC0
+# 1.0 Universal public domain dedication, which can be found at
+# http://creativecommons.org/publicdomain/zero/1.0/
# This file writes the code for you (sql, php, html, email) to handle a form.
-require_once(__DIR__ . '/template.php');
-require_once(__DIR__ . '/http.php');
-require_once(__DIR__ . '/tar.php');
-require_once(__DIR__ . '/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
+# see wfpl/metaform/template.html for the html templates for these elements
$GLOBALS['types'] = array(
# type input format sql
'varname' => array('textbox', 'varname', 'varchar(50) binary'),
}
}
-function metaform() {
+function metaform_main() {
if(isset($_REQUEST['singular'])) {
$GLOBALS['file_name'] = format_varname($_REQUEST['file_name']);
$GLOBALS['table_name'] = format_varname($_REQUEST['table_name']);
set_form_action();
- tem_load('code/wfpl/metaform/main.html');
+ tem_load(__DIR__.'/'.'metaform/main.html');
list_available_types();
tem_output();
+ exit(); # in case we're being called by wfpl_main or something
}
$fields_str = rtrim($fields_str);
$fields = split("\n", $fields_str);
foreach($fields as $field) {
+ $first_char = substr($field, 0, 1);
$field = trim($field);
+ if ($first_char === ' ' || $first_char === "\t") {
+ $i = count($GLOBALS['gotten_fields']);
+ if($i > 0) {
+ $i -= 1;
+ if (!$GLOBALS['gotten_fields'][$i]['options']) {
+ $GLOBALS['gotten_fields'][$i]['options'] = array();
+ }
+ $GLOBALS['gotten_fields'][$i]['options'][] = $field;
+ continue;
+ }
+ }
if(substr($field, -1) == '{') {
- $name = trim(substr($field, 0, -1)); # FIXME: stop this from getting enc_caption()ed
+ $caption = trim(substr($field, 0, -1));
+ $name = format_varname($caption);
$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;
+ $options = null;
+ $type = null;
+ $div = strpos($field, ' ');
+ if ($div === false) {
+ $div = strpos($field, "\t");
+ }
+ if ($div === false) {
+ if (isset($GLOBALS['types'][$field])) {
+ # if just one word, and it's a type, use it as name/caption and type
+ $type = $field;
+ }
+ } else {
+ $first_word = trim(substr($field, 0, $div));
+ if (isset($GLOBALS['types'][$first_word])) {
+ # if the first word (of multiple) is a type, remove it from the name/caption
+ $type = $first_word;
+ $field = trim(substr($field, $div + 1));
+ }
+ }
+ # see if there's an explicit name/caption splitter
+ $div = strpos($field, '|');
+ if ($div !== false) {
+ $name = trim(substr($field, 0, $div));
+ $caption = trim(substr($field, $div + 1));
+ if (isset($GLOBALS['types'][$name])) {
+ $type = $name;
+ } elseif (isset($GLOBALS['types'][strtolower($caption)])) {
+ $type = strtolower($caption);
+ }
+ } else {
+ $name = format_varname($field);
+ $caption = format_caption($field);
+ }
+
+ if ($type === null) {
+ $type = 'textbox';
+ }
}
$input = field_input($type);
$format = field_format($type);
$sql = field_sql($type);
- $GLOBALS['gotten_fields'][] = array($name, $type, $input, $format, $sql, $options);
+ $GLOBALS['gotten_fields'][] = array(
+ 'caption' => $caption,
+ 'name' => $name,
+ 'type' => $type,
+ 'input' => $input,
+ 'format' => $format,
+ 'sql' => $sql,
+ 'options' => $options
+ );
}
return $GLOBALS['gotten_fields'];
# this one, that you're using to create forms
function set_form_action() {
- $action = ereg_replace('.*/', '', $_SERVER['REQUEST_URI']);
+ $action = preg_replace('|.*/|', '', $_SERVER['REQUEST_URI']);
if($action == '') $action = './';
tem_set('form_action', $action);
}
function make_sql() {
$tem = new tem();
- $tem->load('code/wfpl/metaform/template.sql');
+ $tem->load(__DIR__.'/'.'metaform/template.sql');
tem_set_globals($tem);
$fields = get_fields();
foreach($fields as $field) {
- list($name, $type, $input, $format, $sql) = $field;
- if($sql != 'n/a') {
- $tem->set('name', $name);
- $tem->set('type', $sql);
- if(substr($sql, 0, 3) == 'int' || substr($sql, 0, 7) == 'decimal') {
+ if($field['sql'] != 'n/a') {
+ $tem->set('name', $field['name']);
+ $tem->set('type', $field['sql']);
+ if(substr($field['sql'], 0, 3) == 'int' || substr($field['sql'], 0, 7) == 'decimal') {
$tem->set('default', '0');
- } elseif($format == 'yesno') {
+ } elseif($field['format'] == 'yesno') {
$tem->set('default', '"No"');
} else {
$tem->set('default', '""');
}
# always_field is a form field that always submits (unlike say, checkboxes). It's used to detect if the form has submitted or not.
-function find_always_field($fields) {
+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' && $type != '{') {
- return $name;
+ if($field['input'] != 'submit' && $field['input'] != 'image' && $field['input'] != 'file' && $field['input'] != 'checkbox' && $field['input'] != 'radio' && $field['type'] != '{' && $field['type'] != '}') {
+ return $field['name'];
}
}
- return false;
+ return 'FIXME';
}
function make_html($whole_file = true) {
$has_html_editors = false;
$tem = new tem();
- $tem->load('code/wfpl/metaform/template.html');
+ $tem->load(__DIR__.'/'.'metaform/template.html');
tem_set_globals($tem);
$fields = get_fields();
$tem->set('always_field', find_always_field($fields));
$listing_headers = array();
$listing_fields = array();
foreach($fields as $field) {
- list($name, $type, $input, $format, $sql) = $field;
- if($input == 'hidden') {
- $hidden_fields[] = array('name' => $name);
+ if($field['input'] == 'hidden') {
+ $hidden_fields[] = array('name' => $field['name']);
} else {
- $visible_fields[] = array($input => array(
- 'name' => $name,
- 'caption' => format_caption($name)));
+ $visible_fields[] = array(
+ $field['input'] => array(
+ 'name' => $field['name'],
+ 'caption' => $field['caption']
+ )
+ );
+ if($field['type'] == 'radio') {
+ $i = 0;
+ $opts = array();
+ foreach ($field['options'] as $row) {
+ if (is_array($row)) {
+ $cap = $row[1];
+ } else {
+ $cap = $row;
+ }
+ $opts[] = array('i' => $i, 'option_caption' => $cap);
+ $i += 1;
+ }
+ $visible_fields[count($visible_fields) - 1]['options'] = $opts;
+ }
}
- if($input == 'image' || $input == 'file') {
+ if($field['input'] == 'image' || $field['input'] == 'file') {
$tem->set('uploads');
$tem->set('enctype_attr', '" enctype="multipart/form-data');
- } elseif($input == 'html') {
+ } elseif($field['input'] == 'html') {
$has_html_editors = true;
- $tem->set('html_field_name', $name);
+ $tem->set('html_field_name', $field['name']);
$tem->set('replace_textarea');
}
- switch($input) {
+ switch($field['input']) {
case 'image':
case 'checkbox':
case 'date':
case 'textarea':
case 'html':
- $display_type = $input;
+ $display_type = $field['input'];
break;
default:
$display_type = 'short';
}
- if($format != 'n/a') {
+ if($field['format'] != 'n/a') {
$display_fields[] = array($display_type => array(
- 'name' => $name, 'caption' => format_caption($name)));
+ 'name' => $field['name'], 'caption' => $field['caption']));
}
- if(show_in_listing($type, $input, $format, $sql)) {
- $listing_headers[] = array('caption' => format_caption($name), 'name' => $name);
- $listing_field = array('name' => $name);
- if($format == 'bool' || $format == 'yesno') {
+ if(show_in_listing($field['type'], $field['input'], $field['format'], $field['sql'])) {
+ $listing_headers[] = array(
+ 'caption' => $field['caption'],
+ 'name' => $field['name']
+ );
+ $listing_field = array(
+ 'name' => $field['name']
+ );
+ if($field['format'] == 'bool' || $field['format'] == 'yesno') {
$listing_field['enc'] = 'yesno';
- } elseif($input == 'date') {
+ } elseif($field['input'] == 'date') {
$listing_field['enc'] = 'mmddyyyy';
- } elseif($type == 'thumb') {
+ } elseif($field['type'] == 'thumb') {
$listing_field['thumb'] = true;
} else {
$listing_field['enc'] = 'html';
function make_php() {
$has_html_editors = false;
$tem = new tem();
- $tem->load('code/wfpl/metaform/template.php');
+ $tem->load(__DIR__.'/'.'metaform/template.php');
tem_set_globals($tem);
$fields = get_fields();
$db_fields = '';
$always_field = find_always_field($fields);
$image_included_yet = false;
+ $name_to_caption = array();
foreach($fields as $field) {
- list($name, $type, $input, $format, $sql, $options) = $field;
- if($input != 'submit') {
- $tem->set('format', $format);
- $tem->set('name', $name);
+ $name_to_caption[] = array('name' => $field['name'], 'caption' => $field['caption']);
+ if($field['input'] != 'submit') {
+ $tem->set('format', $field['format']);
+ $tem->set('name', $field['name']);
$tem->set('db_field', ''); # we don't want to use the value from last time
- if($sql != 'n/a') {
+ if($field['sql'] != 'n/a') {
if($db_fields != '') $db_fields .= ',';
- $db_fields .= $name;
+ $db_fields .= $field['name'];
}
- if($input == 'image') {
- if($type == 'thumb') {
+ if($field['input'] == 'image') {
+ if($field['type'] == 'thumb') {
$tem->show('thumb_settings');
$tem->show('thumb_upload_params');
$tem->show('thumb_w_h');
$tem->show('image_settings');
$tem->show('image_upload');
$has_uploads = true;
- } else if($input == 'file') {
+ } else if($field['input'] == 'file') {
$tem->show('file_settings');
$tem->show('file_upload');
$has_uploads = true;
} else {
- if($input == 'html') {
+ if($field['input'] == 'html') {
$has_html_editors = true;
- } elseif($input == 'pulldown' || $input == 'radio') {
- $pulldown_options = pulldown_options_array($options);
+ } elseif($field['input'] == 'pulldown' || $field['input'] == 'radio') {
+ $pulldown_options = pulldown_options_array($field['options']);
$tem->set('pulldown_options', $pulldown_options);
$tem->set('has_pulldowns');
$tem->show('pulldowns');
$tem->show('pulldown_format_extra');
}
- if($format != 'n/a') {
+ if($field['format'] != 'n/a') {
$tem->show('formats');
}
}
}
if($GLOBALS['opt_listing']) {
- if(show_in_listing($type, $input, $format, $sql)) {
+ if(show_in_listing($field['type'], $field['input'], $field['format'], $field['sql'])) {
$tem->show('listing_fields_1');
$tem->show('listing_fields_2');
}
}
}
+
+ $tem->set('name_to_caption', $name_to_caption);
+
if($has_uploads) {
$tem->show('uploads_include');
$tem->show('upload_max');
# make a URL for the edit page with all the fields filled in
function edit_url() {
$url = this_url();
- $url = ereg_replace('view_php=[^&]*', 'edit=yes', $url);
- $url = ereg_replace('download_tar=[^&]*', 'edit=yes', $url);
- $url = ereg_replace('/[a-z0-9_.]*\?', '/?', $url);
- $url = str_replace('jasonwoof.l', 'jasonwoof.com', $url); # so that code generated on Jason's home computer will display a publically accessible link.
+ $url = preg_replace('|view_php=[^&]*|', 'edit=yes', $url);
+ $url = preg_replace('|download_tar=[^&]*|', 'edit=yes', $url);
+ $url = preg_replace('|/[a-z0-9_.]*\?|', '/?', $url);
return $url;
}
function make_email() {
$tem = new tem();
- $tem->load('code/wfpl/metaform/template.email.txt');
+ $tem->load(__DIR__.'/'.'metaform/template.email.txt');
tem_set_globals($tem);
$fields = get_fields();
foreach($fields as $field) {
- list($name, $type, $input, $format, $sql) = $field;
- $tem->set('name', $name);
- $tem->set('caption', format_caption($name));
- if($type == 'textarea') {
+ $tem->set('name', $field['name']);
+ $tem->set('caption', $field['caption']);
+ if($field['type'] == 'textarea') {
$tem->show('multi_line');
- } elseif($type == 'checkbox') {
+ } elseif($field['type'] == 'checkbox') {
$tem->show('checkbox');
} else {
$tem->show('normal');
function make_htaccess() {
$tem = new tem();
$tem->set('form', $GLOBALS['file_name']);
- return $tem->run('code/wfpl/metaform/htaccess');
+ return $tem->run(__DIR__.'/'.'metaform/htaccess');
}
function view_email() {
}
function preview() {
- tem_load('code/wfpl/metaform/preview.html');
+ tem_load(__DIR__.'/'.'metaform/preview.html');
tem_set_globals($GLOBALS['wfpl_template']);
tem_set('fields', $_REQUEST['fields']);
$preview_tem = new tem();
}
$fields = get_fields();
foreach($fields as $field) {
- list($name, $type, $input, $format, $sql, $options) = $field;
- if($type == 'pulldown' || $type == 'radio') {
- pulldown($name, eval('return ' . pulldown_options_array($options) . ';'));
+ if($field['type'] == 'pulldown' || $field['type'] == 'radio') {
+ pulldown($field['name'], eval('return ' . pulldown_options_array($field['options']) . ';'));
}
}
$preview = $preview_tem->run();
unset($preview_tem);
- $preview = ereg_replace('type="submit"', 'type="submit" disabled="disabled"', $preview);
+ $preview = preg_replace('|type="submit"|', 'type="submit" disabled="disabled"', $preview);
tem_set('preview', $preview);
tem_show('hiddens');
set_form_action();
$admin_name = $GLOBALS['file_name'];
$nice_name = $GLOBALS['public_file_name'];
$files = array(
- "INSTALL" => read_whole_file('code/wfpl/metaform/INSTALL'),
+ "README" => "These files are meant to work with wfpl.\n\nSee: http://sametwice.com/wfpl\n",
".htaccess" => make_htaccess(),
- "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'),
+ "config.php" => "<?php\n\n# put your site-wide configuration here\n",
+ "wfpl_main.php" => read_whole_file(__DIR__.'/'.'metaform/wfpl_main.php'),
+ "styl.styl" => read_whole_file(__DIR__.'/'.'metaform/styl.styl'),
+ "template.html" => read_whole_file(__DIR__.'/'.'metaform/site-template.html'),
"$admin_name.html" => make_html(),
"$admin_name.php" => make_php());
if($GLOBALS['opt_public_something']) {
}
make_tar($nice_name, $files);
}
-
-
-metaform();
-exit();