/** Delete the specified entry.
*
* @param $MID
+ * @param $parent
* @param $caller
*/
- function deleteEntry($MID, &$caller)
+ function deleteEntry($MID, $parent, &$caller)
{
if (mysql_num_rows($this->dbh->query("SELECT MID FROM {$this->table_menu} WHERE MIDpere=$MID")) > 0) {
$caller->info(__("The selected menu has child items, please remove them first."));
$this->dbh->query("DELETE FROM {$this->table_menu} WHERE MID=$MID");
/* renumber the other menu entries so that they are between 1 and the number of entries */
- $res = $this->dbh->query("SELECT MID FROM {$this->table_menu} WHERE MIDpere=$MIDpere ORDER BY ordre");
+ $res = $this->dbh->query("SELECT MID FROM {$this->table_menu} WHERE MIDpere=$parent ORDER BY ordre");
$i = 0;
while (list($MIDtoorder) = mysql_fetch_array($res)) {
$i++;
}
- /** Get the maximum child index for a given menu entry.
- */
- function maxChildIndex($MIDpere)
- {
- $res=$this->dbh->query("SELECT MAX(ordre) from {$this->table_menu} where MIDpere=$MIDpere");
- list($maxOrdre)=mysql_fetch_row($res);
- mysql_free_result($res);
- return $maxOrdre;
- }
-
-
/** Build the user-defined part of the menu.
*
* @param $PID
}
+ /** Return the maximum index for children of a given entry.
+ *
+ * @param $parent
+ */
+ function maxChildIndex($parent)
+ {
+ $res=$this->dbh->query("SELECT MAX(ordre) from {$this->table_menu} where MIDpere=$parent");
+ list($maxOrdre)=mysql_fetch_row($res);
+ mysql_free_result($res);
+ return $maxOrdre;
+ }
+
+
/** Return the filiation to get to the root element.
*
* @param mcache
function menuRead()
{
$menu = array();
- $res = $this->dbh->query("select MID,MIDpere,title,link,PID from {$this->table_menu} order by ordre");
- while (list($mid, $parent, $title, $link, $pid) = mysql_fetch_row($res))
+ $res = $this->dbh->query("select MID,MIDpere,title,link,PID,ordre from {$this->table_menu} order by ordre");
+ while (list($mid, $parent, $title, $link, $pid, $ordre) = mysql_fetch_row($res))
{
$menu[$mid]['parent'] = $parent;
$menu[$mid]['title'] = $title;
$menu[$mid]['link'] = $link;
$menu[$mid]['title'] = $title;
$menu[$mid]['pid'] = $pid;
+ $menu[$mid]['ordre'] = $ordre;
if (!is_array($menu[$mid]['children']))
$menu[$mid]['children'] = array();
$this->dbh->query("UPDATE {$this->table_menu} SET ordre=$a WHERE MID=$MIDb");
}
+
+ /**
+ * Write an entry to database. If $mid is 0, a new entry is created.
+ *
+ * @param $mid
+ * @param $props
+ */
+ function writeEntry($mid, $props)
+ {
+ if ($mid == 0) {
+ $props['ordre'] = $this->maxChildIndex($props['parent']) + 1;
+ }
+
+ // build SQL string
+ $nprops = array('parent' => 'MIDpere', 'ordre' => 'ordre', 'title' => 'title', 'link' => 'link', 'pid' => 'pid');
+ $sprops = "";
+ foreach($nprops as $prop => $dbkey)
+ {
+ if (isset($props[$prop]))
+ {
+ $val = $props[$prop];
+ $sprops .= "$dbkey='$val', ";
+ }
+ }
+ if (!$sprops)
+ return;
+ $sprops = substr($sprops, 0, -2);
+ if ($mid == 0) {
+ $this->dbh->query("INSERT INTO {$this->table_menu} SET $sprops");
+ $mid = mysql_insert_id();
+ } else {
+ $this->dbh->query("UPDATE {$this->table_menu} SET $sprops WHERE MID=$mid");
+ }
+ return $mid;
+ }
+
}
?>
require_once 'diogenes.common.inc.php';
require_once 'diogenes.admin.inc.php';
require_once 'Barrel/Menu.php';
+require_once 'Barrel/Page.php';
$page = new DiogenesAdmin;
$bbarrel =& $page->barrel;
/* we want to erase the current entry */
case "supprimer":
$MID = $_REQUEST['MID'];
- $bmenu->deleteEntry($MID, $page);
+ $bmenu->deleteEntry($MID, $MIDpere, $page);
break;
/* bring an entry up in the menu */
/* create or update a menu entry */
case "modifier":
$typelink = $_REQUEST['typelink'];
+ $props = array(
+ 'parent' => $MIDpere,
+ 'pid' => 0,
+ 'link' => '',
+ 'title' => $_REQUEST['title'],
+ );
switch ($typelink) {
case "boutonPI" :
- $pid = isset($_REQUEST['PIvaleur']) ? $_REQUEST['PIvaleur'] : 0;
- $link = "";
+ $props['pid'] = isset($_REQUEST['PIvaleur']) ? $_REQUEST['PIvaleur'] : 0;
break;
case "boutonSE" :
- $pid = 0;
- $link = $_REQUEST['SEvaleur'];
+ $props['link'] = $_REQUEST['SEvaleur'];
break;
- default:
- $pid = 0;
- $link = "";
}
- $MID = $_REQUEST['MID'];
- $title = $_REQUEST['title'];
- if ($MID == 0) {
- $ordre = $bmenu->maxChildIndex($MIDpere);
- $ordre++;
- $globals->db->query("INSERT INTO {$bbarrel->table_menu} SET MIDpere='$MIDpere',ordre='$ordre',title='$title',link='$link',pid='$pid'");
- $MID = mysql_insert_id();
- } else {
- $globals->db->query("UPDATE {$bbarrel->table_menu} SET title='$title',link='$link',pid='$pid' WHERE MID=$MID");
- }
-
+ $MID = $bmenu->writeEntry($_REQUEST['MID'], $props);
break;
/* display the form to edit an entry */
// if this is an existing entry, retrieve data
if ($MID) {
- $res = $globals->db->query("SELECT link,title,pid FROM {$bbarrel->table_menu} WHERE MID=$MID");
- list($link, $title, $pid) = mysql_fetch_row($res);
- mysql_free_result($res);
+ $mcache = $bmenu->menuRead();
+ $link = $mcache[$MID]['link'];
+ $title = $mcache[$MID]['title'];
+ $pid = $mcache[$MID]['pid'];
}
// fill out form data
// get the maximum order
$maxOrdre = $bmenu->maxChildIndex($MIDpere);
-// retrieve the entries
-$res = $globals->db->query("SELECT m.MID,m.ordre,m.title,m.link,m.PID,p.title ".
- "from {$bbarrel->table_menu} as m ".
- "left join {$bbarrel->table_page} as p on m.PID=p.PID ".
- "where MIDpere=$MIDpere order by ordre");
-while (list($MID,$ordre,$title,$link,$PID,$ptitle) = mysql_fetch_row($res)) {
+// all menu entries from database
+$mcache = $bmenu->menuRead();
+
+foreach($mcache[$MIDpere]['children'] as $MID)
+{
+ $ordre = $mcache[$MID]['ordre'];
+ $title = $mcache[$MID]['title'];
+ $link = $mcache[$MID]['link'];
+ $PID = $mcache[$MID]['pid'];
$clickup="?action=remonter&MIDpere=$MIDpere&ordre=$ordre";
$clickdown="?action=descendre&MIDpere=$MIDpere&ordre=$ordre";
// describe the current link
if ($PID) {
- $descr = "<a href=\"pages?dir=$PID\">$ptitle</a>";
+ $tpage = Diogenes_Barrel_Page::fromDb($bbarrel, $PID);
+ $descr = "<a href=\"pages?dir=$PID\">".$tpage->props['title']."</a>";
} elseif ($link) {
$descr = "<a href=\"$link\">[ext] $link</a>";
} else {
stripslashes($descr),
$edit,$del,$up,$down));
}
-mysql_free_result($res);
-// all menu entries from database
-$mcache = $bmenu->menuRead();
$filiation = $bmenu->menuToRoot($mcache,$MIDpere,array());
$menubar = array();
foreach($filiation as $mykey=>$myval) {
if ($myval == 0) {
$blab = "<i>home</i>";
} else {
- $res = $globals->db->query("SELECT title FROM {$bbarrel->table_menu} WHERE MID='$myval'");
- list($blab) = mysql_fetch_row($res);
- $blab = stripslashes($blab);
- mysql_free_result($res);
+ $blab = stripslashes($mcache[$myval]['title']);
}
array_unshift($menubar,$mykey ? array($blab,"?MIDpere=$myval") : array($blab));
}