PageRenderTime 37ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/php/lib/category_manager/component/browser.class.php

https://bitbucket.org/chamilo/chamilo-app-internship-organizer-dev/
PHP | 257 lines | 194 code | 59 blank | 4 comment | 18 complexity | a4ffa4bc4f4cd7ab5c9a01737e73398f MD5 | raw file
  1. <?php
  2. namespace application\internship_organizer;
  3. use common\libraries\OrCondition;
  4. use common\libraries\PatternMatchCondition;
  5. use common\libraries\WebApplication;
  6. use common\libraries\Utilities;
  7. use common\libraries\Translation;
  8. use common\libraries\Theme;
  9. use common\libraries\ActionBarRenderer;
  10. use common\libraries\DynamicTabsRenderer;
  11. use common\libraries\ActionBarSearchForm;
  12. use common\libraries\EqualityCondition;
  13. use common\libraries\AndCondition;
  14. use common\libraries\DynamicContentTab;
  15. use common\libraries\ToolbarItem;
  16. use common\libraries\Toolbar;
  17. use common\libraries\Request;
  18. require_once WebApplication :: get_application_class_lib_path('internship_organizer') . 'category_manager/category_manager.class.php';
  19. require_once WebApplication :: get_application_class_lib_path('internship_organizer') . 'category_manager/component/browser/browser_table.class.php';
  20. class InternshipOrganizerCategoryManagerBrowserComponent extends InternshipOrganizerCategoryManager
  21. {
  22. const TAB_SUB_CATEGORIES = 1;
  23. const TAB_LOCATIONS = 2;
  24. const TAB_DETAIL = 3;
  25. private $ab;
  26. private $category_id;
  27. private $root_category;
  28. /**
  29. * Runs this component and displays its output.
  30. */
  31. function run()
  32. {
  33. if (! InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_VIEW, InternshipOrganizerRights :: LOCATION_CATEGORY, InternshipOrganizerRights :: TYPE_COMPONENT))
  34. {
  35. $this->display_header();
  36. $this->display_error_message(Translation :: get('NotAllowed'));
  37. $this->display_footer();
  38. exit();
  39. }
  40. $this->ab = $this->get_action_bar();
  41. $menu = $this->get_menu_html();
  42. $output = $this->get_browser_html();
  43. $this->display_header();
  44. echo $this->ab->as_html() . '<br />';
  45. echo $menu;
  46. echo $output;
  47. $this->display_footer();
  48. }
  49. function get_browser_html()
  50. {
  51. $html = array();
  52. $html[] = '<div style="float: right; width: 80%;">';
  53. $renderer_name = Utilities :: get_classname_from_object($this, true);
  54. $tabs = new DynamicTabsRenderer($renderer_name);
  55. $parameters = $this->get_parameters();
  56. $parameters[ActionBarSearchForm :: PARAM_SIMPLE_SEARCH_QUERY] = $this->ab->get_query();
  57. $parameters[self :: PARAM_CATEGORY_ID] = $this->get_category();
  58. $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_LOCATIONS;
  59. $table = new InternshipOrganizerCategoryRelLocationBrowserTable($this, $parameters, $this->get_location_condition());
  60. $tabs->add_tab(new DynamicContentTab(self :: TAB_LOCATIONS, Translation :: get('Locations'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_location.png', $table->as_html()));
  61. // Subcategory table tab
  62. $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_SUB_CATEGORIES;
  63. $table = new InternshipOrganizerCategoryBrowserTable($this, $this->get_parameters(), $this->get_condition());
  64. $tabs->add_tab(new DynamicContentTab(self :: TAB_SUB_CATEGORIES, Translation :: get('SubCategories'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_category.png', $table->as_html()));
  65. $tabs->add_tab(new DynamicContentTab(self :: TAB_DETAIL, Translation :: get('Detail'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_detail.png', $this->get_category_info()));
  66. $html[] = $tabs->render();
  67. $html[] = '</div>';
  68. $html[] = '<div class="clear"></div>';
  69. return implode($html, "\n");
  70. }
  71. function get_menu_html()
  72. {
  73. $category_menu = new InternshipOrganizerCategoryMenu($this->get_category());
  74. $html = array();
  75. $html[] = '<div style="float: left; width: 18%; overflow: auto; height: 500px;">';
  76. $html[] = $category_menu->render_as_tree();
  77. $html[] = '</div>';
  78. return implode($html, "\n");
  79. }
  80. function get_category_info()
  81. {
  82. $category = $this->retrieve_category($this->get_category());
  83. $html = array();
  84. $toolbar = new Toolbar(Toolbar :: TYPE_HORIZONTAL);
  85. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_EDIT, InternshipOrganizerRights :: LOCATION_CATEGORY, InternshipOrganizerRights :: TYPE_COMPONENT))
  86. {
  87. $toolbar->add_item(new ToolbarItem(Translation :: get('Edit'), Theme :: get_common_image_path() . 'action_edit.png', $this->get_category_editing_url($category), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  88. $toolbar->add_item(new ToolbarItem(Translation :: get('Move'), Theme :: get_common_image_path() . 'action_move.png', $this->get_move_category_url($category), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  89. }
  90. if ($category->get_parent_id() != 0)
  91. {
  92. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_DELETE, InternshipOrganizerRights :: LOCATION_CATEGORY, InternshipOrganizerRights :: TYPE_COMPONENT))
  93. {
  94. $toolbar->add_item(new ToolbarItem(Translation :: get('Delete'), Theme :: get_common_image_path() . 'action_delete.png', $this->get_category_delete_url($category), ToolbarItem :: DISPLAY_ICON_AND_LABEL, true));
  95. }
  96. }
  97. $html[] = '<b>' . Translation :: get('Name') . '</b>: ' . $category->get_name() . '<br />';
  98. $description = $category->get_description();
  99. if ($description)
  100. {
  101. $html[] = '<b>' . Translation :: get('Description') . '</b>: ' . $description . '<br />';
  102. }
  103. $html[] = '<br />';
  104. $html[] = $toolbar->as_html();
  105. return implode("\n", $html);
  106. }
  107. function get_category()
  108. {
  109. if (! $this->category_id)
  110. {
  111. $this->category_id = Request :: get(self :: PARAM_CATEGORY_ID);
  112. if (! $this->category_id)
  113. {
  114. $this->category_id = $this->get_root_category()->get_id();
  115. }
  116. }
  117. return $this->category_id;
  118. }
  119. function get_root_category()
  120. {
  121. if (! $this->root_category)
  122. {
  123. $this->root_category = $this->retrieve_root_category();
  124. }
  125. return $this->root_category;
  126. }
  127. function get_condition()
  128. {
  129. $condition = new EqualityCondition(InternshipOrganizerCategory :: PROPERTY_PARENT_ID, $this->get_category());
  130. $query = $this->ab->get_query();
  131. if (isset($query) && $query != '')
  132. {
  133. $or_conditions = array();
  134. $or_conditions[] = new PatternMatchCondition(InternshipOrganizerCategory :: PROPERTY_NAME, '*' . $query . '*');
  135. $or_conditions[] = new PatternMatchCondition(InternshipOrganizerCategory :: PROPERTY_DESCRIPTION, '*' . $query . '*');
  136. $or_condition = new OrCondition($or_conditions);
  137. $and_conditions = array();
  138. $and_conditions[] = $condition;
  139. $and_conditions[] = $or_condition;
  140. $condition = new AndCondition($and_conditions);
  141. }
  142. return $condition;
  143. }
  144. function get_action_bar()
  145. {
  146. $action_bar = new ActionBarRenderer(ActionBarRenderer :: TYPE_HORIZONTAL);
  147. $category = $this->retrieve_category($this->get_category());
  148. $action_bar->set_search_url($this->get_url(array(self :: PARAM_CATEGORY_ID => $this->get_category())));
  149. $action_bar->add_common_action(new ToolbarItem(Translation :: get('ViewRoot'), Theme :: get_common_image_path() . 'action_home.png', $this->get_browse_categories_url(), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  150. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_ADD, InternshipOrganizerRights :: LOCATION_CATEGORY, InternshipOrganizerRights :: TYPE_COMPONENT))
  151. {
  152. $action_bar->add_common_action(new ToolbarItem(Translation :: get('CreateInternshipOrganizerCategory'), Theme :: get_common_image_path() . 'action_create.png', $this->get_create_category_url($this->get_category()), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  153. $action_bar->add_tool_action(new ToolbarItem(Translation :: get('AddInternshipOrganizerLocation'), Theme :: get_common_image_path() . 'action_subscribe.png', $this->get_category_subscribe_location_browser_url($category), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  154. $condition = new EqualityCondition(InternshipOrganizerCategoryRelLocation :: PROPERTY_CATEGORY_ID, $category->get_id());
  155. $locations = $this->retrieve_category_rel_locations($condition);
  156. $visible = ($locations->size() > 0);
  157. if ($visible)
  158. {
  159. $action_bar->add_tool_action(new ToolbarItem(Translation :: get('Truncate'), Theme :: get_common_image_path() . 'action_recycle_bin.png', $this->get_category_emptying_url($category), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  160. }
  161. else
  162. {
  163. $action_bar->add_tool_action(new ToolbarItem(Translation :: get('TruncateNA'), Theme :: get_common_image_path() . 'action_recycle_bin_na.png', null, ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  164. }
  165. }
  166. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_IMPORT, InternshipOrganizerRights :: LOCATION_CATEGORY, InternshipOrganizerRights :: TYPE_COMPONENT))
  167. {
  168. $action_bar->add_tool_action(new ToolbarItem(Translation :: get('ImportInternshipOrganizerCategory'), Theme :: get_common_image_path() . 'action_import.png', $this->get_category_importer_url($this->get_category()), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  169. }
  170. return $action_bar;
  171. }
  172. function get_location_condition()
  173. {
  174. $conditions = array();
  175. $conditions[] = new EqualityCondition(InternshipOrganizerCategoryRelLocation :: PROPERTY_CATEGORY_ID, $this->get_category());
  176. $query = $this->ab->get_query();
  177. if (isset($query) && $query != '')
  178. {
  179. $region_alias = InternshipOrganizerDataManager :: get_instance()->get_alias(InternshipOrganizerRegion :: get_table_name());
  180. $organisation_alias = InternshipOrganizerDataManager :: get_instance()->get_alias(InternshipOrganizerOrganisation :: get_table_name());
  181. $location_alias = InternshipOrganizerDataManager :: get_instance()->get_alias(InternshipOrganizerLocation :: get_table_name());
  182. $search_conditions = array();
  183. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerLocation :: PROPERTY_ADDRESS, '*' . $query . '*', $location_alias, true);
  184. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerLocation :: PROPERTY_DESCRIPTION, '*' . $query . '*', $location_alias, true);
  185. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerLocation :: PROPERTY_EMAIL, '*' . $query . '*', $location_alias, true);
  186. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerLocation :: PROPERTY_NAME, '*' . $query . '*', $location_alias, true);
  187. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerLocation :: PROPERTY_TELEPHONE, '*' . $query . '*', $location_alias, true);
  188. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerRegion :: PROPERTY_CITY_NAME, '*' . $query . '*', $region_alias, true);
  189. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerRegion :: PROPERTY_DESCRIPTION, '*' . $query . '*', $region_alias, true);
  190. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerRegion :: PROPERTY_ZIP_CODE, '*' . $query . '*', $region_alias, true);
  191. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerOrganisation :: PROPERTY_DESCRIPTION, '*' . $query . '*', $organisation_alias, true);
  192. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerOrganisation :: PROPERTY_NAME, '*' . $query . '*', $organisation_alias, true);
  193. $conditions[] = new OrCondition($search_conditions);
  194. }
  195. return new AndCondition($conditions);
  196. }
  197. }
  198. ?>