getRepository('ChamiloCoreBundle:Session'); $session = $sessionRepository->find($sessionItemId); Session::write('id_session', $sessionItemId); if ($session->getNbrCourses() > 0) { $courses = $session->getCourses(); $courseList = []; foreach ($courses as $sessionRelCourse) { $courseList[] = $sessionRelCourse->getCourse(); } foreach ($courseList as $course) { $courseId = $course->getId(); $courseInfo = api_get_course_info_by_id($courseId); $addExerciseOption = api_get_configuration_value('add_exercise_best_attempt_in_report'); $sortByFirstName = api_sort_by_first_name(); $bestScoreLabel = get_lang('Score').' - '.get_lang('BestAttempt'); $courseCode = $courseInfo['code']; $csvHeaders = []; $csvHeaders[] = get_lang('OfficialCode'); if ($sortByFirstName) { $csvHeaders[] = get_lang('FirstName'); $csvHeaders[] = get_lang('LastName'); } else { $csvHeaders[] = get_lang('LastName'); $csvHeaders[] = get_lang('FirstName'); } $csvHeaders[] = get_lang('Login'); $csvHeaders[] = get_lang('TrainingTime'); $csvHeaders[] = get_lang('CourseProgress'); $csvHeaders[] = get_lang('ExerciseProgress'); $csvHeaders[] = get_lang('ExerciseAverage'); $csvHeaders[] = get_lang('Score'); $csvHeaders[] = $bestScoreLabel; $exerciseResultHeaders = []; if (!empty($addExerciseOption) && isset($addExerciseOption['courses']) && isset($addExerciseOption['courses'][$courseCode]) ) { foreach ($addExerciseOption['courses'][$courseCode] as $exerciseId) { $exercise = new Exercise(); $exercise->read($exerciseId); if ($exercise->iid) { $title = get_lang('Exercise').': '.$exercise->get_formated_title(); $table->set_header( $headerCounter++, $title, false ); $exerciseResultHeaders[] = $title; $headers['exercise_'.$exercise->iid] = $title; } } } $csvHeaders[] = get_lang('Student_publication'); $csvHeaders[] = get_lang('Messages'); $csvHeaders[] = get_lang('Classes'); $csvHeaders[] = get_lang('RegistrationDate'); $csvHeaders[] = get_lang('FirstLoginInCourse'); $csvHeaders[] = get_lang('LatestLoginInCourse'); $studentList = CourseManager::get_student_list_from_course_code( $courseCode, true, $sessionItemId ); $nbStudents = count($studentList); // Set global variables used by get_user_data() $user_ids = array_keys($studentList); $session_id = $sessionItemId; $course_code = $courseCode; $export_csv = true; $csvContentInSession = TrackingCourseLog::getUserData( null, $nbStudents, null, null, [] ); array_unshift($csvContentInSession, $csvHeaders); $sessionInfo = api_get_session_info($sessionItemId); $sessionDates = SessionManager::parseSessionDates($sessionInfo); array_unshift($csvContentInSession, [get_lang('Date'), $sessionDates['access']]); array_unshift($csvContentInSession, [get_lang('SessionName'), Security::remove_XSS($sessionInfo['name'])]); $csvList[] = [ 'session_id' => $sessionItemId, 'session_name' => $session->getName(), 'course_id' => $courseId, 'course_name' => $courseInfo['name'], 'path' => Export::arrayToCsv($csvContentInSession, '', true), ]; } } } foreach ($csvList as $csv) { $newFileName = $csv['session_id'].'_'.$csv['session_name']; $newFileName .= '-'.$csv['course_id'].'_'.$csv['course_name'].'.csv'; $zip->add( [ [ PCLZIP_ATT_FILE_NAME => $csv['path'], PCLZIP_ATT_FILE_NEW_FULL_NAME => $newFileName, ], ], 'fixDocumentNameCallback' ); unlink($csv['path']); } DocumentManager::file_send_for_download( $tempZipFile, true ); unlink($tempZipFile); exit; break; } $tool_name = get_lang('SessionList'); Display::display_header($tool_name); $courseId = isset($_GET['course_id']) ? $_GET['course_id'] : null; $sessionFilter = new FormValidator( 'course_filter', 'get', '', '', [], FormValidator::LAYOUT_INLINE ); $courseSelect = $sessionFilter->addElement( 'select_ajax', 'course_name', get_lang('SearchCourse'), null, ['url' => api_get_path(WEB_AJAX_PATH).'course.ajax.php?a=search_course'] ); if (!empty($courseId)) { $courseInfo = api_get_course_info_by_id($courseId); $parents = CourseCategory::getParentsToString($courseInfo['categoryCode']); $courseSelect->addOption($parents.$courseInfo['title'], $courseInfo['code'], ['selected' => 'selected']); } $url = api_get_self(); $actions = ' '; // jqgrid will use this URL to do the selects if (!empty($courseId)) { $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&course_id='.$courseId; } else { $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions'; } if (isset($_REQUEST['keyword'])) { // Begin with see the searchOper param $filter = new stdClass(); $filter->groupOp = 'OR'; $rule = new stdClass(); $rule->field = 'category_name'; $rule->op = 'in'; $rule->data = Security::remove_XSS($_REQUEST['keyword']); $filter->rules[] = $rule; $filter->groupOp = 'OR'; $filter = json_encode($filter); $url = api_get_path(WEB_AJAX_PATH). 'model.ajax.php?a=get_sessions&_force_search=true&rows=20&page=1&sidx=&sord=asc&filters='.$filter.'&searchField=s.name&searchString='.Security::remove_XSS($_REQUEST['keyword']).'&searchOper=in'; } if (isset($_REQUEST['id_category'])) { $sessionCategory = SessionManager::get_session_category($_REQUEST['id_category']); if (!empty($sessionCategory)) { // Begin with see the searchOper param $url = api_get_path(WEB_AJAX_PATH). 'model.ajax.php?a=get_sessions&_force_search=true&rows=20&page=1&sidx=&sord=asc&filters=&searchField=sc.name&searchString='.Security::remove_XSS($sessionCategory['name']).'&searchOper=in'; } } $url .= '&list_type='.$listType; $result = SessionManager::getGridColumns($listType); $columns = $result['columns']; $column_model = $result['column_model']; $extra_params['autowidth'] = 'true'; $extra_params['height'] = 'auto'; switch ($listType) { case 'custom': $extra_params['sortname'] = 'display_end_date'; $extra_params['sortorder'] = 'desc'; break; } if (!isset($_GET['keyword'])) { $extra_params['postData'] = [ 'filters' => [ 'groupOp' => 'AND', 'rules' => $result['rules'], ], ]; } $hideSearch = api_get_configuration_value('hide_search_form_in_session_list'); $copySessionContentLink = ''; if ($addSessionContent) { $copySessionContentLink = ' '. Display::return_icon('copy.png', get_lang('CopyWithSessionContent'), '', ICON_SIZE_SMALL).''; } // With this function we can add actions to the jgrid (edit, delete, etc) $action_links = 'function action_formatter(cellvalue, options, rowObject) { return \''. Display::return_icon('edit.png', get_lang('Edit'), '', ICON_SIZE_SMALL).''. ' '. Display::return_icon('user_subscribe_session.png', get_lang('SubscribeUsersToSession'), '', ICON_SIZE_SMALL).''. ' '. Display::return_icon('courses_to_session.png', get_lang('SubscribeCoursesToSession'), '', ICON_SIZE_SMALL).''. ' '. Display::return_icon('copy_partial.png', get_lang('Copy'), '', ICON_SIZE_SMALL).''. $copySessionContentLink. ' '. Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL).''. '\'; }'; $urlAjaxExtraField = api_get_path(WEB_AJAX_PATH).'extra_field.ajax.php?1=1'; $allowOrder = api_get_configuration_value('session_list_order'); $orderUrl = api_get_path(WEB_AJAX_PATH).'session.ajax.php?a=order'; $deleteUrl = api_get_self().'?list_type='.$listType.'&action=delete_multiple'; $copyUrl = api_get_self().'?list_type='.$listType.'&action=copy_multiple'; $exportUrl = api_get_self().'?list_type='.$listType.'&action=export_multiple'; $exportCsvUrl = api_get_self().'?list_type='.$listType.'&action=export_csv'; $extra_params['multiselect'] = true; ?>