summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2010-01-31 19:02:14 +0100
committerAndreas Gohr <andi@splitbrain.org>2010-01-31 19:02:14 +0100
commit16905344219a6293705b71cd526fad3ba07b04eb (patch)
tree0fbb1eb7af4a90cb0cd569bb02f6d219ea790dd7
parentfcd3bb7cfe60027407e0af2ec83fafbf89758e9c (diff)
downloadrpg-16905344219a6293705b71cd526fad3ba07b04eb.tar.gz
rpg-16905344219a6293705b71cd526fad3ba07b04eb.tar.bz2
first attempt to centralize all include loading
Classes are loaded throug PHP5's class autoloader, all other includes are just loaded by default. This skips a lot of require_once calls. Parser and Plugin stuff isn't handled by the class loader yet.
-rw-r--r--doku.php7
-rw-r--r--inc/FeedParser.php3
-rw-r--r--inc/JSON.php1
-rw-r--r--inc/actions.php2
-rw-r--r--inc/auth.php100
-rw-r--r--inc/cache.php3
-rw-r--r--inc/common.php7
-rw-r--r--inc/events.php1
-rw-r--r--inc/form.php1
-rw-r--r--inc/fulltext.php2
-rw-r--r--inc/html.php2
-rw-r--r--inc/indexer.php3
-rw-r--r--inc/infoutils.php1
-rw-r--r--inc/init.php8
-rw-r--r--inc/io.php4
-rw-r--r--inc/load.php98
-rw-r--r--inc/mail.php2
-rw-r--r--inc/media.php3
-rw-r--r--inc/parserutils.php4
-rw-r--r--inc/pluginutils.php1
-rw-r--r--inc/search.php1
-rw-r--r--inc/subscription.php2
-rw-r--r--inc/toolbar.php2
23 files changed, 156 insertions, 102 deletions
diff --git a/doku.php b/doku.php
index 3963a5aa0..990bb43d3 100644
--- a/doku.php
+++ b/doku.php
@@ -20,13 +20,8 @@ if (isset($_SERVER['HTTP_X_DOKUWIKI_DO'])){
$ACT = 'show';
}
+// load and initialize the core system
require_once(DOKU_INC.'inc/init.php');
-require_once(DOKU_INC.'inc/common.php');
-require_once(DOKU_INC.'inc/events.php');
-require_once(DOKU_INC.'inc/pageutils.php');
-require_once(DOKU_INC.'inc/html.php');
-require_once(DOKU_INC.'inc/auth.php');
-require_once(DOKU_INC.'inc/actions.php');
//import variables
$QUERY = trim($_REQUEST['id']);
diff --git a/inc/FeedParser.php b/inc/FeedParser.php
index f37888f01..9d00e7abf 100644
--- a/inc/FeedParser.php
+++ b/inc/FeedParser.php
@@ -6,9 +6,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/HTTPClient.php');
-require_once(DOKU_INC.'inc/SimplePie.php');
-
/**
* We override some methods of the original SimplePie class here
diff --git a/inc/JSON.php b/inc/JSON.php
index 7ec400092..332827f4c 100644
--- a/inc/JSON.php
+++ b/inc/JSON.php
@@ -59,7 +59,6 @@
// for DokuWiki
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/utf8.php');
/**
* Marker constant for JSON::decode(), used to flag stack state
diff --git a/inc/actions.php b/inc/actions.php
index 1fda0584e..7f9cb26d0 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -7,8 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/template.php');
-
/**
* Call the needed action handlers
diff --git a/inc/auth.php b/inc/auth.php
index c18104487..33626cf80 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -10,8 +10,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/common.php');
-require_once(DOKU_INC.'inc/io.php');
// some ACL level defines
define('AUTH_NONE',0);
@@ -22,15 +20,23 @@ define('AUTH_UPLOAD',8);
define('AUTH_DELETE',16);
define('AUTH_ADMIN',255);
-global $conf;
-
-if($conf['useacl']){
- require_once(DOKU_INC.'inc/blowfish.php');
- require_once(DOKU_INC.'inc/mail.php');
-
+/**
+ * Initialize the auth system.
+ *
+ * This function is automatically called at the end of init.php
+ *
+ * This used to be the main() of the auth.php
+ *
+ * @todo backend loading maybe should be handled by the class autoloader
+ * @todo maybe split into multiple functions at the XXX marked positions
+ */
+function auth_setup(){
+ global $conf;
global $auth;
- // load the the backend auth functions and instantiate the auth object
+ if(!$conf['useacl']) return false;
+
+ // load the the backend auth functions and instantiate the auth object XXX
if (@file_exists(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php')) {
require_once(DOKU_INC.'inc/auth/basic.class.php');
require_once(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php');
@@ -50,51 +56,49 @@ if($conf['useacl']){
} else {
nice_die($lang['authmodfailed']);
}
-}
-// do the login either by cookie or provided credentials
-if($conf['useacl']){
- if($auth){
- if (!isset($_REQUEST['u'])) $_REQUEST['u'] = '';
- if (!isset($_REQUEST['p'])) $_REQUEST['p'] = '';
- if (!isset($_REQUEST['r'])) $_REQUEST['r'] = '';
- $_REQUEST['http_credentials'] = false;
- if (!$conf['rememberme']) $_REQUEST['r'] = false;
-
- // streamline HTTP auth credentials (IIS/rewrite -> mod_php)
- if(isset($_SERVER['HTTP_AUTHORIZATION'])){
- list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) =
- explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
- }
+ if(!$auth) return;
- // if no credentials were given try to use HTTP auth (for SSO)
- if(empty($_REQUEST['u']) && empty($_COOKIE[DOKU_COOKIE]) && !empty($_SERVER['PHP_AUTH_USER'])){
- $_REQUEST['u'] = $_SERVER['PHP_AUTH_USER'];
- $_REQUEST['p'] = $_SERVER['PHP_AUTH_PW'];
- $_REQUEST['http_credentials'] = true;
- }
+ // do the login either by cookie or provided credentials XXX
+ if (!isset($_REQUEST['u'])) $_REQUEST['u'] = '';
+ if (!isset($_REQUEST['p'])) $_REQUEST['p'] = '';
+ if (!isset($_REQUEST['r'])) $_REQUEST['r'] = '';
+ $_REQUEST['http_credentials'] = false;
+ if (!$conf['rememberme']) $_REQUEST['r'] = false;
- // apply cleaning
- $_REQUEST['u'] = $auth->cleanUser($_REQUEST['u']);
+ // streamline HTTP auth credentials (IIS/rewrite -> mod_php)
+ if(isset($_SERVER['HTTP_AUTHORIZATION'])){
+ list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) =
+ explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
+ }
- if(isset($_REQUEST['authtok'])){
- // when an authentication token is given, trust the session
- auth_validateToken($_REQUEST['authtok']);
- }elseif(!is_null($auth) && $auth->canDo('external')){
- // external trust mechanism in place
- $auth->trustExternal($_REQUEST['u'],$_REQUEST['p'],$_REQUEST['r']);
- }else{
- $evdata = array(
- 'user' => $_REQUEST['u'],
- 'password' => $_REQUEST['p'],
- 'sticky' => $_REQUEST['r'],
- 'silent' => $_REQUEST['http_credentials'],
- );
- trigger_event('AUTH_LOGIN_CHECK', $evdata, 'auth_login_wrapper');
- }
+ // if no credentials were given try to use HTTP auth (for SSO)
+ if(empty($_REQUEST['u']) && empty($_COOKIE[DOKU_COOKIE]) && !empty($_SERVER['PHP_AUTH_USER'])){
+ $_REQUEST['u'] = $_SERVER['PHP_AUTH_USER'];
+ $_REQUEST['p'] = $_SERVER['PHP_AUTH_PW'];
+ $_REQUEST['http_credentials'] = true;
+ }
+
+ // apply cleaning
+ $_REQUEST['u'] = $auth->cleanUser($_REQUEST['u']);
+
+ if(isset($_REQUEST['authtok'])){
+ // when an authentication token is given, trust the session
+ auth_validateToken($_REQUEST['authtok']);
+ }elseif(!is_null($auth) && $auth->canDo('external')){
+ // external trust mechanism in place
+ $auth->trustExternal($_REQUEST['u'],$_REQUEST['p'],$_REQUEST['r']);
+ }else{
+ $evdata = array(
+ 'user' => $_REQUEST['u'],
+ 'password' => $_REQUEST['p'],
+ 'sticky' => $_REQUEST['r'],
+ 'silent' => $_REQUEST['http_credentials'],
+ );
+ trigger_event('AUTH_LOGIN_CHECK', $evdata, 'auth_login_wrapper');
}
- //load ACL into a global array
+ //load ACL into a global array XXX
global $AUTH_ACL;
if(is_readable(DOKU_CONF.'acl.auth.php')){
$AUTH_ACL = file(DOKU_CONF.'acl.auth.php');
diff --git a/inc/cache.php b/inc/cache.php
index 2e22edfb1..571b314cd 100644
--- a/inc/cache.php
+++ b/inc/cache.php
@@ -7,9 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/io.php');
-require_once(DOKU_INC.'inc/pageutils.php');
-require_once(DOKU_INC.'inc/parserutils.php');
class cache {
var $key = ''; // primary identifier for this item
diff --git a/inc/common.php b/inc/common.php
index 9cadb56fd..ef35ca863 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -7,13 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/io.php');
-require_once(DOKU_INC.'inc/changelog.php');
-require_once(DOKU_INC.'inc/utf8.php');
-require_once(DOKU_INC.'inc/mail.php');
-require_once(DOKU_INC.'inc/parserutils.php');
-require_once(DOKU_INC.'inc/infoutils.php');
-require_once DOKU_INC.'inc/subscription.php';
/**
* These constants are used with the recents function
diff --git a/inc/events.php b/inc/events.php
index e6b608f20..1c82af003 100644
--- a/inc/events.php
+++ b/inc/events.php
@@ -7,7 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/pluginutils.php');
class Doku_Event {
diff --git a/inc/form.php b/inc/form.php
index 0a6bc2bba..cebaf4608 100644
--- a/inc/form.php
+++ b/inc/form.php
@@ -7,7 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/html.php');
/**
* Class for creating simple HTML forms.
diff --git a/inc/fulltext.php b/inc/fulltext.php
index 94c68d675..58d17422a 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -7,8 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/indexer.php');
-
/**
* The fulltext search
diff --git a/inc/html.php b/inc/html.php
index 8a215f440..5e1d0bab3 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -8,8 +8,6 @@
if(!defined('DOKU_INC')) die('meh.');
if(!defined('NL')) define('NL',"\n");
-require_once(DOKU_INC.'inc/parserutils.php');
-require_once(DOKU_INC.'inc/form.php');
/**
* Convenience function to quickly build a wikilink
diff --git a/inc/indexer.php b/inc/indexer.php
index 39592e8f4..07b67c014 100644
--- a/inc/indexer.php
+++ b/inc/indexer.php
@@ -7,9 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/io.php');
-require_once(DOKU_INC.'inc/utf8.php');
-require_once(DOKU_INC.'inc/parserutils.php');
// set the minimum token length to use in the index (note, this doesn't apply to numeric tokens)
if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2);
diff --git a/inc/infoutils.php b/inc/infoutils.php
index d5356969b..6f2874fe5 100644
--- a/inc/infoutils.php
+++ b/inc/infoutils.php
@@ -7,7 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
if(!defined('DOKU_MESSAGEURL')) define('DOKU_MESSAGEURL','http://update.dokuwiki.org/check/');
-require_once(DOKU_INC.'inc/HTTPClient.php');
/**
* Check for new messages from upstream
diff --git a/inc/init.php b/inc/init.php
index 6fb9559ce..3cff40073 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -37,6 +37,9 @@ if (!defined('DOKU_E_LEVEL')) {
error_reporting(DOKU_E_LEVEL);
}
+// load libraries
+require_once(DOKU_INC.'inc/load.php');
+
// init memory caches
global $cache_revinfo;
$cache_revinfo = array();
@@ -245,6 +248,8 @@ init_files();
scriptify(DOKU_CONF.'users.auth');
scriptify(DOKU_CONF.'acl.auth');
+// setup authentication system
+auth_setup();
/**
* Checks paths from config file
@@ -526,7 +531,6 @@ EOT;
exit;
}
-
/**
* A realpath() replacement
*
@@ -588,5 +592,3 @@ function fullpath($path,$exists=false){
return $finalpath;
}
-
-
diff --git a/inc/io.php b/inc/io.php
index 32a6f7b8e..1d69dabc9 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -7,10 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/common.php');
-require_once(DOKU_INC.'inc/HTTPClient.php');
-require_once(DOKU_INC.'inc/events.php');
-require_once(DOKU_INC.'inc/utf8.php');
/**
* Removes empty directories
diff --git a/inc/load.php b/inc/load.php
new file mode 100644
index 000000000..9d305e3a9
--- /dev/null
+++ b/inc/load.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Load all internal libraries and setup class autoloader
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// setup class autoloader
+spl_autoload_register('load_autoload');
+
+// require all the common libraries
+// for a e few of these order does matter
+require_once(DOKU_INC.'inc/DifferenceEngine.php');
+require_once(DOKU_INC.'inc/EmailAddressValidator.php');
+require_once(DOKU_INC.'inc/SimplePie.php');
+require_once(DOKU_INC.'inc/FeedParser.php');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_INC.'inc/IXR_Library.php');
+require_once(DOKU_INC.'inc/JSON.php');
+require_once(DOKU_INC.'inc/JpegMeta.php');
+require_once(DOKU_INC.'inc/TarLib.class.php');
+require_once(DOKU_INC.'inc/ZipLib.class.php');
+require_once(DOKU_INC.'inc/adLDAP.php');
+require_once(DOKU_INC.'inc/blowfish.php');
+require_once(DOKU_INC.'inc/feedcreator.class.php');
+require_once(DOKU_INC.'inc/geshi.php');
+require_once(DOKU_INC.'inc/actions.php');
+require_once(DOKU_INC.'inc/cache.php');
+require_once(DOKU_INC.'inc/changelog.php');
+require_once(DOKU_INC.'inc/cliopts.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/confutils.php');
+require_once(DOKU_INC.'inc/pluginutils.php');
+require_once(DOKU_INC.'inc/plugin.php');
+require_once(DOKU_INC.'inc/plugincontroller.class.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/form.php');
+require_once(DOKU_INC.'inc/fulltext.php');
+require_once(DOKU_INC.'inc/html.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/indexer.php');
+require_once(DOKU_INC.'inc/infoutils.php');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/load.php');
+require_once(DOKU_INC.'inc/mail.php');
+require_once(DOKU_INC.'inc/media.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/subscription.php');
+require_once(DOKU_INC.'inc/template.php');
+require_once(DOKU_INC.'inc/toolbar.php');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/auth.php');
+
+/**
+ * spl_autoload_register callback
+ *
+ * Contains a static list of DokuWiki's core classes and automatically
+ * requires their associated php files when an object is instantiated.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo add generic loading of plugins here
+ */
+function load_autoload($name){
+ static $classes = null;
+ if(is_null($classes)) $classes = array(
+ 'DokuHTTPClient' => DOKU_INC.'inc/HTTPClient.php',
+ 'DokuEvent' => DOKU_INC.'inc/',
+ 'JSON' => DOKU_INC.'inc/JSON.php',
+ 'adLDAP' => DOKU_INC.'inc/adLDAP.php',
+ 'Diff' => DOKU_INC.'inc/DifferenceEngine.php',
+ 'UnifiedDiffFormatter' => DOKU_INC.'inc/DifferenceEngine.php',
+ 'TableDiffFormatter' => DOKU_INC.'inc/DifferenceEngine.php',
+ 'cache' => DOKU_INC.'inc/cache.php',
+ 'cache_parser' => DOKU_INC.'inc/cache.php',
+ 'cache_instructions' => DOKU_INC.'inc/cache.php',
+ 'cache_renderer' => DOKU_INC.'inc/cache.php',
+ 'Doku_Event' => DOKU_INC.'inc/events.php',
+ 'Doku_Event_Handler' => DOKU_INC.'inc/events.php',
+ 'Doku_Form' => DOKU_INC.'inc/form.php',
+ 'EmailAddressValidator' => DOKU_INC.'inc/EmailAddressValidator.php',
+ 'JpegMeta' => DOKU_INC.'inc/JpegMeta.php',
+ 'FeedParser' => DOKU_INC.'inc/FeedParser.php',
+ 'utf8_entity_decoder' => DOKU_INC.'inc/utf8.php',
+ 'IXR_Server' => DOKU_INC.'inc/IXR_Library.php',
+ 'IXR_Client' => DOKU_INC.'inc/IXR_Library.php',
+ 'Doku_Plugin_Controller'=> DOKU_INC.'inc/plugincontroller.class.php',
+ 'GeSHi' => DOKU_INC.'inc/geshi.php',
+ );
+
+ if(isset($classes[$name])){
+ require_once($classes[$name]);
+ return;
+ }
+}
+
diff --git a/inc/mail.php b/inc/mail.php
index 3b0592b8b..6d1652fc0 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -7,8 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/utf8.php');
-require_once(DOKU_INC.'inc/EmailAddressValidator.php');
// end of line for mail lines - RFC822 says CRLF but postfix (and other MTAs?)
// think different
diff --git a/inc/media.php b/inc/media.php
index 3850f4e33..444e6d432 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -8,9 +8,6 @@
if(!defined('DOKU_INC')) die('meh.');
if(!defined('NL')) define('NL',"\n");
-require_once(DOKU_INC.'inc/html.php');
-require_once(DOKU_INC.'inc/search.php');
-require_once(DOKU_INC.'inc/JpegMeta.php');
/**
* Lists pages which currently use a media file selected for deletion
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 471d46903..34d9e5282 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -8,10 +8,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/confutils.php');
-require_once(DOKU_INC.'inc/pageutils.php');
-require_once(DOKU_INC.'inc/pluginutils.php');
-require_once(DOKU_INC.'inc/cache.php');
/**
* Returns the parsed Wikitext in XHTML for the given id and revision.
diff --git a/inc/pluginutils.php b/inc/pluginutils.php
index 8294d1ec8..a8656a96a 100644
--- a/inc/pluginutils.php
+++ b/inc/pluginutils.php
@@ -8,7 +8,6 @@
// plugin related constants
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
-require_once(DOKU_INC.'inc/plugincontroller.class.php');
$plugin_types = array('admin','syntax','action','renderer', 'helper');
diff --git a/inc/search.php b/inc/search.php
index 2b9a51fb3..ce4fefe06 100644
--- a/inc/search.php
+++ b/inc/search.php
@@ -7,7 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/common.php');
/**
* recurse direcory
diff --git a/inc/subscription.php b/inc/subscription.php
index f7614014f..e98129b77 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -14,8 +14,6 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*/
-require_once DOKU_INC.'/inc/pageutils.php';
-
/**
* Get the name of the metafile tracking subscriptions to target page or
* namespace
diff --git a/inc/toolbar.php b/inc/toolbar.php
index 9140970d1..5d1149df3 100644
--- a/inc/toolbar.php
+++ b/inc/toolbar.php
@@ -7,8 +7,6 @@
*/
if(!defined('DOKU_INC')) die('meh.');
-require_once(DOKU_INC.'inc/JSON.php');
-
/**
* Prepares and prints an JavaScript array with all toolbar buttons