teacher_time_report.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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. // Resetting the course id.
  11. $cidReset = true;
  12. // Including some necessary library files.
  13. require_once '../inc/global.inc.php';
  14. // Setting the section (for the tabs).
  15. $this_section = SECTION_PLATFORM_ADMIN;
  16. $interbreadcrumb[] = array("url" => 'index.php', "name" => get_lang('PlatformAdmin'));
  17. $toolName = get_lang('TeacherTimeReport');
  18. // Access restrictions.
  19. api_protect_admin_script();
  20. $startDate = new DateTime(api_get_local_time());
  21. $startDate->modify('first day of this month');
  22. $limitDate = new DateTime(api_get_local_time());
  23. $selectedCourse = isset($_REQUEST['course']) ? $_REQUEST['course'] : null;
  24. $selectedSession = isset($_REQUEST['session']) ? $_REQUEST['session'] : 0;
  25. $selectedTeacher = isset($_REQUEST['teacher']) ? $_REQUEST['teacher'] : 0;
  26. $selectedFrom = isset($_REQUEST['from']) && !empty($_REQUEST['from']) ? $_REQUEST['from'] : $startDate->format('Y-m-d');
  27. $selectedUntil = isset($_REQUEST['from']) && !empty($_REQUEST['until']) ? $_REQUEST['until'] : $limitDate->format('Y-m-d');
  28. $courseList = CourseManager::get_courses_list(0, 0, 'title');
  29. $sessionsList = SessionManager::get_sessions_list(array(), array('name'));
  30. $teacherList = UserManager::getTeachersList();
  31. $withFilter = false;
  32. $reportTitle = get_lang('TimeReportIncludingAllCoursesAndSessionsByTeacher');
  33. $reportSubTitle = sprintf(get_lang('TimeSpentBetweenXAndY'), $selectedFrom, $selectedUntil);
  34. $timeReport = new TeacherTimeReport();
  35. if (!empty($selectedCourse)) {
  36. $withFilter = true;
  37. $course = api_get_course_info($selectedCourse);
  38. $reportTitle = sprintf(get_lang('TimeReportForCourseX'), $course['title']);
  39. $teachers = CourseManager::get_teacher_list_from_course_code($selectedCourse);
  40. foreach ($teachers as $teacher) {
  41. $totalTime = UserManager::getTimeSpentInCourses(
  42. $teacher['user_id'],
  43. $course['real_id'],
  44. 0,
  45. $selectedFrom,
  46. $selectedUntil
  47. );
  48. $formattedTime = api_format_time($totalTime);
  49. $timeReport->data[] = array(
  50. 'session' => null,
  51. 'course' => array(
  52. 'id' => $course['real_id'],
  53. 'name' => $course['title']
  54. ),
  55. 'coach' => array(
  56. 'userId' => $teacher['user_id'],
  57. 'lastname' => $teacher['lastname'],
  58. 'firstname' => $teacher['firstname'],
  59. 'username' => $teacher['username'],
  60. 'completeName' => api_get_person_name($teacher['firstname'], $teacher['lastname'])
  61. ),
  62. 'totalTime' => $formattedTime
  63. );
  64. }
  65. $sessionsByCourse = SessionManager::get_session_by_course($course['real_id']);
  66. foreach ($sessionsByCourse as $session) {
  67. $coaches = CourseManager::get_coachs_from_course($session['id'], $course['real_id']);
  68. if ($coaches) {
  69. foreach ($coaches as $coach) {
  70. $totalTime = UserManager::getTimeSpentInCourses(
  71. $coach['user_id'],
  72. $course['real_id'],
  73. $session['id'],
  74. $selectedFrom,
  75. $selectedUntil
  76. );
  77. $formattedTime = api_format_time($totalTime);
  78. $timeReport->data[] = array(
  79. 'session' => array(
  80. 'id' => $session['id'],
  81. 'name' => $session['name']
  82. ),
  83. 'course' => array(
  84. 'id' => $course['real_id'],
  85. 'name' => $course['title']
  86. ),
  87. 'coach' => array(
  88. 'userId' => $coach['user_id'],
  89. 'lastname' => $coach['lastname'],
  90. 'firstname' => $coach['firstname'],
  91. 'username' => $coach['username'],
  92. 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])
  93. ),
  94. 'totalTime' => $formattedTime
  95. );
  96. }
  97. }
  98. }
  99. }
  100. if (!empty($selectedSession)) {
  101. $withFilter = true;
  102. $session = api_get_session_info($selectedSession);
  103. $sessionData = array(
  104. 'id' => $session['id'],
  105. 'name' => $session['name']
  106. );
  107. $reportTitle = sprintf(get_lang('TimeReportForSessionX'), $session['name']);
  108. $courses = SessionManager::get_course_list_by_session_id($selectedSession);
  109. foreach ($courses as $course) {
  110. $courseData = array(
  111. 'id' => $course['id'],
  112. 'name' => $course['title']
  113. );
  114. $coaches = CourseManager::get_coachs_from_course($selectedSession, $course['id']);
  115. if ($coaches) {
  116. foreach ($coaches as $coach) {
  117. $totalTime = UserManager::getTimeSpentInCourses(
  118. $coach['user_id'],
  119. $course['id'],
  120. $selectedSession,
  121. $selectedFrom,
  122. $selectedUntil
  123. );
  124. $formattedTime = api_format_time($totalTime);
  125. $timeReport->data[] = array(
  126. 'session' => $sessionData,
  127. 'course' => $courseData,
  128. 'coach' => array(
  129. 'userId' => $coach['user_id'],
  130. 'lastname' => $coach['lastname'],
  131. 'firstname' => $coach['firstname'],
  132. 'username' => $coach['username'],
  133. 'completeName' => api_get_person_name($coach['firstname'], $coach['lastname'])
  134. ),
  135. 'totalTime' => $formattedTime
  136. );
  137. }
  138. }
  139. }
  140. }
  141. if (!empty($selectedTeacher)) {
  142. $withFilter = true;
  143. $teacher = api_get_user_info();
  144. $teacherData = array(
  145. 'userId' => $teacher['user_id'],
  146. 'lastname' => $teacher['lastname'],
  147. 'firstname' => $teacher['firstname'],
  148. 'username' => $teacher['username'],
  149. 'completeName' => $teacher['complete_name']
  150. );
  151. $reportTitle = sprintf(get_lang('TimeReportForTeacherX'), $teacher['complete_name']);
  152. $courses = CourseManager::get_courses_list_by_user_id($selectedTeacher, false);
  153. if (!empty($courses)) {
  154. foreach ($courses as $course) {
  155. $courseInfo = api_get_course_info_by_id($course['real_id']);
  156. $totalTime = UserManager::getTimeSpentInCourses(
  157. $selectedTeacher,
  158. $course['real_id'],
  159. 0,
  160. $selectedFrom,
  161. $selectedUntil
  162. );
  163. $formattedTime = api_format_time($totalTime);
  164. $timeReport->data[] = array(
  165. 'session' => null,
  166. 'course' => array(
  167. 'id' => $courseInfo['real_id'],
  168. 'name' => $courseInfo['title']
  169. ),
  170. 'coach' => $teacherData,
  171. 'totalTime' => $formattedTime
  172. );
  173. }
  174. }
  175. $coursesInSession = SessionManager::getCoursesListByCourseCoach($selectedTeacher);
  176. foreach ($coursesInSession as $course) {
  177. $session = api_get_session_info($course['id_session']);
  178. $sessionData = array(
  179. 'id' => $session['id'],
  180. 'name' => $session['name']
  181. );
  182. $courseInfo = api_get_course_info_by_id($course['c_id']);
  183. $totalTime = UserManager::getTimeSpentInCourses(
  184. $selectedTeacher,
  185. $course['c_id'],
  186. $session['id'],
  187. $selectedFrom,
  188. $selectedUntil
  189. );
  190. $formattedTime = api_format_time($totalTime);
  191. $timeReport->data[] = array(
  192. 'session' => $sessionData,
  193. 'course' => array(
  194. 'id' => $course['c_id'],
  195. 'name' => $courseInfo['title']
  196. ),
  197. 'coach' => $teacherData,
  198. 'totalTime' => $formattedTime
  199. );
  200. }
  201. }
  202. if (empty($selectedCourse) && empty($selectedSession) && empty($selectedTeacher)) {
  203. foreach ($teacherList as &$teacher) {
  204. $timeReport->data[] = array(
  205. 'coach' => array(
  206. 'username' => $teacher['username'],
  207. 'completeName' => $teacher['completeName'],
  208. ),
  209. 'totalTime' => SessionManager::getTotalUserTimeInPlatform(
  210. $teacher['user_id'],
  211. $selectedFrom,
  212. $selectedUntil
  213. )
  214. );
  215. }
  216. }
  217. $timeReport->sortData($withFilter);
  218. if (isset($_GET['export'])) {
  219. $dataToExport = $timeReport->prepareDataToExport($withFilter);
  220. $fileName = get_lang('TeacherTimeReport') . ' ' . api_get_local_time();
  221. switch ($_GET['export']) {
  222. case 'pdf':
  223. $params = array(
  224. 'add_signatures' => false,
  225. 'filename' => $fileName,
  226. 'pdf_title' => "$reportTitle - $reportSubTitle",
  227. 'pdf_description' => get_lang('TeacherTimeReport'),
  228. 'format' => 'A4-L',
  229. 'orientation' => 'L'
  230. );
  231. $pdfContent = Export::convert_array_to_html($dataToExport);
  232. Export::export_html_to_pdf($pdfContent, $params);
  233. break;
  234. case 'xls':
  235. array_unshift($dataToExport, array(
  236. $reportTitle
  237. ), array(
  238. $reportSubTitle
  239. ), array());
  240. Export::export_table_xls_html($dataToExport, $fileName);
  241. break;
  242. }
  243. die;
  244. }
  245. // view
  246. //hack for daterangepicker
  247. $startDate->modify('+1 day');
  248. $limitDate->modify('+1 day');
  249. $tpl = new Template($toolName);
  250. $tpl->assign('reportTitle', $reportTitle);
  251. $tpl->assign('reportSubTitle', $reportSubTitle);
  252. $tpl->assign('filterStartDate', $startDate->format('Y-m-d'));
  253. $tpl->assign('filterEndDate', $limitDate->format('Y-m-d'));
  254. $tpl->assign('filterMaxDate', $limitDate->format('Y-m-d'));
  255. $tpl->assign('selectedCourse', $selectedCourse);
  256. $tpl->assign('selectedSession', $selectedSession);
  257. $tpl->assign('selectedTeacher', $selectedTeacher);
  258. $tpl->assign('selectedFrom', $selectedFrom);
  259. $tpl->assign('selectedUntil', $selectedUntil);
  260. $tpl->assign('withFilter', $withFilter);
  261. $tpl->assign('courses', $courseList);
  262. $tpl->assign('sessions', $sessionsList);
  263. $tpl->assign('courseCoaches', $teacherList);
  264. $tpl->assign('rows', $timeReport->data);
  265. $contentTemplate = $tpl->get_template('admin/teacher_time_report.tpl');
  266. $tpl->display($contentTemplate);