Commit | Line | Data |
---|---|---|
6855525e JL |
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 | ||
a92b0441 JL |
210 | // all menu entries from database |
211 | $mcache = $page->menuRead(); | |
212 | $filiation = $page->menuToRoot($mcache,$MIDpere,array()); | |
6855525e JL |
213 | $menubar = array(); |
214 | foreach($filiation as $mykey=>$myval) { | |
215 | if ($myval == 0) { | |
216 | $blab = "<i>home</i>"; | |
217 | } else { | |
218 | $res = $globals->db->query("SELECT title FROM {$bbarrel->table_menu} WHERE MID='$myval'"); | |
219 | list($blab) = mysql_fetch_row($res); | |
220 | $blab = stripslashes($blab); | |
221 | mysql_free_result($res); | |
222 | } | |
223 | array_unshift($menubar,$mykey ? array($blab,"?MIDpere=$myval") : array($blab)); | |
224 | } | |
225 | $page->assign('menubar',$menubar); | |
226 | $page->assign('script',$page->script_self()); | |
227 | $page->assign('MIDpere',$MIDpere); | |
228 | ||
229 | // translations | |
230 | $page->assign('msg_ext',__("External links are denoted with the [ext] prefix.")); | |
231 | $page->assign('msg_menu',__("menu name")); | |
232 | $page->assign('msg_link',__("link")); | |
233 | $page->assign('msg_actions',__("actions")); | |
234 | $page->assign('msg_menubar',__("Menu")); | |
235 | $page->assign('submit',__("Add new entry")); | |
236 | $page->display('admin-menus.tpl'); | |
237 | ?> |