@@ -10137,4 +10137,130 @@ private static function compareByCourse($listA, $listB)
10137
10137
return -1 ;
10138
10138
}
10139
10139
}
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
+ }
10140
10266
}
0 commit comments