'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)'),
+ 'email' => array('email', 'email', 'varchar(100)'),
+ 'search' => array('search', 'oneline', 'varchar(200)'),
'phone' => array('textbox', 'phone', 'varchar(32)'),
'state' => array('states', 'oneline', 'varchar(2)'),
'money' => array('textbox', 'money', 'varchar(32)'),
'textarea' => array('textarea', 'unix', 'text'),
'html' => array('html', 'unix', 'text'),
'pulldown' => array('pulldown', 'options', 'varchar(100)'),
- 'radio' => array('radio', 'oneline', 'varchar(200)'),
- 'checkbox' => array('leftcheck', 'bool', 'int(1)'),
- 'rightcheck' => array('checkbox', 'bool', 'int(1)'),
- 'rightyesno' => array('checkbox', 'yesno', 'varchar(3)'),
- 'yesno' => array('leftcheck', 'yesno', 'varchar(3)'),
+ 'radio' => array('radio', 'options', 'varchar(100)'),
+ 'checkbox' => array('checkbox', 'bool', 'int(1)'),
+ 'yesno' => array('checkbox', 'yesno', 'varchar(3)'),
'delete' => array('checkbox', 'yesno', 'n/a'),
'image' => array('image', 'oneline', 'varchar(120)'),
'thumb' => array('image', 'oneline', 'varchar(240)'),
- 'submit' => array('submit', 'oneline', 'n/a')
+ 'file' => array('file', 'oneline', 'varchar(100)'),
+ 'submit' => array('submit', 'n/a', 'n/a'),
+ '{' => array('fieldset', 'n/a', 'n/a'),
+ '}' => array('end_fieldset','n/a', 'n/a')
);
function list_available_types() {
}
+function tem_set_globals(&$tem) {
+ $vars = array(
+ 'file_name',
+ 'public_file_name',
+ 'table_name',
+ 'plural',
+ 'singular');
+ foreach($vars as $var) {
+ $tem->set($var, $GLOBALS[$var]);
+ }
+
+ $bools = array(
+ 'opt_email',
+ 'opt_db',
+ 'opt_listing',
+ 'opt_display',
+ 'opt_pass',
+ 'opt_public_form',
+ 'opt_public_display',
+ 'opt_public_something');
+ foreach($bools as $bool) {
+ if($GLOBALS[$bool]) {
+ $tem->set($bool);
+ }
+ }
+}
+
function metaform() {
if(isset($_REQUEST['singular'])) {
$GLOBALS['file_name'] = format_varname($_REQUEST['file_name']);
$GLOBALS['table_name'] = format_varname($_REQUEST['table_name']);
- $GLOBALS['plural'] = format_varname($_REQUEST['plural']);
+ $GLOBALS['plural'] = format_oneline($_REQUEST['plural']);
# backwards compatibility:
if(isset($_REQUEST['form_name'])) {
$GLOBALS['file_name'] = $GLOBALS['table_name'] = $GLOBALS['plural'] = format_varname($_REQUEST['form_name']);
}
- tem_set('file_name', $GLOBALS['file_name']);
- tem_set('table_name', $GLOBALS['table_name']);
- tem_set('plural', $GLOBALS['plural']);
-
- $GLOBALS['singular'] = format_varname($_REQUEST['singular']);
- tem_set('singular', $GLOBALS['singular']);
- $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']);
- $GLOBALS['opt_listing'] = format_yesno($_REQUEST['opt_listing']);
- tem_set('opt_listing', $GLOBALS['opt_listing']);
- $GLOBALS['opt_display'] = format_yesno($_REQUEST['opt_display']);
- tem_set('opt_display', $GLOBALS['opt_display']);
- $GLOBALS['opt_http_pass'] = format_yesno($_REQUEST['opt_http_pass']);
- tem_set('opt_http_pass', $GLOBALS['opt_http_pass']);
+
+ $GLOBALS['singular'] = format_oneline($_REQUEST['singular']);
+ $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']);
}
if(isset($_REQUEST['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'];
}
function make_sql() {
$tem = new tem();
$tem->load('code/wfpl/metaform/template.sql');
- $tem->set('table_name', $GLOBALS['table_name']);
+ tem_set_globals($tem);
$fields = get_fields();
foreach($fields as $field) {
list($name, $type, $input, $format, $sql) = $field;
function find_always_field($fields) {
foreach($fields as $field) {
list($name, $type, $input, $format, $sql) = $field;
- if($input != 'submit' && $input != 'checkbox' && $input != 'radio') {
+ if($input != 'submit' && $input != 'image' && $input != 'file' && $input != 'checkbox' && $input != 'radio' && $type != '{') {
return $name;
}
}
# pass false if you want to exclude the <head> and <body> tag etc.
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('file_name', $GLOBALS['file_name']);
- $tem->set('table_name', $GLOBALS['table_name']);
- $tem->set('singular', $GLOBALS['singular']);
- $tem->set('plural', $GLOBALS['plural']);
+ tem_set_globals($tem);
$fields = get_fields();
$tem->set('always_field', find_always_field($fields));
+ $hidden_fields = array();
+ $visible_fields = array();
+ $display_fields = array();
+ $listing_headers = array();
+ $listing_fields = array();
foreach($fields as $field) {
list($name, $type, $input, $format, $sql) = $field;
- $tem->set('name', $name);
- $tem->set('caption', format_caption($name));
- $tem->show($input);
- if($input != 'hidden') {
- $tem->show('row');
+ if($input == 'hidden') {
+ $hidden_fields[] = array('name' => $name);
+ } else {
+ $visible_fields[] = array($input => array(
+ 'name' => $name,
+ 'caption' => format_caption($name)));
}
- if($input == 'image' && !$uploads_output_already) {
- $tem->show('uploads');
+ if($input == 'image' || $input == 'file') {
+ $tem->set('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->show('replace_textarea');
+ $tem->set('replace_textarea');
}
- if($GLOBALS['opt_display'] == 'Yes') {
- switch($input) {
- case 'image':
- $tem->show('display_image');
- break;
- case 'checkbox':
- case 'leftcheck':
- $tem->show('display_yesno');
- break;
- case 'date':
- $tem->show('display_date');
- break;
- case 'textarea':
- $tem->show('display_multiline');
- break;
- case 'html':
- $tem->show('display_html');
- break;
- default:
- $tem->show('display_short');
- }
- $tem->show('display_row');
+ switch($input) {
+ case 'image':
+ case 'checkbox':
+ case 'date':
+ case 'textarea':
+ case 'html':
+ $display_type = $input;
+ break;
+ default:
+ $display_type = 'short';
+ }
+ if($format != 'n/a') {
+ $display_fields[] = array($display_type => array(
+ 'name' => $name, 'caption' => format_caption($name)));
}
- if($GLOBALS['opt_listing'] == 'Yes') {
- if($GLOBALS['opt_display'] != 'Yes') {
- $tem->show('opt_display_a_else');
- }
- if(show_in_listing($type, $input, $format, $sql)) {
- if($format == 'bool' || $format == 'yesno') {
- $tem->set('listing_enc', 'yesno');
- $tem->show('listing_value_enc');
- } elseif($input == 'date') {
- $tem->set('listing_enc', 'mmddyyyy');
- $tem->show('listing_value_enc');
- } elseif($type == 'thumb') {
- $tem->show('listing_value_thumb');
- } else {
- $tem->set('listing_enc', 'html');
- $tem->show('listing_value_enc');
- }
- $tem->show('listing_head_col');
- $tem->show('listing_row_col');
+ if(show_in_listing($type, $input, $format, $sql)) {
+ $listing_headers[] = array('caption' => format_caption($name));
+ $listing_field = array('name' => $name);
+ if($format == 'bool' || $format == 'yesno') {
+ $listing_field['enc'] = 'yesno';
+ } elseif($input == 'date') {
+ $listing_field['enc'] = 'mmddyyyy';
+ } elseif($type == 'thumb') {
+ $listing_field['thumb'] = true;
+ } else {
+ $listing_field['enc'] = 'html';
}
+ $listing_fields[] = $listing_field;
}
}
- if($GLOBALS['opt_db'] == 'Yes') {
- $tem->show('opt_db_1');
- $tem->show('opt_db_2');
+ # Submit/Send button
+ if($GLOBALS['opt_email'] == 'Yes' && !$GLOBALS['opt_db']) {
+ $visible_fields[] = array('submit' => array(
+ 'name' => 'send',
+ 'caption' => 'Send'));
} else {
- $tem->show('opt_db_1_else');
+ $visible_fields[] = array('submit' => array(
+ 'name' => 'save',
+ 'caption' => 'Save'));
}
- if($GLOBALS['opt_listing'] == 'Yes') {
- $tem->show('opt_listing_1');
+ $form_fields = array();
+ $form_fields['visible_fields'] = $visible_fields;
+ if($hidden_fields) {
+ $form_fields['hidden_fields'] = $hidden_fields;
}
+ $tem->set('form', $form_fields);
- if($GLOBALS['opt_display'] == 'Yes') {
- $tem->show('opt_display_1');
- $tem->show('opt_display_2');
- }
-
- if($GLOBALS['opt_email'] == 'Yes' && $GLOBALS['opt_db'] != 'Yes') {
- $tem->set('name', 'send');
- $tem->set('caption', 'Send');
- } else {
- $tem->set('name', 'save');
- $tem->set('caption', 'Save');
- }
- $tem->show('submit');
- $tem->show('row');
+ # opt_display and opt_listing control whether these are actually displayed
+ $tem->set('display_fields', $display_fields);
+ $tem->set('listing_headers', $listing_headers);
+ $tem->set('listing_fields', $listing_fields);
- $tem->show('form');
if($has_html_editors) {
- $tem->show('html_editor_headers');
+ $tem->set('html_editor_headers');
}
if($whole_file) {
return $tem->run();
} else {
- return $tem->get('form');
+ $tem2 = new tem();
+ $tem2->load_str('<!--~form~-->');
+ $tem2->merge($tem);
+ return $tem2->run();
}
}
case 'password':
case 'textarea':
case 'html':
+ case 'fieldset':
+ case 'end_fieldset':
return false;
}
if($type == 'image') {
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();
$tem->load('code/wfpl/metaform/template.php');
- $tem->set('file_name', $GLOBALS['file_name']);
- $tem->set('table_name', $GLOBALS['table_name']);
- $tem->set('singular', $GLOBALS['singular']);
- $tem->set('plural', $GLOBALS['plural']);
+ tem_set_globals($tem);
$fields = get_fields();
$db_fields = '';
- $php_fields = '';
$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);
if($sql != 'n/a') {
if($db_fields != '') $db_fields .= ',';
$db_fields .= $name;
- if($php_fields != '') $php_fields .= ', ';
- $php_fields .= '$' . $name;
}
if($input == 'image') {
if($type == 'thumb') {
}
$tem->show('image_settings');
$tem->show('image_upload');
- if(!$image_included_yet) {
- $tem->show('image_include');
- $tem->show('upload_max');
- $tem->show('upload_settings');
- $image_included_yet = true;
- }
+ $has_uploads = true;
+ } else if($input == 'file') {
+ $tem->show('file_settings');
+ $tem->show('file_upload');
+ $has_uploads = true;
} else {
- if($input == 'pulldown') {
+ 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');
}
- $tem->show('formats');
+ if($format != 'n/a') {
+ $tem->show('formats');
+ }
}
- $tem->show('tem_sets');
}
- 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');
}
}
}
+ if($has_uploads) {
+ $tem->show('uploads_include');
+ $tem->show('upload_max');
+ $tem->show('upload_settings');
+ $image_included_yet = true;
+ }
+
+ if($has_html_editors) {
+ $tem->show('show_extra_headers');
+ }
$tem->set('always_field', $always_field);
$tem->set('db_fields', $db_fields);
- $tem->set('php_fields', $php_fields);
$tem->set('metaform_url', edit_url());
- if($GLOBALS['opt_listing'] == 'Yes') {
- $tem->show('opt_listing_1');
- $tem->show('opt_listing_2');
- }
- if($GLOBALS['opt_display'] == 'Yes') {
- $tem->show('opt_display_1');
- $tem->show('opt_display_2');
- } else {
- $tem->show('opt_display_1_else');
- $tem->show('opt_display_2_else');
- }
- if($GLOBALS['opt_db'] == 'Yes') {
- $tem->show('opt_db_1');
- $tem->show('opt_db_2');
- $tem->show('opt_db_3');
- $tem->show('opt_db_4');
- $tem->show('opt_db_5');
- }
- if($GLOBALS['opt_email'] == 'Yes') {
- $tem->show('opt_email_1');
- $tem->show('opt_email_2');
- }
- if($GLOBALS['opt_http_pass'] == 'Yes') {
- $tem->show('opt_http_pass_1');
- $tem->show('opt_http_pass_2');
+ if($GLOBALS['opt_email']) {
+ $this_domain = $_SERVER['HTTP_HOST'];
+ if(substr($this_domain, -2) == '.l') {
+ $this_domain = substr($this_domain, 0, -1) . 'com';
+ }
+ $tem->set('this_domain', $this_domain);
}
return $tem->run();
}
function make_email() {
$tem = new tem();
$tem->load('code/wfpl/metaform/template.email.txt');
- $tem->set('file_name', $GLOBALS['file_name']);
- $tem->set('table_name', $GLOBALS['table_name']);
- $tem->set('singular', $GLOBALS['singular']);
- $tem->set('plural', $GLOBALS['plural']);
+ 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', $name); # fixme
+ $tem->set('caption', format_caption($name));
if($type == 'textarea') {
$tem->show('multi_line');
} elseif($type == 'checkbox') {
function preview() {
tem_load('code/wfpl/metaform/preview.html');
- tem_set('file_name', $GLOBALS['file_name']);
- tem_set('table_name', $GLOBALS['table_name']);
- tem_set('singular', $GLOBALS['singular']);
- tem_set('plural', $GLOBALS['plural']);
+ tem_set_globals($GLOBALS['wfpl_template']);
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;
- if($type == 'pulldown') {
- pulldown($name, array('option 1', 'option 2', 'option 3'));
+ list($name, $type, $input, $format, $sql, $options) = $field;
+ if($type == 'pulldown' || $type == 'radio') {
+ pulldown($name, eval('return ' . pulldown_options_array($options) . ';'));
}
}
$preview = $preview_tem->run();
}
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();
+ "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);
}