diff --git a/main/mySpace/work_stats.php b/main/mySpace/work_stats.php new file mode 100644 index 0000000000..c90a27b7c7 --- /dev/null +++ b/main/mySpace/work_stats.php @@ -0,0 +1,211 @@ + api_is_student_boss() ? '#' : 'index.php', + 'name' => get_lang('MySpace'), +]; + +function get_count_users() +{ + $courseCode = api_get_course_id(); + $sessionId = api_get_session_id(); + + return CourseManager::get_user_list_from_course_code( + $courseCode, + $sessionId, + null, + null, + null, + true + ); +} + +function get_users($from, $number_of_items, $column, $direction) +{ + $consideredWorkingTime = api_get_configuration_value('considered_working_time'); + + $courseId = api_get_course_int_id(); + $courseCode = api_get_course_id(); + $sessionId = api_get_session_id(); + $webCodePath = api_get_path(WEB_CODE_PATH); + + $lastConnectionDate = null; + $is_western_name_order = api_is_western_name_order(); + $limit = null; + $from = (int) $from; + $number_of_items = (int) $number_of_items; + $limit = 'LIMIT '.$from.','.$number_of_items; + + $students = CourseManager::get_user_list_from_course_code( + $courseCode, + $sessionId, + $limit, + null, + null, + false + ); + $url = $webCodePath.'mySpace/myStudents.php'; + + $workList = getWorkListTeacher(0, 100, null, null, null); + + $totalCourseWorkTime = 0; + $workTimeList = []; + foreach ($workList as $work) { + $fieldValue = new ExtraFieldValue('work'); + $resultExtra = $fieldValue->getAllValuesForAnItem( + $work['id'], + true + ); + + foreach ($resultExtra as $field) { + $field = $field['value']; + if ($consideredWorkingTime == $field->getField()->getVariable()) { + $time = $field->getValue(); + $parsed = date_parse($time); + $workTimeList[$work['id']] = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second']; + + break; + } + } + } + + $all_datas = []; + foreach ($students as $studentData) { + $studentId = $studentData['user_id']; + $studentData = api_get_user_info($studentId); + $urlDetails = $url."?student=$studentId"; + $row = []; + if ($is_western_name_order) { + $first = Display::url($studentData['firstname'], $urlDetails); + $last = Display::url($studentData['lastname'], $urlDetails); + } else { + $first = Display::url($studentData['lastname'], $urlDetails); + $last = Display::url($studentData['firstname'], $urlDetails); + } + + $row[] = $first; + $row[] = $last; + + $timeInSeconds = Tracking::get_time_spent_on_the_course( + $studentId, + $courseId, + $sessionId + ); + + $row[] = api_time_to_hms($timeInSeconds); + + $userWorkTime = 0; + foreach ($workList as $work) { + $userWorks = get_work_user_list( + 0, + 100, + null, + null, + $work['id'], + null, + $studentId, + false, + $courseId, + $sessionId + ); + + if ($userWorks) { + foreach ($userWorks as $work) { + $userWorkTime += $workTimeList[$work['parent_id']]; + } + } + } + + $row[] = api_time_to_hms($userWorkTime); + $status = ''; + if ($userWorkTime && $timeInSeconds) { + if ($userWorkTime > $timeInSeconds) { + $status = Display::label('TimeToFix', 'warning'); + } else { + $status = Display::label('Ok', 'success'); + } + } + + $row[] = $status; + /*$detailsLink = Display::url( + Display::return_icon('2rightarrow.png', get_lang('Details').' '.$studentData['username']), + $urlDetails, + ['id' => 'details_'.$studentData['username']] + ); + $row[] = $detailsLink;*/ + $all_datas[] = $row; + } + + return $all_datas; +} + +$is_western_name_order = api_is_western_name_order(); + +$sort_by_first_name = api_sort_by_first_name(); +$actionsLeft = ''; +$toolbar = Display::toolbarAction('toolbar-student', [$actionsLeft]); + +$itemPerPage = 10; +$perPage = api_get_configuration_value('my_space_users_items_per_page'); +if ($perPage) { + $itemPerPage = (int) $perPage; +} + +$table = new SortableTable( + 'tracking_work_student', + 'get_count_users', + 'get_users', + ($is_western_name_order xor $sort_by_first_name) ? 1 : 0, + $itemPerPage +); + +$parameters =['cidReq' => $courseCode, 'id_session' => $sessionId]; +$table->set_additional_parameters($parameters); + +if ($is_western_name_order) { + $table->set_header(0, get_lang('FirstName'), false); + $table->set_header(1, get_lang('LastName'), false); +} else { + $table->set_header(0, get_lang('LastName'), false); + $table->set_header(1, get_lang('FirstName'), false); +} + +$table->set_header(2, get_lang('TimeSpentInTheCourse'), false); +$table->set_header(3, get_lang('TimeSpentInWork'), false); +$table->set_header(4, get_lang('Status'), false); + +Display::display_header($nameTools); +echo $toolbar; +echo Display::page_subheader($nameTools); +$table->display(); + +Display::display_footer();