move more functionalty to Diogenes_Barrel_Menu
[diogenes.git] / include / admin / menus.php
1 <?php
2 require_once 'diogenes.common.inc.php';
3 require_once 'diogenes.admin.inc.php';
4 require_once 'Barrel/Menu.php';
5 require_once 'Barrel/Page.php';
6
7 $page = new DiogenesAdmin;
8 $bbarrel =& $page->barrel;
9 $bmenu = new Diogenes_Barrel_Menu($globals->db, $bbarrel->table_menu);
10
11 // the id of the parent menu
12 $MIDpere = isset($_REQUEST['MIDpere']) ? $_REQUEST['MIDpere'] : 0;
13
14 //// start constructing the page
15
16 $page->assign('greeting',__("The site's menus"));
17 $action = isset($_REQUEST['action']) ? $_REQUEST["action"] : "";
18 switch ($action) {
19
20 /* we want to erase the current entry */
21 case "supprimer":
22 $MID = $_REQUEST['MID'];
23 $bmenu->deleteEntry($MID, $MIDpere, $page);
24 break;
25
26 /* bring an entry up in the menu */
27 case "remonter":
28 $ordre = $_REQUEST['ordre'];
29 $bmenu->swapEntries($MIDpere, $ordre-1, $ordre);
30 break;
31
32 /* push an entry down in the menu */
33 case "descendre":
34 $ordre = $_REQUEST['ordre'];
35 $bmenu->swapEntries($MIDpere, $ordre, $ordre+1);
36 break;
37
38 /* create or update a menu entry */
39 case "modifier":
40 $typelink = $_REQUEST['typelink'];
41 $props = array(
42 'parent' => $MIDpere,
43 'pid' => 0,
44 'link' => '',
45 'title' => $_REQUEST['title'],
46 );
47 switch ($typelink) {
48 case "boutonPI" :
49 $props['pid'] = isset($_REQUEST['PIvaleur']) ? $_REQUEST['PIvaleur'] : 0;
50 break;
51 case "boutonSE" :
52 $props['link'] = $_REQUEST['SEvaleur'];
53 break;
54 }
55 $MID = $bmenu->writeEntry($_REQUEST['MID'], $props);
56 break;
57
58 /* display the form to edit an entry */
59 case "editer":
60 // initialisation
61 $link = "";
62 $title = "";
63 $pid = 0;
64 $MID = isset($_REQUEST['MID']) ? $_REQUEST['MID'] : 0;
65
66 // if this is an existing entry, retrieve data
67 if ($MID) {
68 $mcache = $bmenu->menuRead();
69 $link = $mcache[$MID]['link'];
70 $title = $mcache[$MID]['title'];
71 $pid = $mcache[$MID]['pid'];
72 }
73
74 // fill out form data
75 $chk_pi = ($pid > 0);
76 $chk_se = ($link != "");
77 $chk_z = !$chk_pi && !$chk_se;
78 $chk = " checked=\"checked\"";
79
80 $page->assign('post',$page->script_self());
81 $page->assign('MID', $MID);
82 $page->assign('MIDpere',$_REQUEST['MIDpere']);
83 $page->assign('title',stripslashes($title));
84 $page->assign('chk_z',($chk_z ? $chk : ""));
85 $page->assign('chk_pi',($chk_pi ? $chk : ""));
86 $page->assign('chk_se',($chk_se ? $chk : ""));
87 $page->assign('SEvaleur', $link ? $link : "http://");
88 $page->assign('page_sel',$pid);
89
90 // retrieve all the barrel's pages
91 $fpages = $bbarrel->getPages();
92 $page_opts = array();
93 foreach($fpages as $pkey => $ppage)
94 {
95 $pageloc = $bbarrel->getLocation($pkey);
96 $page_opts[$pkey] = ( strlen($pageloc) ? "<$pageloc> " : "") . $ppage->props['title'];
97 }
98 $page->assign('page_opts', $page_opts);
99
100 $res = $globals->db->query("SELECT PID,title from {$bbarrel->table_page} ORDER BY title");
101 while (list($myPID,$myTITLE) = mysql_fetch_row($res)) {
102 //$pageloc = $bbarrel->getLocation($pkey);
103 //$page_opts[$pkey] = ( strlen($pageloc) ? "<$pageloc> " : "") . $ppage->props['title'];
104 $page->append('page_values',$myPID);
105 $page->append('page_names',stripslashes($myTITLE));
106 }
107 mysql_free_result($res);
108
109 $page->assign('doedit',1);
110
111 // translations
112 $page->assign('msg_prop',__("menu entry properties"));
113 $page->assign('msg_title',__("entry title"));
114 $page->assign('msg_type',__("type of link"));
115 $page->assign('msg_type_z',__("none"));
116 $page->assign('msg_type_pi',__("internal link"));
117 $page->assign('msg_type_se',__("external link"));
118
119 $page->assign('submit',__("Submit"));
120 $page->display('admin-menus.tpl');
121 exit;
122 break;
123 }
124
125 // get the maximum order
126 $maxOrdre = $bmenu->maxChildIndex($MIDpere);
127
128 // all menu entries from database
129 $mcache = $bmenu->menuRead();
130
131 foreach($mcache[$MIDpere]['children'] as $MID)
132 {
133 $ordre = $mcache[$MID]['ordre'];
134 $title = $mcache[$MID]['title'];
135 $link = $mcache[$MID]['link'];
136 $PID = $mcache[$MID]['pid'];
137 $clickup="?action=remonter&amp;MIDpere=$MIDpere&amp;ordre=$ordre";
138 $clickdown="?action=descendre&amp;MIDpere=$MIDpere&amp;ordre=$ordre";
139
140 // do we offer an "up" link ?
141 $up = ($ordre != 1) ? array(__("move up"),$clickup) : _("move up");
142
143 // do we offer a "down" link ?
144 $down = ($ordre != $maxOrdre) ? array(__("move down"),$clickdown) : $down = __("move down");
145
146 $edit = array(__("edit"), "?action=editer&amp;MIDpere=$MIDpere&amp;MID=$MID");
147 $del = array(__("delete"), "?action=supprimer&amp;MIDpere=$MIDpere&amp;MID=$MID");
148
149 // describe the current link
150 if ($PID) {
151 $tpage = Diogenes_Barrel_Page::fromDb($bbarrel, $PID);
152 $descr = "<a href=\"pages?dir=$PID\">".$tpage->props['title']."</a>";
153 } elseif ($link) {
154 $descr = "<a href=\"$link\">[ext] $link</a>";
155 } else {
156 $descr = "none";
157 }
158
159 // smarty assignments
160 $page->append('entries',
161 array($MID, array(stripslashes($title), "?MIDpere=$MID"),
162 stripslashes($descr),
163 $edit,$del,$up,$down));
164 }
165
166 $filiation = $bmenu->menuToRoot($mcache,$MIDpere,array());
167 $menubar = array();
168 foreach($filiation as $mykey=>$myval) {
169 if ($myval == 0) {
170 $blab = "<i>home</i>";
171 } else {
172 $blab = stripslashes($mcache[$myval]['title']);
173 }
174 array_unshift($menubar,$mykey ? array($blab,"?MIDpere=$myval") : array($blab));
175 }
176 $page->assign('menubar',$menubar);
177 $page->assign('script',$page->script_self());
178 $page->assign('MIDpere',$MIDpere);
179
180 // translations
181 $page->assign('msg_ext',__("External links are denoted with the [ext] prefix."));
182 $page->assign('msg_menu',__("menu name"));
183 $page->assign('msg_link',__("link"));
184 $page->assign('msg_actions',__("actions"));
185 $page->assign('msg_menubar',__("Menu"));
186 $page->assign('submit',__("Add new entry"));
187 $page->display('admin-menus.tpl');
188 ?>