merge selected changes from 'branches/diogenes-newplugins':
[diogenes.git] / include / diogenes.barrel.inc.php
index 3893284..65ad7ff 100644 (file)
@@ -21,6 +21,7 @@
 
 require_once 'diogenes.page.inc.php';
 require_once 'Barrel.php';
+require_once 'Barrel/Menu.php';
 
 /** This class is used to display a page of a Diogenes barrel,
  *  that is an RCS-managed website with a virtual directory
@@ -312,6 +313,9 @@ class DiogenesBarrel extends DiogenesPage
     // favicon
     if ($bbarrel->options->favicon)
       array_push($this->head, '<link rel="icon" href="'.$this->urlSite("", $bbarrel->options->favicon).'" type="image/png" />');
+
+    // RSS feed
+    array_push($this->head, '<link rel="alternate" type="application/rss+xml" title="'.stripslashes($bbarrel->options->title).'" href="'.$this->urlSite("admin", "rss").'" />');
   }
 
 
@@ -352,74 +356,9 @@ class DiogenesBarrel extends DiogenesPage
     if (!isset($this->table_menu))
       return;
    
-    // all menu entries from database
-    $mcache = $this->menuRead();
-
-    // try to figure out the current MID from the current PID
-    // and build filiation
-    $filiation = array();
-    foreach ($mcache as $mid => $mentry)
-    {
-      if ($mentry['pid'] == $PID)
-        $filiation = $this->menuToRoot($mcache, $mid, $filiation);
-    }
-
     // add the user-defined part of the menu
-    $this->menu = array_merge($this->menu,$this->menuRecurse($mcache,0,$filiation,0));
-  }
-
-
-  /** Return the filiation to get to the root element.
-   *
-   * @param mcache
-   * @param MID
-   * @param path
-   */
-  function menuToRoot($mcache, $MID, $path) {
-    /* add ourself to the path */
-    array_push($path,$MID);
-
-    if ($MID) {
-      /* recursion */
-      return $this->menuToRoot($mcache, $mcache[$MID]['parent'], $path);
-    } else {
-      /* termination */
-      return $path;
-    }
-  }
-
-
-  /** Recursively add menu entries
-   *
-   * @param mcache
-   * @param MIDpere
-   * @param filiation
-   * @param level
-   */
-  function menuRecurse($mcache, $MIDpere, $filiation, $level) {
-    // the produced output
-    $out = array();
-
-    foreach ($mcache[$MIDpere]['children'] as $mid)
-    {
-      $mentry = $mcache[$mid];
-//      echo "pid : $pid, location : $location<br/>";
-      $entry = htmlentities(stripslashes($mentry['title']), ENT_QUOTES);
-      if ($mentry['pid'])
-      {
-        $link = $this->urlSite($this->barrel->getLocation($mentry['pid']));
-      } else {
-        $link = $mentry['link'];
-      }
-      // decide whether this menu should be expanded
-      $expanded = ($this->barrel->options->menu_min_level == 0) || 
-                  ($level+1 < $this->barrel->options->menu_min_level) || 
-                   in_array($mid, $filiation);
-      array_push($out, array($level, $entry, $link, $expanded));
-      $out = array_merge($out, $this->menuRecurse($mcache, $mid, $filiation, $level+1));
-    }
-
-    return $out;
+    $bmenu = new Diogenes_Barrel_Menu($this->dbh, $this->table_menu);
+    $this->menu = array_merge($this->menu, $bmenu->makeMenu($PID, $this->barrel->options->menu_min_level, array($this, 'urlSiteByPid')));
   }
 
 
@@ -496,7 +435,7 @@ class DiogenesBarrel extends DiogenesPage
     }
     return $path;
   }
+
 
   /** Returns the URL to one of the barrel's pages relative to
    *  the current location.
@@ -511,6 +450,18 @@ class DiogenesBarrel extends DiogenesPage
     return strlen($url) ? $url : "./";
   }
 
+
+  /** Returns the URL to one of the barrel's pages relative to
+   *  the current location.
+   *
+   * @param dir
+   * @param file
+   */
+  function urlSiteByPid($PID, $file = '')
+  {
+    return $this->urlSite($this->barrel->getLocation($PID), $file);
+  }
+
 }
 
 ?>