]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
fixes #1339 - elgg_view_exists now handles view extensions for non-default viewtypes...
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 11 Nov 2009 13:17:34 +0000 (13:17 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 11 Nov 2009 13:17:34 +0000 (13:17 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@3666 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/elgglib.php

index 88d42ad662ab02063a60e57404ff6c8ff3cd08e0..cf8b7a31fca5742443dc664ffea5347f0b4f421d 100644 (file)
@@ -294,14 +294,15 @@ function elgg_view($view, $vars = "", $bypass = false, $debug = false, $viewtype
  *
  * @param string $view The view name
  * @param string $viewtype If set, forces the viewtype
+ * @param bool $recurse If false, do not recursively check extensions
  * @return true|false Depending on success
  */
-function elgg_view_exists($view, $viewtype = '') {
+function elgg_view_exists($view, $viewtype = '', $recurse = true) {
        global $CONFIG;
 
        // Detect view type
        if (empty($viewtype)) {
-                       $viewtype = elgg_get_viewtype();
+               $viewtype = elgg_get_viewtype();
        }
 
        if (!isset($CONFIG->views->locations[$viewtype][$view])) {
@@ -319,9 +320,14 @@ function elgg_view_exists($view, $viewtype = '') {
        }
 
        // If we got here then check whether this exists as an extension
-       // Note that this currently does not recursively check whether the extended view exists also
-       if (isset($CONFIG->views->extensions[$view])) {
-               return true;
+       // We optionally recursively check whether the extended view exists also for the viewtype
+       if ($recurse && isset($CONFIG->views->extensions[$view])) {
+               foreach( $CONFIG->views->extensions[$view] as $view_extension ) {
+                       // do not recursively check to stay away from infinite loops
+                       if (elgg_view_exists($view_extension, $viewtype, false)) {
+                               return true;
+                       }
+               }
        }
 
        return false;