From 11c40a518c76e4b7d248ae9d356fa2bd327cf0ec Mon Sep 17 00:00:00 2001 From: Jeremy Laine Date: Mon, 5 Jun 2006 13:19:22 +0000 Subject: [PATCH] move more functionalty to Diogenes_Barrel_Menu --- include/Barrel/Menu.php | 70 ++++++++++++++++++++++++++++++++++++++----------- include/admin/menus.php | 63 +++++++++++++++++++------------------------- 2 files changed, 82 insertions(+), 51 deletions(-) diff --git a/include/Barrel/Menu.php b/include/Barrel/Menu.php index 000b036..34d70e0 100644 --- a/include/Barrel/Menu.php +++ b/include/Barrel/Menu.php @@ -42,9 +42,10 @@ class Diogenes_Barrel_Menu /** 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.")); @@ -55,7 +56,7 @@ class Diogenes_Barrel_Menu $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++; @@ -65,17 +66,6 @@ class Diogenes_Barrel_Menu } - /** 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 @@ -101,6 +91,19 @@ class Diogenes_Barrel_Menu } + /** 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 @@ -162,14 +165,15 @@ class Diogenes_Barrel_Menu 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(); @@ -209,6 +213,42 @@ class Diogenes_Barrel_Menu $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; + } + } ?> diff --git a/include/admin/menus.php b/include/admin/menus.php index 5fd313b..1875326 100644 --- a/include/admin/menus.php +++ b/include/admin/menus.php @@ -2,6 +2,7 @@ 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; @@ -19,7 +20,7 @@ switch ($action) { /* 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 */ @@ -37,30 +38,21 @@ case "descendre": /* 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 */ @@ -73,9 +65,10 @@ case "editer": // 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 @@ -132,12 +125,15 @@ case "editer": // 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"; @@ -152,7 +148,8 @@ while (list($MID,$ordre,$title,$link,$PID,$ptitle) = mysql_fetch_row($res)) { // describe the current link if ($PID) { - $descr = "$ptitle"; + $tpage = Diogenes_Barrel_Page::fromDb($bbarrel, $PID); + $descr = "".$tpage->props['title'].""; } elseif ($link) { $descr = "[ext] $link"; } else { @@ -165,20 +162,14 @@ while (list($MID,$ordre,$title,$link,$PID,$ptitle) = mysql_fetch_row($res)) { 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 = "home"; } 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)); } -- 2.1.4