PageRenderTime 52ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/php/lib/component/assessment_results_table_admin/assessment_results_table_overview_data_provider.class.php

https://bitbucket.org/chamilo/chamilo-app-weblcms-assessment-dev/
PHP | 218 lines | 144 code | 27 blank | 47 comment | 15 complexity | 0b261bc7661d5b712df7488f2ec3ebc7 MD5 | raw file
  1. <?php
  2. namespace application\weblcms\tool\assessment;
  3. use application\weblcms\ContentObjectPublicationCourseGroup;
  4. use application\weblcms\ContentObjectPublicationUser;
  5. use application\weblcms\ContentObjectPublication;
  6. use application\weblcms\WeblcmsDataManager;
  7. use application\weblcms\WeblcmsRights;
  8. use application\weblcms\WeblcmsManager;
  9. use repository\ContentObject;
  10. use repository\RepositoryDataManager;
  11. use repository\content_object\assessment\Assessment;
  12. use repository\content_object\hotpotatoes\Hotpotatoes;
  13. use user\User;
  14. use common\libraries\SubselectCondition;
  15. use common\libraries\OrCondition;
  16. use common\libraries\InCondition;
  17. use common\libraries\Utilities;
  18. use common\libraries\AndCondition;
  19. use common\libraries\EqualityCondition;
  20. use common\libraries\ObjectTableDataProvider;
  21. /**
  22. * $Id: assessment_results_table_overview_data_provider.class.php 216 2009-11-13 14:08:06Z kariboe $
  23. * @package application.lib.weblcms.tool.assessment.component.assessment_results_table_admin
  24. */
  25. /**
  26. * This class represents a data provider for a results candidate table
  27. */
  28. class AssessmentResultsTableOverviewAdminDataProvider extends ObjectTableDataProvider
  29. {
  30. /**
  31. * The user id of the current active user.
  32. */
  33. private $owner;
  34. /**
  35. * The possible types of learning objects which can be selected.
  36. */
  37. private $types;
  38. /**
  39. * The search query, or null if none.
  40. */
  41. private $query;
  42. private $parent;
  43. private $pid;
  44. /**
  45. * Constructor.
  46. * @param int $owner The user id of the current active user.
  47. * @param array $types The possible types of learning objects which can be
  48. * selected.
  49. * @param string $query The search query.
  50. */
  51. function __construct($parent, $owner, $pid = null, $types = array(), $query = null)
  52. {
  53. $this->types = $types;
  54. $this->owner = $owner;
  55. $this->query = $query;
  56. $this->parent = $parent;
  57. $this->pid = $pid;
  58. }
  59. /*
  60. * Inherited
  61. */
  62. function get_objects($offset, $count, $order_property = null)
  63. {
  64. $order_property = $this->get_order_property($order_property);
  65. if ($this->pid == null)
  66. {
  67. $publications = $this->get_publications($offset, $count, $order_property);
  68. }
  69. else
  70. {
  71. $publications = $this->get_publication($this->pid);
  72. }
  73. //return $this->get_assessments($publications);
  74. return $publications;
  75. }
  76. function get_publication($pid)
  77. {
  78. $datamanager = WeblcmsDataManager :: get_instance();
  79. $publication = $datamanager->retrieve_content_object_publication($pid);
  80. if (! $publication->is_visible_for_target_users() && ! ($this->parent->is_allowed(WeblcmsRights :: DELETE_RIGHT) || $this->parent->is_allowed(WeblcmsRights :: EDIT_RIGHT)))
  81. {
  82. return array();
  83. }
  84. return array($publication);
  85. }
  86. function get_publications($from, $count, $column, $direction)
  87. {
  88. $datamanager = WeblcmsDataManager :: get_instance();
  89. $tool_condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_TOOL, 'assessment');
  90. $condition = $tool_condition;
  91. $lo_condition = $this->get_condition();
  92. if ($this->parent->is_allowed(WeblcmsRights :: EDIT_RIGHT))
  93. {
  94. $user_id = null;
  95. $course_group_ids = null;
  96. }
  97. else
  98. {
  99. $user_id = $this->parent->get_user_id();
  100. $course_groups = $this->parent->get_course_groups();
  101. $course_group_ids = array();
  102. foreach ($course_groups as $course_group)
  103. {
  104. $course_group_ids[] = $course_group->get_id();
  105. }
  106. }
  107. $course = $this->parent->get_course_id();
  108. $conditions = array();
  109. $conditions[] = new EqualityCondition(ContentObjectPublication :: PROPERTY_COURSE_ID, $course);
  110. $conditions[] = new EqualityCondition(ContentObjectPublication :: PROPERTY_TOOL, 'assessment');
  111. /*$access = array();
  112. if (! empty($user_id) || ! empty($course_group_ids))
  113. {
  114. $access[] = new InCondition('user_id', $user_id, $datamanager->get_alias('content_object_publication_user'));
  115. $access[] = new InCondition('course_group_id', $course_group_ids, $datamanager->get_alias('content_object_publication_course_group'));
  116. $access[] = new AndCondition(array(new EqualityCondition('user_id', null, $datamanager->get_alias('content_object_publication_user')), new EqualityCondition('course_group_id', null, $datamanager->get_alias('content_object_publication_course_group'))));
  117. $conditions[] = new OrCondition($access);
  118. }*/
  119. $access = array();
  120. if ($user_id)
  121. {
  122. $access[] = new InCondition(ContentObjectPublicationUser :: PROPERTY_USER, $user_id, ContentObjectPublicationUser :: get_table_name());
  123. }
  124. if (count($course_group_ids) > 0)
  125. {
  126. $access[] = new InCondition(ContentObjectPublicationCourseGroup :: PROPERTY_COURSE_GROUP_ID, $course_group_ids, ContentObjectPublicationCourseGroup :: get_table_name());
  127. }
  128. if (! empty($user_id) || ! empty($course_group_ids))
  129. {
  130. $access[] = new AndCondition(array(
  131. new EqualityCondition(ContentObjectPublicationUser :: PROPERTY_USER, null, ContentObjectPublicationUser :: get_table_name()),
  132. new EqualityCondition(ContentObjectPublicationCourseGroup :: PROPERTY_COURSE_GROUP_ID, null, ContentObjectPublicationCourseGroup :: get_table_name())));
  133. }
  134. $conditions[] = new OrCondition($access);
  135. $subselect_conditions = array();
  136. $subselect_conditions[] = $this->get_condition();
  137. /*if($this->parent->get_condition())
  138. {
  139. $subselect_conditions[] = $this->parent->get_condition();
  140. }*/
  141. $subselect_condition = new AndCondition($subselect_conditions);
  142. $conditions[] = new SubselectCondition(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, ContentObject :: PROPERTY_ID, ContentObject :: get_table_name(), $subselect_condition, null, RepositoryDataManager :: get_instance());
  143. $condition = new AndCondition($conditions);
  144. $publications = $datamanager->retrieve_content_object_publications($condition);
  145. while ($publication = $publications->next_result())
  146. {
  147. // If the results is hidden and the user is not allowed to DELETE or EDIT, don't show this results
  148. if (! $publication->is_visible_for_target_users() && ! ($this->parent->is_allowed(WeblcmsRights :: DELETE_RIGHT) || $this->parent->is_allowed(WeblcmsRights :: EDIT_RIGHT)))
  149. {
  150. continue;
  151. }
  152. $visible_publications[] = $publication;
  153. }
  154. $publications = $visible_publications;
  155. return $publications;
  156. }
  157. /*
  158. * Inherited
  159. */
  160. function get_object_count()
  161. {
  162. return count($this->get_publications());
  163. }
  164. /**
  165. * Gets the condition by which the learning objects should be selected.
  166. * @return Condition The condition.
  167. */
  168. function get_condition()
  169. {
  170. $owner = $this->owner;
  171. $conds = array();
  172. $parent = $this->parent;
  173. $category = $parent->get_parameter(WeblcmsManager :: PARAM_CATEGORY);
  174. $category = $category ? $category : 0;
  175. $conds[] = new EqualityCondition(ContentObjectPublication :: PROPERTY_CATEGORY_ID, $category, ContentObjectPublication :: get_table_name());
  176. $type_cond = array();
  177. $types = array(Assessment :: get_type_name(), Hotpotatoes :: get_type_name());
  178. foreach ($types as $type)
  179. {
  180. $type_cond[] = new EqualityCondition(ContentObject :: PROPERTY_TYPE, $type);
  181. }
  182. $conds[] = new OrCondition($type_cond);
  183. $c = Utilities :: query_to_condition($this->query);
  184. if (! is_null($c))
  185. {
  186. $conds[] = $c;
  187. }
  188. return new AndCondition($conds);
  189. }
  190. }
  191. ?>