JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform redirects after successful submit. metaform can make a display page
authorJason Woofenden <jason283@herkamire.com>
Mon, 8 Dec 2008 19:25:32 +0000 (14:25 -0500)
committerJason Woofenden <jason283@herkamire.com>
Mon, 8 Dec 2008 19:25:32 +0000 (14:25 -0500)
metaform.php
metaform/main.html
metaform/preview.html
metaform/style.css
metaform/template.html
metaform/template.php

index 66cb824..734d8fc 100644 (file)
@@ -76,6 +76,8 @@ function metaform() {
                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 {
@@ -227,6 +229,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') {
@@ -237,9 +252,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') {
@@ -319,9 +340,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');
index df07379..362e6ee 100644 (file)
@@ -21,6 +21,8 @@
 
     <p><input type="checkbox" name="opt_listing~opt_listing.checked~" value="Yes" /> Provide a "Listing" page.</p>
 
+    <p><input type="checkbox" name="opt_display~opt_display.checked~" value="Yes" /> Provide a "Display" page.</p>
+
     <p><input type="checkbox" name="opt_http_pass~opt_http_pass.checked~" value="Yes" /> Password protect this form (with HTTP authentication).</p>
 
        <p>Below, specify the fields you'd like in your form, one field per line. After each field name, put at least one space, then the field type. The following field types are available: ~available_types.html~.</p>
index 60dbc81..0cfd3cc 100644 (file)
   <h1 class="first">PREVIEW</h1>
 ~preview~
   </div>
-    <p><form action="~form_name~.tgz" method="get"><input type="hidden" name="form_name" value="~form_name.attr~" /><input type="hidden" name="opt_email" value="~opt_email.attr~" /><input type="hidden" name="opt_db" value="~opt_db.attr~" /><input type="hidden" name="opt_listing" value="~opt_listing.attr~" /><input type="hidden" name="opt_http_pass" value="~opt_http_pass.attr~" /><input type="hidden" name="fields" value="~fields.attr~" /><input type="submit" name="download_tar" value="Download tarball" /></form></p>
+    <p><form action="~form_name~.tgz" method="get"><input type="hidden" name="form_name" value="~form_name.attr~" /><input type="hidden" name="opt_email" value="~opt_email.attr~" /><input type="hidden" name="opt_db" value="~opt_db.attr~" /><input type="hidden" name="opt_listing" value="~opt_listing.attr~" /><input type="hidden" name="opt_listing" value="~opt_display.attr~" /><input type="hidden" name="opt_http_pass" value="~opt_http_pass.attr~" /><input type="hidden" name="fields" value="~fields.attr~" /><input type="submit" name="download_tar" value="Download tarball" /></form></p>
 
   <form action="~metaform_name~" method="get">
-       <p><input type="hidden" name="form_name" value="~form_name.attr~" /><input type="hidden" name="opt_email" value="~opt_email.attr~" /><input type="hidden" name="opt_db" value="~opt_db.attr~" /><input type="hidden" name="opt_listing" value="~opt_listing.attr~" /><input type="hidden" name="opt_http_pass" value="~opt_http_pass.attr~" /><input type="hidden" name="fields" value="~fields.attr~" /><input type="submit" name="edit" value="Back to editing" /></p>
+       <p><input type="hidden" name="form_name" value="~form_name.attr~" /><input type="hidden" name="opt_email" value="~opt_email.attr~" /><input type="hidden" name="opt_db" value="~opt_db.attr~" /><input type="hidden" name="opt_listing" value="~opt_listing.attr~" /><input type="hidden" name="opt_display" value="~opt_display.attr~" /><input type="hidden" name="opt_http_pass" value="~opt_http_pass.attr~" /><input type="hidden" name="fields" value="~fields.attr~" /><input type="submit" name="edit" value="Back to editing" /></p>
 
     <p><input type="submit" name="view_sql" value="View SQL" /></p>
 
index df624aa..e6be557 100644 (file)
@@ -6,10 +6,10 @@ td.caption, td.errorcaption {
        text-align: right;
        vertical-align: top;
 }
-td.caption, td.errorcaption, td.right_caption {
+.caption, td.errorcaption, td.right_caption {
        font-weight: bold;
 }
-td.errorcaption { color: red; }
+.errorcaption { color: red; }
 div.error {
        border: 2px solid red;
        padding: 13px;
@@ -21,3 +21,7 @@ div.error {
        padding-top: 0px;
        margin-top: 0px;
 }
+.last {
+       padding-bottom: 0px;
+       margin-bottom: 0px;
+}
index 07b95e5..08a764a 100644 (file)
        <!--~~end~~-->
        </div>
   <!--~~end~~-->
+<!--~opt_display_1 start~-->
+<!--~~display_body start~~-->
+  <h2>Details</h2>
+  <!--~display_row start~--><!--~display_short start~-->
+    <div><span class="caption">~caption.html~:</span> ~~~name~.htmlbr~~</div>
+  <!--~end~--><!--~display_html start~-->
+    <div><span class="caption">~caption.html~:</span> <div style="padding-left: 20px; border: 1px solid black">~~~name~~~</div></div>
+  <!--~end~--><!--~display_multiline start~-->
+    <div><span class="caption">~caption.html~:</span> <div style="padding-left: 20px">~~~name~.htmlbr~~</div></div>
+  <!--~end~--><!--~end~-->
 
+    <p><a href="~form_name~.html?~form_name~_edit_id=~~id.attr~~">Edit</a></p>
+<!--~~end~~-->
+
+<!--~~edit_body start~~-->
+<!--~end~-->
 <!--~~form start~~--><!--~form start~-->
   <h2><!--~opt_db_1 start~--><!--~~new_msg start~~-->Add a new entry<!--~~end~~--><!--~~edit_msg start~~-->Edit entry "~~~always_field~.html~~"<!--~~end~~--><!--~end~--><!--~opt_db_1_else start~-->~form_name~ entry form<!--~end~--></h2>
 
@@ -63,7 +78,7 @@
   <p><a href="~form_name~.html?~form_name~_new=1">[Add a new record]</a></p>
 
   <table cellspacing="0" cellpadding="4" border="1" summary=""><!--~~listing_row start~~-->
-  <tr><td class="listing"><a href="~form_name~.html?~form_name~_edit_id=~~id~~">~~~always_field~.html~~</a></td><td><a href="~form_name~.html?~form_name~_delete_id=~~id~~" onclick="return confirm('Permanently delete?')">[delete this record]</a></td></tr><!--~~end~~-->
+  <tr><td class="listing"><a href="~form_name~.html?~form_name~_<!--~opt_display_a_else start~-->edit_<!--~end~-->id=~~id~~">~~~always_field~.html~~</a></td><td><a href="~form_name~.html?~form_name~_delete_id=~~id~~" onclick="return confirm('Permanently delete?')">[delete this record]</a></td></tr><!--~~end~~-->
 
   </table>
   <!--~~end~~-->
   <!--~~end~~-->
 
   <p><a href="~form_name~.html?~form_name~_new=1">[Add a new record]</a></p>
-<!--~~end~~--><!--~end~--><!--~opt_listing_1_else start~-->
-<!--~~thankyou start~~-->
-  <p>Thank you for taking the time to fill out this form.</p>
 <!--~~end~~--><!--~end~-->
+<!--~opt_display_2 start~-->
 
 <!--~~end~~-->
+<!--~end~-->
+<!--~~end~~-->
 </body>
 </html>
index 7697c48..3c5e6cc 100644 (file)
@@ -83,17 +83,51 @@ function ~form_name~_display_listing($where = 'order by ~always_field~ limit 100
        return true;
 }
 <!--~end~-->
-function ~form_name~_main() {
+function ~form_name~_main() {<!--~opt_display_1 start~-->
+       if(isset($_REQUEST['~form_name~_id'])) {
+               $ret = ~form_name~_display_main();
+               if($ret) {
+                       return $ret;
+               }
+               tem_show('display_body');
+       } else {
+               $ret = ~form_name~_edit_main();
+               if($ret) {
+                       return $ret;
+               }
+               tem_show('edit_body');
+       }
+<!--~end~--><!--~opt_display_1_else start~-->
        $ret = _~form_name~_main();
        if($ret) {
                return $ret;
        }
-
+<!--~end~-->
        # sections displayed with tem_show() will be coppied to the main template if you have one.
        tem_show('main_body');
+}<!--~opt_display_2 start~-->
+
+function ~form_name~_display_main() {
+       $id = format_int($_REQUEST['~form_name~_id']);
+       unset($_REQUEST['~form_name~_id']);
+       if(!$id) {
+               message('Error: Broken link');
+               return './~form_name~';
+       }
+       $row = db_get_row('~form_name~', ~form_name.upper~_DB_FIELDS, 'where id=%i', $id);
+       if(!$row) {
+               message('Error: Not found');
+               return './~form_name~';
+       }
+       list(~php_fields~) = $row;
+       ~form_name~_tem_sets(~php_fields~);
+       tem_set('id', $id);
 }
 
-function _~form_name~_main() {<!--~opt_http_pass_2 start~-->
+function ~form_name~_edit_main() {<!--~end~--><!--~opt_display_2_else start~-->
+
+
+function _~form_name~_main() {<!--~end~--><!--~opt_http_pass_2 start~-->
        # To remove password protection, just delete this block:
        if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] != AUTH_USER || $_SERVER['PHP_AUTH_PW'] != AUTH_PASS) {
                header('WWW-Authenticate: Basic realm="' . AUTH_REALM . '"');
@@ -136,10 +170,10 @@ function _~form_name~_main() {<!--~opt_http_pass_2 start~-->
                if("you're happy with the POSTed values") {<!--~opt_db_4 start~-->
                        if($edit_id) {
                                db_update('~form_name~', ~form_name.upper~_DB_FIELDS, ~php_fields~, 'where id=%i', $edit_id);
-                               message('Entry updated.');
+                               message('Updated.');
                        } else {
                                db_insert('~form_name~', ~form_name.upper~_DB_FIELDS, ~php_fields~);
-                               message('Entry saved.');
+                               message('Saved.');
                        }<!--~end~--><!--~opt_email_2 start~-->
                        if($GLOBALS['~form_name~_form_recipient'] != "fixme@example.com") {
                                $to = $GLOBALS['~form_name~_form_recipient'];
@@ -158,12 +192,12 @@ function _~form_name~_main() {<!--~opt_http_pass_2 start~-->
                                if(email($from, $to, $subject, $message, $reply_to, $cc, $bcc)) {
                                        message('Due to an internal error, your message could not be sent. Please try again later.');
                                        $error = true;
+                               } else {
+                                       message('Message sent');
                                }
                        }<!--~end~-->
-                       if($error !== true) {<!--~opt_listing_4 start~-->
-                               ~form_name~_display_listing();<!--~end~--><!--~opt_listing_4_else start~-->
-                               tem_show('thankyou');<!--~end~-->
-                               return;
+                       if($error !== true) {
+                               return './~form_name~'; # FIXME is this the page you want to go to after successful form submission?
                        }
                }
                # otherwise, we display the form again. ~form_name~_get_fields() has