@@ -10137,4 +10137,130 @@ private static function compareByCourse($listA, $listB)
1013710137 return -1 ;
1013810138 }
1013910139 }
10140+
10141+ /**
10142+ * Export an Excel report for a specific course within a session.
10143+ *
10144+ * The report includes session details and a list of certified users
10145+ * with their extra field values.
10146+ *
10147+ * @param int $sessionId ID of the session
10148+ * @param string $courseCode Course code of the course in the session
10149+ */
10150+ public static function exportCourseSessionReport (int $ sessionId , string $ courseCode ): void
10151+ {
10152+ $ courseInfo = api_get_course_info ($ courseCode );
10153+ $ sessionInfo = api_get_session_info ($ sessionId );
10154+
10155+ if (empty ($ courseInfo ) || empty ($ sessionInfo )) {
10156+ die ('Invalid course or session. ' );
10157+ }
10158+
10159+ $ config = api_get_configuration_value ('session_course_excel_export ' );
10160+ $ sessionFields = $ config ['session_fields ' ] ?? [];
10161+ $ userFieldsBefore = $ config ['user_fields_before ' ] ?? [];
10162+ $ userFieldsAfter = $ config ['user_fields_after ' ] ?? [];
10163+
10164+ // 1. SESSION HEADER
10165+ $ header1 = ['' ];
10166+ $ header1 [] = get_lang ('StartDate ' );
10167+ $ header1 [] = get_lang ('EndDate ' );
10168+
10169+ $ extraField = new ExtraFieldModel ('session ' );
10170+ $ extraDefs = $ extraField ->get_all ();
10171+ $ extraDefsByVariable = array_column ($ extraDefs , null , 'variable ' );
10172+
10173+ foreach ($ sessionFields as $ field ) {
10174+ if (isset ($ extraDefsByVariable [$ field ])) {
10175+ $ header1 [] = $ extraDefsByVariable [$ field ]['display_text ' ] ?? strtoupper ($ field );
10176+ }
10177+ }
10178+
10179+ // 2. SESSION DATA
10180+ $ row2 = [$ courseInfo ['title ' ]];
10181+ $ row2 [] = $ sessionInfo ['access_start_date ' ];
10182+ $ row2 [] = $ sessionInfo ['access_end_date ' ];
10183+
10184+ $ extraValuesObj = new ExtraFieldValue ('session ' );
10185+ $ sessionExtra = $ extraValuesObj ->getAllValuesByItem ($ sessionId );
10186+ $ sessionExtraMap = array_column ($ sessionExtra , 'value ' , 'variable ' );
10187+
10188+ foreach ($ sessionFields as $ field ) {
10189+ $ value = $ sessionExtraMap [$ field ] ?? '' ;
10190+ $ row2 [] = $ value ;
10191+ }
10192+
10193+ // 3. USER HEADER
10194+ $ header3 = ['' ];
10195+ foreach ($ userFieldsBefore as $ field ) {
10196+ $ header3 [] = strtoupper ($ field );
10197+ }
10198+ $ header3 [] = get_lang ('FirstName ' );
10199+ $ header3 [] = get_lang ('LastName ' );
10200+ $ header3 [] = get_lang ('OfficialCode ' );
10201+ foreach ($ userFieldsAfter as $ field ) {
10202+ $ header3 [] = strtoupper ($ field );
10203+ }
10204+
10205+ // 4. USERS WITH CERTIFICATE
10206+ $ dataRows = [];
10207+
10208+ $ tblCat = Database::get_main_table (TABLE_MAIN_GRADEBOOK_CATEGORY );
10209+ $ sql = "
10210+ SELECT id FROM $ tblCat
10211+ WHERE course_code = ' " .Database::escape_string ($ courseCode )."'
10212+ AND session_id = " .intval ($ sessionId )."
10213+ AND generate_certificates = 1
10214+ LIMIT 1
10215+ " ;
10216+ $ res = Database::query ($ sql );
10217+ $ row = Database::fetch_array ($ res );
10218+ $ catId = $ row ? (int ) $ row ['id ' ] : 0 ;
10219+
10220+ if ($ catId > 0 ) {
10221+ $ tableCertificate = Database::get_main_table (TABLE_MAIN_GRADEBOOK_CERTIFICATE );
10222+ $ sql = "SELECT DISTINCT user_id FROM $ tableCertificate WHERE cat_id = $ catId " ;
10223+ $ res = Database::query ($ sql );
10224+
10225+ $ rowIndex = 0 ;
10226+ while ($ cert = Database::fetch_array ($ res )) {
10227+ $ userId = $ cert ['user_id ' ];
10228+ $ userInfo = api_get_user_info ($ userId );
10229+
10230+ $ row = [];
10231+ $ row [] = $ rowIndex === 0 ? get_lang ('Learners ' ) : '' ;
10232+
10233+ $ userExtraObj = new ExtraFieldValue ('user ' );
10234+ $ userExtra = $ userExtraObj ->getAllValuesByItem ($ userId );
10235+ $ userExtraMap = array_column ($ userExtra , 'value ' , 'variable ' );
10236+
10237+ foreach ($ userFieldsBefore as $ field ) {
10238+ $ value = $ userExtraMap [$ field ] ?? '' ;
10239+ $ row [] = $ value ;
10240+ }
10241+
10242+ $ row [] = $ userInfo ['firstname ' ];
10243+ $ row [] = $ userInfo ['lastname ' ];
10244+ $ row [] = $ userInfo ['official_code ' ] ?? '' ;
10245+
10246+ foreach ($ userFieldsAfter as $ field ) {
10247+ $ value = $ userExtraMap [$ field ] ?? '' ;
10248+ $ row [] = $ value ;
10249+ }
10250+
10251+ $ dataRows [] = $ row ;
10252+ $ rowIndex ++;
10253+ }
10254+ }
10255+
10256+ // 5. EXPORT FINAL
10257+ $ rows = [];
10258+ $ rows [] = $ header1 ;
10259+ $ rows [] = $ row2 ;
10260+ $ rows [] = $ header3 ;
10261+ $ rows = array_merge ($ rows , $ dataRows );
10262+
10263+ $ filename = 'session_ ' .$ sessionId .'_course_ ' .$ courseCode ;
10264+ Export::arrayToXls ($ rows , $ filename );
10265+ }
1014010266}
0 commit comments