teacher_time_report.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * Generate a teacher time report in platform or sessions/courses
  5. *
  6. * @author Angel Fernando Quiroz Campos <angel.quiroz@beeznest.com>
  7. * @package chamilo.admin
  8. */
  9. /* INIT SECTION */
  10. // Language files that need to be included.
  11. if (isset($_GET['category']) && $_GET['category'] == 'Templates') {
  12. $language_file = array('admin', 'document');
  13. } else if (isset($_GET['category']) && $_GET['category'] == 'Gradebook') {
  14. $language_file = array('admin', 'gradebook');
  15. } else {
  16. $language_file = array('admin', 'document');
  17. }
  18. $language_file[] = 'tracking';
  19. // Resetting the course id.
  20. $cidReset = true;
  21. // Including some necessary library files.
  22. require_once '../inc/global.inc.php';
  23. require_once api_get_path(LIBRARY_PATH) . 'TeacherTimeReport.php';
  24. // Setting the section (for the tabs).
  25. $this_section = SECTION_PLATFORM_ADMIN;
  26. $interbreadcrumb[] = array("url" => 'index.php', "name" => get_lang('PlatformAdmin'));
  27. $toolName = get_lang('TeacherTimeReport');
  28. // Access restrictions.
  29. api_protect_admin_script();
  30. $startDate = new DateTime(api_get_local_time());
  31. $startDate->modify('first day of this month');
  32. $limitDate = new DateTime(api_get_local_time());
  33. $selectedCourse = isset($_REQUEST['course']) ? $_REQUEST['course'] : null;
  34. $selectedSession = isset($_REQUEST['session']) ? $_REQUEST['session'] : 0;
  35. $selectedTeacher = isset($_REQUEST['teacher']) ? $_REQUEST['teacher'] : 0;
  36. $selectedFrom = isset($_REQUEST['from']) && !empty($_REQUEST['from']) ? $_REQUEST['from'] : $startDate->format('Y-m-d');
  37. $selectedUntil = isset($_REQUEST['from']) && !empty($_REQUEST['until']) ? $_REQUEST['until'] : $limitDate->format('Y-m-d');
  38. $courseList = CourseManager::get_courses_list(0, 0, 'title');
  39. $sessionsList = SessionManager::get_sessions_list(array(), array('name'));
  40. $teacherList = UserManager::getTeachersList();
  41. $htmlHeadXtra[] = '
  42. <script src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/daterange/moment.min.js"></script>
  43. <link rel="stylesheet" href="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/daterange/daterangepicker-bs2.css">
  44. <script src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/daterange/daterangepicker.js"></script>';
  45. $withFilter = false;
  46. $reportTitle = get_lang('TimeReportIncludingAllCoursesAndSessionsByTeacher');
  47. $reportSubTitle = sprintf(get_lang('TimeSpentBetweenXAndY'), $selectedFrom, $selectedUntil);
  48. $timeReport = new TeacherTimeReport();
  49. if (!empty($selectedCourse)) {
  50. $withFilter = true;
  51. $course = api_get_course_info($selectedCourse);
  52. $reportTitle = sprintf(get_lang('TimeReportForCourseX'), $course['title']);
  53. $sessionsByCourse = SessionManager::get_session_by_course($selectedCourse);
  54. foreach ($sessionsByCourse as $session) {
  55. $coaches = CourseManager::get_coachs_from_course($session['id'], $selectedCourse);
  56. if ($coaches) {
  57. foreach ($coaches as $coach) {
  58. $totalTime = SessionManager::getUserTimeInCourse(
  59. $coach['user_id'],
  60. $selectedCourse,
  61. $session['id'],
  62. $selectedFrom,
  63. $selectedUntil
  64. );
  65. $timeReport->data[] = array(
  66. 'session' => array(
  67. 'id' => $session['id'],
  68. 'name' => $session['name']
  69. ),
  70. 'course' => array(
  71. 'id' => $course['real_id'],
  72. 'name' => $course['title']
  73. ),
  74. 'coach' => array(
  75. 'userId' => $coach['user_id'],
  76. 'lastname' => $coach['lastname'],
  77. 'firstname' => $coach['firstname'],
  78. 'username' => $coach['username'],
  79. 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])
  80. ),
  81. 'totalTime' => $totalTime
  82. );
  83. }
  84. }
  85. }
  86. }
  87. if (!empty($selectedSession)) {
  88. $withFilter = true;
  89. $session = api_get_session_info($selectedSession);
  90. $reportTitle = sprintf(get_lang('TimeReportForSessionX'), $session['name']);
  91. $courses = SessionManager::get_course_list_by_session_id($selectedSession);
  92. foreach ($courses as $course) {
  93. $coaches = CourseManager::get_coachs_from_course($selectedSession, $course['code']);
  94. if ($coaches) {
  95. foreach ($coaches as $coach) {
  96. $totalTime = SessionManager::getUserTimeInCourse(
  97. $coach['user_id'],
  98. $course['code'],
  99. $selectedSession,
  100. $selectedFrom,
  101. $selectedUntil
  102. );
  103. $timeReport->data[] = array(
  104. 'session' => array(
  105. 'id' => $session['id'],
  106. 'name' => $session['name']
  107. ),
  108. 'course' => array(
  109. 'id' => $course['id'],
  110. 'name' => $course['title']
  111. ),
  112. 'coach' => array(
  113. 'userId' => $coach['user_id'],
  114. 'lastname' => $coach['lastname'],
  115. 'firstname' => $coach['firstname'],
  116. 'username' => $coach['username'],
  117. 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])
  118. ),
  119. 'totalTime' => $totalTime
  120. );
  121. }
  122. }
  123. }
  124. }
  125. if (!empty($selectedTeacher)) {
  126. $withFilter = true;
  127. $coach = api_get_user_info($selectedTeacher);
  128. $reportTitle = sprintf(get_lang('TimeReportForTeacherX'), $coach['complete_name']);
  129. $courses = SessionManager::getCoursesListByCourseCoach($selectedTeacher);
  130. foreach ($courses as $course) {
  131. $session = api_get_session_info($course['id_session']);
  132. $courseInfo = api_get_course_info($course['course_code']);
  133. $totalTime = SessionManager::getUserTimeInCourse(
  134. $selectedTeacher,
  135. $course['course_code'],
  136. $session['id'],
  137. $selectedFrom,
  138. $selectedUntil
  139. );
  140. $timeReport->data[] = array(
  141. 'session' => array(
  142. 'id' => $session['id'],
  143. 'name' => $session['name']
  144. ),
  145. 'course' => array(
  146. 'id' => $courseInfo['real_id'],
  147. 'name' => $courseInfo['title']
  148. ),
  149. 'coach' => array(
  150. 'userId' => $coach['user_id'],
  151. 'lastname' => $coach['lastname'],
  152. 'firstname' => $coach['firstname'],
  153. 'username' => $coach['username'],
  154. 'completeName' => $coach['complete_name']
  155. ),
  156. 'totalTime' => $totalTime
  157. );
  158. }
  159. }
  160. if (empty($selectedCourse) && empty($selectedSession) && empty($selectedTeacher)) {
  161. foreach ($teacherList as &$teacher) {
  162. $timeReport->data[] = array(
  163. 'coach' => array(
  164. 'username' => $teacher['username'],
  165. 'completeName' => $teacher['completeName'],
  166. ),
  167. 'totalTime' => SessionManager::getTotalUserTimeInPlatform($teacher['user_id'], $selectedFrom, $selectedUntil)
  168. );
  169. }
  170. }
  171. $timeReport->sortData($withFilter);
  172. if (isset($_GET['export'])) {
  173. require_once api_get_path(LIBRARY_PATH) . 'export.lib.inc.php';
  174. $dataToExport = $timeReport->prepareDataToExport($withFilter);
  175. $fileName = get_lang('TeacherTimeReport') . ' ' . api_get_local_time();
  176. switch ($_GET['export']) {
  177. case 'pdf':
  178. $params = array(
  179. 'add_signatures' => false,
  180. 'filename' => $fileName,
  181. 'pdf_title' => "$reportTitle - $reportSubTitle",
  182. 'pdf_description' => get_lang('TeacherTimeReport'),
  183. 'format' => 'A4-L',
  184. 'orientation' => 'L'
  185. );
  186. $pdfContent = Export::convert_array_to_html($dataToExport);
  187. Export::export_html_to_pdf($pdfContent, $params);
  188. break;
  189. case 'xls':
  190. array_unshift($dataToExport, array(
  191. $reportTitle
  192. ), array(
  193. $reportSubTitle
  194. ), array());
  195. Export::export_table_xls_html($dataToExport, $fileName);
  196. break;
  197. }
  198. die;
  199. }
  200. // view
  201. //hack for daterangepicker
  202. $startDate->modify('+1 day');
  203. $limitDate->modify('+1 day');
  204. $tpl = new Template($toolName);
  205. $tpl->assign('reportTitle', $reportTitle);
  206. $tpl->assign('reportSubTitle', $reportSubTitle);
  207. $tpl->assign('filterStartDate', $startDate->format('Y-m-d'));
  208. $tpl->assign('filterEndDate', $limitDate->format('Y-m-d'));
  209. $tpl->assign('filterMaxDate', $limitDate->format('Y-m-d'));
  210. $tpl->assign('selectedCourse', $selectedCourse);
  211. $tpl->assign('selectedSession', $selectedSession);
  212. $tpl->assign('selectedTeacher', $selectedTeacher);
  213. $tpl->assign('selectedFrom', $selectedFrom);
  214. $tpl->assign('selectedUntil', $selectedUntil);
  215. $tpl->assign('withFilter', $withFilter);
  216. $tpl->assign('courses', $courseList);
  217. $tpl->assign('sessions', $sessionsList);
  218. $tpl->assign('courseCoaches', $teacherList);
  219. $tpl->assign('rows', $timeReport->data);
  220. $contentTemplate = $tpl->get_template('admin/teacher_time_report.tpl');
  221. $tpl->display($contentTemplate);