administracja menu górnym w panelu admina
[watermeloncms.git] / wtrmln / modules / admin / menuedit.php
blobc63dad01a069af7533ec5572be14ec862e9e3efd
1 <?php
2 /********************************************************************
4 Watermelon CMS
6 Copyright 2009 Radosław Pietruszewski
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 version 2 as published by the Free Software Foundation.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 ********************************************************************/
23 class MenuEdit extends Controller
26 * lista menu
29 function index()
31 Watermelon::addmsgs('menuedit_deleted', 'menuedit_posted', 'menuedit_edited', 'menuedit_poschanged');
33 // pobieramy listę menu
35 $viewMenus = model('menuedit')->GetMenus();
37 // sprawdzamy, czy są jakieś menu
39 if(!$viewMenus->exists())
41 echo $this->load->view('menuedit_nomenus');
42 return;
45 // skoro są, to je wyświetlamy
47 echo $this->load->view('menuedit_table', array('menus' => $viewMenus));
51 * formularz nowego menu
54 function _new()
56 list($tempKey, $tempKeyValue) = model('tempkeys')->MakeKey('newmenu', time() + 3600);
58 echo $this->load->view('menuedit_new', array('tkey' => $tempKey, 'tvalue' => $tempKeyValue));
62 * stworzenie menu
65 function Post()
67 $tempKey = $this->url->segment(1);
68 $tempKeyValue = $this->url->segment(2);
70 // sprawdzamy, czy zostały uzupełnione wszystkie pola.
72 if(empty($_POST['name']) OR empty($_POST['text']))
74 echo $this->load->view('allfieldsneeded');
75 return;
78 // sprawdzamy, czy z kluczem tymczasowym wszystko w porządku
80 if(!model('TempKeys')->CheckKey($tempKey, $tempKeyValue, 'newmenu'))
82 echo $this->load->view('error');
83 return;
86 // wysyłamy
88 model('menuedit')->addMenu(htmlspecialchars($_POST['name']), $_POST['condition'], $_POST['text']);
90 redirect(site_url('msg:menuedit_posted/menuedit'));
94 * formularz edycji menu
97 function edit()
99 $id = $this->url->segment(1);
101 $data = model('menuedit')->GetMenuData($id);
103 // sprawdzamy, czy w ogóle takie istnieje
105 if(!$data->exists())
107 echo $this->load->view('menuedit_nosuch');
108 return;
111 // tworzymy klucz tymczasowy
113 list($tempKey, $tempKeyValue) = $this->load->model('tempkeys')->MakeKey('edit:' . $id, time() + 3600);
115 echo $this->load->view('menuedit_edit', array('data' => $data->to_obj(), 'tkey' => $tempKey, 'tvalue' => $tempKeyValue));
119 * submit: edycja menu
122 function editSubmit()
124 $tempKey = $this->url->segment(1);
125 $tempKeyValue = $this->url->segment(2);
126 $menuID = $this->url->segment(3);
128 // sprawdzamy, czy z kluczem tymczasowym wszystko w porządku
130 if(!model('TempKeys')->CheckKey($tempKey, $tempKeyValue, 'edit:' . $menuID))
132 echo $this->load->view('error');
133 return;
136 // skoro tak, to edytujemy
138 model('menuedit')->Edit(htmlspecialchars($_POST['name']), $_POST['condition'], $_POST['text'], $menuID);
140 redirect(site_url('msg:menuedit_edited/menuedit'));
144 * (samo potwierdznie) usunięcia menu
147 function delete()
149 $id = $this->url->segment(1);
151 $data = model('menuedit')->GetMenuData($id);
153 // sprawdzamy, czy w ogóle takie istnieje
155 if(!$data->exists())
157 echo $this->load->view('menuedit_nosuch');
158 return;
161 // tworzymy klucz tymczasowy
163 list($tempKey, $tempKeyValue) = model('tempkeys')->MakeKey('delete:' . $id);
165 echo $this->load->view('menuedit_deletequestion', array('id' => $id, 'tkey' => $tempKey, 'tvalue' => $tempKeyValue));
169 * usuwanie menu
172 function delete_ok()
174 $tempKey = $this->url->segment(1);
175 $tempKeyValue = $this->url->segment(2);
176 $menuID = $this->url->segment(3);
178 // sprawdzamy, czy z kluczem tymczasowym wszystko w porządku
180 if(!model('tempkeys')->CheckKey($tempKey, $tempKeyValue, 'delete:' . $menuID))
182 echo $this->load->view('error');
183 return;
186 // skoro tak, to usuwamy
188 model('menuedit')->DeleteMenu($menuID);
190 redirect(site_url('msg:menuedit_deleted/menuedit'));
194 * zmiana pozycji menu
197 function setpos()
199 $menu = $this->url->segment(1);
200 $pos = $this->url->segment(2);
202 model('menuedit')->SetMenuPosition($menu, $pos);
204 siteredirect('msg:menuedit_poschanged/menuedit');
208 * lista górnych menu
211 function top()
213 Watermelon::addmsgs('menuedit_deleted', 'menuedit_posted', 'menuedit_edited', 'menuedit_boosted', 'menuedit_sinked');
215 $menus = model('menuedit')->GetTopMenus();
217 echo $this->load->view('menuedit_toptable', array('menus' => $menus));
221 * obniżanie pozycji menu górnego (de facto przesuwanie w prawo)
224 function top_down()
226 $menuID = $this->url->segment(1);
228 $menus = model('menuedit')->GetTopMenus();
230 $menu = $menus[$menuID];
231 $menu_next = $menus[$menuID + 1];
233 $menus[$menuID] = $menu_next;
234 $menus[$menuID + 1] = $menu;
236 model('menuedit')->UpdateTopMenus($menus);
237 siteredirect('msg:menuedit_boosted/menuedit/top');
241 * podwyższanie pozycji menu górnego (de facto przesuwanie w lewo)
244 function top_up()
246 $menuID = $this->url->segment(1);
248 $menus = model('menuedit')->GetTopMenus();
250 $menu = $menus[$menuID];
251 $menu_before = $menus[$menuID - 1];
253 $menus[$menuID] = $menu_before;
254 $menus[$menuID - 1] = $menu;
256 model('menuedit')->UpdateTopMenus($menus);
257 siteredirect('msg:menuedit_sinked/menuedit/top');
261 * formularz nowego menu górnego
264 function topnew()
266 list($tempKey, $tempKeyValue) = model('tempkeys')->MakeKey('newtopmenu', time() + 3600);
268 echo $this->load->view('menuedit_topnew', array('tkey' => $tempKey, 'tvalue' => $tempKeyValue));
272 * stworzenie górnego menu
275 function top_post()
277 $tempKey = $this->url->segment(1);
278 $tempKeyValue = $this->url->segment(2);
280 // sprawdzamy, czy zostały uzupełnione wszystkie pola.
282 if(empty($_POST['name']) OR empty($_POST['condition']))
284 echo $this->load->view('allfieldsneeded');
285 return;
288 // sprawdzamy, czy z kluczem tymczasowym wszystko w porządku
290 if(!model('TempKeys')->CheckKey($tempKey, $tempKeyValue, 'newtopmenu'))
292 echo $this->load->view('error');
293 return;
296 // wysyłamy
298 model('menuedit')->addTopMenu(htmlspecialchars($_POST['name']), $_POST['link'], $_POST['condition']);
300 siteredirect('msg:menuedit_posted/menuedit/top');
304 * formularz edycji górnego menu
307 function topedit()
309 $id = $this->url->segment(1);
311 $data = model('menuedit')->GetTopMenus();
313 // sprawdzamy, czy w ogóle takie istnieje
315 if(!isset($data[$id]))
317 echo $this->load->view('menuedit_nosuch');
318 return;
321 // tworzymy klucz tymczasowy
323 list($tempKey, $tempKeyValue) = model('tempkeys')->MakeKey('topmenuedit:' . $id, time() + 3600);
325 echo $this->load->view('menuedit_topedit', array('id' => (int) $id, 'name' => $data[$id][0], 'link' => $data[$id][1], 'condition' => $data[$id][2], 'tkey' => $tempKey, 'tvalue' => $tempKeyValue));
329 * submit: edycja menu górnego
332 function topEditSubmit()
334 $tempKey = $this->url->segment(1);
335 $tempKeyValue = $this->url->segment(2);
336 $menuID = $this->url->segment(3);
338 // sprawdzamy, czy z kluczem tymczasowym wszystko w porządku
340 if(!model('TempKeys')->CheckKey($tempKey, $tempKeyValue, 'topmenuedit:' . $menuID))
342 echo $this->load->view('error');
343 return;
346 // skoro tak, to edytujemy
348 model('menuedit')->TopEdit(htmlspecialchars($_POST['name']), $_POST['link'], $_POST['condition'], $menuID);
350 siteredirect('msg:menuedit_edited/menuedit/top');
354 * (samo potwierdznie) usunięcia menu górnego
357 function topDelete()
359 $id = $this->url->segment(1);
361 $data = model('menuedit')->GetTopMenus();
363 // sprawdzamy, czy w ogóle takie istnieje
365 if(!isset($data[$id]))
367 echo $this->load->view('menuedit_nosuch');
368 return;
371 // tworzymy klucz tymczasowy
373 list($tempKey, $tempKeyValue) = model('tempkeys')->MakeKey('topmenudelete:' . $id);
375 echo $this->load->view('menuedit_topdeletequestion', array('id' => (int) $id, 'tkey' => $tempKey, 'tvalue' => $tempKeyValue));
379 * usuwanie menu górnego
382 function topDelete_ok()
384 $tempKey = $this->url->segment(1);
385 $tempKeyValue = $this->url->segment(2);
386 $menuID = $this->url->segment(3);
388 // sprawdzamy, czy z kluczem tymczasowym wszystko w porządku
390 if(!model('tempkeys')->CheckKey($tempKey, $tempKeyValue, 'topmenudelete:' . $menuID))
392 echo $this->load->view('error');
393 return;
396 // skoro tak, to usuwamy
398 model('menuedit')->DeleteTopMenu($menuID);
400 siteredirect('msg:menuedit_deleted/menuedit/top');
404 * lista menu PA
407 function pa()
409 Watermelon::addmsgs('menuedit_pasinked', 'menuedit_paboosted');
411 $viewMenus = $this->getMenus();
413 echo $this->load->view('menuedit_patable', array('menus' => $viewMenus));
417 * podwyższanie pozycji menu PA
420 function pa_up()
422 $menuToBoost = $this->url->segment(1);
424 $menus = $this->getMenus(true);
426 $position = array_search($menuToBoost, $menus);
428 $menu = $menus[$position];
429 $menu_before = $menus[$position - 1];
431 $menus[$position] = $menu_before;
432 $menus[$position - 1] = $menu;
434 model('menuedit')->UpdatePAMenus($menus);
436 redirect(site_url('msg:menuedit_pasinked/menuedit/pa'));
440 * obniżanie pozycji menu PA
443 function pa_down()
445 $menuToSink = $this->url->segment(1);
447 $menus = $this->getMenus(true);
449 $position = array_search($menuToSink, $menus);
451 $menu = $menus[$position];
452 $menu_next = $menus[$position + 1];
454 $menus[$position] = $menu_next;
455 $menus[$position + 1] = $menu;
457 model('menuedit')->UpdatePAMenus($menus);
459 redirect(site_url('msg:menuedit_paboosted/menuedit/pa'));
463 * pobieranie listy menu
466 private function getMenus($onel = false)
468 $menus_list = model('menuedit')->GetPAMenus();
470 $haveToUpdate = false;
472 // robimy listę plików acinfo/menu_*.php
474 foreach(glob(WTRMLN_ACINFO . 'menu_*.php') as $filename)
476 $acname = preg_replace("#" . WTRMLN_ACINFO . "menu_([^.]+)\.php#", "\\1", $filename);
478 if(!in_array($acname, $menus_list))
480 $haveToUpdate = true;
481 $menus_list[] = $acname;
485 // sprawdzamy, czy któreś menu nie istnieje w acinfo/
487 foreach($menus_list as $menu)
489 if(!file_exists(WTRMLN_ACINFO . 'menu_' . $menu . '.php'))
491 $haveToUpdate = true;
493 else
495 $menus_list2[] = $menu;
496 include_once WTRMLN_ACINFO . 'menu_' . $menu . '.php';
497 $classname = 'ACMenu_' . $menu;
498 $class = new $classname;
499 $menu_objects[] = array($menu, $class);
503 $menus_list = $menus_list2;
505 // aktualizujemy w bazie danych menu, jeśli trzeba
507 if($haveToUpdate)
509 model('menuedit')->UpdatePAMenus($menus_list);
512 // odpalamy menu
514 foreach($menu_objects as $menuObj)
516 $menu_name = $menuObj[0];
517 $menuObj = $menuObj[1];
519 list($header, $menus) = $menuObj->getMenu(URL::$class, str_replace('_new', 'new', URL::$method), URL::$segments);
521 if(is_array($header))
523 $header_link = $header[0];
524 $header = $header[1];
526 else
528 $header_link = $menu_name;
531 if($onel)
533 $viewMenus[] = $menu_name;
535 else
537 $viewMenus[] = array($menu_name, $header);
541 return $viewMenus;