diff options
-rw-r--r-- | engine/lib/elgglib.php | 41 | ||||
-rw-r--r-- | engine/lib/plugins.php | 17 |
2 files changed, 51 insertions, 7 deletions
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 110cafcab..9d0bae0b6 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -1473,6 +1473,8 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) if ($handle = opendir($folder)) { while ($view = readdir($handle)) { if (!in_array($view,array('.','..','.svn','CVS')) && !is_dir($folder . "/" . $view)) { + // this includes png files because some icons are stored within view directories. + // See commit [1705] if ((substr_count($view,".php") > 0) || (substr_count($view,".png") > 0)) { if (!empty($view_base)) { $view_base_new = $view_base . "/"; @@ -1480,9 +1482,9 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) $view_base_new = ""; } - set_view_location($view_base_new . str_replace(".php","",$view), $base_location_path, $viewtype); + set_view_location($view_base_new . str_replace('.php', '', $view), $base_location_path, $viewtype); } - } else if (!in_array($view,array('.','..','.svn','CVS')) && is_dir($folder . "/" . $view)) { + } else if (!in_array($view, array('.', '..', '.svn', 'CVS')) && is_dir($folder . "/" . $view)) { if (!empty($view_base)) { $view_base_new = $view_base . "/"; } else { @@ -1491,7 +1493,10 @@ function autoregister_views($view_base, $folder, $base_location_path, $viewtype) autoregister_views($view_base_new . $view, $folder . "/" . $view, $base_location_path, $viewtype); } } + return TRUE; } + + return FALSE; } /** @@ -3151,11 +3156,26 @@ function __elgg_shutdown_hook() { * @return unknown_type */ function elgg_init() { + global $CONFIG; + // Page handler for JS register_page_handler('js','js_page_handler'); // Register an event triggered at system shutdown register_shutdown_function('__elgg_shutdown_hook'); + + // discover the built-in view types + // @todo cache this + $view_path = $CONFIG->viewpath; + $CONFIG->view_types = array(); + + $views = scandir($view_path); + + foreach ($views as $view) { + if ('.' !== substr($view, 0, 1) && is_dir($view_path . $view)) { + $CONFIG->view_types[] = $view; + } + } } function elgg_walled_garden_index() { @@ -3342,6 +3362,11 @@ function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset return TRUE; } +/** + * Checks walled garden status upon Elgg init. + * + * @since 1.8 + */ function elgg_walled_garden() { global $CONFIG; @@ -3352,6 +3377,18 @@ function elgg_walled_garden() { } /** + * Checks if $view_type is valid on this installation. + * + * @param string $view_type + * @return bool + */ +function elgg_is_valid_view_type($view_type) { + global $CONFIG; + + return in_array($view_type, $CONFIG->view_types); +} + +/** * Some useful constant definitions */ define('ACCESS_DEFAULT', -1); diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php index b365585c8..b8cf5c2d2 100644 --- a/engine/lib/plugins.php +++ b/engine/lib/plugins.php @@ -239,11 +239,18 @@ function load_plugins() { } if (!$cached_view_paths) { - if (is_dir($CONFIG->pluginspath . $mod . "/views")) { - if ($handle = opendir($CONFIG->pluginspath . $mod . "/views")) { - while ($viewtype = readdir($handle)) { - if (!in_array($viewtype,array('.','..','.svn','CVS')) && is_dir($CONFIG->pluginspath . $mod . "/views/" . $viewtype)) { - autoregister_views("",$CONFIG->pluginspath . $mod . "/views/" . $viewtype,$CONFIG->pluginspath . $mod . "/views/", $viewtype); + $view_dir = $CONFIG->pluginspath . $mod . '/views/'; + + if (is_dir($view_dir) && ($handle = opendir($view_dir))) { + while (FALSE !== ($view_type = readdir($handle))) { + $view_type_dir = $view_dir . $view_type; + + if ('.' !== substr($view_type, 0, 1) && is_dir($view_type_dir)) { + if (autoregister_views('', $view_type_dir, $view_dir, $view_type)) { + // add the valid view type. + if (!in_array($view_type, $CONFIG->view_types)) { + $CONFIG->view_types[] = $view_type; + } } } } |