PageRenderTime 41ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/php/lib/agreement_manager/component/browser.class.php

https://bitbucket.org/chamilo/chamilo-app-internship-organizer-dev/
PHP | 240 lines | 189 code | 43 blank | 8 comment | 18 complexity | 1c19dc4875a659875f919d9246f27f1e 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\ActionBarSearchForm;
  11. use common\libraries\EqualityCondition;
  12. use common\libraries\AndCondition;
  13. use common\libraries\DynamicContentTab;
  14. use common\libraries\ToolbarItem;
  15. use common\libraries\DynamicTabsRenderer;
  16. use common\libraries\InCondition;
  17. use user\UserDataManager;
  18. use user\User;
  19. require_once WebApplication :: get_application_class_lib_path('internship_organizer') . 'agreement_manager/agreement_manager.class.php';
  20. require_once WebApplication :: get_application_class_lib_path('internship_organizer') . 'agreement_manager/component/browser/browser_table.class.php';
  21. require_once WebApplication :: get_application_class_lib_path('internship_organizer') . 'user_type.class.php';
  22. require_once WebApplication :: get_application_class_lib_path('internship_organizer') . 'agreement_rel_user.class.php';
  23. class InternshipOrganizerAgreementManagerBrowserComponent extends InternshipOrganizerAgreementManager
  24. {
  25. const TAB_ADD_LOCATION = 1;
  26. const TAB_TO_APPROVE = 2;
  27. const TAB_APPROVED = 3;
  28. const TAB_COACH = 4;
  29. const TAB_COORDINATOR = 5;
  30. const TAB_STUDENT = 6;
  31. const TAB_MENTOR = 7;
  32. private $action_bar;
  33. private $user_id;
  34. function run()
  35. {
  36. if (! InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_VIEW, InternshipOrganizerRights :: LOCATION_AGREEMENT, InternshipOrganizerRights :: TYPE_COMPONENT))
  37. {
  38. $this->display_header();
  39. $this->display_error_message(Translation :: get('NotAllowed'));
  40. $this->display_footer();
  41. exit();
  42. }
  43. $this->user_id = $this->get_user_id();
  44. $this->action_bar = $this->get_action_bar();
  45. $this->display_header();
  46. echo $this->action_bar->as_html();
  47. echo '<div id="action_bar_browser">';
  48. echo '<div>';
  49. $renderer_name = Utilities :: get_classname_from_object($this, true);
  50. $tabs = new DynamicTabsRenderer($renderer_name);
  51. // $parameters = $this->get_parameters();
  52. // $parameters[ActionBarSearchForm :: PARAM_SIMPLE_SEARCH_QUERY] = $this->action_bar->get_query();
  53. $this->set_parameter(ActionBarSearchForm :: PARAM_SIMPLE_SEARCH_QUERY, $this->action_bar->get_query());
  54. $dm = InternshipOrganizerDataManager :: get_instance();
  55. $coordinator = InternshipOrganizerUserType :: COORDINATOR;
  56. $coordinator_count = $dm->count_agreements($this->get_condition(InternshipOrganizerAgreement :: STATUS_APPROVED, $coordinator));
  57. if ($coordinator_count > 0)
  58. {
  59. // $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_COORDINATOR;
  60. $this->set_parameter(DynamicTabsRenderer :: PARAM_SELECTED_TAB, self :: TAB_COORDINATOR);
  61. $table = $this->get_table(InternshipOrganizerAgreement :: STATUS_APPROVED, $coordinator);
  62. $tabs->add_tab(new DynamicContentTab(self :: TAB_COORDINATOR, Translation :: get('InternshipOrganizerCoordinator'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_coordinator.png', $table->as_html()));
  63. }
  64. $coach = InternshipOrganizerUserType :: COACH;
  65. $coach_count = $dm->count_agreements($this->get_condition(InternshipOrganizerAgreement :: STATUS_APPROVED, $coach));
  66. if ($coach_count > 0)
  67. {
  68. // $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_COACH;
  69. $this->set_parameter(DynamicTabsRenderer :: PARAM_SELECTED_TAB, self :: TAB_COACH);
  70. $table = $this->get_table(InternshipOrganizerAgreement :: STATUS_APPROVED, $coach);
  71. $tabs->add_tab(new DynamicContentTab(self :: TAB_COACH, Translation :: get('InternshipOrganizerCoach'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_coach.png', $table->as_html()));
  72. }
  73. $student = InternshipOrganizerUserType :: STUDENT;
  74. $student_count = $dm->count_agreements($this->get_condition(InternshipOrganizerAgreement :: STATUS_APPROVED, $student));
  75. if ($student_count > 0)
  76. {
  77. // $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_STUDENT;
  78. $this->set_parameter(DynamicTabsRenderer :: PARAM_SELECTED_TAB, self :: TAB_STUDENT);
  79. $table = $this->get_table(InternshipOrganizerAgreement :: STATUS_APPROVED, $student);
  80. $tabs->add_tab(new DynamicContentTab(self :: TAB_STUDENT, Translation :: get('InternshipOrganizerStudent'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_student.png', $table->as_html()));
  81. }
  82. $mentor = InternshipOrganizerUserType :: MENTOR;
  83. $mentor_count = $dm->count_agreements($this->get_condition(InternshipOrganizerAgreement :: STATUS_APPROVED, $mentor));
  84. if ($mentor_count > 0)
  85. {
  86. // $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_MENTOR;
  87. $this->set_parameter(DynamicTabsRenderer :: PARAM_SELECTED_TAB, self :: TAB_MENTOR);
  88. $table = $this->get_table(InternshipOrganizerAgreement :: STATUS_APPROVED, $mentor);
  89. $tabs->add_tab(new DynamicContentTab(self :: TAB_MENTOR, Translation :: get('InternshipOrganizerMentor'), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_mentor.png', $table->as_html()));
  90. }
  91. $coordinator_coach_student = array(InternshipOrganizerUserType :: COACH,
  92. InternshipOrganizerUserType :: COORDINATOR, InternshipOrganizerUserType :: STUDENT);
  93. $coordinator_coach_count = $dm->count_agreements($this->get_condition(InternshipOrganizerAgreement :: STATUS_ADD_LOCATION, $coordinator_coach_student));
  94. if ($coordinator_coach_count > 0)
  95. {
  96. // $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_ADD_LOCATION;
  97. $this->set_parameter(DynamicTabsRenderer :: PARAM_SELECTED_TAB, self :: TAB_ADD_LOCATION);
  98. $table = $this->get_table(InternshipOrganizerAgreement :: STATUS_ADD_LOCATION, $coordinator_coach_student);
  99. $tabs->add_tab(new DynamicContentTab(self :: TAB_ADD_LOCATION, InternshipOrganizerAgreement :: get_status_name(InternshipOrganizerAgreement :: STATUS_ADD_LOCATION), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_location.png', $table->as_html()));
  100. }
  101. $coordinator_coach_count = $dm->count_agreements($this->get_condition(InternshipOrganizerAgreement :: STATUS_TO_APPROVE, $coordinator_coach_student));
  102. if ($coordinator_coach_count > 0)
  103. {
  104. // $parameters[DynamicTabsRenderer :: PARAM_SELECTED_TAB] = self :: TAB_TO_APPROVE;
  105. $this->set_parameter(DynamicTabsRenderer :: PARAM_SELECTED_TAB, self :: TAB_TO_APPROVE);
  106. $table = $this->get_table(InternshipOrganizerAgreement :: STATUS_TO_APPROVE, $coordinator_coach_student);
  107. $tabs->add_tab(new DynamicContentTab(self :: TAB_TO_APPROVE, InternshipOrganizerAgreement :: get_status_name(InternshipOrganizerAgreement :: STATUS_TO_APPROVE), Theme :: get_image_path(__NAMESPACE__) . 'place_mini_location.png', $table->as_html()));
  108. }
  109. echo $tabs->render();
  110. echo '</div>';
  111. echo '</div>';
  112. $this->display_footer();
  113. }
  114. function get_table($agreement_type, $user_types)
  115. {
  116. $parameters = $this->get_parameters();
  117. $table = new InternshipOrganizerAgreementBrowserTable($this, $parameters, $this->get_condition($agreement_type, $user_types));
  118. return $table;
  119. }
  120. function get_action_bar()
  121. {
  122. $action_bar = new ActionBarRenderer(ActionBarRenderer :: TYPE_HORIZONTAL);
  123. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_PUBLISH, InternshipOrganizerRights :: LOCATION_AGREEMENT, InternshipOrganizerRights :: TYPE_COMPONENT))
  124. {
  125. $action_bar->add_common_action(new ToolbarItem(Translation :: get('PublishInAgreements'), Theme :: get_common_image_path() . 'action_publish.png', $this->get_agreements_publish_url(), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  126. }
  127. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_ADD, InternshipOrganizerRights :: LOCATION_AGREEMENT, InternshipOrganizerRights :: TYPE_COMPONENT))
  128. {
  129. $action_bar->add_common_action(new ToolbarItem(Translation :: get('CreateInternshipOrganizerAgreement'), Theme :: get_common_image_path() . 'action_create.png', $this->get_create_agreement_url(), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  130. }
  131. if (InternshipOrganizerRights :: is_allowed_in_internship_organizers_subtree(InternshipOrganizerRights :: RIGHT_VIEW, InternshipOrganizerRights :: LOCATION_REPORTING, InternshipOrganizerRights :: TYPE_COMPONENT))
  132. {
  133. $action_bar->add_tool_action(new ToolbarItem(Translation :: get('Reporting'), Theme :: get_common_image_path() . 'action_view_results.png', $this->get_agreement_reporting_url(), ToolbarItem :: DISPLAY_ICON_AND_LABEL));
  134. }
  135. $action_bar->set_search_url($this->get_url());
  136. return $action_bar;
  137. }
  138. function get_condition($agreement_type, $user_types)
  139. {
  140. $conditions = array();
  141. $agreement_ids = $this->get_agreement_ids($user_types);
  142. if (count($agreement_ids) > 0)
  143. {
  144. $conditions[] = new InCondition(InternshipOrganizerAgreement :: PROPERTY_ID, $agreement_ids);
  145. $conditions[] = new InCondition(InternshipOrganizerAgreementRelUser :: PROPERTY_USER_TYPE, InternshipOrganizerUserType :: STUDENT, InternshipOrganizerAgreementRelUser :: get_table_name());
  146. $conditions[] = new EqualityCondition(InternshipOrganizerAgreement :: PROPERTY_STATUS, $agreement_type);
  147. $query = $this->action_bar->get_query();
  148. if (isset($query) && $query != '')
  149. {
  150. $search_conditions = array();
  151. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerAgreement :: PROPERTY_NAME, '*' . $query . '*');
  152. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerAgreement :: PROPERTY_DESCRIPTION, '*' . $query . '*');
  153. $user_alias = UserDataManager :: get_instance()->get_alias(User :: get_table_name());
  154. $search_conditions[] = new PatternMatchCondition(User :: PROPERTY_FIRSTNAME, '*' . $query . '*', $user_alias, true);
  155. $search_conditions[] = new PatternMatchCondition(User :: PROPERTY_LASTNAME, '*' . $query . '*', $user_alias, true);
  156. $search_conditions[] = new PatternMatchCondition(User :: PROPERTY_USERNAME, '*' . $query . '*', $user_alias, true);
  157. $search_conditions[] = new PatternMatchCondition(InternshipOrganizerPeriod :: PROPERTY_NAME, '*' . $query . '*', InternshipOrganizerPeriod :: get_table_name());
  158. $conditions[] = new OrCondition($search_conditions);
  159. }
  160. return new AndCondition($conditions);
  161. }
  162. else
  163. {
  164. return new EqualityCondition(InternshipOrganizerAgreement :: PROPERTY_ID, 0);
  165. }
  166. }
  167. function get_agreement_ids($user_types)
  168. {
  169. if (! is_array($user_types))
  170. {
  171. $user_types = array($user_types);
  172. }
  173. $conditions = array();
  174. $user_alias = UserDataManager :: get_instance()->get_alias(User :: get_table_name());
  175. $conditions[] = new EqualityCondition(User :: PROPERTY_ID, $this->user_id, $user_alias, true);
  176. $conditions[] = new InCondition(InternshipOrganizerAgreementRelUser :: PROPERTY_USER_TYPE, $user_types, InternshipOrganizerAgreementRelUser :: get_table_name());
  177. $condition = new AndCondition($conditions);
  178. $agreements = InternshipOrganizerDataManager :: get_instance()->retrieve_agreements($condition);
  179. $agreement_ids = array();
  180. while ($agreement = $agreements->next_result())
  181. {
  182. $agreement_ids[] = $agreement->get_id();
  183. }
  184. if (in_array(InternshipOrganizerUserType :: MENTOR, $user_types))
  185. {
  186. $user_alias = UserDataManager :: get_instance()->get_alias(User :: get_table_name());
  187. $condition = new EqualityCondition(User :: PROPERTY_ID, $this->user_id, $user_alias, true);
  188. $agreements = InternshipOrganizerDataManager :: get_instance()->retrieve_mentor_agreements($condition);
  189. while ($agreement = $agreements->next_result())
  190. {
  191. $agreement_ids[] = $agreement->get_id();
  192. }
  193. }
  194. return array_unique($agreement_ids);
  195. }
  196. }
  197. ?>