JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
added "singular" field, so metaform can generate better messages, links and headers
[wfpl.git] / metaform.php
index f7a5740..81ac452 100644 (file)
@@ -2,21 +2,18 @@
 
 #  Copyright (C) 2006 Jason Woofenden
 #
-#  This file is part of wfpl.
-#
-#  wfpl is free software; you can redistribute it and/or modify it under the
-#  terms of the GNU Lesser General Public License as published by the Free
-#  Software Foundation; either version 2.1 of the License, or (at your option)
-#  any later version.
-#
-#  wfpl 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 Lesser General Public License for
-#  more details.
-#
-#  You should have received a copy of the GNU Lesser General Public License
-#  along with wfpl; if not, write to the Free Software Foundation, Inc., 51
-#  Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+#  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 file writes the code for you (sql, php, html, email) to handle a form.
@@ -49,9 +46,10 @@ $GLOBALS['types'] = array(
        'html' =>       array('html',        'unix',       'text'),
        'pulldown' =>   array('pulldown',    'options',    'varchar(100)'),
        'radio' =>      array('radio',       'oneline',    'varchar(200)'),
-       'leftcheck' =>  array('leftcheck',   'yesno',      'varchar(3)'),
-       'checkbox' =>   array('checkbox',    'bool',       'int(1)'),
-       'yesno' =>      array('checkbox',    'yesno',      'varchar(3)'),
+       'checkbox' =>   array('leftcheck',   'bool',       'int(1)'),
+       'rightcheck' => array('checkbox',    'bool',       'int(1)'),
+       'rightyesno' => array('checkbox',    'yesno',      'varchar(3)'),
+       'yesno' =>      array('leftcheck',   'yesno',      'varchar(3)'),
        'delete' =>     array('checkbox',    'yesno',      'n/a'),
        'image' =>      array('image',       'oneline',    'varchar(200)'),
        'submit' =>     array('submit',      'oneline',    'n/a')
@@ -71,13 +69,17 @@ function list_available_types() {
 
 function metaform() {
        if(isset($_REQUEST['form_name'])) {
-               $GLOBALS['form_name'] = ereg_replace('[^a-z0-9_-]', '', $_REQUEST['form_name']);
+               $GLOBALS['form_name'] = format_varname($_REQUEST['form_name']);
+               $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']);
        } else {
@@ -170,7 +172,7 @@ function make_sql() {
                if($sql != 'n/a') {
                        $tem->set('name', $name);
                        $tem->set('type', $sql);
-                       if($sql == 'int') {
+                       if(substr($sql, 0, 3) == 'int' || substr($sql, 0, 7) == 'decimal') {
                                $tem->set('default', '0');
                        } elseif($format == 'yesno') {
                                $tem->set('default', '"No"');
@@ -210,6 +212,7 @@ function make_html($whole_file = true) {
        $tem = new tem();
        $tem->load('code/wfpl/metaform/template.html');
        $tem->set('form_name', $GLOBALS['form_name']);
+       $tem->set('singular', $GLOBALS['singular']);
        $fields = get_fields();
        $tem->set('always_field', find_always_field($fields));
        foreach($fields as $field) {
@@ -229,6 +232,19 @@ function make_html($whole_file = true) {
                        $tem->set('html_field_name', $name);
                        $tem->show('replace_textarea');
                }
+               if($GLOBALS['opt_display']) {
+                       switch($input) {
+                               case 'textarea':
+                                       $tem->show('display_multiline');
+                               break;
+                               case 'html':
+                                       $tem->show('display_html');
+                               break;
+                               default:
+                                       $tem->show('display_short');
+                       }
+                       $tem->show('display_row');
+               }
        }
 
        if($GLOBALS['opt_db'] == 'Yes') {
@@ -239,9 +255,15 @@ function make_html($whole_file = true) {
        }
 
        if($GLOBALS['opt_listing'] == 'Yes') {
+               if($GLOBALS['opt_display'] != 'Yes') {
+                       $tem->show('opt_display_a_else');
+               }
                $tem->show('opt_listing_1');
-       } else {
-               $tem->show('opt_listing_1_else');
+       }
+
+       if($GLOBALS['opt_display'] == 'Yes') {
+               $tem->show('opt_display_1');
+               $tem->show('opt_display_2');
        }
 
        if($GLOBALS['opt_email'] == 'Yes' && $GLOBALS['opt_db'] != 'Yes') {
@@ -277,6 +299,7 @@ function make_php() {
        $tem = new tem();
        $tem->load('code/wfpl/metaform/template.php');
        $tem->set('form_name', $GLOBALS['form_name']);
+       $tem->set('singular', $GLOBALS['singular']);
        $fields = get_fields();
        $db_fields = '';
        $php_fields = '';
@@ -321,9 +344,13 @@ function make_php() {
        if($GLOBALS['opt_listing'] == 'Yes') {
                $tem->show('opt_listing_1');
                $tem->show('opt_listing_2');
-               $tem->show('opt_listing_4');
+       }
+       if($GLOBALS['opt_display'] == 'Yes') {
+               $tem->show('opt_display_1');
+               $tem->show('opt_display_2');
        } else {
-               $tem->show('opt_listing_4_else');
+               $tem->show('opt_display_1_else');
+               $tem->show('opt_display_2_else');
        }
        if($GLOBALS['opt_db'] == 'Yes') {
                $tem->show('opt_db_1');
@@ -412,6 +439,7 @@ function preview() {
        unset($preview_tem);
        $preview = ereg_replace('type="submit"', 'type="submit" disabled="disabled"', $preview);
        tem_set('preview', $preview);
+       tem_show('hiddens');
        set_form_action();
        tem_output();
 }
@@ -430,7 +458,7 @@ function download_tar() {
        if($GLOBALS['opt_email'] == 'Yes') {
                $data["$name.email.txt"] = make_email();
        }
-       make_wfpl_tar($name, $data);
+       make_tar($name, $data);
 }