Search diagnosis - Add searching by course multilanguage and count of users - refs BT#19560

pull/4132/head
Christian 4 years ago
parent 6f6f857053
commit 3c9d623fbc
  1. 10
      main/admin/course_add.php
  2. 11
      main/admin/course_edit.php
  3. 73
      main/inc/lib/sessionmanager.lib.php
  4. 13
      main/install/configuration.dist.php

@ -188,6 +188,16 @@ $obj->fill_grade_model_select_in_form($form);
$extra_field = new ExtraField('course');
$extra = $extra_field->addElements($form);
if (api_get_configuration_value('allow_course_multiple_languages')) {
// Course Multiple language.
$cbMultiLanguage = $form->getElementByName('extra_multiple_language');
if (isset($cbMultiLanguage)) {
foreach ($languages['folder'] as $langFolder) {
$cbMultiLanguage->addOption($langFolder, $langFolder);
}
}
}
$htmlHeadXtra[] = '
<script>

@ -295,6 +295,17 @@ $extra = $extra_field->addElements(
true
);
if (api_get_configuration_value('allow_course_multiple_languages')) {
// Course Multiple language.
$languages = api_get_languages();
$cbMultiLanguage = $form->getElementByName('extra_multiple_language');
if (isset($cbMultiLanguage)) {
foreach ($languages['folder'] as $langFolder) {
$cbMultiLanguage->addOption($langFolder, $langFolder);
}
}
}
$htmlHeadXtra[] = '
<script>
$(function() {

@ -723,7 +723,23 @@ class SessionManager
$inject_joins .= " INNER JOIN $table sc ON (sc.session_id = s.id)
INNER JOIN $tableCourse c ON (sc.c_id = c.id)";
$language = Database::escape_string($language);
$where .= " AND c.course_language = '$language' ";
if (true === api_get_configuration_value('allow_course_multiple_languages')) {
$tblExtraField = Database::get_main_table(TABLE_EXTRA_FIELD);
$tblExtraFieldValue = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$extraFieldType = ExtraField::COURSE_FIELD_TYPE;
$sql = "SELECT id FROM $tblExtraField WHERE extra_field_type = $extraFieldType AND variable = 'multiple_language'";
$rs = Database::query($sql);
if (Database::num_rows($rs) > 0) {
$fieldId = Database::result($rs, 0, 0);
$inject_joins .= " INNER JOIN $tblExtraFieldValue cfv ON (c.id = cfv.item_id AND cfv.field_id = $fieldId)";
$where .= " AND (c.course_language = '$language' OR cfv.value LIKE '%$language%')";
} else {
$where .= " AND c.course_language = '$language' ";
}
} else {
$where .= " AND c.course_language = '$language' ";
}
}
$query = "$select FROM $tbl_session s $inject_joins $where $inject_where";
@ -787,6 +803,12 @@ class SessionManager
null,
true
);
$usersLang = self::getCountUsersLangBySession($session['id']);
$tooltipUserLangs = '';
if (!empty($usersLang)) {
$tooltipUserLangs = implode(' | ', $usersLang);
}
$session['users'] = '<a href="#" title="'.$tooltipUserLangs.'">'.$session['users'].'</a>';
$courses = self::getCoursesInSession($session_id);
$teachers = '';
foreach ($courses as $courseId) {
@ -4541,6 +4563,55 @@ class SessionManager
return 0;
}
/**
* Get the count of users by language and session
*
* @param $sid
* @param int $urlId
* @param null $status
*
* @return array A list of ISO lang of users registered in the session , ex: FR 6
*/
public static function getCountUsersLangBySession(
$sid,
$urlId = 0,
$status = null
) {
$sid = (int) $sid;
$urlId = empty($urlId) ? api_get_current_access_url_id() : (int) $urlId;
$tblUser = Database::get_main_table(TABLE_MAIN_USER);
$tblSessionUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tableAccessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$tableLanguage = Database::get_main_table(TABLE_MAIN_LANGUAGE);
$sql = "SELECT l.isocode, count(u.user_id) as cLang
FROM $tblSessionUser su
INNER JOIN $tblUser u ON (u.user_id = su.user_id)
INNER JOIN $tableLanguage l ON (l.dokeos_folder = u.language)
LEFT OUTER JOIN $tableAccessUrlUser au ON (au.user_id = u.user_id)
";
if (is_numeric($status)) {
$status = (int) $status;
$sql .= " WHERE su.relation_type = $status AND (au.access_url_id = $urlId OR au.access_url_id is null)";
} else {
$sql .= " WHERE (au.access_url_id = $urlId OR au.access_url_id is null )";
}
$sql .= " AND su.session_id = $sid GROUP BY l.isocode";
$rs = Database::query($sql);
$usersLang = [];
if (Database::num_rows($rs) > 0) {
while ($row = Database::fetch_assoc($rs)) {
$usersLang[] = strtoupper($row['isocode'])." ".$row['cLang'];
}
}
return $usersLang;
}
/**
* Get users by session.
*

@ -1669,3 +1669,16 @@ VALUES (21, 13, 'send_notification_at_a_specific_date', 'Send notification at a
//Allows to add increment in minutes to the date range component timepicker, example: 5,10,30 minutes
//$_configuration['timepicker_increment'] = 5;
// Allow multiple languages to a course
// as a selection bar for languages used in the course.
// Add another field "multilingual" to be used separately as a true/false
// field to represent the fact that the course can have content in multiple
// languages (without precision).
// Requires DB change:
/*
INSERT INTO `extra_field` (`extra_field_type`, `field_type`, `variable`, `display_text`, `default_value`, `field_order`, `visible_to_self`, `visible_to_others`, `changeable`, `filter`, `created_at`) VALUES
(2, 5, 'multiple_language', 'Multiple Language', '', 0, 1, 0, 1, 0, NOW());
*/
//$_configuration['allow_course_multiple_languages'] = false;

Loading…
Cancel
Save