X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=run.php;h=24072029821ecc46929272b9cf8a7dce902e9435;hb=73490300ca9dea6fc3c6d3a474ab49796fd58438;hp=716e3643be804ab6afcf032c811c820db4fa164b;hpb=f303b9521b6ea3195ccdedfbdb9edd39fcd649f7;p=wfpl.git diff --git a/run.php b/run.php index 716e364..2407202 100644 --- a/run.php +++ b/run.php @@ -4,20 +4,19 @@ # # 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 facilitates making a site with mixed PHP and html files. All URLs @@ -42,41 +41,116 @@ -# To activate this script in a directory, you'll need to 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 +# 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 -# RewriteBase /foo/ -# RewriteRule .*\.html$ /foo/code/wfpl/run.php +# RewriteRule ^$ /foo/run.php +# RewriteRule ^foo/[^/]*\.html$ /foo/run.php + +require_once('code/wfpl/file_run.php'); +require_once('code/wfpl/http.php'); +require_once('code/wfpl/template.php'); + +if(file_exists('code/config.php')) { + file_run('code/config.php'); +} function run_php($basename = false) { - if($basename) { - $html_file = "$basename.html"; - $php_file = "$basename.php"; - } else { - chdir('../..'); - $html_file = $_SERVER['REDIRECT_URL']; - $html_file = ereg_replace('.*/', '', $html_file); - $php_file = ereg_replace('\.html$', '.php', $html_file); + if(!$basename) { + $basename = $_SERVER['REDIRECT_URL']; + $basename = ereg_replace('.*/', '', $basename); + $basename = ereg_replace('\.html$', '', $basename); + if($basename == '') { + $basename = 'index'; + } } - if($php_file != $html_file && file_exists($php_file)) { - require_once('code/wfpl/template.php'); - if(file_exists($html_file)) tem_load($html_file); - require $php_file; - if(file_exists($html_file)) tem_output(); + + $html_file = "$basename.html"; + $php_file = "$basename.php"; + + $html_exists = file_exists($html_file); + $php_exists = file_exists($php_file); + + if(function_exists('cms_get')) { + $cms_content = cms_get($basename); } else { - if(file_exists($html_file)) { - require $html_file; + $cms_content = false; + } + + if(!$php_exists && !$html_exists && !$cms_content) { + header('HTTP/1.0 404 File Not Found'); + if(file_exists('404.php') || file_exists('404.html')) { + run_php('404'); } else { - header('HTTP/1.0 404 File Not Found'); - if(file_exists('404.php') || file_exists('404.html')) { - run_php('404'); - } else { - echo '404

404 File Not Found

'; + echo '404

404 File Not Found

'; + } + } + + # 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) { + if(strpos($other, ':')) { + redirect($other); + exit(); + } + if(substr($other, 0, 2) == './') { + redirect(ereg_replace('/[^/]*$', substr($other, 1), this_url())); + exit(); + } + run_php($other); + return; + } + } else { + $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']) { + if(file_exists('template.html')) { + $tem = new tem(); + $tem->load("template.html"); + if($cms_content) foreach($cms_content as $name => $val) { + $tem->append($name, $val); + } + $sections = tem_top_subs(); + if($sections) foreach($sections as $name => $val) { + $tem->append($name, $val); + } + + if(file_exists("$basename.css")) { + $tem->set('css_link', "$basename.css"); + $tem->sub('css_links'); } + + $GLOBALS['wfpl_template'] = $tem; + } + + if(function_exists('display_messages')) { + display_messages(); } + tem_output(); } }