aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-10-14 07:52:31 +0000
committerewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-10-14 07:52:31 +0000
commit30df49bbb363d47b4a3961bb3ec07cdecea7619b (patch)
tree58905f6343a32ed9bf35baa8298f9851e30259e3
parentcd33e6a791409bf0898d6d1db5938b09415289fb (diff)
downloadelgg-30df49bbb363d47b4a3961bb3ec07cdecea7619b.tar.gz
elgg-30df49bbb363d47b4a3961bb3ec07cdecea7619b.tar.bz2
Fixes #2547: Plugins can now participate in autoloading classes.
git-svn-id: http://code.elgg.org/elgg/trunk@7074 36083f99-b078-4883-b0ff-0f9b5a30f544
-rw-r--r--engine/lib/elgglib.php28
-rw-r--r--engine/lib/plugins.php4
-rw-r--r--engine/start.php5
-rw-r--r--mod/blog/blog_lib.php39
4 files changed, 33 insertions, 43 deletions
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 4376ca53f..5b224e0be 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -2200,8 +2200,30 @@ function js_page_handler($page) {
}
}
-function __autoload($class) {
- require_once dirname(dirname(__FILE__))."/classes/$class.php";
+function __elgg_autoload($class) {
+ global $CONFIG;
+
+ if (!include($CONFIG->classes[$class])) {
+ throw new Exception("Failed to autoload $class");
+ }
+}
+
+function elgg_register_classes($dir) {
+ $classes = elgg_get_file_list($dir, array(), array(), array('.php'));
+
+ foreach ($classes as $class) {
+ elgg_register_class(basename($class, '.php'), $class);
+ }
+}
+
+function elgg_register_class($class, $location) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->classes)) {
+ $CONFIG->classes = array();
+ }
+
+ $CONFIG->classes[$class] = $location;
}
/**
@@ -2233,7 +2255,7 @@ function __elgg_shutdown_hook() {
*/
function elgg_init() {
global $CONFIG;
-
+
register_action('comments/add');
register_action('comments/delete');
register_action('likes/add');
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index a36f2bf6d..52f498bf7 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -191,6 +191,10 @@ function load_plugins() {
if (is_dir($CONFIG->pluginspath . $mod . "/languages")) {
register_translations($CONFIG->pluginspath . $mod . "/languages/");
}
+
+ if (is_dir($CONFIG->pluginspath . "$mod/classes")) {
+ elgg_register_classes($CONFIG->pluginspath . "$mod/classes");
+ }
}
}
}
diff --git a/engine/start.php b/engine/start.php
index a84a19e0d..0bf652cb6 100644
--- a/engine/start.php
+++ b/engine/start.php
@@ -77,7 +77,6 @@ foreach ($required_files as $file) {
set_error_handler('__elgg_php_error_handler');
set_exception_handler('__elgg_php_exception_handler');
-
/**
* Load the system settings
*/
@@ -113,6 +112,10 @@ foreach($lib_files as $file) {
}
}
+// prep core classes to be autoloadable
+spl_autoload_register('__elgg_autoload');
+elgg_register_classes(dirname(__FILE__).'/classes');
+
// confirm that the installation completed successfully
verify_installation();
diff --git a/mod/blog/blog_lib.php b/mod/blog/blog_lib.php
index 3152cccad..1895930aa 100644
--- a/mod/blog/blog_lib.php
+++ b/mod/blog/blog_lib.php
@@ -278,42 +278,3 @@ function blog_get_blog_months($user_guid = NULL, $container_guid = NULL) {
return get_data($q);
}
-
-/**
- * Extended class to override the time_created
- */
-class ElggBlog extends ElggObject {
- protected function initialise_attributes() {
- parent::initialise_attributes();
-
- // override the default file subtype.
- $this->attributes['subtype'] = 'blog';
- }
-
- /**
- * @todo this won't work until we have date l10n working.
- * Rewrite the time created to be publish time.
- * This is a bit dirty, but required for proper sorting.
- */
-// public function save() {
-// if (parent::save()) {
-// global $CONFIG;
-//
-// // try to grab the publish date, but default to now.
-// foreach (array('publish_date', 'time_created') as $field) {
-// if (isset($this->$field) && $this->field) {
-// $published = $this->field;
-// break;
-// }
-// }
-// if (!$published) {
-// $published = time();
-// }
-//
-// $sql = "UPDATE {$CONFIG->dbprefix}entities SET time_created = '$published', time_updated = '$published' WHERE guid = '{$this->getGUID()}'";
-// return update_data($sql);
-// }
-//
-// return FALSE;
-// }
-} \ No newline at end of file