JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
API CHANGE s/run_php/wfpl_main/
authorJason Woofenden <jason@jasonwoof.com>
Tue, 3 Mar 2015 00:03:35 +0000 (19:03 -0500)
committerJason Woofenden <jason@jasonwoof.com>
Tue, 3 Mar 2015 00:03:35 +0000 (19:03 -0500)
main.php [new file with mode: 0644]
metaform.php
metaform/htaccess
run.php [deleted file]

diff --git a/main.php b/main.php
new file mode 100644 (file)
index 0000000..e088d67
--- /dev/null
+++ b/main.php
@@ -0,0 +1,148 @@
+<?php  # Transitional; supports both template APIs
+
+# 2006 Public Domain
+#
+# This file was placed into the public domain on November 16th, 2008 by its
+# sole author Jason Woofenden, so that if you need similar behavior, you can
+# copy this file into your website, and change it as needed.
+
+# This file is meant to run for every page view. It finds PHP and HTML files
+# that match the basename of the url, and loads/executes them. It also allows
+# php files to specify redirects (both "soft" redirects which makes the server
+# act as if a different url was requested, and real HTTP redirects).
+
+# INSTRUCTIONS
+#
+# 1.   Make config.php in your main directory with contents like:
+#
+#      require_once(__DIR__.'/'.'inc/wfpl/run.php');
+#      wfpl_main();
+#
+# 2.   Include the following in your .htaccess file:
+#
+#      RewriteEngine  on
+#      RewriteRule    ^[^/.]*$  /config.php
+
+require_once(__DIR__.'/'.'file_run.php');
+require_once(__DIR__.'/'.'http.php');
+require_once(__DIR__.'/'.'template.php');
+
+# pass the basename of the page you want for normal execution
+# pass ./page.html to redirect to page.html in this directory
+# pass http://foo.com/bar.html to redirect to a full directory
+function wfpl_main($dest = false) {
+       if($dest) {
+               # if it has a : it must be a full URL, redirect
+               if(strpos($dest, ':')) {
+                       redirect($dest);
+                       exit();
+               }
+
+               # if it starts with './' then it's a relative URL, redirect
+               if(substr($dest, 0, 2) == './') {
+                       redirect(ereg_replace('/[^/]*$', substr($dest, 1), this_url()));
+                       exit();
+               }
+
+               # otherwise, it's a normal basename, display that content
+               $basename = $dest;
+
+       } else { # no dest arg
+               $basename = $_SERVER['REDIRECT_URL'];
+               $basename = ereg_replace('.*/', '', $basename);
+               $basename = ereg_replace('\.html?$', '', $basename);
+               if($basename == '') {
+                       $basename = 'index';
+               }
+       }
+
+       $GLOBALS['wfpl_basename'] = $basename;
+
+       $html_file = "$basename.html";
+       $php_file = "$basename.php";
+
+       $html_exists = file_exists($html_file);
+       $php_exists = file_exists($php_file);
+
+       if(file_exists('template.html')) {
+               $GLOBALS['wfpl_main_template'] = new tem();
+               $GLOBALS['wfpl_main_template']->load("template.html");
+               $GLOBALS['wfpl_main_template']->set('$basename', $basename);
+       }
+
+       # cms_get can return one of:
+       # 1) true to indicate that there is cms content (so no 404)
+       # 2) false to indicate that there's no cms content for this basename
+       # 3) a string to indicate a soft/full redirect just as foo_main()
+       if(function_exists('cms_display')) {
+               $cms_content = cms_display($basename, $GLOBALS['wfpl_main_template']);
+               if(is_string($cms_content)) {
+                       run_php($cms_content);
+                       return;
+               }
+       } else {
+               $cms_content = false;
+       }
+
+       if(!$php_exists && !$html_exists && !$cms_content) {
+               header('HTTP/1.0 404 File Not Found');
+               if(file_exists('error_404.php') || file_exists('error_404.html')) {
+                       $GLOBALS['error_basename'] = $basename;
+                       run_php('error_404');
+                       return;
+               } else {
+                       echo '<!DOCTYPE html><html><head><title>404</title></head><body><h1>404 File Not Found</h1></body></html>';
+                       exit();
+               }
+       }
+
+       # If there's no template.html we don't want to parse $html_file.
+       if($html_exists && !$php_exists && !file_exists('template.html')) {
+               readfile($html_file);
+               exit();
+       }
+
+       if($html_exists) {
+               tem_load_new($html_file);
+       }
+
+       if($php_exists) {
+               # files can return a basename or URL of a page to be run/displayed
+               $other = file_run($php_file);
+               if($other) {
+                       run_php($other);
+                       return;
+               }
+       } elseif($html_exists) {
+               $sub_names = tem_top_sub_names();
+               foreach($sub_names as $sub_name) {
+                       tem_sub($sub_name);
+               }
+       }
+
+       # Check for $GLOBALS['wfpl_template'] because it might have been set (or unset) by the php script.
+       if($GLOBALS['wfpl_template'] || $GLOBALS['wfpl_main_template']) {
+               if($GLOBALS['wfpl_main_template']) {
+                       # if there was a template for that page, and one for the whole
+                       # site, copy all template sections that have been show()n to the
+                       # site-wide template
+                       if($GLOBALS['wfpl_template']) {
+                               $GLOBALS['wfpl_main_template']->merge($GLOBALS['wfpl_template']);
+                       }
+
+                       $GLOBALS['wfpl_template'] = $GLOBALS['wfpl_main_template'];
+               }
+
+
+               # You'll probably want to require_once(__DIR__.'/'.'code/wfpl/messages.php') or
+               # require_once(__DIR__.'/'.'code/wfpl/session_messages.php') in code/config.php
+               if(function_exists('display_messages')) {
+                       if(function_exists('atexit_now')) {
+                               atexit_now();
+                       }
+                       display_messages();
+               }
+
+               tem_output();
+       }
+}
index 2be93ea..ad980a6 100644 (file)
@@ -95,7 +95,7 @@ function tem_set_globals(&$tem) {
        }
 }
 
-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']);
@@ -153,9 +153,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
 }
 
 
@@ -254,7 +255,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 +298,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));
@@ -443,7 +444,7 @@ 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 = '';
@@ -540,7 +541,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 +562,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 +571,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();
@@ -597,11 +598,11 @@ function download_tar() {
        $admin_name = $GLOBALS['file_name'];
        $nice_name = $GLOBALS['public_file_name'];
        $files = array(
-               "INSTALL" => read_whole_file('code/wfpl/metaform/INSTALL'),
+               "INSTALL" => read_whole_file(__DIR__.'/'.'metaform/INSTALL'),
                ".htaccess" => make_htaccess(),
-               "run.php" => "<?php\n\nrequire_once(__DIR__.'/'.'code/wfpl/run.php');\n",
-               "styl.styl" => read_whole_file('code/wfpl/metaform/styl.styl'),
-               "template.html" => read_whole_file('code/wfpl/metaform/site-template.html'),
+               "config.php" => "<?php\n\nrequire_once(__DIR__.'/'.'inc/wfpl/main.php');\nmetaform_main();\n",
+               "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 +617,3 @@ function download_tar() {
        }
        make_tar($nice_name, $files);
 }
-
-
-metaform();
-exit();
index 517f638..de9356a 100644 (file)
@@ -12,23 +12,15 @@ AddDefaultCharset UTF-8
        ExpiresDefault A31536000
 </FilesMatch>
 
-# the following line makes it so you can just update the link to your
-# stylesheet without actually renaming it all the time. This is needed even if
-# you don't set a long cache period on stylesheets, because Safari will check
-# for a new html, but not check for a new css.
-RewriteRule    ^style_[0-9]*.less$  /style.less [L]
-
-
 # To enable larger uploads, you'll need both of these:
 # php_value post_max_size 205M
 # php_value upload_max_filesize 200M
 
 
 ############ START OF PRETTY URLS SETTINGS ############
-# This section contains directives to enable pretty URLs, and instruct apache
-# to run wfpl on them. This runs code/config.php if it exists, then loads
-# templates, then loads the php file, and call's it's main function. See
-# code/wfpl/run.php and code/wfpl/README for more details.
+# This section contains directives to enable pretty URLs, including setting
+# page urls to run your site-wide config file, which in turn can run
+# wfpl_main()
 
 # To have "pretty" urls (no file extension at the end) we use mod_rewrite. But
 # first we've got to disable a couple url-mangling features of apache that take
@@ -42,7 +34,7 @@ RewriteEngine  on
 # Unfortunately, the rewrite rules only work with absolute paths, so if your
 # files are not at the top level of the domain, you'll have to customize this
 # part. Here's the config for running at the top level:
-RewriteRule    ^[^/.]*$  /run.php
+RewriteRule    ^[^/.]*$  /config.php
 
 # use this line instead if you have this (.htaccess) file and your php and html
 # files in the ~form~ directory:
diff --git a/run.php b/run.php
deleted file mode 100644 (file)
index 8cf9d4d..0000000
--- a/run.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php  # Transitional; supports both template APIs
-
-#  2006 Public Domain
-#
-#  This file was placed into the public domain on November 16th, 2008 by its
-#  sole author Jason Woofenden
-
-# This file facilitates making a site with mixed PHP and html files. All URLs
-# have the .html extension. One benefit of this is that you can change static
-# html files to php scripts without having to update links.
-
-# This script will pull the filename from the URL. It looks for a file with
-# that name, and for one with the same basename, but with the .php extension
-# and acts accordingly:
-
-#--------------------------------------------#
-#        | .php file exists   | no .php file #
-#--------+--------------------+--------------#
-# .html  | load html file as  | pass html    #
-# file   | a template and run | file through #
-# exists | run the php file   | as is        #
-#--------+--------------------+--------------#
-# no     |                    |              #
-# .html  | run php file       | display 404  #
-# file   |                    |              #
-#--------------------------------------------#
-
-
-
-# To activate this script in a directory, you'll need to:
-#
-# 1) make a symbolic link to (or copy of) this file in your directory. and
-#
-# 3) Set your webserver to run this script instead of html files. Here's how to
-# do that with apache: put something like the following in you your .htaccess
-# file (where /foo/ is the part of the url between the hostname and the
-# filename.) The example below would work for this url:
-# http://example.com/foo/bar.html
-
-# RewriteEngine  on
-# RewriteRule    ^$  /foo/run.php
-# RewriteRule    ^foo/[^/]*\.html$  /foo/run.php
-
-require_once(__DIR__.'/'.'code/wfpl/file_run.php');
-require_once(__DIR__.'/'.'code/wfpl/http.php');
-require_once(__DIR__.'/'.'code/wfpl/template.php');
-
-if(file_exists(__DIR__.'/'.'code/config.php')) {
-       file_run(__DIR__.'/'.'code/config.php');
-}
-
-# pass the basename of the page you want for normal execution
-# pass ./page.html to redirect to page.html in this directory
-# pass http://foo.com/bar.html to redirect to a full directory
-function run_php($dest = false) {
-       if($dest) {
-               # if it has a : it must be a full URL, redirect
-               if(strpos($dest, ':')) {
-                       redirect($dest);
-                       exit();
-               }
-
-               # if it starts with './' then it's a relative URL, redirect
-               if(substr($dest, 0, 2) == './') {
-                       redirect(ereg_replace('/[^/]*$', substr($dest, 1), this_url()));
-                       exit();
-               }
-
-               # otherwise, it's a normal basename, display that content
-               $basename = $dest;
-
-       } else { # no dest arg
-               $basename = $_SERVER['REDIRECT_URL'];
-               $basename = ereg_replace('.*/', '', $basename);
-               $basename = ereg_replace('\.html?$', '', $basename);
-               if($basename == '') {
-                       $basename = 'index';
-               }
-       }
-
-       $GLOBALS['wfpl_basename'] = $basename;
-
-       $html_file = "$basename.html";
-       $php_file = "$basename.php";
-
-       $html_exists = file_exists($html_file);
-       $php_exists = file_exists($php_file);
-
-       if(file_exists('template.html')) {
-               $GLOBALS['wfpl_main_template'] = new tem();
-               $GLOBALS['wfpl_main_template']->load("template.html");
-               $GLOBALS['wfpl_main_template']->set('$basename', $basename);
-       }
-
-       # cms_get can return one of:
-       # 1) true to indicate that there is cms content (so no 404)
-       # 2) false to indicate that there's no cms content for this basename
-       # 3) a string to indicate a soft/full redirect just as foo_main()
-       if(function_exists('cms_display')) {
-               $cms_content = cms_display($basename, $GLOBALS['wfpl_main_template']);
-               if(is_string($cms_content)) {
-                       run_php($cms_content);
-                       return;
-               }
-       } else {
-               $cms_content = false;
-       }
-
-       if(!$php_exists && !$html_exists && !$cms_content) {
-               header('HTTP/1.0 404 File Not Found');
-               if(file_exists('error_404.php') || file_exists('error_404.html')) {
-                       $GLOBALS['error_basename'] = $basename;
-                       run_php('error_404');
-                       return;
-               } else {
-                       echo '<!DOCTYPE html><html><head><title>404</title></head><body><h1>404 File Not Found</h1></body></html>';
-                       exit();
-               }
-       }
-
-       # If there's no template.html we don't want to parse $html_file.
-       if($html_exists && !$php_exists && !file_exists('template.html')) {
-               readfile($html_file);
-               exit();
-       }
-
-       if($html_exists) {
-               tem_load_new($html_file);
-       }
-
-       if($php_exists) {
-               # files can return a basename or URL of a page to be run/displayed
-               $other = file_run($php_file);
-               if($other) {
-                       run_php($other);
-                       return;
-               }
-       } elseif($html_exists) {
-               $sub_names = tem_top_sub_names();
-               foreach($sub_names as $sub_name) {
-                       tem_sub($sub_name);
-               }
-       }
-
-       # Check for $GLOBALS['wfpl_template'] because it might have been set (or unset) by the php script.
-       if($GLOBALS['wfpl_template'] || $GLOBALS['wfpl_main_template']) {
-               if($GLOBALS['wfpl_main_template']) {
-                       # if there was a template for that page, and one for the whole
-                       # site, copy all template sections that have been show()n to the
-                       # site-wide template
-                       if($GLOBALS['wfpl_template']) {
-                               $GLOBALS['wfpl_main_template']->merge($GLOBALS['wfpl_template']);
-                       }
-
-                       $GLOBALS['wfpl_template'] = $GLOBALS['wfpl_main_template'];
-               }
-
-
-               # You'll probably want to require_once(__DIR__.'/'.'code/wfpl/messages.php') or
-               # require_once(__DIR__.'/'.'code/wfpl/session_messages.php') in code/config.php
-               if(function_exists('display_messages')) {
-                       if(function_exists('atexit_now')) {
-                               atexit_now();
-                       }
-                       display_messages();
-               }
-
-               tem_output();
-       }
-}
-
-run_php();
-
-?>