X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fadmin%2Fmenus.php;h=1fbb24f687d49319ce289467b66413c1be806683;hb=51dda5825f66ced0a744d9e49159cedbe0fd5771;hp=269c4c790b2fb46122dd2b582e0c16f5d170e388;hpb=d67ed5a62c8c59e3a6e21248b214150af80789fd;p=diogenes.git diff --git a/include/admin/menus.php b/include/admin/menus.php index 269c4c7..1fbb24f 100644 --- a/include/admin/menus.php +++ b/include/admin/menus.php @@ -1,37 +1,16 @@ barrel; +$bmenu = new Diogenes_Barrel_Menu($globals->db, $bbarrel->table_menu); // the id of the parent menu $MIDpere = isset($_REQUEST['MIDpere']) ? $_REQUEST['MIDpere'] : 0; -/** - * This function swaps entries $a and $b within $parent. - */ -function swapentries($parent,$a,$b,$table_menu) -{ - global $globals; - $res = $globals->db->query("SELECT MID from $table_menu where MIDpere=$parent and (ordre=$a or ordre=$b) ORDER BY ordre"); - /* make sure that $a <= $b */ - if ($a > $b) - { - $c = $a; - $a = $b; - $b = $c; - } - /* perform swap */ - list($MIDa) = mysql_fetch_row($res); - list($MIDb) = mysql_fetch_row($res); - mysql_free_result($res); - - $globals->db->query("UPDATE $table_menu SET ordre=$b WHERE MID=$MIDa"); - $globals->db->query("UPDATE $table_menu SET ordre=$a WHERE MID=$MIDb"); -} - - //// start constructing the page $page->assign('greeting',__("The site's menus")); @@ -41,64 +20,39 @@ switch ($action) { /* we want to erase the current entry */ case "supprimer": $MID = $_REQUEST['MID']; - if (mysql_num_rows($globals->db->query("SELECT MID FROM {$bbarrel->table_menu} WHERE MIDpere=$MID")) > 0) { - $page->info(__("The selected menu has child items, please remove them first.")); - break; - } - - /* erase the current entry */ - $globals->db->query("DELETE FROM {$bbarrel->table_menu} WHERE MID=$MID"); - - /* renumber the other menu entries so that they are between 1 and the number of entries */ - $res = $globals->db->query("SELECT MID FROM {$bbarrel->table_menu} WHERE MIDpere=$MIDpere ORDER BY ordre"); - $i = 0; - while (list($MIDtoorder) = mysql_fetch_array($res)) { - $i++; - $globals->db->query("UPDATE {$bbarrel->table_menu} SET ordre=$i WHERE MID=$MIDtoorder"); - } - mysql_free_result($res); + $bmenu->deleteEntry($MID, $MIDpere, $page); break; /* bring an entry up in the menu */ case "remonter": $ordre = $_REQUEST['ordre']; - swapentries($MIDpere,$ordre-1,$ordre,$bbarrel->table_menu); + $bmenu->swapEntries($MIDpere, $ordre-1, $ordre); break; /* push an entry down in the menu */ case "descendre": $ordre = $_REQUEST['ordre']; - swapentries($MIDpere,$ordre,$ordre+1,$bbarrel->table_menu); + $bmenu->swapEntries($MIDpere, $ordre, $ordre+1); break; /* 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) { - $res=$globals->db->query("SELECT MAX(ordre) from {$bbarrel->table_menu} where MIDpere=$MIDpere"); - list($ordre) = mysql_fetch_row($res); - $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 */ @@ -111,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 @@ -168,16 +123,17 @@ case "editer": } // get the maximum order -$res=$globals->db->query("SELECT MAX(ordre) from {$bbarrel->table_menu} where MIDpere=$MIDpere"); -list($maxOrdre)=mysql_fetch_row($res); -mysql_free_result($res); - -// 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)) { +$maxOrdre = $bmenu->maxChildIndex($MIDpere); + +// 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"; @@ -192,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 { @@ -205,20 +162,15 @@ 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 = $page->menuRead(); -$filiation = $page->menuToRoot($mcache,$MIDpere,array()); +$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)); }