| 1 | <?php |
| 2 | require_once 'diogenes.common.inc.php'; |
| 3 | require_once 'diogenes.admin.inc.php'; |
| 4 | |
| 5 | $page = new DiogenesAdmin; |
| 6 | $bbarrel =& $page->barrel; |
| 7 | |
| 8 | // the id of the parent menu |
| 9 | $MIDpere = isset($_REQUEST['MIDpere']) ? $_REQUEST['MIDpere'] : 0; |
| 10 | |
| 11 | /** |
| 12 | * This function swaps entries $a and $b within $parent. |
| 13 | */ |
| 14 | function swapentries($parent,$a,$b,$table_menu) |
| 15 | { |
| 16 | global $globals; |
| 17 | $res = $globals->db->query("SELECT MID from $table_menu where MIDpere=$parent and (ordre=$a or ordre=$b) ORDER BY ordre"); |
| 18 | /* make sure that $a <= $b */ |
| 19 | if ($a > $b) |
| 20 | { |
| 21 | $c = $a; |
| 22 | $a = $b; |
| 23 | $b = $c; |
| 24 | } |
| 25 | /* perform swap */ |
| 26 | list($MIDa) = mysql_fetch_row($res); |
| 27 | list($MIDb) = mysql_fetch_row($res); |
| 28 | mysql_free_result($res); |
| 29 | |
| 30 | $globals->db->query("UPDATE $table_menu SET ordre=$b WHERE MID=$MIDa"); |
| 31 | $globals->db->query("UPDATE $table_menu SET ordre=$a WHERE MID=$MIDb"); |
| 32 | } |
| 33 | |
| 34 | |
| 35 | //// start constructing the page |
| 36 | |
| 37 | $page->assign('greeting',__("The site's menus")); |
| 38 | $action = isset($_REQUEST['action']) ? $_REQUEST["action"] : ""; |
| 39 | switch ($action) { |
| 40 | |
| 41 | /* we want to erase the current entry */ |
| 42 | case "supprimer": |
| 43 | $MID = $_REQUEST['MID']; |
| 44 | if (mysql_num_rows($globals->db->query("SELECT MID FROM {$bbarrel->table_menu} WHERE MIDpere=$MID")) > 0) { |
| 45 | $page->info(__("The selected menu has child items, please remove them first.")); |
| 46 | break; |
| 47 | } |
| 48 | |
| 49 | /* erase the current entry */ |
| 50 | $globals->db->query("DELETE FROM {$bbarrel->table_menu} WHERE MID=$MID"); |
| 51 | |
| 52 | /* renumber the other menu entries so that they are between 1 and the number of entries */ |
| 53 | $res = $globals->db->query("SELECT MID FROM {$bbarrel->table_menu} WHERE MIDpere=$MIDpere ORDER BY ordre"); |
| 54 | $i = 0; |
| 55 | while (list($MIDtoorder) = mysql_fetch_array($res)) { |
| 56 | $i++; |
| 57 | $globals->db->query("UPDATE {$bbarrel->table_menu} SET ordre=$i WHERE MID=$MIDtoorder"); |
| 58 | } |
| 59 | mysql_free_result($res); |
| 60 | break; |
| 61 | |
| 62 | /* bring an entry up in the menu */ |
| 63 | case "remonter": |
| 64 | $ordre = $_REQUEST['ordre']; |
| 65 | swapentries($MIDpere,$ordre-1,$ordre,$bbarrel->table_menu); |
| 66 | break; |
| 67 | |
| 68 | /* push an entry down in the menu */ |
| 69 | case "descendre": |
| 70 | $ordre = $_REQUEST['ordre']; |
| 71 | swapentries($MIDpere,$ordre,$ordre+1,$bbarrel->table_menu); |
| 72 | break; |
| 73 | |
| 74 | /* create or update a menu entry */ |
| 75 | case "modifier": |
| 76 | $typelink = $_REQUEST['typelink']; |
| 77 | switch ($typelink) { |
| 78 | case "boutonPI" : |
| 79 | $pid = isset($_REQUEST['PIvaleur']) ? $_REQUEST['PIvaleur'] : 0; |
| 80 | $link = ""; |
| 81 | break; |
| 82 | case "boutonSE" : |
| 83 | $pid = 0; |
| 84 | $link = $_REQUEST['SEvaleur']; |
| 85 | break; |
| 86 | default: |
| 87 | $pid = 0; |
| 88 | $link = ""; |
| 89 | } |
| 90 | $MID = $_REQUEST['MID']; |
| 91 | $title = $_REQUEST['title']; |
| 92 | if ($MID == 0) { |
| 93 | $res=$globals->db->query("SELECT MAX(ordre) from {$bbarrel->table_menu} where MIDpere=$MIDpere"); |
| 94 | list($ordre) = mysql_fetch_row($res); |
| 95 | $ordre++; |
| 96 | $globals->db->query("INSERT INTO {$bbarrel->table_menu} SET MIDpere='$MIDpere',ordre='$ordre',title='$title',link='$link',pid='$pid'"); |
| 97 | $MID = mysql_insert_id(); |
| 98 | } else { |
| 99 | $globals->db->query("UPDATE {$bbarrel->table_menu} SET title='$title',link='$link',pid='$pid' WHERE MID=$MID"); |
| 100 | } |
| 101 | |
| 102 | break; |
| 103 | |
| 104 | /* display the form to edit an entry */ |
| 105 | case "editer": |
| 106 | // initialisation |
| 107 | $link = ""; |
| 108 | $title = ""; |
| 109 | $pid = 0; |
| 110 | $MID = isset($_REQUEST['MID']) ? $_REQUEST['MID'] : 0; |
| 111 | |
| 112 | // if this is an existing entry, retrieve data |
| 113 | if ($MID) { |
| 114 | $res = $globals->db->query("SELECT link,title,pid FROM {$bbarrel->table_menu} WHERE MID=$MID"); |
| 115 | list($link, $title, $pid) = mysql_fetch_row($res); |
| 116 | mysql_free_result($res); |
| 117 | } |
| 118 | |
| 119 | // fill out form data |
| 120 | $chk_pi = ($pid > 0); |
| 121 | $chk_se = ($link != ""); |
| 122 | $chk_z = !$chk_pi && !$chk_se; |
| 123 | $chk = " checked=\"checked\""; |
| 124 | |
| 125 | $page->assign('post',$page->script_self()); |
| 126 | $page->assign('MID', $MID); |
| 127 | $page->assign('MIDpere',$_REQUEST['MIDpere']); |
| 128 | $page->assign('title',stripslashes($title)); |
| 129 | $page->assign('chk_z',($chk_z ? $chk : "")); |
| 130 | $page->assign('chk_pi',($chk_pi ? $chk : "")); |
| 131 | $page->assign('chk_se',($chk_se ? $chk : "")); |
| 132 | $page->assign('SEvaleur', $link ? $link : "http://"); |
| 133 | $page->assign('page_sel',$pid); |
| 134 | |
| 135 | // retrieve all the barrel's pages |
| 136 | $fpages = $bbarrel->getPages(); |
| 137 | $page_opts = array(); |
| 138 | foreach($fpages as $pkey => $ppage) |
| 139 | { |
| 140 | $pageloc = $bbarrel->getLocation($pkey); |
| 141 | $page_opts[$pkey] = ( strlen($pageloc) ? "<$pageloc> " : "") . $ppage->props['title']; |
| 142 | } |
| 143 | $page->assign('page_opts', $page_opts); |
| 144 | |
| 145 | $res = $globals->db->query("SELECT PID,title from {$bbarrel->table_page} ORDER BY title"); |
| 146 | while (list($myPID,$myTITLE) = mysql_fetch_row($res)) { |
| 147 | //$pageloc = $bbarrel->getLocation($pkey); |
| 148 | //$page_opts[$pkey] = ( strlen($pageloc) ? "<$pageloc> " : "") . $ppage->props['title']; |
| 149 | $page->append('page_values',$myPID); |
| 150 | $page->append('page_names',stripslashes($myTITLE)); |
| 151 | } |
| 152 | mysql_free_result($res); |
| 153 | |
| 154 | $page->assign('doedit',1); |
| 155 | |
| 156 | // translations |
| 157 | $page->assign('msg_prop',__("menu entry properties")); |
| 158 | $page->assign('msg_title',__("entry title")); |
| 159 | $page->assign('msg_type',__("type of link")); |
| 160 | $page->assign('msg_type_z',__("none")); |
| 161 | $page->assign('msg_type_pi',__("internal link")); |
| 162 | $page->assign('msg_type_se',__("external link")); |
| 163 | |
| 164 | $page->assign('submit',__("Submit")); |
| 165 | $page->display('admin-menus.tpl'); |
| 166 | exit; |
| 167 | break; |
| 168 | } |
| 169 | |
| 170 | // get the maximum order |
| 171 | $res=$globals->db->query("SELECT MAX(ordre) from {$bbarrel->table_menu} where MIDpere=$MIDpere"); |
| 172 | list($maxOrdre)=mysql_fetch_row($res); |
| 173 | mysql_free_result($res); |
| 174 | |
| 175 | // retrieve the entries |
| 176 | $res = $globals->db->query("SELECT m.MID,m.ordre,m.title,m.link,m.PID,p.title ". |
| 177 | "from {$bbarrel->table_menu} as m ". |
| 178 | "left join {$bbarrel->table_page} as p on m.PID=p.PID ". |
| 179 | "where MIDpere=$MIDpere order by ordre"); |
| 180 | while (list($MID,$ordre,$title,$link,$PID,$ptitle) = mysql_fetch_row($res)) { |
| 181 | $clickup="?action=remonter&MIDpere=$MIDpere&ordre=$ordre"; |
| 182 | $clickdown="?action=descendre&MIDpere=$MIDpere&ordre=$ordre"; |
| 183 | |
| 184 | // do we offer an "up" link ? |
| 185 | $up = ($ordre != 1) ? array(__("move up"),$clickup) : _("move up"); |
| 186 | |
| 187 | // do we offer a "down" link ? |
| 188 | $down = ($ordre != $maxOrdre) ? array(__("move down"),$clickdown) : $down = __("move down"); |
| 189 | |
| 190 | $edit = array(__("edit"), "?action=editer&MIDpere=$MIDpere&MID=$MID"); |
| 191 | $del = array(__("delete"), "?action=supprimer&MIDpere=$MIDpere&MID=$MID"); |
| 192 | |
| 193 | // describe the current link |
| 194 | if ($PID) { |
| 195 | $descr = "<a href=\"pages?dir=$PID\">$ptitle</a>"; |
| 196 | } elseif ($link) { |
| 197 | $descr = "<a href=\"$link\">[ext] $link</a>"; |
| 198 | } else { |
| 199 | $descr = "none"; |
| 200 | } |
| 201 | |
| 202 | // smarty assignments |
| 203 | $page->append('entries', |
| 204 | array($MID, array(stripslashes($title), "?MIDpere=$MID"), |
| 205 | stripslashes($descr), |
| 206 | $edit,$del,$up,$down)); |
| 207 | } |
| 208 | mysql_free_result($res); |
| 209 | |
| 210 | $filiation = $page->menuToRoot($MIDpere,array()); |
| 211 | $menubar = array(); |
| 212 | foreach($filiation as $mykey=>$myval) { |
| 213 | if ($myval == 0) { |
| 214 | $blab = "<i>home</i>"; |
| 215 | } else { |
| 216 | $res = $globals->db->query("SELECT title FROM {$bbarrel->table_menu} WHERE MID='$myval'"); |
| 217 | list($blab) = mysql_fetch_row($res); |
| 218 | $blab = stripslashes($blab); |
| 219 | mysql_free_result($res); |
| 220 | } |
| 221 | array_unshift($menubar,$mykey ? array($blab,"?MIDpere=$myval") : array($blab)); |
| 222 | } |
| 223 | $page->assign('menubar',$menubar); |
| 224 | $page->assign('script',$page->script_self()); |
| 225 | $page->assign('MIDpere',$MIDpere); |
| 226 | |
| 227 | // translations |
| 228 | $page->assign('msg_ext',__("External links are denoted with the [ext] prefix.")); |
| 229 | $page->assign('msg_menu',__("menu name")); |
| 230 | $page->assign('msg_link',__("link")); |
| 231 | $page->assign('msg_actions',__("actions")); |
| 232 | $page->assign('msg_menubar',__("Menu")); |
| 233 | $page->assign('submit',__("Add new entry")); |
| 234 | $page->display('admin-menus.tpl'); |
| 235 | ?> |