aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/elgglib.php41
-rw-r--r--engine/lib/plugins.php17
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;
+ }
}
}
}