JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
db_printf()'s %s, dwt_append(), states pulldown, tem_top_subs()
[wfpl.git] / metaform.php
index 2adf13b..f5c71f2 100644 (file)
@@ -4,25 +4,25 @@
 #
 #  This file is part of wfpl.
 #
-#  wfpl 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 2, or (at your option)
+#  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
-#  General Public License for more details.
+#  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 General Public License
-#  along with wfpl; see the file COPYING.  If not, write to the
-#  Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-#  MA 02111-1307, USA.
+#  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 file writes the code for you (sql, php, html, email) to handle a form.
 
 require_once('code/wfpl/template.php');
+require_once('code/wfpl/http.php');
 require_once('code/wfpl/tar.php');
 
 # see code/wfpl/metaform/template.html for the html templates for these elements
@@ -30,9 +30,11 @@ $GLOBALS['types'] = array(
 #    type                  input          format        sql     
        'name' =>       array('textbox',     'oneline',    'varchar(200)'),
        'textbox' =>    array('textbox',     'oneline',    'varchar(200)'),
-       'int' =>        array('textbox',     'int',        'varchar(100)'),
+       'int' =>        array('textbox',     'int',        'int'),
+       'bigint' =>     array('textbox',     'int',        'varchar(100)'), # up to 100 digits, stored as a string
        'email' =>      array('textbox',     'email',      'varchar(100)'),
        'phone' =>      array('textbox',     'phone',      'varchar(32)'),
+       'state' =>      array('states',      'oneline',    'varchar(2)'),
        'money' =>      array('textbox',     'money',      'varchar(32)'),
        'dollars' =>    array('textbox',     'dollars',    'varchar(32)'),
        'url' =>        array('textbox',     'url',        'varchar(200)'),
@@ -40,8 +42,10 @@ $GLOBALS['types'] = array(
        'password' =>   array('password',    'oneline',    'varchar(200)'),
        'textarea' =>   array('textarea',    'unix',       'text'),
        'pulldown' =>   array('pulldown',    'options',    'int'),
-       'checkbox' =>   array('checkbox',    'yesno',      'int'),
-       'yesno' =>      array('checkbox',    'yesno',      'int'),
+       'checkbox' =>   array('checkbox',    'yesno',      'varchar(3)'),
+       'yesno' =>      array('checkbox',    'yesno',      'varchar(3)'),
+       'delete' =>     array('checkbox',    'yesno',      'n/a'),
+       'image' =>      array('image',       'oneline',    'varchar(200)'),
        'submit' =>     array('submit',      'oneline',    'n/a')
 );
 
@@ -105,6 +109,7 @@ function get_fields() {
        return $ret;
 }
 
+# this one, that you're using to create forms
 function set_form_action() {
        $action = ereg_replace('.*/', '', $_SERVER['REQUEST_URI']);
        if($action == '') $action = './';
@@ -149,6 +154,7 @@ function view_sql() {
 
 # pass false if you want to exclude the <head> and <body> tag etc.
 function make_template($whole_file = true) {
+       $uploads_output_already = false;
        $tem = new tem();
        $tem->load('code/wfpl/metaform/template.html');
        $tem->set('form_name', $GLOBALS['form_name']);
@@ -161,6 +167,11 @@ function make_template($whole_file = true) {
                if($input != 'hidden') {
                        $tem->sub('row');
                }
+               if($input == 'image' && !$uploads_output_already) {
+                       $tem->sub('uploads');
+                       $tem->set('enctype_attr', '" enctype="multipart/form-data');
+                       $uploads_output_already = true;
+               }
        }
        $tem->set('name', 'save');
        $tem->set('caption', 'Save');
@@ -188,6 +199,7 @@ function make_php() {
        $db_fields = '';
        $php_fields = '';
        $always_field = false;
+       $image_included_yet = false;
        foreach($fields as $field) {
                list($name, $type, $input, $format, $sql) = $field;
                if($input != 'submit') {
@@ -200,7 +212,19 @@ function make_php() {
                                if($php_fields != '') $php_fields .= ', ';
                                $php_fields .= '$' . $name;
                        }
-                       $tem->sub('formats');
+                       if($input == 'image') {
+                               $tem->sub('image_upload');
+                               $tem->sub('image_db');
+                               if(!$image_included_yet) {
+                                       $tem->sub('image_include');
+                                       $tem->sub('upload_max');
+                                       $tem->sub('upload_settings');
+                                       $image_included_yet = true;
+                               }
+                       } else {
+                               $tem->sub('formats');
+                               $tem->sub('tem_sets');
+                       }
                        if(!$always_field and $input != 'checkbox' and $input != 'radio') {
                                $always_field = $name;
                        }
@@ -210,9 +234,19 @@ function make_php() {
        $tem->set('always_field', $always_field);
        $tem->set('db_fields', $db_fields);
        $tem->set('php_fields', $php_fields);
+       $tem->set('metaform_url', edit_url());
        return $tem->run();
 }
 
+# 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);
+       return $url;
+}
+
 function view_php() {
        view_headers();
        echo make_php();
@@ -228,7 +262,11 @@ function make_email() {
                list($name, $type, $input, $format, $sql) = $field;
                $tem->set('name', $name);
                $tem->set('caption', $name); # fixme
-               $tem->sub('fields');
+               if($type == 'textarea') {
+                       $tem->sub('multi_line');
+               } else {
+                       $tem->sub('fields');
+               }
        }
        return $tem->run();
 }
@@ -259,7 +297,7 @@ function download_tar() {
                "$name.sql" => make_sql(),
                "$name.email.txt" => make_email(),
                "$name.php" => make_php());
-       make_tar($name, $data);
+       make_wfpl_tar($name, $data);
 }
 
 ?>