PageRenderTime 40ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/www/app/AdminModule/presenters/AdminMenuItemsPresenter.php

https://github.com/bazo/Mokuji
PHP | 138 lines | 127 code | 8 blank | 3 comment | 12 complexity | 7784da4b61f9545694369d1e7d7328e7 MD5 | raw file
Possible License(s): BSD-3-Clause, MIT
  1. <?php
  2. class Admin_MenuItemsPresenter extends Admin_SecurePresenter
  3. {
  4. private /*$menu_items, $name,*/ $menu;
  5. public function actionDefault($id)
  6. {
  7. $this->menu = $this->model('menu')->getById($id);
  8. $this->template->menu = $this->menu->name;
  9. $this->template->menu_id = $this->menu->id;
  10. $this->view = 'menuitems';
  11. $this->invalidateControl('form');
  12. }
  13. public function handleItemMove()
  14. {
  15. $data = $this->getRequest()->getPost();
  16. $menu_id = $this->menu->id;
  17. if ($this->isAjax()) {
  18. $item_id = $data['item_id'];
  19. $parent_id = $data['parent_id'];
  20. $prev_position = $data['prev_position'];
  21. $parent_level = $data['parent_level'];
  22. $level = $data['level'];
  23. $diff = $parent_level - $level;
  24. $this->model('menuItems')->moveItem( (int)$item_id, (int)$menu_id, (int)$parent_id, (int)$prev_position, (int)$parent_level, $diff);
  25. $this->invalidateControl('menuDragDrop');
  26. $this->flash('Menu updated');
  27. }
  28. }
  29. public function handleItemDelete()
  30. {
  31. $data = $this->getRequest()->getPost();
  32. $item = (int)$data['item'];
  33. try
  34. {
  35. $this->model('menuItems')->deleteItem($item);
  36. $this->presenter->flashMessage('item '.$item.' deleted');
  37. $this->invalidateControl('menuDragDrop');
  38. }
  39. catch (DibiDriverException $e)
  40. {
  41. $this->flash($e->getMessage());
  42. }
  43. }
  44. public function createComponentFormNewMenuItem($name)
  45. {
  46. $form = new LiveForm($this, $name);
  47. $form->addGroup('Add new item');
  48. $form->addText('title', 'Title')->addRule(Form::FILLED, 'Please enter a name.');
  49. $form->addRadioList('link_type', 'Link type',array('internal' => 'internal', 'external' => 'external'))->setDefaultValue('internal');
  50. $pages = $this->model('pages')->getPairs();
  51. $temp = array();
  52. if (isset($pages[""]))
  53. {
  54. $temp = $pages[""];
  55. unset($pages[""]);
  56. }
  57. $pages = array('none' => $temp) + $pages;
  58. unset($temp);
  59. $categories = $this->model('categories')->getPairs('slug', 'title');
  60. $items = array('homepagelink'=> 'Link to Homepage');
  61. foreach (array('none' => 'none') + $categories as $cat_slug => $cat_title) {
  62. if($cat_title != 'none') $items[$cat_slug] = 'cat: '.$cat_title;
  63. if( isset($pages[$cat_title]) ){
  64. foreach ($pages[$cat_title] as $page_title => $data) {
  65. if($cat_title == 'none')
  66. $items[$data->page_slug] = 'page '.$page_title;
  67. else
  68. $items[$cat_slug.'/'.$data->page_slug] = 'article in '.$cat_title.': '.$page_title; }
  69. }
  70. }
  71. $form->addSelect('internal_url', 'Page', $items)->addRule(Form::FILLED, 'Please select a page.');
  72. $form->addText('external_url', 'Link')->addConditionOn($form['link_type'], Form::EQUAL, 'external')
  73. ->addRule(Form::FILLED, 'Please enter a link')
  74. ->addRule(Form::URL, 'Please enter a valid link');
  75. $items = $this->model('menuItems')->getByMenuId($this->menu->id)->fetchPairs('id_level','title');
  76. $items = array_merge(array('0;0' => 'none'), $items);
  77. $form->addSelect('parent_data', 'Parent', $items);
  78. $form->addButton('btnClose','Close');
  79. $form->addSubmit('save','Add')->onClick[] = array($this, 'formNewMenuItemSubmitted');
  80. $form['save']->getControlPrototype()->class('ajax');
  81. return $form;
  82. }
  83. public function formNewMenuItemSubmitted(Button $button)
  84. {
  85. $form = $button->getForm();
  86. $values = $form->getValues();
  87. //fd($values);exit;
  88. $parent_data = explode(';',$values['parent_data']);
  89. if($values['link_type'] == 'internal') $values['url'] = $values['internal_url'];
  90. else
  91. {
  92. if(substr($values['external_url'], 0, 6) == 'http://')
  93. $values['url'] = $values['external_url'];
  94. else $values['url'] = 'http://'.$values['external_url'];
  95. }
  96. unset($values['internal_url']);
  97. unset($values['external_url']);
  98. $parent_id = $parent_data[0];
  99. $parent_level = $parent_data[1];
  100. unset($values['parent_data']);
  101. unset($values['btnClose']);
  102. $values['parent'] = $parent_id;
  103. $values['level'] = $parent_level + 1;
  104. $values['menu_id'] = $this->menu->id;
  105. try
  106. {
  107. $this->model('menuItems')->create($values);
  108. $this->invalidateControl('menuDragDrop');
  109. $this->invalidateControl('frmNewItem');
  110. $this->validateControl('formNewMenuItem');
  111. $this->flash('Item '.$values['title'].' created');
  112. //if(!$this->isAjax()) $this->redirect('this');
  113. }
  114. catch (DibiDriverException $e)
  115. {
  116. $this->flash($e->getMessage());
  117. }
  118. //$this->redirect('this');
  119. }
  120. public function createComponentMenuDragDrop()
  121. {
  122. $dragdrop = new MenuDragDrop();
  123. $dragdrop->setModel(new Admin_MenuItemsModel());
  124. $dragdrop->setTranslator(new Translator($this->lang));
  125. $dragdrop->onItemMove[] = array($this, 'handleItemMove');
  126. $dragdrop->onItemDelete[] = array($this, 'handleItemDelete');
  127. return $dragdrop;
  128. }
  129. }
  130. ?>