JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Fix db_get_value after mysql->mysqli upgrade
[wfpl.git] / metaform.php
index 411a9b2..e31a9a4 100644 (file)
@@ -1,29 +1,19 @@
 <?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'),
@@ -89,35 +79,37 @@ function tem_set_globals(&$tem) {
                'opt_public_display',
                'opt_public_something');
        foreach($bools as $bool) {
-               if($GLOBALS[$bool]) {
+               if(isset($GLOBALS[$bool]) && $GLOBALS[$bool]) {
                        $tem->set($bool);
                }
        }
 }
 
-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']);
-               $GLOBALS['plural'] = format_oneline($_REQUEST['plural']);
+               $GLOBALS['file_name'] = format_varname(_REQUEST_cut('file_name'));
+               $GLOBALS['table_name'] = format_varname(_REQUEST_cut('table_name'));
+               $GLOBALS['plural'] = format_oneline(_REQUEST_cut('plural'));
                # backwards compatibility:
                if(isset($_REQUEST['form_name'])) {
-                       $GLOBALS['file_name'] = $GLOBALS['table_name'] = $GLOBALS['plural'] = format_varname($_REQUEST['form_name']);
+                       $GLOBALS['file_name'] = $GLOBALS['table_name'] = $GLOBALS['plural'] = format_varname(_REQUEST_cut('form_name'));
                }
 
-               $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['singular'] = format_oneline(_REQUEST_cut('singular'));
+               $GLOBALS['opt_email'] = format_bool(_REQUEST_cut('opt_email'));
+               $GLOBALS['opt_db'] = format_bool(_REQUEST_cut('opt_db'));
+               $GLOBALS['opt_listing'] = format_bool(_REQUEST_cut('opt_listing'));
+               $GLOBALS['opt_display'] = format_bool(_REQUEST_cut('opt_display'));
+               $GLOBALS['opt_pass'] = format_bool(_REQUEST_cut('opt_pass'));
+               $GLOBALS['opt_public_form'] = format_bool(_REQUEST_cut('opt_public_form'));
+               $GLOBALS['opt_public_display'] = format_bool(_REQUEST_cut('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;
+               } else {
+                       $GLOBALS['opt_public_something'] = 0;
                }
 
                tem_init();
@@ -153,9 +145,10 @@ function metaform() {
 
 
        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
 }
 
 
@@ -172,15 +165,26 @@ function get_fields() {
        $fields_str = unix_newlines($_REQUEST['fields']);
        $GLOBALS['gotten_fields'] = array();
        $fields_str = rtrim($fields_str);
-       $fields = split("\n", $fields_str);
+       $fields = explode("\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) == '{') {
                        $caption = trim(substr($field, 0, -1));
                        $name = format_varname($caption);
                        $type = '{';
                        $options = null;
-               # FIXME restore parsing of option lists for pulldowns
                } else {
                        $options = null;
                        $type = null;
@@ -239,7 +243,7 @@ function get_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);
 }
@@ -254,7 +258,7 @@ function view_headers() {
 
 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) {
@@ -297,7 +301,7 @@ function find_always_field(&$fields) {
 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));
@@ -316,6 +320,20 @@ function make_html($whole_file = true) {
                                        '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($field['input'] == 'image' || $field['input'] == 'file') {
@@ -443,13 +461,14 @@ function pulldown_options_array($options) {
 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();
+       $has_uploads = false;
        foreach($fields as $field) {
                $name_to_caption[] = array('name' => $field['name'], 'caption' => $field['caption']);
                if($field['input'] != 'submit') {
@@ -526,10 +545,9 @@ function make_php() {
 # 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;
 }
 
@@ -540,7 +558,7 @@ function view_php() {
 
 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) {
@@ -561,7 +579,7 @@ function make_email() {
 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() {
@@ -570,7 +588,7 @@ 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();
@@ -586,7 +604,7 @@ function preview() {
        }
        $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();
@@ -597,11 +615,12 @@ function download_tar() {
        $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']) {
@@ -616,7 +635,3 @@ function download_tar() {
        }
        make_tar($nice_name, $files);
 }
-
-
-metaform();
-exit();