From ec97db2b9b4602c91d34b539f22446d21a2feb20 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 9 Sep 2021 10:38:36 -0500 Subject: [PATCH 1/3] Session import: Fix csv and xml import when name already exists - refs BT#19147 --- main/inc/lib/sessionmanager.lib.php | 2 +- main/session/session_import.php | 45 ++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index b9939bf420..0180b2d281 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -5092,7 +5092,7 @@ class SessionManager if ($i > 1) { $suffix = ' - '.$i; } - $sql = 'SELECT 1 FROM '.$tbl_session.' + $sql = 'SELECT id FROM '.$tbl_session.' WHERE name="'.Database::escape_string($session_name).$suffix.'"'; $rs = Database::query($sql); if (Database::result($rs, 0, 0)) { diff --git a/main/session/session_import.php b/main/session/session_import.php index f27dd633e6..b50c32ecbc 100644 --- a/main/session/session_import.php +++ b/main/session/session_import.php @@ -228,10 +228,26 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { } } - $visibility = trim(api_utf8_decode($node_session->Visibility)); - $session_category_id = trim(api_utf8_decode($node_session->SessionCategory)); + // Default visibility + $visibilityAfterExpirationPerSession = 1; + + if (isset($node_session->VisibilityAfterExpiration)) { + $visibility = trim(api_utf8_decode($node_session->VisibilityAfterExpiration)); + switch ($visibility) { + case 'read_only': + $visibilityAfterExpirationPerSession = SESSION_VISIBLE_READ_ONLY; + break; + case 'accessible': + $visibilityAfterExpirationPerSession = SESSION_VISIBLE; + break; + case 'not_accessible': + $visibilityAfterExpirationPerSession = SESSION_INVISIBLE; + break; + } + } + $session_category_id = (int) trim(api_utf8_decode($node_session->SessionCategory)); - if (!$updatesession) { + if (!$isOverwrite) { // Always create a session. $unique_name = false; // This MUST be initializead. $i = 0; @@ -240,7 +256,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { if ($i > 1) { $suffix = ' - '.$i; } - $sql = 'SELECT 1 FROM '.$tbl_session.' + $sql = 'SELECT id FROM '.$tbl_session.' WHERE name="'.Database::escape_string($session_name.$suffix).'"'; $rs = Database::query($sql); if (Database::result($rs, 0, 0)) { @@ -252,14 +268,15 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { } // Creating the session. - $sql_session = "INSERT IGNORE INTO $tbl_session SET + $sql_session = "INSERT INTO $tbl_session SET name = '".Database::escape_string($session_name)."', id_coach = '$coach_id', access_start_date = '$date_start', access_end_date = '$date_end', - visibility = '$visibility', - session_category_id = '$session_category_id', - session_admin_id=".intval($_user['user_id']); + visibility = '$visibilityAfterExpirationPerSession', + ".(!empty($session_category_id) ? "session_category_id = '{$session_category_id}'," : "")." + session_admin_id=".api_get_user_id(); + $rs_session = Database::query($sql_session); $session_id = Database::insert_id(); $session_counter++; @@ -268,14 +285,14 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { $my_session_result = SessionManager::get_session_by_name($session_name); if ($my_session_result === false) { // Creating the session. - $sql_session = "INSERT IGNORE INTO $tbl_session SET + $sql_session = "INSERT INTO $tbl_session SET name = '".Database::escape_string($session_name)."', id_coach = '$coach_id', access_start_date = '$date_start', access_end_date = '$date_end', - visibility = '$visibility', - session_category_id = '$session_category_id', - session_admin_id=".intval($_user['user_id']); + visibility = '$visibilityAfterExpirationPerSession', + ".(!empty($session_category_id) ? "session_category_id = '{$session_category_id}'," : "")." + session_admin_id=".api_get_user_id(); $rs_session = Database::query($sql_session); $session_id = Database::insert_id(); $session_counter++; @@ -285,7 +302,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { id_coach = '$coach_id', access_start_date = '$date_start', access_end_date = '$date_end', - visibility = '$visibility', + visibility = '$visibilityAfterExpirationPerSession', session_category_id = '$session_category_id' WHERE name = '$session_name'"; $rs_session = Database::query($sql_session); @@ -335,7 +352,7 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { c_id = $courseId, session_id = $session_id"; $rs_course = Database::query($sql_course); - SessionManager::installCourse($id_session, $courseId); + SessionManager::installCourse($session_id, $courseId); } $course_coaches = explode(',', $node_course->Coach); From e86151c52e9f38dbe7d7f723aa0b3cc51095a7d8 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 13 Sep 2021 05:24:12 -0500 Subject: [PATCH 2/3] Session import: Fix error warning when career list is empty - refs BT#19147 --- main/inc/lib/sessionmanager.lib.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 0180b2d281..33c415f603 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -5358,18 +5358,19 @@ class SessionManager $extraFieldValueCareer = new ExtraFieldValue('career'); $careerList = isset($enreg['extra_careerid']) && !empty($enreg['extra_careerid']) ? $enreg['extra_careerid'] : []; $careerList = str_replace(['[', ']'], '', $careerList); - $careerList = explode(',', $careerList); $finalCareerIdList = []; - foreach ($careerList as $careerId) { - $realCareerIdList = $extraFieldValueCareer->get_item_id_from_field_variable_and_field_value( - 'external_career_id', - $careerId - ); - if (isset($realCareerIdList['item_id'])) { - $finalCareerIdList[] = $realCareerIdList['item_id']; + if (!empty($careerList)) { + $careerList = explode(',', $careerList); + foreach ($careerList as $careerId) { + $realCareerIdList = $extraFieldValueCareer->get_item_id_from_field_variable_and_field_value( + 'external_career_id', + $careerId + ); + if (isset($realCareerIdList['item_id'])) { + $finalCareerIdList[] = $realCareerIdList['item_id']; + } } } - foreach ($users as $user) { $user_id = UserManager::get_user_id_from_username($user); if ($user_id !== false) { From cf90613eb70b0f35158e6b78b01cbda911801a56 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 13 Sep 2021 10:26:34 -0500 Subject: [PATCH 3/3] Session import: Add visibility by default - refs BT#19147 --- main/session/session_import.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/main/session/session_import.php b/main/session/session_import.php index b50c32ecbc..debde179e8 100644 --- a/main/session/session_import.php +++ b/main/session/session_import.php @@ -229,20 +229,21 @@ if (isset($_POST['formSent']) && $_POST['formSent']) { } // Default visibility - $visibilityAfterExpirationPerSession = 1; + $visibilityAfterExpirationPerSession = SESSION_VISIBLE_READ_ONLY; if (isset($node_session->VisibilityAfterExpiration)) { $visibility = trim(api_utf8_decode($node_session->VisibilityAfterExpiration)); switch ($visibility) { - case 'read_only': - $visibilityAfterExpirationPerSession = SESSION_VISIBLE_READ_ONLY; - break; case 'accessible': $visibilityAfterExpirationPerSession = SESSION_VISIBLE; break; case 'not_accessible': $visibilityAfterExpirationPerSession = SESSION_INVISIBLE; break; + case 'read_only': + default: + $visibilityAfterExpirationPerSession = SESSION_VISIBLE_READ_ONLY; + break; } } $session_category_id = (int) trim(api_utf8_decode($node_session->SessionCategory));