merge changes from diogenes-0.9.19 branch back into trunk
[diogenes.git] / include / admin / menus.php
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&amp;MIDpere=$MIDpere&amp;ordre=$ordre";
182 $clickdown="?action=descendre&amp;MIDpere=$MIDpere&amp;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&amp;MIDpere=$MIDpere&amp;MID=$MID");
191 $del = array(__("delete"), "?action=supprimer&amp;MIDpere=$MIDpere&amp;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 // all menu entries from database
211 $mcache = $page->menuRead();
212 $filiation = $page->menuToRoot($mcache,$MIDpere,array());
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 ?>