From 012b4aea3954a3dc415bb742016ce9cbf8771f2d Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 7 Dec 2022 01:34:13 -0500 Subject: [PATCH 1/5] Session: Allow to don't include session users when exporting session list - refs BT#20364 --- main/session/session_export.php | 135 ++++++++++++++++++++------------ 1 file changed, 84 insertions(+), 51 deletions(-) diff --git a/main/session/session_export.php b/main/session/session_export.php index 71d958c7b8..0dc16464d6 100644 --- a/main/session/session_export.php +++ b/main/session/session_export.php @@ -33,8 +33,10 @@ $interbreadcrumb[] = ['url' => 'session_list.php', 'name' => get_lang('SessionLi set_time_limit(0); if (isset($_POST['formSent'])) { $formSent = $_POST['formSent']; - $file_type = isset($_POST['file_type']) ? $_POST['file_type'] : 'csv'; + $file_type = $_POST['file_type'] ?? 'csv'; $session_id = $_POST['session_id']; + $includeUsers = !isset($_POST['no_include_users']); + if (empty($session_id)) { $sql = "SELECT s.id, @@ -64,22 +66,22 @@ if (isset($_POST['formSent'])) { } } - $result = Database::query($sql); } else { $sql = "SELECT s.id,name,username,access_start_date,access_end_date,visibility,session_category_id FROM $tbl_session s INNER JOIN $tbl_user ON $tbl_user.user_id = s.id_coach WHERE s.id='$session_id'"; - $result = Database::query($sql); } + $result = Database::query($sql); + if (Database::num_rows($result)) { $sessionListToExport = []; if (in_array($file_type, ['csv', 'xls'])) { $archiveFile = 'export_sessions_'.$session_id.'_'.api_get_local_time(); $cvs = true; - $sessionListToExport[] = [ + $exportHeaders = [ 'SessionId', 'SessionName', 'Coach', @@ -87,9 +89,15 @@ if (isset($_POST['formSent'])) { 'DateEnd', 'Visibility', 'SessionCategory', - 'Users', - 'Courses', ]; + + if ($includeUsers) { + $exportHeaders[] = 'Users'; + } + + $exportHeaders[] = 'Courses'; + + $sessionListToExport[] = $exportHeaders; } else { if (!file_exists($archivePath)) { mkdir($archivePath, api_get_permissions_for_new_directories(), true); @@ -119,26 +127,30 @@ if (isset($_POST['formSent'])) { $row['visibility'] = str_replace(';', ',', $row['visibility']); $row['session_category'] = str_replace(';', ',', $row['session_category_id']); // users - $sql = "SELECT DISTINCT $tbl_user.username + $users = ''; + + if ($includeUsers) { + $sql = "SELECT DISTINCT $tbl_user.username FROM $tbl_user INNER JOIN $tbl_session_user ON $tbl_user.user_id = $tbl_session_user.user_id AND - $tbl_session_user.relation_type<>".SESSION_RELATION_TYPE_RRHH." AND - $tbl_session_user.session_id = '".$row['id']."'"; + $tbl_session_user.relation_type<>" . SESSION_RELATION_TYPE_RRHH . " AND + $tbl_session_user.session_id = '" . $row['id'] . "'"; - $rsUsers = Database::query($sql); - $users = ''; - while ($rowUsers = Database::fetch_array($rsUsers)) { - if ($cvs) { - $users .= str_replace(';', ',', $rowUsers['username']).'|'; - } else { - $users .= "\t\t$rowUsers[username]\n"; + $rsUsers = Database::query($sql); + + while ($rowUsers = Database::fetch_array($rsUsers)) { + if ($cvs) { + $users .= str_replace(';', ',', $rowUsers['username']) . '|'; + } else { + $users .= "\t\t$rowUsers[username]\n"; + } } - } - if (!empty($users) && $cvs) { - $users = api_substr($users, 0, api_strlen($users) - 1); + if (!empty($users) && $cvs) { + $users = api_substr($users, 0, api_strlen($users) - 1); + } } // Courses @@ -171,15 +183,22 @@ if (isset($_POST['formSent'])) { if ($cvs) { $courses .= str_replace(';', ',', $rowCourses['code']); - $courses .= '['.str_replace(';', ',', $coachs).']['; + $courses .= '['.str_replace(';', ',', $coachs).']'; + + if ($includeUsers) { + $courses .= '['; + } } else { $courses .= "\t\t\n"; $courses .= "\t\t\t$rowCourses[code]\n"; $courses .= "\t\t\t$coachs\n"; } - // rel user courses - $sql = "SELECT DISTINCT u.username + $userscourse = ''; + + if ($includeUsers) { + // rel user courses + $sql = "SELECT DISTINCT u.username FROM $tbl_session_course_user scu INNER JOIN $tbl_session_user su ON @@ -192,26 +211,30 @@ if (isset($_POST['formSent'])) { scu.c_id='".$rowCourses['c_id']."' AND scu.session_id='".$row['id']."'"; - $rsUsersCourse = Database::query($sql); - $userscourse = ''; - while ($rowUsersCourse = Database::fetch_array($rsUsersCourse)) { + $rsUsersCourse = Database::query($sql); + while ($rowUsersCourse = Database::fetch_array($rsUsersCourse)) { + if ($cvs) { + $userscourse .= str_replace(';', ',', $rowUsersCourse['username']).','; + } else { + $courses .= "\t\t\t$rowUsersCourse[username]\n"; + } + } + if ($cvs) { - $userscourse .= str_replace(';', ',', $rowUsersCourse['username']).','; - } else { - $courses .= "\t\t\t$rowUsersCourse[username]\n"; + if (!empty($userscourse)) { + $userscourse = api_substr( + $userscourse, + 0, + api_strlen($userscourse) - 1 + ); + } + + $courses .= $userscourse.']'; } } if ($cvs) { - if (!empty($userscourse)) { - $userscourse = api_substr( - $userscourse, - 0, - api_strlen($userscourse) - 1 - ); - } - - $courses .= $userscourse.']|'; + $courses .= '|'; } else { $courses .= "\t\t\n"; } @@ -223,7 +246,7 @@ if (isset($_POST['formSent'])) { $add = $courses; if (in_array($file_type, ['csv', 'xls'])) { - $sessionListToExport[] = [ + $exportContent = [ $row['id'], $row['name'], $row['username'], @@ -231,22 +254,25 @@ if (isset($_POST['formSent'])) { $row['access_end_date'], $row['visibility'], $row['session_category'], - $users, - $courses, ]; + + if ($includeUsers) { + $exportContent[] = $users; + } + + $exportContent[] = $courses; + $sessionListToExport[] = $exportContent; } else { $add = "\t\n" - ."\t\t$row[id]\n" - ."\t\t$row[name]\n" - ."\t\t$row[username]\n" - ."\t\t$row[access_start_date]\n" - ."\t\t$row[access_end_date]\n" - ."\t\t$row[visibility]\n" - ."\t\t$row[session_category]\n"; - } + ."\t\t$row[id]\n" + ."\t\t$row[name]\n" + ."\t\t$row[username]\n" + ."\t\t$row[access_start_date]\n" + ."\t\t$row[access_end_date]\n" + ."\t\t$row[visibility]\n" + ."\t\t$row[session_category]\n" + ."\t\n"; - if (!$cvs) { - $add .= "\t\n"; fputs($fp, $add); } } @@ -264,7 +290,6 @@ if (isset($_POST['formSent'])) { case 'xls': Export::arrayToXls($sessionListToExport, $archiveFile); exit; - break; } } } @@ -310,6 +335,14 @@ foreach ($Sessions as $enreg) { } $form->addElement('select', 'session_id', get_lang('WhichSessionToExport'), $options); +$form->addCheckBox( + 'no_include_users', + [ + get_lang('Users'), + get_lang('ReportDoesNotIncludeListOfUsersNeitherForSessionNorForEachCourse') + ], + get_lang('DoNotIncludeUsers') +); $form->addButtonExport(get_lang('ExportSession')); $defaults = []; From f1ef813897788da482692bdc90b5327cf9ab77ee Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 7 Dec 2022 01:44:16 -0500 Subject: [PATCH 2/5] Session: Fix user list when exporting session list to XML - refs BT#20364 --- main/session/session_export.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/main/session/session_export.php b/main/session/session_export.php index 0dc16464d6..b5885cb411 100644 --- a/main/session/session_export.php +++ b/main/session/session_export.php @@ -243,7 +243,6 @@ if (isset($_POST['formSent'])) { if (!empty($courses) && $cvs) { $courses = api_substr($courses, 0, api_strlen($courses) - 1); } - $add = $courses; if (in_array($file_type, ['csv', 'xls'])) { $exportContent = [ @@ -270,8 +269,13 @@ if (isset($_POST['formSent'])) { ."\t\t$row[access_start_date]\n" ."\t\t$row[access_end_date]\n" ."\t\t$row[visibility]\n" - ."\t\t$row[session_category]\n" - ."\t\n"; + ."\t\t$row[session_category]\n"; + + if ($includeUsers) { + $add .= $courses; + } + + $add .= "\t\n"; fputs($fp, $add); } From 80e2d7e4d996005d15b65d87ed7e0ee9a11625b8 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 7 Dec 2022 02:36:17 -0500 Subject: [PATCH 3/5] Session: Fix course list when exporting session list - refs BT#20364 --- main/session/session_export.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/session/session_export.php b/main/session/session_export.php index b5885cb411..cdf208edbd 100644 --- a/main/session/session_export.php +++ b/main/session/session_export.php @@ -154,7 +154,7 @@ if (isset($_POST['formSent'])) { } // Courses - $sql = "SELECT DISTINCT c.code, sc.id, c_id + $sql = "SELECT DISTINCT c.code, sc.c_id FROM $tbl_course c INNER JOIN $tbl_session_course_user sc ON c.id = sc.c_id AND sc.session_id = '".$row['id']."'"; From be30e3268403bb62266e4e33e7b81a6b37355624 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 7 Dec 2022 04:34:20 -0500 Subject: [PATCH 4/5] Session: Allow to include course extra fields when exporting session list - refs BT#20364 --- main/inc/lib/course.lib.php | 19 +++++++++++++++++++ main/session/session_export.php | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 88fb41ec76..4556d6a0d2 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -3384,6 +3384,25 @@ class CourseManager return null; } + public static function getExtraData(int $courseId, array $avoid = []) + { + $fields = (new ExtraField('course'))->getDataAndFormattedValues($courseId); + + if ($avoid) { + $fields = array_filter( + $fields, + function (array $field) use ($avoid): bool { + return !in_array($field['variable'], $avoid); + } + ); + } + + $keys = array_column($fields, 'text'); + $values = array_column($fields, 'value'); + + return array_combine($keys, $values); + } + /** * Gets extra field value data and formatted values of a course * for extra fields listed in configuration.php in my_course_course_extrafields_to_be_presented diff --git a/main/session/session_export.php b/main/session/session_export.php index cdf208edbd..99eec21806 100644 --- a/main/session/session_export.php +++ b/main/session/session_export.php @@ -36,6 +36,7 @@ if (isset($_POST['formSent'])) { $file_type = $_POST['file_type'] ?? 'csv'; $session_id = $_POST['session_id']; $includeUsers = !isset($_POST['no_include_users']); + $includeCourseExtraFields = isset($_POST['include_course_fields']); if (empty($session_id)) { $sql = "SELECT @@ -233,6 +234,25 @@ if (isset($_POST['formSent'])) { } } + if ($includeCourseExtraFields) { + $extraData = CourseManager::getExtraData($rowCourses['c_id'], ['special_course']); + $extraData = array_map( + function ($variable, $value) use ($cvs) { + $value = str_replace(';', ',', $value); + + return $cvs + ? '{'.$variable.'='.$value.'}' + : "$variable$value"; + }, + array_keys($extraData), + array_values($extraData) + ); + + $courses .= $cvs + ? '['.implode('', $extraData).']' + : "\t\t\t".implode("\n", $extraData)."\n"; + } + if ($cvs) { $courses .= '|'; } else { @@ -347,6 +367,7 @@ $form->addCheckBox( ], get_lang('DoNotIncludeUsers') ); +$form->addCheckBox('include_course_fields', get_lang('Courses'), get_lang('IncludeExtraFields')); $form->addButtonExport(get_lang('ExportSession')); $defaults = []; From c6afcc4e203df06c20c456080cdede12180c7fc6 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 7 Dec 2022 04:42:29 -0500 Subject: [PATCH 5/5] Minor: Format code - refs BT#19768 --- main/session/session_export.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/main/session/session_export.php b/main/session/session_export.php index 99eec21806..ea12c53266 100644 --- a/main/session/session_export.php +++ b/main/session/session_export.php @@ -66,7 +66,6 @@ if (isset($_POST['formSent'])) { ORDER BY id"; } } - } else { $sql = "SELECT s.id,name,username,access_start_date,access_end_date,visibility,session_category_id FROM $tbl_session s @@ -136,14 +135,14 @@ if (isset($_POST['formSent'])) { INNER JOIN $tbl_session_user ON $tbl_user.user_id = $tbl_session_user.user_id AND - $tbl_session_user.relation_type<>" . SESSION_RELATION_TYPE_RRHH . " AND - $tbl_session_user.session_id = '" . $row['id'] . "'"; + $tbl_session_user.relation_type<>".SESSION_RELATION_TYPE_RRHH." AND + $tbl_session_user.session_id = '".$row['id']."'"; $rsUsers = Database::query($sql); while ($rowUsers = Database::fetch_array($rsUsers)) { if ($cvs) { - $users .= str_replace(';', ',', $rowUsers['username']) . '|'; + $users .= str_replace(';', ',', $rowUsers['username']).'|'; } else { $users .= "\t\t$rowUsers[username]\n"; } @@ -238,7 +237,7 @@ if (isset($_POST['formSent'])) { $extraData = CourseManager::getExtraData($rowCourses['c_id'], ['special_course']); $extraData = array_map( function ($variable, $value) use ($cvs) { - $value = str_replace(';', ',', $value); + $value = str_replace(';', ',', $value); return $cvs ? '{'.$variable.'='.$value.'}' @@ -363,7 +362,7 @@ $form->addCheckBox( 'no_include_users', [ get_lang('Users'), - get_lang('ReportDoesNotIncludeListOfUsersNeitherForSessionNorForEachCourse') + get_lang('ReportDoesNotIncludeListOfUsersNeitherForSessionNorForEachCourse'), ], get_lang('DoNotIncludeUsers') );