JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fixed conflict
authorJason Woofenden <jason183@herkamire.com>
Tue, 5 Jun 2007 08:40:20 +0000 (04:40 -0400)
committerJason Woofenden <jason183@herkamire.com>
Tue, 5 Jun 2007 08:40:20 +0000 (04:40 -0400)
1  2 
format.php
metaform.php
metaform/template.html
metaform/template.php

diff --combined format.php
@@@ -32,8 -32,8 +32,8 @@@ function format_zip($str) 
  
  function format_filename($str) {
        $str = strtolower($str);
-       $str = ereg_replace('[^a-z0-9_.-]', '_', $str);
-       return ereg_replace('^[0-9.-]*', '', $str);
+       $str = ereg_replace('[^a-z0-9_.]', '_', $str);
+       return ereg_replace('^[.]*', '', $str);
  }
  
  function format_varname($str) {
@@@ -52,10 -52,10 +52,10 @@@ function format_unix($str) 
  }
  
  function format_yesno($str) {
 -      if($str) {
 -              return "Yes";
 +      if($str && $str != 'No') {
 +              return 'Yes';
        } else {
 -              return "No";
 +              return 'No';
        }
  }
  
diff --combined metaform.php
@@@ -24,7 -24,6 +24,7 @@@
  require_once('code/wfpl/template.php');
  require_once('code/wfpl/http.php');
  require_once('code/wfpl/tar.php');
 +require_once('code/wfpl/format.php');
  
  # see code/wfpl/metaform/template.html for the html templates for these elements
  $GLOBALS['types'] = array(
@@@ -42,7 -41,6 +42,7 @@@
        'hidden' =>     array('hidden',      'unix',       'varchar(200)'),
        'password' =>   array('password',    'oneline',    'varchar(200)'),
        'textarea' =>   array('textarea',    'unix',       'text'),
 +      'html' =>       array('html',        'unix',       'text'),
        'pulldown' =>   array('pulldown',    'options',    'int'),
        'radio' =>      array('radio',       'oneline',    'varchar(200)'),
        'checkbox' =>   array('checkbox',    'yesno',      'varchar(3)'),
        'submit' =>     array('submit',      'oneline',    'n/a')
  );
  
 -if(isset($_REQUEST['form_name'])) {
 -      $GLOBALS['form_name'] = ereg_replace('[^a-z0-9_-]', '', $_REQUEST['form_name']);
 -} else {
 -      $GLOBALS['form_name'] = 'some_form';
 +function list_available_types() {
 +      $types = '';
 +      foreach($GLOBALS['types'] as $key => $value) {
 +              if($types) {
 +                      $types .= ', ';
 +              }
 +              $types .= $key;
 +      }
 +      tem_set('available_types', $types);
  }
  
 -if(isset($_REQUEST['fields'])) {
 -      if(isset($_REQUEST['view_sql'])) {
 -              view_sql();
 -              exit();
 -      } elseif(isset($_REQUEST['view_php'])) {
 -              view_php();
 -              exit();
 -      } elseif(isset($_REQUEST['view_template'])) {
 -              view_template();
 -              exit();
 -      } elseif(isset($_REQUEST['view_email'])) {
 -              view_email();
 -              exit();
 -      } elseif(isset($_REQUEST['download_tar'])) {
 -              download_tar();
 -              exit();
 -      } elseif(isset($_REQUEST['preview'])) {
 -              preview();
 -              exit();
 -      } elseif(isset($_REQUEST['edit'])) {
 -              tem_set('fields', $_REQUEST['fields']);
 -              tem_set('form_name', $GLOBALS['form_name']);
 -              # fall through
 +
 +function metaform() {
 +      if(isset($_REQUEST['form_name'])) {
 +              $GLOBALS['form_name'] = ereg_replace('[^a-z0-9_-]', '', $_REQUEST['form_name']);
 +              $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']);
        } else {
 -              die("Sorry... couldn't tell which button you pressed");
 +              $GLOBALS['form_name'] = 'some_form';
        }
 -}
  
 -set_form_action();
 -tem_output('code/wfpl/metaform/main.html');
 -exit();
 +      if(isset($_REQUEST['fields'])) {
 +              if(isset($_REQUEST['view_sql'])) {
 +                      view_sql();
 +                      exit();
 +              } elseif(isset($_REQUEST['view_php'])) {
 +                      view_php();
 +                      exit();
 +              } elseif(isset($_REQUEST['view_html'])) {
 +                      view_html();
 +                      exit();
 +              } elseif(isset($_REQUEST['view_email'])) {
 +                      view_email();
 +                      exit();
 +              } elseif(isset($_REQUEST['download_tar'])) {
 +                      download_tar();
 +                      exit();
 +              } elseif(isset($_REQUEST['preview'])) {
 +                      preview();
 +                      exit();
 +              } elseif(isset($_REQUEST['edit'])) {
 +                      tem_set('fields', $_REQUEST['fields']);
 +                      tem_set('form_name', $GLOBALS['form_name']);
 +                      # fall through
 +              } else {
 +                      die("Sorry... couldn't tell which button you pressed");
 +              }
 +      }
 +
 +
 +      set_form_action();
 +      list_available_types();
 +      tem_output('code/wfpl/metaform/main.html');
 +}
  
  
  function field_input($type)  { return $GLOBALS['types'][$type][0]; }
@@@ -175,9 -154,8 +175,9 @@@ function view_sql() 
        
  
  # pass false if you want to exclude the <head> and <body> tag etc.
 -function make_template($whole_file = true) {
 +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('form_name', $GLOBALS['form_name']);
                        $tem->sub('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->sub('replace_textarea');
                }
        }
 +
 +      if($GLOBALS['opt_db'] == 'Yes') {
 +              $tem->sub('opt_db_1');
 +      } else {
 +              $tem->sub('opt_db_1_else');
 +      }
        $tem->set('name', 'save');
        $tem->set('caption', 'Save');
        $tem->sub('submit');
        $tem->sub('row');
        $tem->sub('form');
 +
 +      if($has_html_editors) {
 +              $tem->sub('html_editor_headers');
 +      }
 +
        if($whole_file) {
                return $tem->run();
        } else {
        }
  }
  
 -function view_template() {
 +function view_html() {
        view_headers();
 -      echo make_template();
 +      echo make_html();
  }
  
  
@@@ -261,8 -224,8 +261,8 @@@ function make_php() 
                                }
                        } else {
                                $tem->sub('formats');
-                               $tem->sub('tem_sets');
                        }
+                       $tem->sub('tem_sets');
                        if(!$always_field and $input != 'checkbox' and $input != 'radio') {
                                $always_field = $name;
                        }
        $tem->set('db_fields', $db_fields);
        $tem->set('php_fields', $php_fields);
        $tem->set('metaform_url', edit_url());
 +      if($GLOBALS['opt_db'] == 'Yes') {
 +              $tem->sub('opt_db_1');
 +              $tem->sub('opt_db_2');
 +              $tem->sub('opt_db_3');
 +              $tem->sub('opt_db_4');
 +              $tem->sub('opt_db_5');
 +      }
 +      if($GLOBALS['opt_email'] == 'Yes') {
 +              $tem->sub('opt_email_1');
 +              $tem->sub('opt_email_2');
 +      }
        return $tem->run();
  }
  
@@@ -320,12 -272,6 +320,12 @@@ function make_email() 
        return $tem->run();
  }
  
 +function make_htaccess() {
 +      $tem = new tem();
 +      $tem->set('form', $GLOBALS['form_name']);
 +      return $tem->run('code/wfpl/metaform/template.htaccess');
 +}
 +
  function view_email() {
        view_headers();
        echo make_email();
  
  
  function preview() {
 -      $tem = new tem();
 -      $tem->load('code/wfpl/metaform/preview.html');
 -      $tem->set('form_name', $GLOBALS['form_name']);
 -      $tem->set('fields', $_REQUEST['fields']);
 +      tem_load('code/wfpl/metaform/preview.html');
 +      tem_set('form_name', $GLOBALS['form_name']);
 +      tem_set('fields', $_REQUEST['fields']);
        $preview_tem = new tem();
 -      $preview = $preview_tem->run(make_template(false));
 +      $preview = $preview_tem->run(make_html(false));
        unset($preview_tem);
 -      $tem->set('preview', $preview);
 +      tem_set('preview', $preview);
        set_form_action();
 -      $tem->output();
 +      tem_output();
  }
  
  function download_tar() {
        $name = $GLOBALS['form_name'];
        $data = array(
 -              "$name.html" => make_template(),
 +              ".htaccess" => make_htaccess(),
 +              "run.php ->" => 'code/wfpl/run.php',
 +              "$name.html" => make_html(),
                "$name.sql" => make_sql(),
 -              "$name.email.txt" => make_email(),
                "$name.php" => make_php());
 +      if($GLOBALS['opt_email'] == 'Yes') {
 +              $data["$name.email.txt"] = make_email();
 +      }
        make_wfpl_tar($name, $data);
  }
  
 +
 +metaform();
 +exit();
 +
  ?>
diff --combined metaform/template.html
@@@ -4,35 -4,24 +4,35 @@@
  <head>
    <title>~form_name~ entry</title>
    <style type="text/css"><!--
+ td.field { vertical-align: bottom; }
  td.caption { text-align: right; vertical-align: top; font-weight: bold; }
  td.errorcaption { text-align: right; vertical-align: top; font-weight: bold; color: red; }
  div.error { border: 2px solid red; padding: 13px; margin: 20px; background: #ffdddd; }
 ---></style>
 +--></style><!--~html_editor_headers start~-->
 +<script type="text/javascript" src="fckeditor/fckeditor.js"></script>
 +  <script type="text/javascript" src="fckeditor/fckconfig.js"></script>
 +  <script type="text/javascript">
 +<!--
 +      window.onload = function()
 +      {<!--~replace_textarea start~-->
 +              var fck_~html_field_name~ = new FCKeditor('~html_field_name~');
 +              fck_~html_field_name~.Height = 550;
 +              fck_~html_field_name~.ReplaceTextarea();<!--~end~-->
 +      }
 +-->
 +  </script><!--~end~-->
  </head>
  
  <body>
  <!--~~form start~~--><!--~form start~-->
 -  <h2><!--~~new_msg start~~-->Add a new entry<!--~~end~~--><!--~~edit_msg start~~-->Edit entry "~~name.html~~"<!--~~end~~--></h2>
 +  <h2><!--~opt_db_1 start~--><!--~~new_msg start~~-->Add a new entry<!--~~end~~--><!--~~edit_msg start~~-->Edit entry "~~name.html~~"<!--~~end~~--><!--~end~--><!--~opt_db_1_else start~-->~form_name~ entry form<!--~end~--></h2>
  
    <!--~error start~--><div class="error"><h3>~error_message.html~</h3></div><!--~end~-->
  
    <form action="~form_name~.html~enctype_attr~" method="post"><!--~~editing start~~--><input type="hidden" name="~form_name~_edit_id" value="~~~form_name~_edit_id.attr~~" /><!--~~end~~--><!--~uploads start~--><input type="hidden" name="MAX_FILE_SIZE" value="~~upload_max_filesize~~" /><!--~end~-->
      <table cellspacing="0" cellpadding="4" border="0" summary=""><!--~row start~-->
  
-       <tr><!--~image start~--><td class="caption">~caption.html~: </td><td><input type="file" name="~name~" /></td><!--~end~--><!--~textbox start~--><td class="caption">~caption.html~: </td><td><input type="text" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~password start~--><td class="caption">~caption.html~: </td><td><input type="password" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textarea start~--><td class="caption">~caption.html~: </td><td><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~html start~--><td class="caption">~caption.html~: </td><td></td></tr><tr><td colspan="2"><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~radio start~--><td class="caption">~caption.html~: </td><td><input type="radio" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~checkbox start~--><td class="caption">~caption.html~: </td><td><input type="checkbox" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~submit start~--><td class="submit_row" colspan="2"><input type="submit" name="~name~" value="~caption.attr~" /></td><!--~end~--></tr><!--~end~-->
 -      <tr><!--~image start~--><td class="caption">~caption.html~: </td><td class="field"><input type="file" name="~name~" /><input type="hidden" name="old_~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textbox start~--><td class="caption">~caption.html~: </td><td class="field"><input type="text" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~password start~--><td class="caption">~caption.html~: </td><td class="field"><input type="password" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textarea start~--><td class="caption">~caption.html~: </td><td><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~radio start~--><td class="caption">~caption.html~: </td><td class="field"><input type="radio" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~checkbox start~--><td class="caption">~caption.html~: </td><td class="field"><input type="checkbox" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~submit start~--><td class="submit_row" colspan="2"><input type="submit" name="~name~" value="~caption.attr~" /></td><!--~end~--></tr><!--~end~-->
 -
++      <tr><!--~image start~--><td class="caption">~caption.html~: </td><td><input type="file" name="~name~" /></td><!--~end~--><!--~textbox start~--><td class="caption">~caption.html~: </td><td><input type="text" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~password start~--><td class="caption">~caption.html~: </td><td><input type="password" name="~name~" value="~~~name~.attr~~" /></td><!--~end~--><!--~textarea start~--><td class="caption">~caption.html~: </td><td><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~html start~--><td class="caption">~caption.html~: </td><td></td></tr><tr><td colspan="2"><textarea rows="20" cols="50" name="~name~">~~~name~.html~~</textarea></td><!--~end~--><!--~radio start~--><td class="caption">~caption.html~: </td><td class="field"><input type="radio" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~checkbox start~--><td class="caption">~caption.html~: </td><td><input type="checkbox" name="~name~~~~name~.checked~~" /></td><!--~end~--><!--~submit start~--><td class="submit_row" colspan="2"><input type="submit" name="~name~" value="~caption.attr~" /></td><!--~end~--></tr><!--~end~-->
      </table>
    </form>
  <!--~end~--><!--~~end~~-->
diff --combined metaform/template.php
@@@ -8,39 -8,44 +8,43 @@@
  #
  # ~metaform_url~
  
 -# This code can send form results by e-mail and/or save them to a database. See
 -# the next two comments to enable either or both.
 -
 +# SETUP
 +<!--~opt_email_1 start~-->
  # To send results by e-mail, all you have to do is set your e-mail address here:
  $GLOBALS['~form_name~_form_recipient'] = "fixme@example.com";
 -<!--~upload_settings start~-->
 +<!--~end~--><!--~opt_db_1 start~-->
 +# To save results to a database, you'll need to create the ~form_name~ table
 +# (the file ~form_name~.sql should help with this), and create a file called
 +# 'db_connect.php' or 'code/db_connect.php' which calls db_connect() see:
 +# code/wfpl/examples/db_connect.php
 +<!--~end~--><!--~upload_settings start~-->
  # Set this to the path to your uploads directory. It can be relative to the
  # location of this script. IT MUST END WITH A SLASH
  $GLOBALS['upload_directory'] = 'uploads/';
  <!--~end~-->
 -# To save results to a database, you'll need to create the ~form_name~ table
 -# (the file ~form_name~.sql should help with this), and create a file called
 -# 'db_connect.php' which calls db_connect() see:
 -# code/wfpl/examples/db_connect.php
  
  if(!file_exists('code/wfpl/template.php')) { die('This form requires <a href="http://jasonwoof.org/wfpl">wfpl</a>.'); }
  require_once('code/wfpl/template.php');
  require_once('code/wfpl/format.php');
  require_once('code/wfpl/messages.php');
 -require_once('code/wfpl/email.php');
 -require_once('code/wfpl/db.php');<!--~image_include start~-->
 +require_once('code/wfpl/email.php');<!--~opt_db_2 start~-->
 +require_once('code/wfpl/db.php');<!--~end~--><!--~image_include start~-->
  require_once('code/wfpl/upload.php');<!--~end~-->
  
 -function ~form_name~_get_fields() {
 -      <!--~formats start~-->
 +function ~form_name~_get_fields() {<!--~formats start~-->
        $~name~ = format_~format~($_REQUEST['~name~']);<!--~end~--><!--~image_upload start~-->
-       $~name~ = save_uploaded_image('~name~', $GLOBALS['upload_directory']);<!--~end~-->
+       if($_FILE['~name~'] && $_FILE['~name~']['error'] == 0) {
+               $~name~ = substr(save_uploaded_image('~name~', $GLOBALS['upload_directory']), strlen($GLOBALS['upload_directory']));
+       } else {
+               $~name~ = format_filename($_REQUEST['old_~name~']);
+       }<!--~end~-->
        <!--~tem_sets start~-->
        tem_set('~name~', $~name~);<!--~end~-->
  
        return array(~php_fields~);
  }
  
 -function ~form_name~() {
 +function ~form_name~() {<!--~opt_db_3 start~-->
        $edit_id = format_int($_REQUEST['~form_name~_edit_id']);
        unset($_REQUEST['~form_name~_edit_id']);
        if($edit_id) {
  
        if(!$edit_id && !$delet_id) {
                tem_sub('new_msg');
 -      }
 +      }<!--~end~-->
  
        if(isset($_REQUEST['~always_field~'])) {
                list(~php_fields~) = ~form_name~_get_fields();
  
 -              if("you're happy with the POSTed values") {
 -                      # to enable saving to a database, create a file called 'db_connect.php'
 -                      # see: code/wfpl/examples/db_connect.php
 -                      if(file_exists('db_connect.php') || file_exists('code/db_connect.php')) {
 -                              if(file_exists('db_connect.php') {
 -                                      require_once('db_connect.php');
 -                              } else {
 -                                      require_once('code/db_connect.php');
 -                              }
 +              if("you're happy with the POSTed values") {<!--~opt_db_4 start~-->
 +                      if(file_exists($db_connector = 'db_connect.php') || file_exists($db_connector = 'code/db_connect.php')) {
 +                              require_once($db_connector);
                                if($edit_id) {<!--~image_db start~-->
                                        # uploading nothing means leaving it as is.
                                        if(!$~name~ && $delete_~name~ != 'Yes') {
@@@ -82,7 -93,7 +86,7 @@@
                                        db_insert('~form_name~', '~db_fields~', ~php_fields~);
                                        message('Entry saved.');
                                }
 -                      }
 +                      }<!--~end~--><!--~opt_email_2 start~-->
                        if($GLOBALS['~form_name~_form_recipient'] != "fixme@example.com") {
                                $to = $GLOBALS['~form_name~_form_recipient'];
                                if(isset($_REQUEST['email']) and valid_email($_REQUEST['email'])) {
                                        tem_sub('error');
                                        $error = true;
                                }
 -                      }
 +                      }<!--~end~-->
                        if($error !== true) {
                                tem_load('~form_name~.html');
                                tem_sub('thankyou');
                # otherwise, we display the form again. ~form_name~_get_fields() has
                # already put the posted values back into the template engine, so they will
                # show up in the form fields. You should add some message asking people to
 -              # fix their entry in whatever way you require.
 +              # fix their entry in whatever way you require.<!--~opt_db_5 start~-->
        } elseif($edit_id) {
                # we've recieved an edit id, but no data. So we grab the values to be edited from the database
                list(~php_fields~) = db_get_row('~form_name~', '~db_fields~', 'where id=%i', $edit_id);
 -              ~tem_sets.tab~
 +              ~tem_sets.tab~<!--~end~-->
        } else {
                # form not submitted, you can set default values like so:
                #tem_set('~always_field~', 'Yes');