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

/php/reporting/blocks/weblcms_assignment_user_information_reporting_block.class.php

https://bitbucket.org/chamilo/chamilo-app-weblcms/
PHP | 138 lines | 112 code | 18 blank | 8 comment | 6 complexity | 42ae891038db4873593e070240950ce7 MD5 | raw file
  1. <?php
  2. namespace application\weblcms;
  3. use common\libraries\Application;
  4. use common\libraries\Request;
  5. use common\libraries\DatetimeUtilities;
  6. use common\libraries\Utilities;
  7. use common\libraries\Redirect;
  8. use common\libraries\Translation;
  9. use common\libraries\Path;
  10. use common\libraries\PatternMatchCondition;
  11. use reporting\ReportingFormatter;
  12. use reporting\ReportingData;
  13. use common\libraries\EqualityCondition;
  14. use user\UserDataManager;
  15. use common\libraries\AndCondition;
  16. use application\weblcms\tool\assignment\AssignmentTool;
  17. use repository\content_object\assignment\Assignment;
  18. use group\GroupDataManager;
  19. use common\libraries\InCondition;
  20. require_once dirname(__FILE__) . '/../weblcms_tool_reporting_block.class.php';
  21. require_once Path :: get_reporting_path() . '/lib/reporting_data.class.php';
  22. /**
  23. * @package application.weblcms.php.reporting.blocks
  24. *
  25. * Reporting block displaying information about the assignment and the user
  26. *
  27. * @author Joris Willems <joris.willems@gmail.com>
  28. * @author Alexander Van Paemel
  29. */
  30. class WeblcmsAssignmentUserInformationReportingBlock extends WeblcmsToolReportingBlock
  31. {
  32. public function count_data()
  33. {
  34. $reporting_data = new ReportingData();
  35. $publication_id = $this->get_pid();
  36. $course_id = $this->get_course_id();
  37. $submitter_type = Request :: get(AssignmentTool :: PARAM_SUBMITTER_TYPE);
  38. $target_id = Request :: get(AssignmentTool :: PARAM_TARGET_ID);
  39. if($submitter_type == WeblcmsAssignmentSubmissionsTracker :: SUBMITTER_TYPE_USER)
  40. {
  41. $reporting_data->set_categories(array(Translation :: get('Title'), Translation :: get('Course'),
  42. Translation :: get('User'), Translation :: get('AverageScore')));
  43. }
  44. else
  45. {
  46. $reporting_data->set_categories(array(Translation :: get('Title'), Translation :: get('Course'),
  47. Translation :: get('Group'), Translation :: get('AverageScore')));
  48. }
  49. $weblcms_data_manager = WeblcmsDataManager :: get_instance();
  50. $publication = $weblcms_data_manager->retrieve_content_object_publication($publication_id);
  51. $condition = new EqualityCondition(Course :: PROPERTY_ID, $course_id);
  52. $courses_resultset = $weblcms_data_manager->retrieve_courses($condition);
  53. $course = $courses_resultset->next_result();
  54. $assignment = $publication->get_content_object();
  55. $params = array();
  56. $params[Application :: PARAM_ACTION] = WeblcmsManager :: ACTION_VIEW_COURSE;
  57. $params[Application :: PARAM_APPLICATION] = WeblcmsManager :: APPLICATION_NAME;
  58. $params[WeblcmsManager :: PARAM_COURSE] = $course_id;
  59. $params[WeblcmsManager :: PARAM_TOOL] = Assignment :: get_type_name();
  60. $params[WeblcmsManager :: PARAM_PUBLICATION] = $publication_id;
  61. $params[WeblcmsManager :: PARAM_TOOL_ACTION] = Tool :: ACTION_VIEW;
  62. $url_title = Redirect :: get_url($params);
  63. $reporting_data->set_rows(array(Translation :: get('Details')));
  64. $reporting_data->add_data_category_row(Translation :: get('Title'), Translation :: get('Details'), '<a href="' . $url_title . '">' . $assignment->get_title() . '</a>');
  65. $reporting_data->add_data_category_row(Translation :: get('Course'), Translation :: get('Details'), $course->get_name());
  66. if($submitter_type == WeblcmsAssignmentSubmissionsTracker :: SUBMITTER_TYPE_USER)
  67. {
  68. $user_data_manager = UserDataManager :: get_instance();
  69. $user = $user_data_manager->retrieve_user($target_id);
  70. $reporting_data->add_data_category_row(Translation :: get('User'), Translation :: get('Details'), $user->get_fullname());
  71. }
  72. else
  73. {
  74. if($submitter_type == WeblcmsAssignmentSubmissionsTracker :: SUBMITTER_TYPE_COURSE_GROUP)
  75. {
  76. $group = $weblcms_data_manager->retrieve_course_group($target_id);
  77. }
  78. else
  79. {
  80. $group_data_manager = GroupDataManager :: get_instance();
  81. $group = $group_data_manager->retrieve_group($target_id);
  82. }
  83. $reporting_data->add_data_category_row(Translation :: get('Group'), Translation :: get('Details'), $group->get_name());
  84. }
  85. $submissions_tracker = new WeblcmsAssignmentSubmissionsTracker();
  86. $conditions = array();
  87. $conditions[] = new EqualityCondition(WeblcmsAssignmentSubmissionsTracker :: PROPERTY_PUBLICATION_ID, $publication_id);
  88. $conditions[] = new EqualityCondition(WeblcmsAssignmentSubmissionsTracker :: PROPERTY_SUBMITTER_TYPE, $submitter_type);
  89. $conditions[] = new EqualityCondition(WeblcmsAssignmentSubmissionsTracker :: PROPERTY_SUBMITTER_ID, $target_id);
  90. $condition = new AndCondition($conditions);
  91. $submissions = $submissions_tracker->retrieve_tracker_items($condition);
  92. $submission_ids = array();
  93. foreach($submissions as $submission)
  94. {
  95. $submission_ids[] = $submission->get_id();
  96. }
  97. $score_tracker = new WeblcmsSubmissionScoreTracker();
  98. $condition = new InCondition(WeblcmsSubmissionScoreTracker :: PROPERTY_SUBMISSION_ID, $submission_ids);
  99. $scores = $score_tracker->retrieve_tracker_items($condition);
  100. $avg_score = 0;
  101. foreach($scores as $score)
  102. {
  103. $avg_score += $score->get_score();
  104. }
  105. $avg_score = number_format($avg_score / count($scores), 2) . '%';
  106. $reporting_data->add_data_category_row(Translation :: get('AverageScore'), Translation :: get('Details'), $avg_score);
  107. return $reporting_data;
  108. }
  109. public function retrieve_data()
  110. {
  111. return $this->count_data();
  112. }
  113. public function get_available_displaymodes()
  114. {
  115. $modes = array();
  116. $modes[ReportingFormatter :: DISPLAY_TABLE] = Translation :: get('Table');
  117. return $modes;
  118. }
  119. }
  120. ?>