From a49698b0f775c195131eac1f8e887af41e42d872 Mon Sep 17 00:00:00 2001 From: Domas Mituzas Date: Mon, 18 Apr 2005 17:21:27 +0000 Subject: [PATCH] Add external repositories support for Revision, would follow url if flag on text set, allows pluggable storage modules and migration from databases to somewhere else (huh, other databases ;-) --- includes/DefaultSettings.php | 12 ++++++++++ includes/ExternalStore.php | 44 ++++++++++++++++++++++++++++++++++ includes/ExternalStoreHttp.php | 23 ++++++++++++++++++ includes/Revision.php | 14 ++++++++++- 4 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 includes/ExternalStore.php create mode 100644 includes/ExternalStoreHttp.php diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index e4a7067f48..549f2aaeb5 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1278,6 +1278,18 @@ $wgEnableSorbs = true; */ $wgCountCategorizedImagesAsUsed = false; +/** + * External stores allow including content + * from non database sources following URL links + * + * Short names of ExternalStore classes may be specified in an array here: + * $wgExternalStores = array("http","file","custom")... + * + * CAUTION: Access to database might lead to code execution + */ +$wgExternalStores = false; + + } else { die(); } diff --git a/includes/ExternalStore.php b/includes/ExternalStore.php new file mode 100644 index 0000000000..78e1b84d6e --- /dev/null +++ b/includes/ExternalStore.php @@ -0,0 +1,44 @@ +fetchFromURL($url); + } + + /* XXX: may require other methods, for store, delete, + * whatever, for initial ext storage + */ +} +?> diff --git a/includes/ExternalStoreHttp.php b/includes/ExternalStoreHttp.php new file mode 100644 index 0000000000..d7c1cc818d --- /dev/null +++ b/includes/ExternalStoreHttp.php @@ -0,0 +1,23 @@ + diff --git a/includes/Revision.php b/includes/Revision.php index d6418e3508..67eb4be6fc 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -378,6 +378,18 @@ class Revision { return false; } + # Use external methods for external objects, text in table is URL-only then + if ( in_array( 'external', $flags ) ) { + $url=$text; + @list($proto,$path)=explode('://',$url,2); + if ($path=="") { + wfProfileOut( $fname ); + return false; + } + require_once('ExternalStore.php'); + $text=ExternalStore::fetchFromURL($url); + } + if( in_array( 'gzip', $flags ) ) { # Deal with optional compression of archived pages. # This can be done periodically via maintenance/compressOld.php, and @@ -555,4 +567,4 @@ class Revision { } } -?> \ No newline at end of file +?> -- 2.20.1