Revert "Multi url disabled (#5678)"

This reverts commit 28463ab5
pull/5682/head
Angel Fernando Quiroz Campos 1 year ago
parent 65d552ad4d
commit 73b3fe6d13
No known key found for this signature in database
GPG Key ID: B284841AE3E562CD
  1. 2
      .env.dist
  2. 5
      .env.test
  3. 16226
      assets/css/primevue-md-light-indigo/theme.css
  4. 10
      assets/css/scss/atoms/_toast.scss
  5. 2
      config/packages/mailer.yaml
  6. 1
      config/services.yaml
  7. 21
      public/main/admin/course_edit.php
  8. 20
      public/main/admin/course_information.php
  9. 8
      public/main/admin/course_list.php
  10. 13
      public/main/admin/course_list_admin.php
  11. 45
      public/main/admin/dashboard_add_courses_to_user.php
  12. 37
      public/main/admin/dashboard_add_sessions_to_user.php
  13. 66
      public/main/admin/dashboard_add_users_to_user.php
  14. 20
      public/main/admin/settings.php
  15. 79
      public/main/admin/subscribe_user2course.php
  16. 43
      public/main/admin/user_export.php
  17. 48
      public/main/admin/user_information.php
  18. 15
      public/main/inc/ajax/admin.ajax.php
  19. 211
      public/main/inc/lib/CoursesAndSessionsCatalog.class.php
  20. 37
      public/main/inc/lib/api.lib.php
  21. 65
      public/main/inc/lib/course.lib.php
  22. 23
      public/main/inc/lib/login.lib.php
  23. 88
      public/main/inc/lib/myspace.lib.php
  24. 36
      public/main/inc/lib/online.inc.php
  25. 17
      public/main/inc/lib/redirect.class.php
  26. 370
      public/main/inc/lib/sessionmanager.lib.php
  27. 345
      public/main/inc/lib/statistics.lib.php
  28. 217
      public/main/inc/lib/tracking.lib.php
  29. 87
      public/main/inc/lib/usermanager.lib.php
  30. 101
      public/main/inc/lib/userportal.lib.php
  31. 40
      public/main/inc/lib/webservices/Rest.php
  32. 33
      public/main/inc/lib/zombie/zombie_manager.class.php
  33. 25
      public/main/my_space/session_filter.php
  34. 11
      public/main/my_space/user_edit.php
  35. 213
      public/main/session/add_edit_users_to_session.php
  36. 238
      public/main/session/add_users_to_session_course.php
  37. 18
      public/main/session/resume_session.php
  38. 41
      public/main/session/session_add.php
  39. 31
      public/main/session/session_course_edit.php
  40. 66
      public/main/session/session_export.php
  41. 9
      public/main/session/session_import.php
  42. 196
      public/main/user/add_users_to_session.php
  43. 240
      public/main/user/subscribe_user.php
  44. 28
      public/main/user/user.php
  45. 36
      public/main/user/user_export.php
  46. 26
      public/plugin/customcertificate/src/export_pdf_all_in_one.php
  47. 18
      src/CoreBundle/EventListener/LegacyListener.php
  48. 61
      src/CoreBundle/Repository/Node/UsergroupRepository.php
  49. 8
      src/CoreBundle/Serializer/ResourceNormalizer.php
  50. 17
      src/CoreBundle/ServiceHelper/AccessUrlHelper.php
  51. 13
      tests/scripts/synchronize_user_base_from_ldap.php
  52. 13
      webpack.config.js

@ -33,6 +33,8 @@ APP_LOCALE='en_US'
APP_CUSTOM_VUE_TEMPLATE='0' APP_CUSTOM_VUE_TEMPLATE='0'
APP_MULTIPLE_ACCESS_URL=''
GOOGLE_MAPS_API_KEY='' GOOGLE_MAPS_API_KEY=''
#APP_API_PLATFORM_URL='http://localhost/api/' #deprecated #APP_API_PLATFORM_URL='http://localhost/api/' #deprecated

@ -5,14 +5,13 @@ SYMFONY_DEPRECATIONS_HELPER=999999
PANTHER_APP_ENV=panther PANTHER_APP_ENV=panther
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
DATABASE_HOST='127.0.0.1' DATABASE_HOST='database'
DATABASE_PORT='3306' DATABASE_PORT='3306'
DATABASE_NAME='chamilo_test' DATABASE_NAME='chamilo_test'
DATABASE_USER='root' DATABASE_USER='root'
DATABASE_PASSWORD='root' DATABASE_PASSWORD='afqc'
APP_INSTALLED='1' APP_INSTALLED='1'
APP_ENV='test' APP_ENV='test'
APP_DEBUG='1' APP_DEBUG='1'
APP_LOCALE='en_US' APP_LOCALE='en_US'
APP_MULTIPLE_ACCESS_URL=''

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
.p-toast { .p-toast {
@apply whitespace-pre-line break-words opacity-90 min-w-96; @apply whitespace-pre-line break-words opacity-90 w-96;
&.p-toast-top-center, &.p-toast-bottom-center { &.p-toast-top-center, &.p-toast-bottom-center {
@apply -translate-x-1/2; @apply -translate-x-1/2;
@ -52,7 +52,7 @@
@apply bg-warning text-gray-90 border-0; @apply bg-warning text-gray-90 border-0;
.p-toast-message-icon, .p-toast-icon-close { .p-toast-message-icon, .p-toast-icon-close {
@apply text-gray-90; @apply bg-gray-90;
} }
} }
@ -65,14 +65,14 @@
} }
.p-toast-message-content { .p-toast-message-content {
@apply flex items-start p-4 border-0; @apply flex items-center p-4 border-0;
.p-toast-message-text { .p-toast-message-text {
@apply flex-auto m-0 ml-4 self-center; @apply flex-auto m-0 ml-4;
} }
.p-toast-message-icon { .p-toast-message-icon {
@apply shrink-0 text-2xl; @apply shrink-0 text-body-1;
&.p-icon { &.p-icon {
@apply w-8 h-8; @apply w-8 h-8;

@ -5,7 +5,7 @@ framework:
when@dev: when@dev:
framework: framework:
mailer: mailer:
dsn: 'null://null' dsn: '%env(MAILER_DSN)%'
when@test: when@test:
framework: framework:

@ -6,7 +6,6 @@ parameters:
secret: '%env(APP_SECRET)%' secret: '%env(APP_SECRET)%'
locale: '%env(APP_LOCALE)%' locale: '%env(APP_LOCALE)%'
installed: '%env(APP_INSTALLED)%' installed: '%env(APP_INSTALLED)%'
multiple_access_url: '%env(APP_MULTIPLE_ACCESS_URL)%'
container.dumper.inline_factories: true container.dumper.inline_factories: true
twig: twig:
form: form:

@ -59,14 +59,19 @@ while ($obj = Database::fetch_object($res)) {
} }
// Get all possible teachers without the course teachers // Get all possible teachers without the course teachers
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$sql = "SELECT u.id as user_id,lastname,firstname $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
FROM $table_user as u $sql = "SELECT u.id as user_id,lastname,firstname
INNER JOIN $access_url_rel_user_table url_rel_user FROM $table_user as u
ON (u.id=url_rel_user.user_id) INNER JOIN $access_url_rel_user_table url_rel_user
WHERE ON (u.id=url_rel_user.user_id)
url_rel_user.access_url_id = $urlId AND WHERE
status = 1".$order_clause; url_rel_user.access_url_id = $urlId AND
status = 1".$order_clause;
} else {
$sql = "SELECT id as user_id, lastname, firstname
FROM $table_user WHERE status='1'".$order_clause;
}
$courseInfo['tutor_name'] = null; $courseInfo['tutor_name'] = null;
$res = Database::query($sql); $res = Database::query($sql);

@ -138,15 +138,17 @@ echo Display::page_header(get_lang('Users'));
$table_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $table_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$table_user = Database::get_main_table(TABLE_MAIN_USER); $table_user = Database::get_main_table(TABLE_MAIN_USER);
$sql = "SELECT *, cu.status as course_status $sql = "SELECT *, cu.status as course_status
FROM $table_course_user cu, $table_user u FROM $table_course_user cu, $table_user u";
INNER JOIN ".Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER)." url_rel_user if (api_is_multiple_url_enabled()) {
ON $sql .= " INNER JOIN ".Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER)." url_rel_user
u.id = url_rel_user.user_id AND ON
url_rel_user.access_url_id = ".api_get_current_access_url_id()." u.id = url_rel_user.user_id AND
WHERE url_rel_user.access_url_id = ".api_get_current_access_url_id();
cu.user_id = u.id AND }
cu.c_id = '".$courseId."' AND $sql .= " WHERE
cu.relation_type <> ".COURSE_RELATION_TYPE_RRHH; cu.user_id = u.id AND
cu.c_id = '".$courseId."' AND
cu.relation_type <> ".COURSE_RELATION_TYPE_RRHH;
$res = Database::query($sql); $res = Database::query($sql);
$is_western_name_order = api_is_western_name_order(); $is_western_name_order = api_is_western_name_order();
if (Database::num_rows($res) > 0) { if (Database::num_rows($res) > 0) {

@ -80,7 +80,9 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
INNER JOIN $tblCourseCategory category ON course_rel_category.course_category_id = category.id "; INNER JOIN $tblCourseCategory category ON course_rel_category.course_category_id = category.id ";
} }
if ((api_is_platform_admin() || api_is_session_admin())) { if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && -1 != api_get_current_access_url_id()
) {
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql .= " INNER JOIN $access_url_rel_course_table url_rel_course $sql .= " INNER JOIN $access_url_rel_course_table url_rel_course
ON (course.id = url_rel_course.c_id)"; ON (course.id = url_rel_course.c_id)";
@ -119,7 +121,9 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
} }
// Adding the filter to see the user's only of the current access_url. // Adding the filter to see the user's only of the current access_url.
if ((api_is_platform_admin() || api_is_session_admin())) { if ((api_is_platform_admin() || api_is_session_admin()) &&
api_is_multiple_url_enabled() && -1 != api_get_current_access_url_id()
) {
$sql .= ' AND url_rel_course.access_url_id='.api_get_current_access_url_id(); $sql .= ' AND url_rel_course.access_url_id='.api_get_current_access_url_id();
} }

@ -73,10 +73,11 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
} }
$sql = "$select FROM $table course"; $sql = "$select FROM $table course";
if (api_is_multiple_url_enabled()) {
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql .= " INNER JOIN $access_url_rel_course_table url_rel_course $sql .= " INNER JOIN $access_url_rel_course_table url_rel_course
ON (course.id = url_rel_course.c_id)"; ON (course.id = url_rel_course.c_id)";
}
$tableCourseRelUser = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tableCourseRelUser = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql .= " $sql .= "
@ -118,7 +119,9 @@ function get_course_data($from, $number_of_items, $column, $direction, $dataFunc
} }
// Adding the filter to see the user's only of the current access_url. // Adding the filter to see the user's only of the current access_url.
$sql .= " AND url_rel_course.access_url_id = ".api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$sql .= " AND url_rel_course.access_url_id = ".api_get_current_access_url_id();
}
if ($addTeacherColumn) { if ($addTeacherColumn) {
$teachers = isset($_GET['course_teachers']) ? $_GET['course_teachers'] : []; $teachers = isset($_GET['course_teachers']) ? $_GET['course_teachers'] : [];

@ -76,13 +76,21 @@ function search_courses($needle, $type)
$without_assigned_courses = ' AND c.code NOT IN('.implode(',', $assigned_courses_code).')'; $without_assigned_courses = ' AND c.code NOT IN('.implode(',', $assigned_courses_code).')';
} }
$sql = "SELECT c.code, c.title if (api_is_multiple_url_enabled()) {
FROM $tbl_course c $sql = "SELECT c.code, c.title
LEFT JOIN $tbl_course_rel_access_url a FROM $tbl_course c
ON (a.c_id = c.id) LEFT JOIN $tbl_course_rel_access_url a
WHERE ON (a.c_id = c.id)
c.code LIKE '$needle%' $without_assigned_courses AND WHERE
access_url_id = ".api_get_current_access_url_id(); c.code LIKE '$needle%' $without_assigned_courses AND
access_url_id = ".api_get_current_access_url_id();
} else {
$sql = "SELECT c.code, c.title
FROM $tbl_course c
WHERE
c.code LIKE '$needle%'
$without_assigned_courses ";
}
$rs = Database::query($sql); $rs = Database::query($sql);
@ -197,14 +205,21 @@ if (isset($_POST['firstLetterCourse'])) {
$needle = Database::escape_string($firstLetter.'%'); $needle = Database::escape_string($firstLetter.'%');
} }
$sql = " SELECT c.code, c.title if (api_is_multiple_url_enabled()) {
FROM $tbl_course c $sql = " SELECT c.code, c.title
LEFT JOIN $tbl_course_rel_access_url a FROM $tbl_course c
ON (a.c_id = c.id) LEFT JOIN $tbl_course_rel_access_url a
WHERE ON (a.c_id = c.id)
c.code LIKE '$needle' $without_assigned_courses AND WHERE
access_url_id = ".api_get_current_access_url_id().' c.code LIKE '$needle' $without_assigned_courses AND
ORDER BY c.title'; access_url_id = ".api_get_current_access_url_id().'
ORDER BY c.title';
} else {
$sql = " SELECT c.code, c.title
FROM $tbl_course c
WHERE c.code LIKE '$needle' $without_assigned_courses
ORDER BY c.title";
}
$result = Database::query($sql); $result = Database::query($sql);

@ -74,12 +74,17 @@ function search_sessions($needle, $type)
$without_assigned_sessions = ' AND s.id NOT IN('.implode(',', $assigned_sessions_id).')'; $without_assigned_sessions = ' AND s.id NOT IN('.implode(',', $assigned_sessions_id).')';
} }
$sql = " SELECT s.id, s.title FROM $tbl_session s if (api_is_multiple_url_enabled()) {
LEFT JOIN $tbl_session_rel_access_url a $sql = " SELECT s.id, s.title FROM $tbl_session s
ON (s.id = a.session_id) LEFT JOIN $tbl_session_rel_access_url a
WHERE ON (s.id = a.session_id)
s.title LIKE '$needle%' $without_assigned_sessions AND WHERE
access_url_id = ".api_get_current_access_url_id(); s.title LIKE '$needle%' $without_assigned_sessions AND
access_url_id = ".api_get_current_access_url_id();
} else {
$sql = "SELECT s.id, s.title FROM $tbl_session s
WHERE s.title LIKE '$needle%' $without_assigned_sessions ";
}
$rs = Database::query($sql); $rs = Database::query($sql);
$return .= '<select class="form-control" id="origin" name="NoAssignedSessionsList[]" multiple="multiple" size="20">'; $return .= '<select class="form-control" id="origin" name="NoAssignedSessionsList[]" multiple="multiple" size="20">';
while ($session = Database :: fetch_array($rs)) { while ($session = Database :: fetch_array($rs)) {
@ -199,13 +204,19 @@ if (!empty($firstLetterSession)) {
$needle = Database::escape_string($firstLetterSession.'%'); $needle = Database::escape_string($firstLetterSession.'%');
} }
$sql = "SELECT s.id, s.title if (api_is_multiple_url_enabled()) {
FROM $tbl_session s $sql = "SELECT s.id, s.title
LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id) FROM $tbl_session s
WHERE LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id)
s.title LIKE '$needle%' $without_assigned_sessions AND WHERE
access_url_id = ".api_get_current_access_url_id().' s.title LIKE '$needle%' $without_assigned_sessions AND
ORDER BY s.title'; access_url_id = ".api_get_current_access_url_id().'
ORDER BY s.title';
} else {
$sql = "SELECT s.id, s.title FROM $tbl_session s
WHERE s.title LIKE '$needle%' $without_assigned_sessions
ORDER BY s.title";
}
$result = Database::query($sql); $result = Database::query($sql);
?> ?>
<form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?user=<?php echo $user_id; ?>" style="margin:0px;" <?php if ($ajax_search) { <form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?user=<?php echo $user_id; ?>" style="margin:0px;" <?php if ($ajax_search) {

@ -99,17 +99,29 @@ function search_users($needle, $type = 'multiple')
$without_assigned_users = ' AND user.id NOT IN('.implode(',', $assigned_users_id).')'; $without_assigned_users = ' AND user.id NOT IN('.implode(',', $assigned_users_id).')';
} }
$sql = "SELECT user.id as user_id, username, lastname, firstname if (api_is_multiple_url_enabled()) {
FROM $tbl_user user $sql = "SELECT user.id as user_id, username, lastname, firstname
LEFT JOIN $tbl_access_url_rel_user au ON (au.user_id = user.id) FROM $tbl_user user
WHERE user.active <> ".USER_SOFT_DELETED." AND LEFT JOIN $tbl_access_url_rel_user au ON (au.user_id = user.id)
".(api_sort_by_first_name() ? 'firstname' : 'lastname')." LIKE '$needle%' AND WHERE user.active <> ".USER_SOFT_DELETED." AND
status NOT IN(".DRH.', '.SESSIONADMIN.', '.STUDENT_BOSS.") AND ".(api_sort_by_first_name() ? 'firstname' : 'lastname')." LIKE '$needle%' AND
user.id NOT IN ($user_anonymous, $current_user_id, $user_id) status NOT IN(".DRH.', '.SESSIONADMIN.', '.STUDENT_BOSS.") AND
$without_assigned_users AND user.id NOT IN ($user_anonymous, $current_user_id, $user_id)
access_url_id = ".api_get_current_access_url_id()." $without_assigned_users AND
$order_clause access_url_id = ".api_get_current_access_url_id()."
$order_clause
";
} else {
$sql = "SELECT id as user_id, username, lastname, firstname
FROM $tbl_user user
WHERE user.active <> ".USER_SOFT_DELETED." AND
".(api_sort_by_first_name() ? 'firstname' : 'lastname')." LIKE '$needle%' AND
status NOT IN(".DRH.', '.SESSIONADMIN.', '.STUDENT_BOSS.") AND
id NOT IN ($user_anonymous, $current_user_id, $user_id)
$without_assigned_users
$order_clause
"; ";
}
$rs = Database::query($sql); $rs = Database::query($sql);
$xajax_response->addAssign('ajax_list_users_multiple', 'innerHTML', api_utf8_encode($return)); $xajax_response->addAssign('ajax_list_users_multiple', 'innerHTML', api_utf8_encode($return));
@ -383,17 +395,29 @@ if (!empty($conditions)) {
} }
} }
$sql = "SELECT user.id as user_id, username, lastname, firstname if (api_is_multiple_url_enabled()) {
FROM $tbl_user user $sql = "SELECT user.id as user_id, username, lastname, firstname
LEFT JOIN $tbl_access_url_rel_user au FROM $tbl_user user
ON (au.user_id = user.id) LEFT JOIN $tbl_access_url_rel_user au
WHERE user.active <> ".USER_SOFT_DELETED." AND ON (au.user_id = user.id)
$without_assigned_users WHERE user.active <> ".USER_SOFT_DELETED." AND
user.id NOT IN ($user_anonymous, $current_user_id, $user_id) AND $without_assigned_users
status NOT IN(".DRH.', '.SESSIONADMIN.', '.ANONYMOUS.") $search_user AND user.id NOT IN ($user_anonymous, $current_user_id, $user_id) AND
access_url_id = ".api_get_current_access_url_id()." status NOT IN(".DRH.', '.SESSIONADMIN.', '.ANONYMOUS.") $search_user AND
$sqlConditions access_url_id = ".api_get_current_access_url_id()."
ORDER BY firstname"; $sqlConditions
ORDER BY firstname";
} else {
$sql = "SELECT id as user_id, username, lastname, firstname
FROM $tbl_user user
WHERE user.active <> -1 AND
$without_assigned_users
id NOT IN ($user_anonymous, $current_user_id, $user_id) AND
status NOT IN(".DRH.', '.SESSIONADMIN.', '.ANONYMOUS.")
$search_user
$sqlConditions
ORDER BY firstname ";
}
$result = Database::query($sql); $result = Database::query($sql);
?> ?>
<form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?user=<?php echo $user_id; ?>" class="form-horizontal" <?php if ($ajax_search) { <form name="formulaire" method="post" action="<?php echo api_get_self(); ?>?user=<?php echo $user_id; ?>" class="form-horizontal" <?php if ($ajax_search) {

@ -71,16 +71,18 @@ if (!empty($_GET['category']) &&
$mark_all = false; $mark_all = false;
$un_mark_all = false; $un_mark_all = false;
if (isset($values['buttons_in_action_right']) && if (api_is_multiple_url_enabled()) {
isset($values['buttons_in_action_right']['mark_all']) if (isset($values['buttons_in_action_right']) &&
) { isset($values['buttons_in_action_right']['mark_all'])
$mark_all = true; ) {
} $mark_all = true;
}
if (isset($values['buttons_in_action_right']) && if (isset($values['buttons_in_action_right']) &&
isset($values['buttons_in_action_right']['unmark_all']) isset($values['buttons_in_action_right']['unmark_all'])
) { ) {
$un_mark_all = true; $un_mark_all = true;
}
} }
if ($mark_all || $un_mark_all) { if ($mark_all || $un_mark_all) {

@ -179,11 +179,20 @@ if ($use_extra_fields) {
$final_result = $extra_field_result[0]; $final_result = $extra_field_result[0];
} }
if (is_array($final_result) && count($final_result) > 0) { if (api_is_multiple_url_enabled()) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') "; if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " AND u.id = -1";
}
} else { } else {
//no results if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id = -1"; $where_filter = " AND id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " AND id = -1";
}
} }
} }
@ -196,33 +205,51 @@ if ('true' === $orderListByOfficialCode) {
$orderBy = " official_code, lastname, firstname"; $orderBy = " official_code, lastname, firstname";
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $sql = "SELECT id as user_id, lastname, firstname, username, official_code
$access_url_id = api_get_current_access_url_id(); FROM $tbl_user
$sql = "SELECT u.id as user_id,lastname,firstname,username, official_code WHERE id <>2 AND ".$target_name." LIKE '".$first_letter_user."%' $where_filter
FROM $tbl_user u ORDER BY ".(count($users) > 0 ? "(id IN(".implode(',', $users).")) DESC," : "")." ".$orderBy;
INNER JOIN $tbl_user_rel_access_url user_rel_url
ON (user_rel_url.user_id = u.id) if (api_is_multiple_url_enabled()) {
WHERE $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
u.id <> 2 AND $access_url_id = api_get_current_access_url_id();
access_url_id = $access_url_id AND if (-1 != $access_url_id) {
(".$target_name." LIKE '".$first_letter_user."%' ) $sql = "SELECT u.id as user_id,lastname,firstname,username, official_code
$where_filter FROM $tbl_user u
ORDER BY ".(count($users) > 0 ? "(u.id IN(".implode(',', $users).")) DESC," : "")." ".$orderBy; INNER JOIN $tbl_user_rel_access_url user_rel_url
ON (user_rel_url.user_id = u.id)
WHERE
u.id <> 2 AND
access_url_id = $access_url_id AND
(".$target_name." LIKE '".$first_letter_user."%' )
$where_filter
ORDER BY ".(count($users) > 0 ? "(u.id IN(".implode(',', $users).")) DESC," : "")." ".$orderBy;
}
}
$result = Database::query($sql); $result = Database::query($sql);
$db_users = Database::store_result($result); $db_users = Database::store_result($result);
unset($result); unset($result);
$tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $sql = "SELECT code,visual_code,title
$access_url_id = api_get_current_access_url_id(); FROM $tbl_course
$sql = "SELECT code, visual_code, title WHERE visual_code LIKE '".$first_letter_course."%'
FROM $tbl_course as course ORDER BY ".(count($courses) > 0 ? "(code IN('".implode("','", $courses)."')) DESC," : "")." visual_code";
INNER JOIN $tbl_course_rel_access_url course_rel_url
ON (course_rel_url.c_id = course.id) if (api_is_multiple_url_enabled()) {
WHERE $tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
access_url_id = $access_url_id AND $access_url_id = api_get_current_access_url_id();
(visual_code LIKE '".$first_letter_course."%' ) if (-1 != $access_url_id) {
ORDER BY ".(count($courses) > 0 ? "(code IN('".implode("','", $courses)."')) DESC," : "")." visual_code"; $sql = "SELECT code, visual_code, title
FROM $tbl_course as course
INNER JOIN $tbl_course_rel_access_url course_rel_url
ON (course_rel_url.c_id = course.id)
WHERE
access_url_id = $access_url_id AND
(visual_code LIKE '".$first_letter_course."%' )
ORDER BY ".(count($courses) > 0 ? "(code IN('".implode("','", $courses)."')) DESC," : "")." visual_code";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$db_courses = Database::store_result($result); $db_courses = Database::store_result($result);

@ -26,15 +26,20 @@ $coursesSessions = array_merge($coursesSessions, $allCoursesFromSessions);
$courses = []; $courses = [];
$courses[''] = '--'; $courses[''] = '--';
$sql = "SELECT code,visual_code,title FROM $course_table ORDER BY visual_code";
$tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$access_url_id = api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$sql = "SELECT code,visual_code,title $tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
FROM $course_table as c $access_url_id = api_get_current_access_url_id();
INNER JOIN $tbl_course_rel_access_url as course_rel_url if (-1 != $access_url_id) {
ON (c.id = course_rel_url.c_id) $sql = "SELECT code,visual_code,title
WHERE access_url_id = $access_url_id FROM $course_table as c
ORDER BY visual_code"; INNER JOIN $tbl_course_rel_access_url as course_rel_url
ON (c.id = course_rel_url.c_id)
WHERE access_url_id = $access_url_id
ORDER BY visual_code";
}
}
$result = Database::query($sql); $result = Database::query($sql);
while ($course = Database::fetch_object($result)) { while ($course = Database::fetch_object($result)) {
$courses[$course->code] = $course->visual_code.' - '.$course->title; $courses[$course->code] = $course->visual_code.' - '.$course->title;
@ -109,13 +114,19 @@ if ($form->validate()) {
ORDER BY lastname,firstname"; ORDER BY lastname,firstname";
$filename = 'export_users_'.$courseSessionCode.'_'.$sessionInfo['name'].'_'.api_get_local_time(); $filename = 'export_users_'.$courseSessionCode.'_'.$sessionInfo['name'].'_'.api_get_local_time();
} else { } else {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql .= " FROM $user_table u $access_url_id = api_get_current_access_url_id();
INNER JOIN $tbl_user_rel_access_url as user_rel_url if (-1 != $access_url_id) {
ON (u.user_id= user_rel_url.user_id) $sql .= " FROM $user_table u
WHERE access_url_id = $access_url_id INNER JOIN $tbl_user_rel_access_url as user_rel_url
ORDER BY lastname,firstname"; ON (u.user_id= user_rel_url.user_id)
WHERE access_url_id = $access_url_id
ORDER BY lastname,firstname";
}
} else {
$sql .= " FROM $user_table u ORDER BY lastname,firstname";
}
$filename = 'export_users_'.api_get_local_time(); $filename = 'export_users_'.api_get_local_time();
} }
$data = []; $data = [];

@ -499,30 +499,32 @@ if (count($courseRelUserList) > 0) {
* Show the URL in which this user is subscribed. * Show the URL in which this user is subscribed.
*/ */
$urlInformation = ''; $urlInformation = '';
$urlList = UrlManager::get_access_url_from_user($userId); if (api_is_multiple_url_enabled()) {
if (count($urlList) > 0) { $urlList = UrlManager::get_access_url_from_user($userId);
$header = []; if (count($urlList) > 0) {
$header[] = ['URL', true]; $header = [];
$data = []; $header[] = ['URL', true];
$csvContent[] = []; $data = [];
$csvContent[] = ['Url']; $csvContent[] = [];
foreach ($urlList as $url) { $csvContent[] = ['Url'];
$row = []; foreach ($urlList as $url) {
$row[] = Display::url($url['url'], $url['url']); $row = [];
$csvContent[] = array_map('strip_tags', $row); $row[] = Display::url($url['url'], $url['url']);
$data[] = $row; $csvContent[] = array_map('strip_tags', $row);
} $data[] = $row;
}
$urlInformation = Display::page_subheader(get_lang('URL list')); $urlInformation = Display::page_subheader(get_lang('URL list'));
$urlInformation .= Display::return_sortable_table( $urlInformation .= Display::return_sortable_table(
$header, $header,
$data, $data,
[], [],
[], [],
['user_id' => $userId] ['user_id' => $userId]
); );
} else { } else {
$urlInformation = '<p>'.get_lang('This user doesn\'t have a related URL.').'</p>'; $urlInformation = '<p>'.get_lang('This user doesn\'t have a related URL.').'</p>';
}
} }
if (isset($_GET['action'])) { if (isset($_GET['action'])) {

@ -46,13 +46,18 @@ switch ($action) {
/** @var Filesystem $fileSystem */ /** @var Filesystem $fileSystem */
$fileSystem = Container::$container->get('home_filesystem'); $fileSystem = Container::$container->get('home_filesystem');
$dir = 'admin/';
$accessUrlId = api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$accessUrlId = api_get_current_access_url_id();
$urlInfo = api_get_access_url($accessUrlId); if (-1 != $accessUrlId) {
$url = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $urlInfo['url'])); $urlInfo = api_get_access_url($accessUrlId);
$cleanUrl = str_replace('/', '-', $url); $url = api_remove_trailing_slash(preg_replace('/https?:\/\//i', '', $urlInfo['url']));
$dir = "$cleanUrl/admin/"; $cleanUrl = str_replace('/', '-', $url);
$dir = "$cleanUrl/admin/";
}
}
$filePath = $dir.$blockName.'_extra.html'; $filePath = $dir.$blockName.'_extra.html';

@ -158,7 +158,10 @@ class CoursesAndSessionsCatalog
public static function getCourseCategoriesTree() public static function getCourseCategoriesTree()
{ {
$urlId = api_get_current_access_url_id(); $urlId = 1;
if (api_is_multiple_url_enabled()) {
$urlId = api_get_current_access_url_id();
}
$countCourses = self::countAvailableCoursesToShowInCatalog($urlId); $countCourses = self::countAvailableCoursesToShowInCatalog($urlId);
$categories = []; $categories = [];
@ -251,34 +254,49 @@ class CoursesAndSessionsCatalog
if (!empty($randomValue)) { if (!empty($randomValue)) {
$randomValue = (int) $randomValue; $randomValue = (int) $randomValue;
$urlId = api_get_current_access_url_id(); $sql = "SELECT COUNT(*) FROM $tbl_course";
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlCondition = ' access_url_id = '.$urlId.' ';
$allowBaseCategories = ('true' === api_get_setting('course.allow_base_course_category'));
if ($allowBaseCategories) {
$urlCondition = ' (access_url_id = '.$urlId.' OR access_url_id = 1) ';
}
$sql = "SELECT COUNT(*)
FROM $tbl_course course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE access_url_id = $urlId";
$result = Database::query($sql); $result = Database::query($sql);
list($num_records) = Database::fetch_row($result); list($num_records) = Database::fetch_row($result);
$sql = "SELECT course.id, course.id as real_id if (api_is_multiple_url_enabled()) {
FROM $tbl_course course $urlId = api_get_current_access_url_id();
INNER JOIN $tbl_url_rel_course as url_rel_course $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
ON (url_rel_course.c_id = course.id)
WHERE $urlCondition = ' access_url_id = '.$urlId.' ';
$urlCondition AND $allowBaseCategories = ('true' === api_get_setting('course.allow_base_course_category'));
RAND()*$num_records< $randomValue if ($allowBaseCategories) {
$avoidCoursesCondition $urlCondition = ' (access_url_id = '.$urlId.' OR access_url_id = 1) ';
$visibilityCondition }
ORDER BY RAND()
LIMIT 0, $randomValue"; $sql = "SELECT COUNT(*)
FROM $tbl_course course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE access_url_id = $urlId";
$result = Database::query($sql);
list($num_records) = Database::fetch_row($result);
$sql = "SELECT course.id, course.id as real_id
FROM $tbl_course course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE
$urlCondition AND
RAND()*$num_records< $randomValue
$avoidCoursesCondition
$visibilityCondition
ORDER BY RAND()
LIMIT 0, $randomValue";
} else {
$sql = "SELECT id, id as real_id
FROM $tbl_course course
WHERE
RAND()*$num_records< $randomValue
$avoidCoursesCondition
$visibilityCondition
ORDER BY RAND()
LIMIT 0, $randomValue";
}
$result = Database::query($sql); $result = Database::query($sql);
$id_in = null; $id_in = null;
@ -312,31 +330,50 @@ class CoursesAndSessionsCatalog
$conditionCode .= " category_code='$categoryCode' "; $conditionCode .= " category_code='$categoryCode' ";
} }
// Showing only the courses of the current Chamilo access_url_id
$urlId = api_get_current_access_url_id();
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlCondition = ' access_url_id = '.$urlId.' ';
if (empty($categoryCode) || 'ALL' === $categoryCode) { if (empty($categoryCode) || 'ALL' === $categoryCode) {
$sql = "SELECT *, course.id real_id $sql = "SELECT *, id as real_id
FROM $tbl_course as course FROM $tbl_course course
INNER JOIN $tbl_url_rel_course as url_rel_course WHERE
ON (url_rel_course.c_id = course.id) 1=1
WHERE $avoidCoursesCondition
$urlCondition AND $visibilityCondition
$conditionCode ORDER BY title $limitFilter ";
$avoidCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter";
} else { } else {
$sql = "SELECT *, course.id real_id FROM $tbl_course as course $sql = "SELECT *, id as real_id FROM $tbl_course course
INNER JOIN $tbl_url_rel_course as url_rel_course WHERE
ON (url_rel_course.c_id = course.id) $conditionCode
WHERE $avoidCoursesCondition
$urlCondition $visibilityCondition
$avoidCoursesCondition ORDER BY title $limitFilter ";
$visibilityCondition }
ORDER BY title $limitFilter";
// Showing only the courses of the current Chamilo access_url_id
if (api_is_multiple_url_enabled()) {
$urlId = api_get_current_access_url_id();
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlCondition = ' access_url_id = '.$urlId.' ';
if ('ALL' !== $categoryCode) {
$sql = "SELECT *, course.id real_id
FROM $tbl_course as course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE
$urlCondition AND
$conditionCode
$avoidCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter";
} else {
$sql = "SELECT *, course.id real_id FROM $tbl_course as course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
WHERE
$urlCondition
$avoidCoursesCondition
$visibilityCondition
ORDER BY title $limitFilter";
}
} }
} }
@ -420,34 +457,56 @@ class CoursesAndSessionsCatalog
$categoryFilter = ' AND category_code = "'.$categoryCode.'" '; $categoryFilter = ' AND category_code = "'.$categoryCode.'" ';
} }
$urlId = api_get_current_access_url_id(); //$sql = "SELECT DISTINCT course.*, $injectExtraFields
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlCondition = ' access_url_id = '.$urlId.' AND';
$allowBaseCategories = ('true' === api_get_setting('course.allow_base_course_category'));
if ($allowBaseCategories) {
$urlCondition = ' (access_url_id = '.$urlId.' OR access_url_id = 1) AND ';
}
$sql = "SELECT DISTINCT(course.id) $sql = "SELECT DISTINCT(course.id)
FROM $courseTable as course FROM $courseTable course
INNER JOIN $tbl_url_rel_course as url_rel_course $sqlInjectJoins
ON (url_rel_course.c_id = course.id) WHERE (
$sqlInjectJoins course.code LIKE '%".$keyword."%' OR
WHERE course.title LIKE '%".$keyword."%' OR
access_url_id = $urlId AND course.tutor_name LIKE '%".$keyword."%'
( )
code LIKE '%".$keyword."%' OR $where
title LIKE '%".$keyword."%' OR $categoryFilter
tutor_name LIKE '%".$keyword."%' $sqlInjectWhere
) $avoidCoursesCondition
$where $visibilityCondition
$categoryFilter ORDER BY title, visual_code ASC
$sqlInjectWhere $limitFilter
$avoidCoursesCondition ";
$visibilityCondition
ORDER BY title, visual_code ASC if (api_is_multiple_url_enabled()) {
$limitFilter $urlId = api_get_current_access_url_id();
"; if (-1 != $urlId) {
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlCondition = ' access_url_id = '.$urlId.' AND';
$allowBaseCategories = ('true' === api_get_setting('course.allow_base_course_category'));
if ($allowBaseCategories) {
$urlCondition = ' (access_url_id = '.$urlId.' OR access_url_id = 1) AND ';
}
$sql = "SELECT DISTINCT(course.id)
FROM $courseTable as course
INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id)
$sqlInjectJoins
WHERE
access_url_id = $urlId AND
(
code LIKE '%".$keyword."%' OR
title LIKE '%".$keyword."%' OR
tutor_name LIKE '%".$keyword."%'
)
$where
$categoryFilter
$sqlInjectWhere
$avoidCoursesCondition
$visibilityCondition
ORDER BY title, visual_code ASC
$limitFilter
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$courses = []; $courses = [];

@ -11,7 +11,6 @@ use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Entity\UserCourseCategory; use Chamilo\CoreBundle\Entity\UserCourseCategory;
use Chamilo\CoreBundle\Exception\NotAllowedException; use Chamilo\CoreBundle\Exception\NotAllowedException;
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\ServiceHelper\AccessUrlHelper;
use Chamilo\CoreBundle\ServiceHelper\MailHelper; use Chamilo\CoreBundle\ServiceHelper\MailHelper;
use Chamilo\CoreBundle\ServiceHelper\PermissionServiceHelper; use Chamilo\CoreBundle\ServiceHelper\PermissionServiceHelper;
use Chamilo\CoreBundle\ServiceHelper\ThemeHelper; use Chamilo\CoreBundle\ServiceHelper\ThemeHelper;
@ -5100,10 +5099,39 @@ function api_request_uri()
* @return int access_url_id of the current Chamilo Installation * @return int access_url_id of the current Chamilo Installation
* *
* @author Julio Montoya <gugli100@gmail.com> * @author Julio Montoya <gugli100@gmail.com>
* @throws Exception
*/ */
function api_get_current_access_url_id(): int function api_get_current_access_url_id(): int
{ {
return Container::$container->get(AccessUrlHelper::class)->getCurrent()->getId(); if (false === api_get_multiple_access_url()) {
return 1;
}
static $id;
if (!empty($id)) {
return $id;
}
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL);
$path = Database::escape_string(api_get_path(WEB_PATH));
$sql = "SELECT id FROM $table WHERE url = '".$path."'";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$id = Database::result($result, 0, 0);
if (false === $id) {
return -1;
}
return (int) $id;
}
$id = 1;
//if the url in WEB_PATH was not found, it can only mean that there is
// either a configuration problem or the first URL has not been defined yet
// (by default it is http://localhost/). Thus the more sensible thing we can
// do is return 1 (the main URL) as the user cannot hack this value anyway
return 1;
} }
/** /**
@ -5959,6 +5987,11 @@ function api_get_multiple_access_url(): bool
return $accessUrlEnabled; return $accessUrlEnabled;
} }
function api_is_multiple_url_enabled(): bool
{
return api_get_multiple_access_url();
}
/** /**
* Returns a md5 unique id. * Returns a md5 unique id.
* *

@ -2386,9 +2386,15 @@ class CourseManager
return false; return false;
} }
$url_id = api_get_current_access_url_id(); $count = 0;
UrlManager::delete_url_rel_course($courseId, $url_id); if (api_is_multiple_url_enabled()) {
$count = UrlManager::getCountUrlRelCourse($courseId); $url_id = 1;
if (-1 != api_get_current_access_url_id()) {
$url_id = api_get_current_access_url_id();
}
UrlManager::delete_url_rel_course($courseId, $url_id);
$count = UrlManager::getCountUrlRelCourse($courseId);
}
if (0 === $count) { if (0 === $count) {
// Cleaning group categories // Cleaning group categories
@ -3240,13 +3246,18 @@ class CourseManager
$affected_rows = 0; $affected_rows = 0;
//Deleting assigned courses to hrm_id //Deleting assigned courses to hrm_id
$sql = "SELECT s.c_id FROM $tbl_course_rel_user s if (api_is_multiple_url_enabled()) {
INNER JOIN $tbl_course_rel_access_url a $sql = "SELECT s.c_id FROM $tbl_course_rel_user s
ON (a.c_id = s.c_id) INNER JOIN $tbl_course_rel_access_url a
WHERE ON (a.c_id = s.c_id)
user_id = $hr_manager_id AND WHERE
relation_type = ".COURSE_RELATION_TYPE_RRHH." AND user_id = $hr_manager_id AND
access_url_id = ".api_get_current_access_url_id(); relation_type = ".COURSE_RELATION_TYPE_RRHH." AND
access_url_id = ".api_get_current_access_url_id();
} else {
$sql = "SELECT c_id FROM $tbl_course_rel_user
WHERE user_id = $hr_manager_id AND relation_type = ".COURSE_RELATION_TYPE_RRHH;
}
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0) { if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result)) { while ($row = Database::fetch_array($result)) {
@ -5955,18 +5966,30 @@ class CourseManager
return []; return [];
} }
$courseAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$accessUrlId = api_get_current_access_url_id();
$sql = "SELECT DISTINCT(c.id), c.title $sql = "SELECT DISTINCT(c.id), c.title
FROM $courseTable c FROM $courseTable c
INNER JOIN $courseUserTable cru ON c.id = cru.c_id INNER JOIN $courseUserTable cru ON c.id = cru.c_id
INNER JOIN $courseAccessUrlTable crau ON c.id = crau.c_id WHERE (
WHERE crau.access_url_id = $accessUrlId cru.user_id IN (".implode(', ', $userIdList).")
AND ( AND cru.relation_type = 0
cru.id_user IN (".implode(', ', $userIdList).") AND )";
cru.relation_type = 0
)"; if (api_is_multiple_url_enabled()) {
$courseAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$accessUrlId = api_get_current_access_url_id();
if (-1 != $accessUrlId) {
$sql = "SELECT DISTINCT(c.id), c.title
FROM $courseTable c
INNER JOIN $courseUserTable cru ON c.id = cru.c_id
INNER JOIN $courseAccessUrlTable crau ON c.id = crau.c_id
WHERE crau.access_url_id = $accessUrlId
AND (
cru.id_user IN (".implode(', ', $userIdList).") AND
cru.relation_type = 0
)";
}
}
$result = Database::query($sql); $result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) { while ($row = Database::fetch_assoc($result)) {

@ -25,9 +25,15 @@ class Login
*/ */
public static function get_user_account_list($user, $reset = false, $by_username = false) public static function get_user_account_list($user, $reset = false, $by_username = false)
{ {
$access_url_id = api_get_current_access_url_id(); $portal_url = api_get_path(WEB_PATH);
$url = api_get_access_url($access_url_id);
$portal_url = $url['url']; if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$url = api_get_access_url($access_url_id);
$portal_url = $url['url'];
}
}
if ($reset) { if ($reset) {
if ($by_username) { if ($by_username) {
@ -98,9 +104,14 @@ class Login
$email_to = $user[0]['email']; $email_to = $user[0]['email'];
} }
$access_url_id = api_get_current_access_url_id(); $portal_url = api_get_path(WEB_PATH);
$url = api_get_access_url($access_url_id); if (api_is_multiple_url_enabled()) {
$portal_url = $url['url']; $access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$url = api_get_access_url($access_url_id);
$portal_url = $url['url'];
}
}
$email_body = get_lang('This is your information to connect to')." ".$portal_url."\n\n$user_account_list"; $email_body = get_lang('This is your information to connect to')." ".$portal_url."\n\n$user_account_list";
// SEND MESSAGE // SEND MESSAGE

@ -510,25 +510,40 @@ class MySpace
$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $sqlCoachs = "SELECT DISTINCT
scu.user_id as id_coach,
u.id as user_id,
lastname,
firstname,
MAX(login_date) as login_date
FROM $tbl_user u, $tbl_session_course_user scu, $tbl_track_login
WHERE
u.active <> ".USER_SOFT_DELETED." AND scu.user_id = u.id AND scu.status=".SessionEntity::COURSE_COACH." AND login_user_id=u.id
GROUP BY user_id ";
if (api_is_multiple_url_enabled()) {
$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id(); $access_url_id = api_get_current_access_url_id();
$sqlCoachs = "SELECT DISTINCT if (-1 != $access_url_id) {
scu.user_id as id_coach, $sqlCoachs = "SELECT DISTINCT
u.id as user_id, scu.user_id as id_coach,
lastname, u.id as user_id,
firstname, lastname,
MAX(login_date) as login_date firstname,
FROM $tbl_user u, MAX(login_date) as login_date
$tbl_session_course_user scu, FROM $tbl_user u,
$tbl_track_login , $tbl_session_course_user scu,
$tbl_session_rel_access_url session_rel_url $tbl_track_login ,
WHERE $tbl_session_rel_access_url session_rel_url
scu.user_id = u.id AND WHERE
scu.status = ".SessionEntity::COURSE_COACH." AND scu.user_id = u.id AND
login_user_id = u.id AND scu.status = ".SessionEntity::COURSE_COACH." AND
access_url_id = $access_url_id AND login_user_id = u.id AND
session_rel_url.session_id = scu.session_id access_url_id = $access_url_id AND
GROUP BY u.id"; session_rel_url.session_id = scu.session_id
GROUP BY u.id";
}
}
if (!empty($order[$tracking_column])) { if (!empty($order[$tracking_column])) {
$sqlCoachs .= " ORDER BY `".$order[$tracking_column]."` ".$tracking_direction; $sqlCoachs .= " ORDER BY `".$order[$tracking_column]."` ".$tracking_direction;
} }
@ -539,19 +554,32 @@ class MySpace
$global_coaches[$coach['user_id']] = $coach; $global_coaches[$coach['user_id']] = $coach;
} }
$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
$sql_session_coach = "SELECT u.id AS user_id, u.lastname, u.firstname, MAX(tel.login_date) AS login_date $sql_session_coach = "SELECT u.id AS user_id, u.lastname, u.firstname, MAX(tel.login_date) AS login_date
FROM $tbl_user u FROM $tbl_user u
INNER JOIN $tbl_track_login tel INNER JOIN $tbl_track_login tel
ON tel.login_user_id = u.id ON tel.login_user_id = u.id
INNER JOIN $tblSessionRelUser sru INNER JOIN $tblSessionRelUser sru
ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.") ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.")
INNER JOIN $tbl_session_rel_access_url aurs GROUP BY u.id
ON sru.session_id = aurs.session_id ORDER BY login_date $tracking_direction";
WHERE aurs.access_url_id = $access_url_id
GROUP BY u.id if (api_is_multiple_url_enabled()) {
ORDER BY login_date $tracking_direction"; $tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql_session_coach = "SELECT u.id AS user_id, u.lastname, u.firstname, MAX(tel.login_date) AS login_date
FROM $tbl_user u
INNER JOIN $tbl_track_login tel
ON tel.login_user_id = u.id
INNER JOIN $tblSessionRelUser sru
ON (u.id = sru.user_id AND sru.relation_type = ".SessionEntity::GENERAL_COACH.")
INNER JOIN $tbl_session_rel_access_url aurs
ON sru.session_id = aurs.session_id
WHERE aurs.access_url_id = $access_url_id
GROUP BY u.id
ORDER BY login_date $tracking_direction";
}
}
$result_sessions_coach = Database::query($sql_session_coach); $result_sessions_coach = Database::query($sql_session_coach);
//$total_no_coaches += Database::num_rows($result_sessions_coach); //$total_no_coaches += Database::num_rows($result_sessions_coach);

@ -474,10 +474,14 @@ function who_is_online_in_this_course($from, $number_of_items, $uid, $time_limit
$from = (int) $from; $from = (int) $from;
$number_of_items = (int) $number_of_items; $number_of_items = (int) $number_of_items;
$accessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $urlCondition = '';
$urlId = api_get_current_access_url_id(); $urlJoin = '';
$urlJoin = " INNER JOIN $accessUrlUser a ON (a.user_id = u.id) "; if (api_is_multiple_url_enabled()) {
$urlCondition = " AND a.access_url_id = $urlId "; $accessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id();
$urlJoin = " INNER JOIN $accessUrlUser a ON (a.user_id = u.id) ";
$urlCondition = " AND a.access_url_id = $urlId ";
}
$query = "SELECT o.login_user_id, o.login_date $query = "SELECT o.login_user_id, o.login_date
FROM $track_online_table o FROM $track_online_table o
@ -528,10 +532,14 @@ function who_is_online_in_this_course_count(
return false; return false;
} }
$accessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $urlCondition = '';
$urlId = api_get_current_access_url_id(); $urlJoin = '';
$urlJoin = " INNER JOIN $accessUrlUser a ON (a.user_id = u.id) "; if (api_is_multiple_url_enabled()) {
$urlCondition = " AND a.access_url_id = $urlId "; $accessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id();
$urlJoin = " INNER JOIN $accessUrlUser a ON (a.user_id = u.id) ";
$urlCondition = " AND a.access_url_id = $urlId ";
}
$query = "SELECT count(login_user_id) as count $query = "SELECT count(login_user_id) as count
FROM $track_online_table o FROM $track_online_table o
@ -574,10 +582,14 @@ function whoIsOnlineInThisSessionCount($timeLimit, $sessionId)
$online_time = time() - $timeLimit * 60; $online_time = time() - $timeLimit * 60;
$current_date = api_get_utc_datetime($online_time); $current_date = api_get_utc_datetime($online_time);
$accessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $urlCondition = '';
$urlId = api_get_current_access_url_id(); $urlJoin = '';
$urlJoin = " INNER JOIN $accessUrlUser a ON (a.user_id = u.id) "; if (api_is_multiple_url_enabled()) {
$urlCondition = " AND a.access_url_id = $urlId "; $accessUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id();
$urlJoin = " INNER JOIN $accessUrlUser a ON (a.user_id = u.id) ";
$urlCondition = " AND a.access_url_id = $urlId ";
}
$query = "SELECT count(login_user_id) as count $query = "SELECT count(login_user_id) as count
FROM $tblTrackOnline o FROM $tblTrackOnline o

@ -116,11 +116,18 @@ class Redirect
$redirect = api_get_setting('redirect_admin_to_courses_list'); $redirect = api_get_setting('redirect_admin_to_courses_list');
if ('true' !== $redirect) { if ('true' !== $redirect) {
// If the user is a platform admin, redirect to the main admin page // If the user is a platform admin, redirect to the main admin page
// if multiple URLs are enabled, make sure he's admin of the if (api_is_multiple_url_enabled()) {
// current URL before redirecting // if multiple URLs are enabled, make sure he's admin of the
$url = api_get_current_access_url_id(); // current URL before redirecting
if (api_is_platform_admin_by_id($userId, $url)) { $url = api_get_current_access_url_id();
self::navigate(api_get_path(WEB_CODE_PATH).'admin/index.php'); if (api_is_platform_admin_by_id($userId, $url)) {
self::navigate(api_get_path(WEB_CODE_PATH).'admin/index.php');
}
} else {
// if no multiple URL, then it's enough to be platform admin
if (api_is_platform_admin_by_id($userId)) {
self::navigate(api_get_path(WEB_CODE_PATH).'admin/index.php');
}
} }
} }
$page_after_login = api_get_setting('page_after_login'); $page_after_login = api_get_setting('page_after_login');

@ -163,10 +163,13 @@ class SessionManager
global $_configuration; global $_configuration;
// Check portal limits // Check portal limits
$accessUrlId = empty($accessUrlId) ? api_get_current_access_url_id() : (int) $accessUrlId; $accessUrlId = api_is_multiple_url_enabled()
? (empty($accessUrlId) ? api_get_current_access_url_id() : (int) $accessUrlId)
: 1;
if (isset($_configuration[$accessUrlId]['hosting_limit_sessions']) && if (isset($_configuration[$accessUrlId]) &&
is_array($_configuration[$accessUrlId]) && is_array($_configuration[$accessUrlId]) &&
isset($_configuration[$accessUrlId]['hosting_limit_sessions']) &&
$_configuration[$accessUrlId]['hosting_limit_sessions'] > 0 $_configuration[$accessUrlId]['hosting_limit_sessions'] > 0
) { ) {
$num = self::count_sessions(); $num = self::count_sessions();
@ -392,28 +395,50 @@ class SessionManager
"; ";
} }
$access_url_id = api_get_current_access_url_id(); $sql = "SELECT COUNT(id) as total_rows FROM (
$where .= " AND ar.access_url_id = $access_url_id "; SELECT DISTINCT
IF (
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.access_start_date IS NULL AND s.access_end_date IS NULL ) OR
(s.access_start_date <= '$today' AND s.access_end_date IS NULL) OR
('$today' <= s.access_end_date AND s.access_start_date IS NULL)
, 1, 0) as session_active,
s.id
FROM $tbl_session s
LEFT JOIN $tbl_session_category sc
ON s.session_category_id = sc.id
INNER JOIN $tbl_user u
ON s.id_coach = u.id
$courseCondition
$extraJoin
$where $where_condition ) as session_table";
$sql = "SELECT count(id) as total_rows FROM ( if (api_is_multiple_url_enabled()) {
SELECT DISTINCT $access_url_id = api_get_current_access_url_id();
IF ( if (-1 != $access_url_id) {
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR $where .= " AND ar.access_url_id = $access_url_id ";
$sql = "SELECT count(id) as total_rows FROM (
SELECT DISTINCT
IF (
(s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR
(s.access_start_date IS NULL AND s.access_end_date IS NULL) OR (s.access_start_date IS NULL AND s.access_end_date IS NULL) OR
(s.access_start_date <= '$today' AND s.access_end_date IS NULL) OR (s.access_start_date <= '$today' AND s.access_end_date IS NULL) OR
('$today' <= s.access_end_date AND s.access_start_date IS NULL) ('$today' <= s.access_end_date AND s.access_start_date IS NULL)
, 1, 0) , 1, 0)
as session_active, as session_active,
s.id s.id
FROM $tbl_session s FROM $tbl_session s
LEFT JOIN $tbl_session_category sc LEFT JOIN $tbl_session_category sc
ON s.session_category_id = sc.id ON s.session_category_id = sc.id
INNER JOIN $tbl_user u ON s.id_coach = u.id INNER JOIN $tbl_user u ON s.id_coach = u.id
INNER JOIN $table_access_url_rel_session ar INNER JOIN $table_access_url_rel_session ar
ON ar.session_id = s.id ON ar.session_id = s.id
$courseCondition $courseCondition
$extraJoin $extraJoin
$where $where_condition) as session_table"; $where $where_condition) as session_table";
}
}
$sql .= !str_contains($sql, 'WHERE') ? ' WHERE u.active <> '.USER_SOFT_DELETED : ' AND u.active <> '.USER_SOFT_DELETED; $sql .= !str_contains($sql, 'WHERE') ? ' WHERE u.active <> '.USER_SOFT_DELETED : ' AND u.active <> '.USER_SOFT_DELETED;
@ -579,14 +604,20 @@ class SessionManager
$injectExtraFields = rtrim(trim($injectExtraFields), ','); $injectExtraFields = rtrim(trim($injectExtraFields), ',');
$query .= ", $injectExtraFields"; $query .= ", $injectExtraFields";
} }
$query .= " FROM $tblSession s $sqlInjectJoins $where $sqlInjectWhere";
$tblAccessUrlRelSession = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); if (api_is_multiple_url_enabled()) {
$accessUrlId = api_get_current_access_url_id(); $tblAccessUrlRelSession = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$accessUrlId = api_get_current_access_url_id();
$where .= " AND ar.access_url_id = $accessUrlId "; if (-1 != $accessUrlId) {
$query .= " FROM $tblSession s $sqlInjectJoins $where .= " AND ar.access_url_id = $accessUrlId ";
INNER JOIN $tblAccessUrlRelSession ar $query = "$select
ON (ar.session_id = s.id) $where $sqlInjectWhere "; FROM $tblSession s $sqlInjectJoins
INNER JOIN $tblAccessUrlRelSession ar
ON (ar.session_id = s.id) $where";
}
}
$date = api_get_utc_datetime(); $date = api_get_utc_datetime();
@ -3657,14 +3688,20 @@ class SessionManager
$affected_rows = 0; $affected_rows = 0;
// Deleting assigned sessions to hrm_id. // Deleting assigned sessions to hrm_id.
if ($removeSessionsFromUser) { if ($removeSessionsFromUser) {
$sql = "SELECT s.session_id if (api_is_multiple_url_enabled()) {
FROM $tbl_session_rel_user s $sql = "SELECT s.session_id
INNER JOIN $tbl_session_rel_access_url a FROM $tbl_session_rel_user s
ON (a.session_id = s.session_id) INNER JOIN $tbl_session_rel_access_url a
WHERE ON (a.session_id = s.session_id)
s.user_id = $userId AND WHERE
relation_type = ".Session::DRH." AND s.user_id = $userId AND
access_url_id = ".api_get_current_access_url_id(); relation_type = ".Session::DRH." AND
access_url_id = ".api_get_current_access_url_id();
} else {
$sql = "SELECT s.session_id
FROM $tbl_session_rel_user s
WHERE user_id = $userId AND relation_type=".Session::DRH;
}
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0) { if (Database::num_rows($result) > 0) {
@ -3732,15 +3769,27 @@ class SessionManager
$userId = (int) $userId; $userId = (int) $userId;
$sessionId = (int) $sessionId; $sessionId = (int) $sessionId;
$sql = " SELECT * FROM $tbl_session s $select = " SELECT * ";
INNER JOIN $tbl_session_rel_user sru ON (sru.session_id = s.id) if (api_is_multiple_url_enabled()) {
LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id) $sql = " $select FROM $tbl_session s
WHERE INNER JOIN $tbl_session_rel_user sru ON (sru.session_id = s.id)
sru.user_id = '$userId' AND LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id)
sru.session_id = '$sessionId' AND WHERE
sru.relation_type = '".Session::DRH."' AND sru.user_id = '$userId' AND
access_url_id = ".api_get_current_access_url_id()." sru.session_id = '$sessionId' AND
"; sru.relation_type = '".Session::DRH."' AND
access_url_id = ".api_get_current_access_url_id()."
";
} else {
$sql = "$select FROM $tbl_session s
INNER JOIN $tbl_session_rel_user sru
ON
sru.session_id = s.id AND
sru.user_id = '$userId' AND
sru.session_id = '$sessionId' AND
sru.relation_type = '".Session::DRH."'
";
}
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result)) { if (Database::num_rows($result)) {
@ -4350,12 +4399,16 @@ class SessionManager
$whereConditions = "sru.user_id = $user_id AND sru.relation_type = ".Session::GENERAL_COACH; $whereConditions = "sru.user_id = $user_id AND sru.relation_type = ".Session::GENERAL_COACH;
} }
$tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
$innerJoin .= " INNER JOIN $tblSessionRelAccessUrl session_rel_url if (-1 != $access_url_id) {
ON (s.id = access_url_rel_session.session_id)"; $innerJoin .= " INNER JOIN $tblSessionRelAccessUrl session_rel_url
$whereConditions .= " AND access_url_rel_session.access_url_id = $access_url_id"; ON (s.id = access_url_rel_session.session_id)";
$whereConditions .= " AND access_url_rel_session.access_url_id = $access_url_id";
}
}
$sql = "SELECT s.* FROM $sessionTable AS s $innerJoin "; $sql = "SELECT s.* FROM $sessionTable AS s $innerJoin ";
if (!empty($whereConditions)) { if (!empty($whereConditions)) {
$sql .= "WHERE $whereConditions "; $sql .= "WHERE $whereConditions ";
@ -7757,20 +7810,33 @@ class SessionManager
return []; return [];
} }
$sessionAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$accessUrlId = api_get_current_access_url_id();
$sql = "SELECT DISTINCT s.* $sql = "SELECT DISTINCT s.*
FROM $sessionTable s FROM $sessionTable s
INNER JOIN $sessionUserTable sru ON s.id = sru.id_session INNER JOIN $sessionUserTable sru
INNER JOIN $sessionAccessUrlTable srau ON s.id = srau.session_id ON s.id = sru.id_session
WHERE WHERE
srau.access_url_id = $accessUrlId (sru.id_user IN (".implode(', ', $userIdList).")
AND (
sru.id_user IN (".implode(', ', $userIdList).")
AND sru.relation_type = ".Session::STUDENT." AND sru.relation_type = ".Session::STUDENT."
)"; )";
if (api_is_multiple_url_enabled()) {
$sessionAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$accessUrlId = api_get_current_access_url_id();
if (-1 != $accessUrlId) {
$sql = "SELECT DISTINCT s.*
FROM $sessionTable s
INNER JOIN $sessionUserTable sru ON s.id = sru.id_session
INNER JOIN $sessionAccessUrlTable srau ON s.id = srau.session_id
WHERE
srau.access_url_id = $accessUrlId
AND (
sru.id_user IN (".implode(', ', $userIdList).")
AND sru.relation_type = ".Session::STUDENT."
)";
}
}
$result = Database::query($sql); $result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) { while ($row = Database::fetch_assoc($result)) {
$sessionList[] = $row; $sessionList[] = $row;
@ -7877,17 +7943,26 @@ class SessionManager
$orderClause = 'ORDER BY '; $orderClause = 'ORDER BY ';
$orderClause .= api_sort_by_first_name() ? 'firstname, lastname, username' : 'lastname, firstname, username'; $orderClause .= api_sort_by_first_name() ? 'firstname, lastname, username' : 'lastname, firstname, username';
$userRelAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $sql = "SELECT id as user_id, lastname, firstname, username
$accessUrlId = api_get_current_access_url_id(); FROM $tbl_user
$sql = "SELECT user.id as user_id, username, lastname, firstname WHERE active <> -1 AND status = '1' ".
FROM $tbl_user user $orderClause;
INNER JOIN $userRelAccessUrlTable url_user
ON (url_user.user_id = user.id) if (api_is_multiple_url_enabled()) {
WHERE $userRelAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
user.active <> -1 AND $accessUrlId = api_get_current_access_url_id();
access_url_id = $accessUrlId AND if (-1 != $accessUrlId) {
status = 1 " $sql = "SELECT user.id as user_id, username, lastname, firstname
.$orderClause; FROM $tbl_user user
INNER JOIN $userRelAccessUrlTable url_user
ON (url_user.user_id = user.id)
WHERE
user.active <> -1 AND
access_url_id = $accessUrlId AND
status = 1 "
.$orderClause;
}
}
$result = Database::query($sql); $result = Database::query($sql);
$coachesList = Database::store_result($result); $coachesList = Database::store_result($result);
@ -8275,31 +8350,43 @@ class SessionManager
} }
$today = api_get_utc_datetime(); $today = api_get_utc_datetime();
$query_rows = "SELECT count(*) as total_rows, c.title as course_title, s.title,
$table_access_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); IF (
(s.access_start_date <= '$today' AND '$today' < s.access_end_date) OR
(s.access_start_date = '0000-00-00 00:00:00' AND s.access_end_date = '0000-00-00 00:00:00' ) OR
(s.access_start_date IS NULL AND s.access_end_date IS NULL) OR
(s.access_start_date <= '$today' AND ('0000-00-00 00:00:00' = s.access_end_date OR s.access_end_date IS NULL )) OR
('$today' < s.access_end_date AND ('0000-00-00 00:00:00' = s.access_start_date OR s.access_start_date IS NULL) )
, 1, 0) as session_active
FROM $extraFieldTables $tbl_session s
LEFT JOIN $tbl_session_category sc
ON s.session_category_id = sc.id
INNER JOIN $tblSessionRelUser sru
ON s.id = sru.session_id
INNER JOIN $tbl_user u
ON sru.user_id = u.id
INNER JOIN $sessionCourseUserTable scu
ON s.id = scu.session_id
INNER JOIN $courseTable c
ON c.id = scu.c_id
$where ";
if (api_is_multiple_url_enabled()) {
$table_access_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id(); $access_url_id = api_get_current_access_url_id();
$where .= " AND ar.access_url_id = $access_url_id "; if (-1 != $access_url_id) {
$query_rows = "SELECT count(*) as total_rows, c.title as course_title, s.title, $where .= " AND ar.access_url_id = $access_url_id ";
IF ( $query_rows = "SELECT count(*) as total_rows
(s.access_start_date <= '$today' AND '$today' < s.access_end_date) OR FROM $tbl_session s
(s.access_start_date = '0000-00-00 00:00:00' AND s.access_end_date = '0000-00-00 00:00:00' ) OR LEFT JOIN $tbl_session_category sc
(s.access_start_date IS NULL AND s.access_end_date IS NULL) OR ON s.session_category_id = sc.id
(s.access_start_date <= '$today' AND ('0000-00-00 00:00:00' = s.access_end_date OR s.access_end_date IS NULL )) OR INNER JOIN $tblSessionRelUser sru ON s.id = sru.session_id
('$today' < s.access_end_date AND ('0000-00-00 00:00:00' = s.access_start_date OR s.access_start_date IS NULL) ) INNER JOIN $tbl_user u
, 1, 0) as session_active ON sru.user_id = u.id
FROM $extraFieldTables $tbl_session s INNER JOIN $table_access_url_rel_session ar
LEFT JOIN $tbl_session_category sc ON ar.session_id = s.id $where ";
ON s.session_category_id = sc.id }
INNER JOIN $tblSessionRelUser sru }
ON s.id = sru.session_id
INNER JOIN $tbl_user u
ON sru.user_id = u.id
INNER JOIN $sessionCourseUserTable scu
ON s.id = scu.session_id
INNER JOIN $courseTable c
ON c.id = scu.c_id
INNER JOIN $table_access_url_rel_session ar
ON ar.session_id = s.id $where ";
$result = Database::query($query_rows); $result = Database::query($query_rows);
$num = 0; $num = 0;
@ -8964,29 +9051,53 @@ class SessionManager
$limit = ' LIMIT '.$options['limit']; $limit = ' LIMIT '.$options['limit'];
} }
$table_access_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $query = "$select FROM $tbl_session s
$access_url_id = api_get_current_access_url_id(); LEFT JOIN $tbl_session_field_values fv
$query = "$select ON (fv.item_id = s.id)
FROM $tbl_session s LEFT JOIN $extraFieldTable f
LEFT JOIN $tbl_session_field_values fv ON f.id = fv.field_id
ON (fv.item_id = s.id) LEFT JOIN $tbl_session_field_options fvo
LEFT JOIN $tbl_session_field_options fvo ON (fv.field_id = fvo.field_id)
ON (fv.field_id = fvo.field_id) LEFT JOIN $tbl_session_rel_course src
LEFT JOIN $tbl_session_rel_course src ON (src.session_id = s.id)
ON (src.session_id = s.id) LEFT JOIN $tbl_course c
LEFT JOIN $tbl_course c ON (src.c_id = c.id)
ON (src.c_id = c.id) LEFT JOIN $tbl_session_category sc
LEFT JOIN $tbl_session_category sc ON (s.session_category_id = sc.id)
ON (s.session_category_id = sc.id) INNER JOIN $tblSessionRelUser sru ON s.id = sru.session_id
INNER JOIN $tblSessionRelUser sru ON s.id = sru.session_id INNER JOIN $tbl_user u
INNER JOIN $tbl_user u ON sru.user_id = u.id
ON sru.user_id = u.id $where
INNER JOIN $table_access_url_rel_session ar $limit
ON (ar.session_id = s.id AND ar.access_url_id = $access_url_id)
$where
$limit
"; ";
if (api_is_multiple_url_enabled()) {
$table_access_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$query = "$select
FROM $tbl_session s
LEFT JOIN $tbl_session_field_values fv
ON (fv.item_id = s.id)
LEFT JOIN $tbl_session_field_options fvo
ON (fv.field_id = fvo.field_id)
LEFT JOIN $tbl_session_rel_course src
ON (src.session_id = s.id)
LEFT JOIN $tbl_course c
ON (src.c_id = c.id)
LEFT JOIN $tbl_session_category sc
ON (s.session_category_id = sc.id)
INNER JOIN $tblSessionRelUser sru ON s.id = sru.session_id
INNER JOIN $tbl_user u
ON sru.user_id = u.id
INNER JOIN $table_access_url_rel_session ar
ON (ar.session_id = s.id AND ar.access_url_id = $access_url_id)
$where
$limit
";
}
}
$query .= ') AS s'; $query .= ') AS s';
if (!empty($options['order'])) { if (!empty($options['order'])) {
@ -9677,16 +9788,25 @@ class SessionManager
$tblSession = Database::get_main_table(TABLE_MAIN_SESSION); $tblSession = Database::get_main_table(TABLE_MAIN_SESSION);
$tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tblSessionRelUser = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); if (api_is_multiple_url_enabled()) {
$tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$sql = "SELECT s.id FROM $tblSession s $sql = "SELECT s.id FROM $tblSession s
INNER JOIN $tblSessionRelUser sru ON (sru.session_id = s.id) INNER JOIN $tblSessionRelUser sru ON (sru.session_id = s.id)
LEFT JOIN $tblSessionRelAccessUrl a ON (s.id = a.session_id) LEFT JOIN $tblSessionRelAccessUrl a ON (s.id = a.session_id)
WHERE WHERE
sru.user_id = '$userId' AND sru.user_id = '$userId' AND
sru.session_id = '$sessionId' AND sru.session_id = '$sessionId' AND
sru.relation_type = '".Session::DRH."' AND sru.relation_type = '".Session::DRH."' AND
access_url_id = ".api_get_current_access_url_id(); access_url_id = ".api_get_current_access_url_id();
} else {
$sql = "SELECT s.id FROM $tblSession s
INNER JOIN $tblSessionRelUser sru ON sru.session_id = s.id
WHERE
sru.user_id = '$userId' AND
sru.session_id = '$sessionId' AND
sru.relation_type = '".Session::DRH."'";
}
$result = Database::query($sql); $result = Database::query($sql);

@ -56,12 +56,20 @@ class Statistics
//$categoryCondition = " course_category.code = '".Database::escape_string($categoryCode)."' "; //$categoryCondition = " course_category.code = '".Database::escape_string($categoryCode)."' ";
} }
$sql = "SELECT COUNT(*) AS number if (api_is_multiple_url_enabled()) {
FROM ".$course_table." as c, $access_url_rel_course_table as u $sql = "SELECT COUNT(*) AS number
$categoryJoin FROM ".$course_table." as c, $access_url_rel_course_table as u
WHERE u.c_id = c.id AND access_url_id='".$urlId."'"; $categoryJoin
if (isset($categoryCode)) { WHERE u.c_id = c.id AND access_url_id='".$urlId."'";
$sql .= " AND $categoryCondition"; if (isset($categoryCode)) {
$sql .= " AND $categoryCondition";
}
} else {
$sql = "SELECT COUNT(*) AS number
FROM $course_table $categoryJoin";
if (isset($categoryCode)) {
$sql .= " WHERE $categoryCondition";
}
} }
$res = Database::query($sql); $res = Database::query($sql);
@ -85,11 +93,18 @@ class Statistics
$course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_table = Database::get_main_table(TABLE_MAIN_COURSE);
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$sql = "SELECT COUNT(*) AS number if (api_is_multiple_url_enabled()) {
FROM $course_table as c, $access_url_rel_course_table as u $sql = "SELECT COUNT(*) AS number
WHERE u.c_id = c.id AND access_url_id='".$urlId."'"; FROM $course_table as c, $access_url_rel_course_table as u
if (isset($visibility)) { WHERE u.c_id = c.id AND access_url_id='".$urlId."'";
$sql .= " AND visibility = ".intval($visibility); if (isset($visibility)) {
$sql .= " AND visibility = ".intval($visibility);
}
} else {
$sql = "SELECT COUNT(*) AS number FROM $course_table ";
if (isset($visibility)) {
$sql .= " WHERE visibility = ".intval($visibility);
}
} }
$res = Database::query($sql); $res = Database::query($sql);
$obj = Database::fetch_object($res); $obj = Database::fetch_object($res);
@ -124,25 +139,45 @@ class Statistics
$active_filter = $onlyActive ? ' AND active = 1' : ''; $active_filter = $onlyActive ? ' AND active = 1' : '';
$status_filter = isset($status) ? ' AND status = '.intval($status) : ''; $status_filter = isset($status) ? ' AND status = '.intval($status) : '';
$sql = "SELECT COUNT(DISTINCT(u.id)) AS number if (api_is_multiple_url_enabled()) {
FROM $user_table as u, $access_url_rel_user_table as url $sql = "SELECT COUNT(DISTINCT(u.id)) AS number
WHERE FROM $user_table as u, $access_url_rel_user_table as url
u.active <> ".USER_SOFT_DELETED." AND WHERE
u.id = url.user_id AND u.active <> ".USER_SOFT_DELETED." AND
access_url_id = $urlId u.id = url.user_id AND
$status_filter $active_filter"; access_url_id = $urlId
if (isset($categoryCode)) { $status_filter $active_filter";
$categoryCode = Database::escape_string($categoryCode); if (isset($categoryCode)) {
$sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number $categoryCode = Database::escape_string($categoryCode);
FROM $course_user_table cu, $course_table c, $access_url_rel_user_table as url, $tblCourseRelCategory crc, $tblCourseCategory cc $sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number
WHERE FROM $course_user_table cu, $course_table c, $access_url_rel_user_table as url, $tblCourseRelCategory crc, $tblCourseCategory cc
c.id = cu.c_id AND WHERE
cc.code = '$categoryCode' AND c.id = cu.c_id AND
crc.course_category_id = cc.id AND cc.code = '$categoryCode' AND
crc.course_id = c.id AND crc.course_category_id = cc.id AND
cu.user_id = url.user_id AND crc.course_id = c.id AND
access_url_id = $urlId cu.user_id = url.user_id AND
$status_filter $active_filter"; access_url_id = $urlId
$status_filter $active_filter";
}
} else {
$sql = "SELECT COUNT(DISTINCT(id)) AS number
FROM $user_table
WHERE 1 = 1 AND active <> ".USER_SOFT_DELETED." $status_filter $active_filter";
if (isset($categoryCode)) {
$categoryCode = Database::escape_string($categoryCode);
$status_filter = isset($status) ? ' AND status = '.intval($status) : '';
$sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number
FROM $course_user_table cu, $course_table c, $tblCourseRelCategory crc, $tblCourseCategory cc
WHERE
c.id = cu.c_id AND
cc.code = '$categoryCode' AND
crc.course_category_id = cc.id AND
crc.course_id = c.id AND
$status_filter
$active_filter
";
}
} }
$res = Database::query($sql); $res = Database::query($sql);
@ -166,12 +201,17 @@ class Statistics
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$sql = "SELECT DISTINCT(t.c_id) FROM $table t , $access_url_rel_course_table a if (api_is_multiple_url_enabled()) {
WHERE $sql = "SELECT DISTINCT(t.c_id) FROM $table t , $access_url_rel_course_table a
t.c_id = a.c_id AND WHERE
access_url_id='".$urlId."' AND t.c_id = a.c_id AND
access_date BETWEEN '$startDate' AND '$endDate' access_url_id='".$urlId."' AND
"; access_date BETWEEN '$startDate' AND '$endDate'
";
} else {
$sql = "SELECT DISTINCT(t.c_id) FROM $table t
access_date BETWEEN '$startDate' AND '$endDate' ";
}
$result = Database::query($sql); $result = Database::query($sql);
@ -190,12 +230,18 @@ class Statistics
$table_user = Database::get_main_table(TABLE_MAIN_USER); $table_user = Database::get_main_table(TABLE_MAIN_USER);
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$sql = "SELECT count(default_id) AS total_number_of_items if (api_is_multiple_url_enabled()) {
FROM $track_e_default, $table_user user, $access_url_rel_user_table url $sql = "SELECT count(default_id) AS total_number_of_items
WHERE user.active <> ".USER_SOFT_DELETED." AND FROM $track_e_default, $table_user user, $access_url_rel_user_table url
default_user_id = user.id AND WHERE user.active <> ".USER_SOFT_DELETED." AND
user.id=url.user_id AND default_user_id = user.id AND
access_url_id = '".$urlId."'"; user.id=url.user_id AND
access_url_id = '".$urlId."'";
} else {
$sql = "SELECT count(default_id) AS total_number_of_items
FROM $track_e_default, $table_user user
WHERE user.active <> ".USER_SOFT_DELETED." AND default_user_id = user.id ";
}
if (!empty($courseId)) { if (!empty($courseId)) {
$courseId = (int) $courseId; $courseId = (int) $courseId;
@ -250,23 +296,37 @@ class Statistics
$direction = 'DESC'; $direction = 'DESC';
} }
$sql = "SELECT if (api_is_multiple_url_enabled()) {
default_event_type as col0, $sql = "SELECT
default_value_type as col1, default_event_type as col0,
default_value as col2, default_value_type as col1,
c_id as col3, default_value as col2,
session_id as col4, c_id as col3,
user.username as col5, session_id as col4,
user.id as col6, user.username as col5,
default_date as col7 user.id as col6,
FROM $track_e_default as track_default, default_date as col7
$table_user as user, FROM $track_e_default as track_default,
$access_url_rel_user_table as url $table_user as user,
WHERE $access_url_rel_user_table as url
user.active <> -1 AND WHERE
track_default.default_user_id = user.id AND user.active <> -1 AND
url.user_id = user.id AND track_default.default_user_id = user.id AND
access_url_id= $urlId "; url.user_id = user.id AND
access_url_id= $urlId ";
} else {
$sql = "SELECT
default_event_type as col0,
default_value_type as col1,
default_value as col2,
c_id as col3,
session_id as col4,
user.username as col5,
user.id as col6,
default_date as col7
FROM $track_e_default track_default, $table_user user
WHERE user.active <> ".USER_SOFT_DELETED." AND track_default.default_user_id = user.id ";
}
if (!empty($_GET['keyword'])) { if (!empty($_GET['keyword'])) {
$keyword = Database::escape_string(trim($_GET['keyword'])); $keyword = Database::escape_string(trim($_GET['keyword']));
@ -456,10 +516,15 @@ class Statistics
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$table_url = null;
$where_url = null;
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
$table_url = ", $access_url_rel_user_table"; $where_url_last = ' WHERE login_date > DATE_SUB("'.$now.'",INTERVAL 1 %s)';
$where_url = " WHERE login_user_id=user_id AND access_url_id='".$urlId."'"; if (api_is_multiple_url_enabled()) {
$where_url_last = ' AND login_date > DATE_SUB("'.$now.'",INTERVAL 1 %s)'; $table_url = ", $access_url_rel_user_table";
$where_url = " WHERE login_user_id=user_id AND access_url_id='".$urlId."'";
$where_url_last = ' AND login_date > DATE_SUB("'.$now.'",INTERVAL 1 %s)';
}
$period = get_lang('Month'); $period = get_lang('Month');
$periodCollection = api_get_months_long(); $periodCollection = api_get_months_long();
@ -553,8 +618,12 @@ class Statistics
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$table_url = ", $access_url_rel_user_table"; $table_url = '';
$where_url = " AND login_user_id=user_id AND access_url_id='".$urlId."'"; $where_url = '';
if (api_is_multiple_url_enabled()) {
$table_url = ", $access_url_rel_user_table";
$where_url = " AND login_user_id=user_id AND access_url_id='".$urlId."'";
}
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
$field = 'login_id'; $field = 'login_id';
@ -639,8 +708,12 @@ class Statistics
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$table_url = ", $access_url_rel_user_table"; $table_url = '';
$where_url = " AND login_user_id=user_id AND access_url_id='".$urlId."'"; $where_url = '';
if (api_is_multiple_url_enabled()) {
$table_url = ", $access_url_rel_user_table";
$where_url = " AND login_user_id=user_id AND access_url_id='".$urlId."'";
}
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
$date = new DateTime($now); $date = new DateTime($now);
@ -703,14 +776,21 @@ class Statistics
foreach ($tools as $tool) { foreach ($tools as $tool) {
$tool_names[$tool] = get_lang(ucfirst($tool), ''); $tool_names[$tool] = get_lang(ucfirst($tool), '');
} }
$sql = "SELECT access_tool, count( access_id ) AS number_of_logins if (api_is_multiple_url_enabled()) {
FROM $table t , $access_url_rel_course_table a $sql = "SELECT access_tool, count( access_id ) AS number_of_logins
WHERE FROM $table t , $access_url_rel_course_table a
access_tool IN ('".implode("','", $tools)."') AND WHERE
t.c_id = a.c_id AND access_tool IN ('".implode("','", $tools)."') AND
access_url_id='".$urlId."' t.c_id = a.c_id AND
GROUP BY access_tool access_url_id='".$urlId."'
"; GROUP BY access_tool
";
} else {
$sql = "SELECT access_tool, count( access_id ) AS number_of_logins
FROM $table
WHERE access_tool IN ('".implode("','", $tools)."')
GROUP BY access_tool ";
}
$res = Database::query($sql); $res = Database::query($sql);
$result = []; $result = [];
@ -745,11 +825,17 @@ class Statistics
$table = Database::get_main_table(TABLE_MAIN_COURSE); $table = Database::get_main_table(TABLE_MAIN_COURSE);
$access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $access_url_rel_course_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$sql = "SELECT course_language, count( c.code ) AS number_of_courses if (api_is_multiple_url_enabled()) {
FROM $table as c, $access_url_rel_course_table as u $sql = "SELECT course_language, count( c.code ) AS number_of_courses
WHERE u.c_id = c.id AND access_url_id='".$urlId."' FROM $table as c, $access_url_rel_course_table as u
GROUP BY course_language WHERE u.c_id = c.id AND access_url_id='".$urlId."'
ORDER BY number_of_courses DESC"; GROUP BY course_language
ORDER BY number_of_courses DESC";
} else {
$sql = "SELECT course_language, count( code ) AS number_of_courses
FROM $table GROUP BY course_language
ORDER BY number_of_courses DESC";
}
$res = Database::query($sql); $res = Database::query($sql);
$result = []; $result = [];
while ($obj = Database::fetch_object($res)) { while ($obj = Database::fetch_object($res)) {
@ -767,9 +853,14 @@ class Statistics
$user_table = Database::get_main_table(TABLE_MAIN_USER); $user_table = Database::get_main_table(TABLE_MAIN_USER);
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$url_condition = ", $access_url_rel_user_table as url WHERE url.user_id=u.id AND access_url_id='".$urlId."'"; $url_condition = null;
$url_condition2 = " AND url.user_id=u.id AND access_url_id='".$urlId."'"; $url_condition2 = null;
$table = ", $access_url_rel_user_table as url "; $table = null;
if (api_is_multiple_url_enabled()) {
$url_condition = ", $access_url_rel_user_table as url WHERE url.user_id=u.id AND access_url_id='".$urlId."'";
$url_condition2 = " AND url.user_id=u.id AND access_url_id='".$urlId."'";
$table = ", $access_url_rel_user_table as url ";
}
$sql = "SELECT COUNT(*) AS n FROM $user_table as u ".$url_condition; $sql = "SELECT COUNT(*) AS n FROM $user_table as u ".$url_condition;
$res = Database::query($sql); $res = Database::query($sql);
$count1 = Database::fetch_object($res); $count1 = Database::fetch_object($res);
@ -878,13 +969,20 @@ class Statistics
$values = $form->exportValues(); $values = $form->exportValues();
$date_diff = $values['date_diff']; $date_diff = $values['date_diff'];
$table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LASTACCESS); $table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LASTACCESS);
$sql = "SELECT * FROM $table t , $access_url_rel_course_table a if (api_is_multiple_url_enabled()) {
WHERE $sql = "SELECT * FROM $table t , $access_url_rel_course_table a
t.c_id = a.c_id AND WHERE
access_url_id='".$urlId."' t.c_id = a.c_id AND
GROUP BY t.c_id access_url_id='".$urlId."'
HAVING t.c_id <> '' GROUP BY t.c_id
AND DATEDIFF( '".api_get_utc_datetime()."' , access_date ) <= ".$date_diff; HAVING t.c_id <> ''
AND DATEDIFF( '".api_get_utc_datetime()."' , access_date ) <= ".$date_diff;
} else {
$sql = "SELECT * FROM $table t
GROUP BY t.c_id
HAVING t.c_id <> ''
AND DATEDIFF( '".api_get_utc_datetime()."' , access_date ) <= ".$date_diff;
}
$sql .= ' ORDER BY `'.$columns[$column].'` '.$sql_order[$direction]; $sql .= ' ORDER BY `'.$columns[$column].'` '.$sql_order[$direction];
$from = ($page_nr - 1) * $per_page; $from = ($page_nr - 1) * $per_page;
$sql .= ' LIMIT '.$from.','.$per_page; $sql .= ' LIMIT '.$from.','.$per_page;
@ -947,12 +1045,19 @@ class Statistics
break; break;
} }
$sql = "SELECT lastname, firstname, username, COUNT($field) AS count_message if (api_is_multiple_url_enabled()) {
FROM $access_url_rel_user_table as url, $message_table m $sql = "SELECT lastname, firstname, username, COUNT($field) AS count_message
LEFT JOIN $user_table u ON m.$field = u.id AND u.active <> ".USER_SOFT_DELETED." FROM $access_url_rel_user_table as url, $message_table m
WHERE url.user_id = m.$field AND access_url_id='".$urlId."' LEFT JOIN $user_table u ON m.$field = u.id AND u.active <> ".USER_SOFT_DELETED."
GROUP BY m.$field WHERE url.user_id = m.$field AND access_url_id='".$urlId."'
ORDER BY count_message DESC "; GROUP BY m.$field
ORDER BY count_message DESC ";
} else {
$sql = "SELECT lastname, firstname, username, COUNT($field) AS count_message
FROM $message_table m
LEFT JOIN $user_table u ON m.$field = u.id AND u.active <> ".USER_SOFT_DELETED."
GROUP BY m.$field ORDER BY count_message DESC ";
}
$res = Database::query($sql); $res = Database::query($sql);
$messages_sent = []; $messages_sent = [];
while ($messages = Database::fetch_array($res)) { while ($messages = Database::fetch_array($res)) {
@ -979,16 +1084,26 @@ class Statistics
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$sql = "SELECT lastname, firstname, username, COUNT(friend_user_id) AS count_friend if (api_is_multiple_url_enabled()) {
FROM $access_url_rel_user_table as url, $user_friend_table uf $sql = "SELECT lastname, firstname, username, COUNT(friend_user_id) AS count_friend
LEFT JOIN $user_table u FROM $access_url_rel_user_table as url, $user_friend_table uf
ON (uf.user_id = u.id) AND u.active <> ".USER_SOFT_DELETED." LEFT JOIN $user_table u
WHERE ON (uf.user_id = u.id) AND u.active <> ".USER_SOFT_DELETED."
uf.relation_type <> '".UserRelUser::USER_RELATION_TYPE_RRHH."' AND WHERE
uf.user_id = url.user_id AND uf.relation_type <> '".UserRelUser::USER_RELATION_TYPE_RRHH."' AND
access_url_id = '".$urlId."' uf.user_id = url.user_id AND
GROUP BY uf.user_id access_url_id = '".$urlId."'
ORDER BY count_friend DESC "; GROUP BY uf.user_id
ORDER BY count_friend DESC ";
} else {
$sql = "SELECT lastname, firstname, username, COUNT(friend_user_id) AS count_friend
FROM $user_friend_table uf
LEFT JOIN $user_table u
ON (uf.user_id = u.id) AND u.active <> ".USER_SOFT_DELETED."
WHERE uf.relation_type <> '".UserRelUser::USER_RELATION_TYPE_RRHH."'
GROUP BY uf.user_id
ORDER BY count_friend DESC ";
}
$res = Database::query($sql); $res = Database::query($sql);
$list_friends = []; $list_friends = [];
while ($friends = Database::fetch_array($res)) { while ($friends = Database::fetch_array($res)) {
@ -1009,8 +1124,13 @@ class Statistics
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$total = self::countUsers(); $total = self::countUsers();
$table_url = ", $access_url_rel_user_table"; if (api_is_multiple_url_enabled()) {
$where_url = " AND login_user_id=user_id AND access_url_id='".$urlId."'"; $table_url = ", $access_url_rel_user_table";
$where_url = " AND login_user_id=user_id AND access_url_id='".$urlId."'";
} else {
$table_url = '';
$where_url = '';
}
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
$sql[get_lang('This day')] = $sql[get_lang('This day')] =
"SELECT count(distinct(login_user_id)) AS number ". "SELECT count(distinct(login_user_id)) AS number ".
@ -1333,10 +1453,15 @@ class Statistics
$tblUser = Database::get_main_table(TABLE_MAIN_USER); $tblUser = Database::get_main_table(TABLE_MAIN_USER);
$tblLogin = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $tblLogin = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
$tblUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $urlJoin = '';
$urlWhere = '';
$urlJoin = "INNER JOIN $tblUrlUser au ON u.id = au.user_id"; if (api_is_multiple_url_enabled()) {
$urlWhere = 'AND au.access_url_id = '.api_get_current_access_url_id(); $tblUrlUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$urlJoin = "INNER JOIN $tblUrlUser au ON u.id = au.user_id";
$urlWhere = 'AND au.access_url_id = '.api_get_current_access_url_id();
}
$sql = "SELECT u.id, $sql = "SELECT u.id,
u.firstname, u.firstname,

@ -1742,10 +1742,14 @@ class Tracking
$userCondition = " login_user_id = $userId "; $userCondition = " login_user_id = $userId ";
} }
$url_condition = null;
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id(); $url_table = null;
$url_table = ", $tbl_url_rel_user as url_users"; if (api_is_multiple_url_enabled()) {
$url_condition = " AND u.login_user_id = url_users.user_id AND access_url_id='$access_url_id'"; $access_url_id = api_get_current_access_url_id();
$url_table = ", $tbl_url_rel_user as url_users";
$url_condition = " AND u.login_user_id = url_users.user_id AND access_url_id='$access_url_id'";
}
if (empty($timeFilter)) { if (empty($timeFilter)) {
$timeFilter = 'last_week'; $timeFilter = 'last_week';
@ -1821,9 +1825,13 @@ class Tracking
$tbl_track_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $tbl_track_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id(); $url_table = null;
$url_table = ", ".$tbl_url_rel_user." as url_users"; $url_condition = null;
$url_condition = " AND u.login_user_id = url_users.user_id AND access_url_id='$access_url_id'"; if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id();
$url_table = ", ".$tbl_url_rel_user." as url_users";
$url_condition = " AND u.login_user_id = url_users.user_id AND access_url_id='$access_url_id'";
}
if (!empty($startDate) && !empty($endDate)) { if (!empty($startDate) && !empty($endDate)) {
$startDate = Database::escape_string($startDate); $startDate = Database::escape_string($startDate);
@ -3605,18 +3613,25 @@ class Tracking
$tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$access_url_id = api_get_current_access_url_id(); $accessUrlEnabled = api_is_multiple_url_enabled();
$access_url_id = $accessUrlEnabled ? api_get_current_access_url_id() : -1;
$students = []; $students = [];
// At first, courses where $coach_id is coach of the course // // At first, courses where $coach_id is coach of the course //
$sql = 'SELECT scu.session_id, scu.c_id $sql = 'SELECT session_id, c_id
FROM '.$tbl_session_course_user.' scu FROM '.$tbl_session_course_user.'
INNER JOIN '.$tbl_session_rel_access_url.' sru WHERE user_id='.$coach_id.' AND status = '.SessionEntity::COURSE_COACH;
ON (scu.session_id=sru.session_id)
WHERE if (-1 != $access_url_id) {
scu.user_id='.$coach_id.' AND $sql = 'SELECT scu.session_id, scu.c_id
scu.status = '.SessionEntity::COURSE_COACH.' AND FROM '.$tbl_session_course_user.' scu
sru.access_url_id = '.$access_url_id; INNER JOIN '.$tbl_session_rel_access_url.' sru
ON (scu.session_id=sru.session_id)
WHERE
scu.user_id='.$coach_id.' AND
scu.status = '.SessionEntity::COURSE_COACH.' AND
sru.access_url_id = '.$access_url_id;
}
$result = Database::query($sql); $result = Database::query($sql);
@ -3753,17 +3768,21 @@ class Tracking
ON (c.id = sc.c_id) ON (c.id = sc.c_id)
WHERE sc.user_id = '.$coach_id.' AND sc.status = '.SessionEntity::COURSE_COACH; WHERE sc.user_id = '.$coach_id.' AND sc.status = '.SessionEntity::COURSE_COACH;
$access_url_id = api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$sql = 'SELECT DISTINCT c.code $access_url_id = api_get_current_access_url_id();
FROM '.$tbl_session_course_user.' scu if (-1 != $access_url_id) {
INNER JOIN '.$tbl_course.' c $sql = 'SELECT DISTINCT c.code
ON (c.code = scu.c_id) FROM '.$tbl_session_course_user.' scu
INNER JOIN '.$tbl_course_rel_access_url.' cru INNER JOIN '.$tbl_course.' c
ON (c.id = cru.c_id) ON (c.code = scu.c_id)
WHERE INNER JOIN '.$tbl_course_rel_access_url.' cru
scu.user_id='.$coach_id.' AND ON (c.id = cru.c_id)
scu.status = '.SessionEntity::COURSE_COACH.' AND WHERE
cru.access_url_id = '.$access_url_id; scu.user_id='.$coach_id.' AND
scu.status = '.SessionEntity::COURSE_COACH.' AND
cru.access_url_id = '.$access_url_id;
}
}
if (!empty($sessionId)) { if (!empty($sessionId)) {
$sql .= ' AND session_id='.$sessionId; $sql .= ' AND session_id='.$sessionId;
@ -3776,28 +3795,47 @@ class Tracking
} }
// Then, courses where $coach_id is coach of the session // Then, courses where $coach_id is coach of the session
$tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $sql = "SELECT DISTINCT course.code
$access_url_id = api_get_current_access_url_id(); FROM $tbl_session_course as session_course
$sql = "SELECT DISTINCT c.code INNER JOIN $tbl_session as session
FROM $tbl_session_course as session_course ON (session.id = session_course.session_id)
INNER JOIN $tbl_course c INNER JOIN $tblSessionRelUser session_user
ON (c.id = session_course.c_id) ON (session.id = session_user.session_id
INNER JOIN $tbl_session as session AND session_user.user_id = $coach_id
ON session.id = session_course.session_id AND session_user.relation_type = ".SessionEntity::GENERAL_COACH.")
INNER JOIN $tblSessionRelUser session_user INNER JOIN $tbl_course as course
ON (session.id = session_user.session_id ON course.id = session_course.c_id";
AND session_user.user_id = $coach_id
AND session_user.relation_type = ".SessionEntity::GENERAL_COACH.") if (api_is_multiple_url_enabled()) {
INNER JOIN $tbl_course as course $tbl_course_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
ON course.id = session_course.c_id $access_url_id = api_get_current_access_url_id();
INNER JOIN $tbl_course_rel_access_url course_rel_url if (-1 != $access_url_id) {
ON (course_rel_url.c_id = c.id)"; $sql = "SELECT DISTINCT c.code
FROM $tbl_session_course as session_course
INNER JOIN $tbl_course c
ON (c.id = session_course.c_id)
INNER JOIN $tbl_session as session
ON session.id = session_course.session_id
INNER JOIN $tblSessionRelUser session_user
ON (session.id = session_user.session_id
AND session_user.user_id = $coach_id
AND session_user.relation_type = ".SessionEntity::GENERAL_COACH.")
INNER JOIN $tbl_course as course
ON course.id = session_course.c_id
INNER JOIN $tbl_course_rel_access_url course_rel_url
ON (course_rel_url.c_id = c.id)";
}
}
if (!empty($sessionId)) { if (!empty($sessionId)) {
$sql .= ' WHERE session_course.session_id='.$sessionId; $sql .= ' WHERE session_course.session_id='.$sessionId;
$sql .= ' AND access_url_id = '.$access_url_id; if (api_is_multiple_url_enabled()) {
$sql .= ' AND access_url_id = '.$access_url_id;
}
} else { } else {
$sql .= ' WHERE access_url_id = '.$access_url_id; if (api_is_multiple_url_enabled()) {
$sql .= ' WHERE access_url_id = '.$access_url_id;
}
} }
$result = Database::query($sql); $result = Database::query($sql);
@ -4572,17 +4610,28 @@ class Tracking
$session_id = (int) $session_id; $session_id = (int) $session_id;
$urlId = api_get_current_access_url_id(); $urlId = api_get_current_access_url_id();
$sql = "SELECT c.id, c.code, title if (api_is_multiple_url_enabled()) {
FROM $tbl_course_user cu $sql = "SELECT c.id, c.code, title
INNER JOIN $tbl_course c FROM $tbl_course_user cu
ON (cu.c_id = c.id) INNER JOIN $tbl_course c
INNER JOIN $tbl_access_rel_course a ON (cu.c_id = c.id)
ON (a.c_id = c.id) INNER JOIN $tbl_access_rel_course a
WHERE ON (a.c_id = c.id)
cu.user_id = $user_id AND WHERE
relation_type<> ".COURSE_RELATION_TYPE_RRHH." AND cu.user_id = $user_id AND
access_url_id = $urlId relation_type<> ".COURSE_RELATION_TYPE_RRHH." AND
ORDER BY title"; access_url_id = $urlId
ORDER BY title";
} else {
$sql = "SELECT c.id, c.code, title
FROM $tbl_course_user cu
INNER JOIN $tbl_course c
ON (cu.c_id = c.id)
WHERE
cu.user_id = $user_id AND
relation_type <> ".COURSE_RELATION_TYPE_RRHH."
ORDER BY title";
}
$rs = Database::query($sql); $rs = Database::query($sql);
$courses = $course_in_session = $temp_course_in_session = []; $courses = $course_in_session = $temp_course_in_session = [];
@ -4608,20 +4657,34 @@ class Tracking
} }
// Get the list of sessions where the user is subscribed as student // Get the list of sessions where the user is subscribed as student
$sql = "SELECT DISTINCT c.code, s.id as session_id, s.title if (api_is_multiple_url_enabled()) {
FROM $tbl_session_course_user cu $sql = "SELECT DISTINCT c.code, s.id as session_id, s.title
INNER JOIN $tbl_access_rel_session a FROM $tbl_session_course_user cu
ON (a.session_id = cu.session_id) INNER JOIN $tbl_access_rel_session a
INNER JOIN $tbl_session s ON (a.session_id = cu.session_id)
ON (s.id = a.session_id) INNER JOIN $tbl_session s
INNER JOIN $tbl_course c ON (s.id = a.session_id)
ON (c.id = cu.c_id) INNER JOIN $tbl_course c
$extraInnerJoin ON (c.id = cu.c_id)
WHERE $extraInnerJoin
cu.user_id = $user_id AND WHERE
access_url_id = ".$urlId." cu.user_id = $user_id AND
$sessionCondition access_url_id = ".$urlId."
$orderBy "; $sessionCondition
$orderBy ";
} else {
$sql = "SELECT DISTINCT c.code, s.id as session_id, s.title
FROM $tbl_session_course_user cu
INNER JOIN $tbl_session s
ON (s.id = cu.session_id)
INNER JOIN $tbl_course c
ON (c.id = cu.c_id)
$extraInnerJoin
WHERE
cu.user_id = $user_id
$sessionCondition
$orderBy ";
}
$rs = Database::query($sql); $rs = Database::query($sql);
$simple_session_array = []; $simple_session_array = [];
@ -8587,8 +8650,12 @@ class TrackingCourseLog
) "; ) ";
} }
$url_table = " INNER JOIN $tbl_url_rel_user as url_users ON (user.id = url_users.user_id)"; $url_table = '';
$url_condition = " AND access_url_id = '$access_url_id'"; $url_condition = '';
if (api_is_multiple_url_enabled()) {
$url_table = " INNER JOIN $tbl_url_rel_user as url_users ON (user.id = url_users.user_id)";
$url_condition = " AND access_url_id = '$access_url_id'";
}
$invitedUsersCondition = ''; $invitedUsersCondition = '';
if (!$includeInvitedUsers) { if (!$includeInvitedUsers) {
@ -8987,8 +9054,12 @@ class TrackingCourseLog
$condition_user = " WHERE user.user_id = $user_ids "; $condition_user = " WHERE user.user_id = $user_ids ";
} }
$url_table = ", ".$tbl_url_rel_user." as url_users"; $url_table = null;
$url_condition = " AND user.user_id = url_users.user_id AND access_url_id='$access_url_id'"; $url_condition = null;
if (api_is_multiple_url_enabled()) {
$url_table = ", ".$tbl_url_rel_user." as url_users";
$url_condition = " AND user.user_id = url_users.user_id AND access_url_id='$access_url_id'";
}
$invitedUsersCondition = ''; $invitedUsersCondition = '';
if (!$includeInvitedUsers) { if (!$includeInvitedUsers) {

@ -387,10 +387,14 @@ class UserManager
$email_admin = api_get_setting('emailAdministrator'); $email_admin = api_get_setting('emailAdministrator');
$url = api_get_path(WEB_PATH); $url = api_get_path(WEB_PATH);
$access_url_id = api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$urlInfo = api_get_access_url($access_url_id); $access_url_id = api_get_current_access_url_id();
if ($urlInfo) { if (-1 != $access_url_id) {
$url = $urlInfo['url']; $urlInfo = api_get_access_url($access_url_id);
if ($urlInfo) {
$url = $urlInfo['url'];
}
}
} }
// variables for the default template // variables for the default template
@ -962,9 +966,14 @@ class UserManager
PERSON_NAME_EMAIL_ADDRESS PERSON_NAME_EMAIL_ADDRESS
); );
$email_admin = api_get_setting('emailAdministrator'); $email_admin = api_get_setting('emailAdministrator');
$access_url_id = api_get_current_access_url_id(); $url = api_get_path(WEB_PATH);
$url = api_get_access_url($access_url_id); if (api_is_multiple_url_enabled()) {
$url = $url['url']; $access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$url = api_get_access_url($access_url_id);
$url = $url['url'];
}
}
$tplContent = new Template( $tplContent = new Template(
null, null,
@ -1372,14 +1381,18 @@ class UserManager
$return_array = []; $return_array = [];
$sql = "SELECT user.*, user.id as user_id FROM $user_table user "; $sql = "SELECT user.*, user.id as user_id FROM $user_table user ";
if ($idCampus) { if (api_is_multiple_url_enabled()) {
$urlId = $idCampus; if ($idCampus) {
$urlId = $idCampus;
} else {
$urlId = api_get_current_access_url_id();
}
$sql .= " INNER JOIN $userUrlTable url_user
ON (user.id = url_user.user_id)
WHERE url_user.access_url_id = $urlId";
} else { } else {
$urlId = api_get_current_access_url_id(); $sql .= " WHERE 1=1 ";
} }
$sql .= " INNER JOIN $userUrlTable url_user
ON (user.id = url_user.user_id)
WHERE url_user.access_url_id = $urlId";
if (count($conditions) > 0) { if (count($conditions) > 0) {
foreach ($conditions as $field => $value) { foreach ($conditions as $field => $value) {
@ -1425,14 +1438,18 @@ class UserManager
$sql = "SELECT count(user.id) count FROM $user_table user "; $sql = "SELECT count(user.id) count FROM $user_table user ";
} }
if ($idCampus) { if (api_is_multiple_url_enabled()) {
$urlId = $idCampus; if ($idCampus) {
$urlId = $idCampus;
} else {
$urlId = api_get_current_access_url_id();
}
$sql .= " INNER JOIN $userUrlTable url_user
ON (user.user_id = url_user.user_id)
WHERE url_user.access_url_id = $urlId";
} else { } else {
$urlId = api_get_current_access_url_id(); $sql .= " WHERE 1=1 ";
} }
$sql .= " INNER JOIN $userUrlTable url_user
ON (user.user_id = url_user.user_id)
WHERE url_user.access_url_id = $urlId";
$sql .= " AND status <> ".ANONYMOUS." "; $sql .= " AND status <> ".ANONYMOUS." ";
@ -1497,7 +1514,11 @@ class UserManager
$tblAccessUrlRelUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $tblAccessUrlRelUser = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$return_array = []; $return_array = [];
$sql_query = "SELECT user.id FROM $user_table user "; $sql_query = "SELECT user.id FROM $user_table user ";
$sql_query .= " INNER JOIN $tblAccessUrlRelUser auru ON auru.user_id = user.id ";
if (api_is_multiple_url_enabled()) {
$sql_query .= " INNER JOIN $tblAccessUrlRelUser auru ON auru.user_id = user.id ";
}
$sql_query .= ' WHERE 1 = 1 '; $sql_query .= ' WHERE 1 = 1 ';
if (count($conditions) > 0) { if (count($conditions) > 0) {
$temp_conditions = []; $temp_conditions = [];
@ -1514,9 +1535,13 @@ class UserManager
$sql_query .= ' AND '.implode(' '.$condition.' ', $temp_conditions); $sql_query .= ' AND '.implode(' '.$condition.' ', $temp_conditions);
} }
$sql_query .= ' AND auru.access_url_id = '.api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$sql_query .= ' AND auru.access_url_id = '.api_get_current_access_url_id();
}
} else { } else {
$sql_query .= ' AND auru.access_url_id = '.api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$sql_query .= ' AND auru.access_url_id = '.api_get_current_access_url_id();
}
} }
if (!empty($onlyThisUserList)) { if (!empty($onlyThisUserList)) {
@ -3354,12 +3379,18 @@ class UserManager
$t_u = Database::get_main_table(TABLE_MAIN_USER); $t_u = Database::get_main_table(TABLE_MAIN_USER);
$t_a = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $t_a = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "SELECT count(u.id) if (api_is_multiple_url_enabled()) {
FROM $t_u u $sql = "SELECT count(u.id)
INNER JOIN $t_a url_user FROM $t_u u
ON (u.id = url_user.user_id) INNER JOIN $t_a url_user
WHERE url_user.access_url_id = $access_url_id ON (u.id = url_user.user_id)
"; WHERE url_user.access_url_id = $access_url_id
";
} else {
$sql = "SELECT count(u.id)
FROM $t_u u
WHERE 1 = 1 ";
}
$status = (int) $status; $status = (int) $status;
if (!empty($status) && $status > 0) { if (!empty($status) && $status > 0) {

@ -283,25 +283,29 @@ class IndexManager
} }
// Showing only the courses of the current access_url_id. // Showing only the courses of the current access_url_id.
$url_access_id = api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $url_access_id = api_get_current_access_url_id();
$sql = "SELECT * FROM $main_course_table as course if (-1 != $url_access_id) {
INNER JOIN $tbl_url_rel_course as url_rel_course $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
ON (url_rel_course.c_id = course.id) $sql = "SELECT * FROM $main_course_table as course
WHERE INNER JOIN $tbl_url_rel_course as url_rel_course
access_url_id = $url_access_id AND ON (url_rel_course.c_id = course.id)
category_id IS NULL WHERE
ORDER BY title, UPPER(visual_code)"; access_url_id = $url_access_id AND
category_id IS NULL
ORDER BY title, UPPER(visual_code)";
if (!empty($category)) { if (!empty($category)) {
$sql = "SELECT * FROM $main_course_table as course $sql = "SELECT * FROM $main_course_table as course
INNER JOIN $main_category_table course_category ON course.category_id = course_category.id INNER JOIN $main_category_table course_category ON course.category_id = course_category.id
INNER JOIN $tbl_url_rel_course as url_rel_course INNER JOIN $tbl_url_rel_course as url_rel_course
ON (url_rel_course.c_id = course.id) ON (url_rel_course.c_id = course.id)
WHERE WHERE
access_url_id = $url_access_id AND access_url_id = $url_access_id AND
course_category.code = '$category' course_category.code = '$category'
ORDER BY course.title, UPPER(visual_code)"; ORDER BY course.title, UPPER(visual_code)";
}
}
} }
// Removed: AND cours.visibility='".COURSE_VISIBILITY_OPEN_WORLD."' // Removed: AND cours.visibility='".COURSE_VISIBILITY_OPEN_WORLD."'
@ -325,30 +329,47 @@ class IndexManager
$platform_visible_courses = " AND (t3.visibility='".COURSE_VISIBILITY_OPEN_WORLD."' )"; $platform_visible_courses = " AND (t3.visibility='".COURSE_VISIBILITY_OPEN_WORLD."' )";
} }
} }
$sqlGetSubCatList = "
SELECT t1.name,
t1.code,
t1.parent_id,
t1.children_count,COUNT(DISTINCT t3.code) AS nbCourse
FROM $main_category_table t1
LEFT JOIN $main_category_table t2
ON t1.code=t2.parent_id
LEFT JOIN $main_course_table t3
ON (t3.category_id = t1.id $platform_visible_courses)
WHERE t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")."
GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count
ORDER BY t1.tree_pos, t1.name";
// Showing only the category of courses of the current access_url_id // Showing only the category of courses of the current access_url_id
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY); if (api_is_multiple_url_enabled()) {
$courseCategoryCondition = " INNER JOIN $table a ON (t1.id = a.course_category_id)"; $table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
$courseCategoryCondition = " INNER JOIN $table a ON (t1.id = a.course_category_id)";
$url_access_id = api_get_current_access_url_id();
$tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $url_access_id = api_get_current_access_url_id();
$sqlGetSubCatList = " if (-1 != $url_access_id) {
SELECT t1.name, $tbl_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
t1.code, $sqlGetSubCatList = "
t1.parent_id, SELECT t1.name,
t1.children_count, t1.code,
COUNT(DISTINCT t3.code) AS nbCourse t1.parent_id,
FROM $main_category_table t1 t1.children_count,
$courseCategoryCondition COUNT(DISTINCT t3.code) AS nbCourse
LEFT JOIN $main_category_table t2 ON t1.code = t2.parent_id FROM $main_category_table t1
LEFT JOIN $main_course_table t3 ON (t3.category_id = t1.id $platform_visible_courses) $courseCategoryCondition
INNER JOIN $tbl_url_rel_course as url_rel_course LEFT JOIN $main_category_table t2 ON t1.code = t2.parent_id
ON (url_rel_course.c_id = t3.id) LEFT JOIN $main_course_table t3 ON (t3.category_id = t1.id $platform_visible_courses)
WHERE INNER JOIN $tbl_url_rel_course as url_rel_course
url_rel_course.access_url_id = $url_access_id AND ON (url_rel_course.c_id = t3.id)
t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")." WHERE
GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count url_rel_course.access_url_id = $url_access_id AND
ORDER BY t1.tree_pos, t1.name"; t1.parent_id ".(empty($category) ? "IS NULL" : "='$category'")."
GROUP BY t1.name,t1.code,t1.parent_id,t1.children_count
ORDER BY t1.tree_pos, t1.name";
}
}
$resCats = Database::query($sqlGetSubCatList); $resCats = Database::query($sqlGetSubCatList);
$thereIsSubCat = false; $thereIsSubCat = false;

@ -1339,10 +1339,19 @@ class Rest extends WebService
throw new Exception(get_lang('UserNotRegistered')); throw new Exception(get_lang('UserNotRegistered'));
} }
UrlManager::add_user_to_url( if (api_is_multiple_url_enabled()) {
$userId, if (-1 != api_get_current_access_url_id()) {
api_get_current_access_url_id() UrlManager::add_user_to_url(
); $userId,
api_get_current_access_url_id()
);
} else {
UrlManager::add_user_to_url($userId, 1);
}
} else {
// We add by default the access_url_user table with access_url_id = 1
UrlManager::add_user_to_url($userId, 1);
}
// Save new field label into user_field table. // Save new field label into user_field table.
UserManager::create_extra_field( UserManager::create_extra_field(
@ -1616,7 +1625,12 @@ class Rest extends WebService
$modelSession = SessionManager::fetch($modelSessionId); $modelSession = SessionManager::fetch($modelSessionId);
$generalCoachesId = SessionManager::getGeneralCoachesIdForSession($modelSessionId); $generalCoachesId = SessionManager::getGeneralCoachesIdForSession($modelSessionId);
$modelSession['accessUrlId'] = api_get_current_access_url_id(); $modelSession['accessUrlId'] = 1;
if (api_is_multiple_url_enabled()) {
if (-1 != api_get_current_access_url_id()) {
$modelSession['accessUrlId'] = api_get_current_access_url_id();
}
}
$newSessionId = SessionManager::create_session( $newSessionId = SessionManager::create_session(
$sessionName, $sessionName,
@ -1676,10 +1690,18 @@ class Rest extends WebService
throw new Exception(get_lang('CoursesNotAddedToSession')); throw new Exception(get_lang('CoursesNotAddedToSession'));
} }
UrlManager::add_session_to_url( if (api_is_multiple_url_enabled()) {
$newSessionId, if (-1 != api_get_current_access_url_id()) {
api_get_current_access_url_id() UrlManager::add_session_to_url(
); $newSessionId,
api_get_current_access_url_id()
);
} else {
UrlManager::add_session_to_url($newSessionId, 1);
}
} else {
UrlManager::add_session_to_url($newSessionId, 1);
}
return $newSessionId; return $newSessionId;
} }

@ -58,18 +58,29 @@ class ZombieManager
user.active, user.active,
access.login_date'; access.login_date';
$access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$current_url_id = api_get_current_access_url_id(); $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$current_url_id = api_get_current_access_url_id();
$sql .= " FROM $user_table as user, $login_table as access, $access_url_rel_user_table as url $sql .= " FROM $user_table as user, $login_table as access, $access_url_rel_user_table as url
WHERE WHERE
access.login_date = (SELECT MAX(a.login_date) access.login_date = (SELECT MAX(a.login_date)
FROM $login_table as a FROM $login_table as a
WHERE a.login_user_id = user.user_id WHERE a.login_user_id = user.user_id
) AND ) AND
access.login_date <= '$ceiling' AND access.login_date <= '$ceiling' AND
user.user_id = access.login_user_id AND user.user_id = access.login_user_id AND
url.user_id = user.user_id AND url.access_url_id=$current_url_id"; url.user_id = user.user_id AND url.access_url_id=$current_url_id";
} else {
$sql .= " FROM $user_table as user, $login_table as access
WHERE
access.login_date = (SELECT MAX(a.login_date)
FROM $login_table as a
WHERE a.login_user_id = user.user_id
) AND
access.login_date <= '$ceiling' AND
user.user_id = access.login_user_id";
}
if ($active_only) { if ($active_only) {
$sql .= ' AND user.active = 1'; $sql .= ' AND user.active = 1';

@ -43,15 +43,24 @@ if (api_is_drh()) {
} }
// Select of sessions. // Select of sessions.
$tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$accessUrlId = api_get_current_access_url_id();
$sql = "SELECT s.id, name FROM $tblSession s $sql = "SELECT s.id, name FROM $tblSession s
INNER JOIN $tblSessionRelAccessUrl as session_rel_url $innerJoinSessionRelUser
ON (s.id = session_rel_url.session_id) $whereCondictionDRH
$innerJoinSessionRelUser ORDER BY name";
WHERE access_url_id = $accessUrlId
$whereCondictionMultiUrl if (api_is_multiple_url_enabled()) {
ORDER BY name"; $tblSessionRelAccessUrl = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$accessUrlId = api_get_current_access_url_id();
if (-1 != $accessUrlId) {
$sql = "SELECT s.id, name FROM $tblSession s
INNER JOIN $tblSessionRelAccessUrl as session_rel_url
ON (s.id = session_rel_url.session_id)
$innerJoinSessionRelUser
WHERE access_url_id = $accessUrlId
$whereCondictionMultiUrl
ORDER BY name";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$Sessions = Database::store_result($result); $Sessions = Database::store_result($result);
$options = []; $options = [];

@ -131,9 +131,14 @@ if ($form->validate()) {
if (!empty($email) && $send_mail) { if (!empty($email) && $send_mail) {
$emailsubject = '['.api_get_setting('siteName').'] '.get_lang('Your registration on').' '.api_get_setting('siteName'); $emailsubject = '['.api_get_setting('siteName').'] '.get_lang('Your registration on').' '.api_get_setting('siteName');
$access_url_id = api_get_current_access_url_id(); $portal_url = api_get_path(WEB_PATH);
$url = api_get_access_url($access_url_id); if (api_is_multiple_url_enabled()) {
$portal_url = $url['url']; $access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$url = api_get_access_url($access_url_id);
$portal_url = $url['url'];
}
}
$emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($userInfo['firstname'], $userInfo['lastname'])).",\n\n". $emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($userInfo['firstname'], $userInfo['lastname'])).",\n\n".
get_lang('You are registered to')." ".api_get_setting('siteName')." ".get_lang('with the following settings:')."\n\n". get_lang('You are registered to')." ".api_get_setting('siteName')." ".get_lang('with the following settings:')."\n\n".

@ -172,56 +172,60 @@ function search_users($needle, $type)
break; break;
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
switch ($type) { $access_url_id = api_get_current_access_url_id();
case 'single': if (-1 != $access_url_id) {
$sql = " switch ($type) {
SELECT user.id, username, lastname, firstname, official_code case 'single':
FROM $tblUser user $sql = "
INNER JOIN $tbl_user_rel_access_url url_user SELECT user.id, username, lastname, firstname, official_code
ON (url_user.user_id = user.id) FROM $tblUser user
WHERE INNER JOIN $tbl_user_rel_access_url url_user
access_url_id = '$access_url_id' ON (url_user.user_id = user.id)
AND ( WHERE
username LIKE '$needle%' access_url_id = '$access_url_id'
OR lastname LIKE '$needle%' AND (
OR firstname LIKE '$needle%' username LIKE '$needle%'
) OR lastname LIKE '$needle%'
AND user.status <> 6 OR firstname LIKE '$needle%'
AND user.status <> ".DRH." )
$order_clause LIMIT 11 AND user.status <> 6
"; AND user.status <> ".DRH."
break; $order_clause LIMIT 11
case 'multiple': ";
$sql = " break;
SELECT user.id, username, lastname, firstname, official_code case 'multiple':
FROM $tblUser user $sql = "
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=user.id) SELECT user.id, username, lastname, firstname, official_code
WHERE FROM $tblUser user
access_url_id = $access_url_id INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=user.id)
AND lastname LIKE '$needle%' WHERE
AND user.status <> ".DRH." access_url_id = $access_url_id
AND user.status <> 6 $cond_user_id AND lastname LIKE '$needle%'
$order_clause AND user.status <> ".DRH."
"; AND user.status <> 6 $cond_user_id
break; $order_clause
case 'any_session': ";
$sql = " break;
SELECT DISTINCT user.id, username, lastname, firstname, official_code case 'any_session':
FROM $tblUser user $sql = "
LEFT OUTER JOIN $tblSessionRelUser s SELECT DISTINCT user.id, username, lastname, firstname, official_code
ON (s.user_id = user.id) FROM $tblUser user
INNER JOIN $tbl_user_rel_access_url url_user LEFT OUTER JOIN $tblSessionRelUser s
ON (url_user.user_id = user.id) ON (s.user_id = user.id)
WHERE INNER JOIN $tbl_user_rel_access_url url_user
access_url_id = $access_url_id ON (url_user.user_id = user.id)
AND s.user_id IS null WHERE
AND user.status <> ".DRH." access_url_id = $access_url_id
AND user.status <> 6 $cond_user_id AND s.user_id IS null
$order_clause AND user.status <> ".DRH."
"; AND user.status <> 6 $cond_user_id
break; $order_clause
";
break;
}
}
} }
$rs = Database::query($sql); $rs = Database::query($sql);
@ -363,8 +367,6 @@ if ('true' === $orderListByOfficialCode) {
} }
if ($ajax_search) { if ($ajax_search) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
$sql = " $sql = "
SELECT u.id, u.lastname, u.firstname, u.username, session_id, u.official_code SELECT u.id, u.lastname, u.firstname, u.username, session_id, u.official_code
FROM $tblUser u FROM $tblUser u
@ -372,12 +374,30 @@ if ($ajax_search) {
ON su.user_id = u.id ON su.user_id = u.id
AND su.relation_type = ".Session::STUDENT." AND su.relation_type = ".Session::STUDENT."
AND su.session_id = ".intval($sessionId)." AND su.session_id = ".intval($sessionId)."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id = u.id) WHERE u.status<>".DRH."
WHERE access_url_id = $access_url_id
AND u.status <> ".DRH."
AND u.status <> 6 AND u.status <> 6
$order_clause $order_clause
"; ";
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "
SELECT u.id, u.lastname, u.firstname, u.username, session_id, u.official_code
FROM $tblUser u
INNER JOIN $tblSessionRelUser su
ON su.user_id = u.id
AND su.relation_type = ".Session::STUDENT."
AND su.session_id = ".intval($sessionId)."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id = u.id)
WHERE access_url_id = $access_url_id
AND u.status <> ".DRH."
AND u.status <> 6
$order_clause
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result); $users = Database::store_result($result);
foreach ($users as $user) { foreach ($users as $user) {
@ -444,11 +464,20 @@ if ($ajax_search) {
$final_result = $extra_field_result[0]; $final_result = $extra_field_result[0];
} }
if (is_array($final_result) && count($final_result) > 0) { if (api_is_multiple_url_enabled()) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') "; if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " AND u.id = -1";
}
} else { } else {
//no results if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id = -1"; $where_filter = " WHERE u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " WHERE u.id = -1";
}
} }
} }
if (api_is_session_admin() && 'true' === api_get_setting('prevent_session_admins_to_manage_all_users')) { if (api_is_session_admin() && 'true' === api_get_setting('prevent_session_admins_to_manage_all_users')) {
@ -479,22 +508,26 @@ if ($ajax_search) {
$order_clause $order_clause
"; ";
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = " $access_url_id = api_get_current_access_url_id();
SELECT u.id, lastname, firstname, username, session_id, official_code if (-1 != $access_url_id) {
FROM $tblUser u $sql = "
LEFT JOIN $tblSessionRelUser su SELECT u.id, lastname, firstname, username, session_id, official_code
ON su.user_id = u.id FROM $tblUser u
AND su.session_id = $sessionId LEFT JOIN $tblSessionRelUser su
AND su.relation_type = ".Session::STUDENT." ON su.user_id = u.id
INNER JOIN $tbl_user_rel_access_url url_user AND su.session_id = $sessionId
ON (url_user.user_id = u.id) AND su.relation_type = ".Session::STUDENT."
WHERE access_url_id = $access_url_id $where_filter INNER JOIN $tbl_user_rel_access_url url_user
AND u.status <> ".DRH." ON (url_user.user_id = u.id)
AND u.status<>6 WHERE access_url_id = $access_url_id $where_filter
$order_clause AND u.status <> ".DRH."
"; AND u.status<>6
$order_clause
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result, 'ASSOC'); $users = Database::store_result($result, 'ASSOC');
@ -512,22 +545,36 @@ if ($ajax_search) {
unset($users); //clean to free memory unset($users); //clean to free memory
// filling the correct users in list // filling the correct users in list
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
$sql = " $sql = "
SELECT u.id, lastname, firstname, username, session_id, official_code SELECT u.id, lastname, firstname, username, session_id, official_code
FROM $tblUser u FROM $tblUser u
LEFT JOIN $tblSessionRelUser LEFT JOIN $tblSessionRelUser
ON $tblSessionRelUser.user_id = u.id ON $tblSessionRelUser.user_id = u.id
AND $tblSessionRelUser.session_id = $sessionId AND $tblSessionRelUser.session_id = $sessionId
AND $tblSessionRelUser.relation_type = ".Session::STUDENT." AND $tblSessionRelUser.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id = u.id) WHERE u.status <> ".DRH." AND u.status <> 6 $order_clause
WHERE access_url_id = $access_url_id
AND u.status <> ".DRH."
AND u.status <> 6
$order_clause
"; ";
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "
SELECT u.id, lastname, firstname, username, session_id, official_code
FROM $tblUser u
LEFT JOIN $tblSessionRelUser
ON $tblSessionRelUser.user_id = u.id
AND $tblSessionRelUser.session_id = $sessionId
AND $tblSessionRelUser.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id = u.id)
WHERE access_url_id = $access_url_id
AND u.status <> ".DRH."
AND u.status <> 6
$order_clause
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result, 'ASSOC'); $users = Database::store_result($result, 'ASSOC');
foreach ($users as $uid => $user) { foreach ($users as $uid => $user) {

@ -186,57 +186,59 @@ function search_users($needle, $type)
break; break;
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
if (-1 != $access_url_id) { $access_url_id = api_get_current_access_url_id();
switch ($type) { if (-1 != $access_url_id) {
case 'single': switch ($type) {
$sql = " case 'single':
SELECT user.id, username, lastname, firstname, official_code $sql = "
FROM $tbl_user user SELECT user.id, username, lastname, firstname, official_code
INNER JOIN $tbl_user_rel_access_url url_user FROM $tbl_user user
ON (url_user.user_id = user.id) INNER JOIN $tbl_user_rel_access_url url_user
WHERE
access_url_id = '$access_url_id'
AND (
username LIKE '$needle%'
OR lastname LIKE '$needle%'
OR firstname LIKE '$needle%'
)
AND user.status <> 6
AND user.status <> ".DRH."
$order_clause LIMIT 11
";
break;
case 'multiple':
$sql = "
SELECT user.id, username, lastname, firstname, official_code
FROM $tbl_user user
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=user.id)
WHERE
access_url_id = $access_url_id
AND lastname LIKE '$needle%'
AND user.status <> ".DRH."
AND user.status <> 6 $cond_user_id
$order_clause
";
break;
case 'any_session':
$sql = "
SELECT DISTINCT user.id, username, lastname, firstname, official_code
FROM $tbl_user user
LEFT OUTER JOIN $tbl_session_rel_user s
ON (s.user_id = user.id)
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id = user.id) ON (url_user.user_id = user.id)
WHERE WHERE
access_url_id = $access_url_id access_url_id = '$access_url_id'
AND s.user_id IS null AND (
AND user.status <> ".DRH." username LIKE '$needle%'
AND user.status <> 6 $cond_user_id OR lastname LIKE '$needle%'
$order_clause OR firstname LIKE '$needle%'
"; )
break; AND user.status <> 6
AND user.status <> ".DRH."
$order_clause LIMIT 11
";
break;
case 'multiple':
$sql = "
SELECT user.id, username, lastname, firstname, official_code
FROM $tbl_user user
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=user.id)
WHERE
access_url_id = $access_url_id
AND lastname LIKE '$needle%'
AND user.status <> ".DRH."
AND user.status <> 6 $cond_user_id
$order_clause
";
break;
case 'any_session':
$sql = "
SELECT DISTINCT user.id, username, lastname, firstname, official_code
FROM $tbl_user user
LEFT OUTER JOIN $tbl_session_rel_user s
ON (s.user_id = user.id)
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id = user.id)
WHERE
access_url_id = $access_url_id
AND s.user_id IS null
AND user.status <> ".DRH."
AND user.status <> 6 $cond_user_id
$order_clause
";
break;
}
} }
} }
@ -385,27 +387,47 @@ if ('true' === $orderListByOfficialCode) {
} }
if ($ajax_search) { if ($ajax_search) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
$sql = " $sql = "
SELECT u.id, u.lastname, u.firstname, u.username, su.session_id, u.official_code SELECT u.id, u.lastname, u.firstname, u.username, su.session_id, u.official_code
FROM $tbl_user u FROM $tbl_session_rel_user su
INNER JOIN $tbl_session_rel_user su
ON
su.user_id = u.id AND
su.relation_type = ".Session::STUDENT." AND
su.session_id = ".intval($id_session)."
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id = u.id)
INNER JOIN $tableRelSessionCourseUser sc INNER JOIN $tableRelSessionCourseUser sc
ON (sc.session_id = su.session_id AND su.user_id = sc.user_id) ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
INNER JOIN $tbl_user u
ON su.user_id = u.id
WHERE WHERE
access_url_id = $access_url_id AND su.session_id = ".intval($id_session)." AND
su.relation_type = ".Session::STUDENT." AND
sc.c_id = $courseId AND sc.c_id = $courseId AND
u.status <> ".DRH." AND u.status<>".DRH." AND
u.status <> 6 u.status <> 6
$order_clause $order_clause
"; ";
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "
SELECT u.id, u.lastname, u.firstname, u.username, su.session_id, u.official_code
FROM $tbl_user u
INNER JOIN $tbl_session_rel_user su
ON
su.user_id = u.id AND
su.relation_type = ".Session::STUDENT." AND
su.session_id = ".intval($id_session)."
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id = u.id)
INNER JOIN $tableRelSessionCourseUser sc
ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
WHERE
access_url_id = $access_url_id AND
sc.c_id = $courseId AND
u.status <> ".DRH." AND
u.status <> 6
$order_clause
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result); $users = Database::store_result($result);
foreach ($users as $user) { foreach ($users as $user) {
@ -471,11 +493,20 @@ if ($ajax_search) {
$final_result = $extra_field_result[0]; $final_result = $extra_field_result[0];
} }
if (is_array($final_result) && count($final_result) > 0) { if (api_is_multiple_url_enabled()) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') "; if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " AND u.id = -1";
}
} else { } else {
//no results if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id = -1"; $where_filter = " WHERE u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " WHERE u.id = -1";
}
} }
} }
if (api_is_session_admin() && 'true' === api_get_setting('prevent_session_admins_to_manage_all_users')) { if (api_is_session_admin() && 'true' === api_get_setting('prevent_session_admins_to_manage_all_users')) {
@ -511,25 +542,29 @@ if ($ajax_search) {
$order_clause $order_clause
"; ";
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = " $access_url_id = api_get_current_access_url_id();
SELECT u.id, lastname, firstname, username, su.session_id, official_code if (-1 != $access_url_id) {
FROM $tbl_user u $sql = "
LEFT JOIN $tbl_session_rel_user su SELECT u.id, lastname, firstname, username, su.session_id, official_code
ON su.user_id = u.id FROM $tbl_user u
AND su.session_id = $id_session LEFT JOIN $tbl_session_rel_user su
AND su.relation_type = ".Session::STUDENT." ON su.user_id = u.id
INNER JOIN $tbl_user_rel_access_url url_user AND su.session_id = $id_session
ON (url_user.user_id = u.id) AND su.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user
WHERE ON (url_user.user_id = u.id)
access_url_id = $access_url_id
$where_filter WHERE
AND u.status <> ".DRH." access_url_id = $access_url_id
AND u.status<>6 $where_filter
$order_clause AND u.status <> ".DRH."
"; AND u.status<>6
$order_clause
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result, 'ASSOC'); $users = Database::store_result($result, 'ASSOC');
@ -547,8 +582,6 @@ if ($ajax_search) {
unset($users); //clean to free memory unset($users); //clean to free memory
// filling the correct users in list // filling the correct users in list
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
$sql = " $sql = "
SELECT u.id, lastname, firstname, username, su.session_id, official_code SELECT u.id, lastname, firstname, username, su.session_id, official_code
FROM $tbl_user u FROM $tbl_user u
@ -556,18 +589,39 @@ if ($ajax_search) {
ON su.user_id = u.id ON su.user_id = u.id
AND su.session_id = $id_session AND su.session_id = $id_session
AND su.relation_type = ".Session::STUDENT." AND su.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id = u.id)
INNER JOIN $tableRelSessionCourseUser sc INNER JOIN $tableRelSessionCourseUser sc
ON (sc.session_id = su.session_id AND su.user_id = sc.user_id) ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
WHERE WHERE
sc.c_id = $courseId AND sc.c_id = $courseId AND
access_url_id = $access_url_id AND u.status <> ".DRH." AND u.status <> 6
u.status <> ".DRH." AND
u.status <> 6
$order_clause $order_clause
"; ";
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "
SELECT u.id, lastname, firstname, username, su.session_id, official_code
FROM $tbl_user u
LEFT JOIN $tbl_session_rel_user su
ON su.user_id = u.id
AND su.session_id = $id_session
AND su.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id = u.id)
INNER JOIN $tableRelSessionCourseUser sc
ON (sc.session_id = su.session_id AND su.user_id = sc.user_id)
WHERE
sc.c_id = $courseId AND
access_url_id = $access_url_id AND
u.status <> ".DRH." AND
u.status <> 6
$order_clause
";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result, 'ASSOC'); $users = Database::store_result($result, 'ASSOC');
foreach ($users as $uid => $user) { foreach ($users as $uid => $user) {

@ -126,7 +126,11 @@ $sessionTitle = Display::page_subheader(get_lang('General properties').$url);
$sessionField = new ExtraField('session'); $sessionField = new ExtraField('session');
$extraFieldData = $sessionField->getDataAndFormattedValues($sessionId); $extraFieldData = $sessionField->getDataAndFormattedValues($sessionId);
$urlList = $session->getUrls(); $urlList = [];
$isMultipleUrl = api_is_multiple_url_enabled();
if ($isMultipleUrl) {
$urlList = $session->getUrls();
}
$url = Display::url( $url = Display::url(
Display::getMdiIcon(ActionIcon::ADD, 'ch-tool-icon-gradient', null, 32, get_lang('Add')), Display::getMdiIcon(ActionIcon::ADD, 'ch-tool-icon-gradient', null, 32, get_lang('Add')),
@ -326,11 +330,13 @@ if (!empty($sessionRelUsers)) {
); );
$addUserToUrlLink = ''; $addUserToUrlLink = '';
/*if ($user['access_url_id'] != $url_id) { /*if ($isMultipleUrl) {
$userLink .= ' '.Display::getMdiIcon(StateIcon::WARNING, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Users not added to the URL')); if ($user['access_url_id'] != $url_id) {
$add = Display::getMdiIcon(ActionIcon::ADD, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Add a userToURL')); $userLink .= ' '.Display::getMdiIcon(StateIcon::WARNING, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Users not added to the URL'));
$addUserToUrlLink = '<a href="resume_session.php?action=add_user_to_url&id_session='.$sessionId $add = Display::getMdiIcon(ActionIcon::ADD, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Add a userToURL'));
.'&user_id='.$user['user_id'].'">'.$add.'</a>'; $addUserToUrlLink = '<a href="resume_session.php?action=add_user_to_url&id_session='.$sessionId
.'&user_id='.$user['user_id'].'">'.$add.'</a>';
}
}*/ }*/
$editUrl = null; $editUrl = null;

@ -39,22 +39,35 @@ function search_coachs($needle)
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username'; $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
// search users where username or firstname or lastname begins likes $needle // search users where username or firstname or lastname begins likes $needle
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
$sql = 'SELECT username, lastname, firstname $sql = 'SELECT username, lastname, firstname
FROM '.$tbl_user.' user FROM '.$tbl_user.' user
INNER JOIN '.$tbl_user_rel_access_url.' url_user WHERE (username LIKE "'.$needle.'%"
ON (url_user.user_id=user.user_id) OR firstname LIKE "'.$needle.'%"
WHERE OR lastname LIKE "'.$needle.'%")
access_url_id = '.$access_url_id.' AND
(
username LIKE "'.$needle.'%" OR
firstname LIKE "'.$needle.'%" OR
lastname LIKE "'.$needle.'%"
)
AND status=1'. AND status=1'.
$order_clause.' $order_clause.
LIMIT 10'; ' LIMIT 10';
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = 'SELECT username, lastname, firstname
FROM '.$tbl_user.' user
INNER JOIN '.$tbl_user_rel_access_url.' url_user
ON (url_user.user_id=user.user_id)
WHERE
access_url_id = '.$access_url_id.' AND
(
username LIKE "'.$needle.'%" OR
firstname LIKE "'.$needle.'%" OR
lastname LIKE "'.$needle.'%"
)
AND status=1'.
$order_clause.'
LIMIT 10';
}
}
$rs = Database::query($sql); $rs = Database::query($sql);
while ($user = Database :: fetch_array($rs)) { while ($user = Database :: fetch_array($rs)) {

@ -113,17 +113,26 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username'; $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
$tbl_access_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_access_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "SELECT u.id as user_id,lastname,firstname,username $access_url_id = api_get_current_access_url_id();
FROM $tblUser u $sql = "SELECT u.id as user_id,lastname,firstname,username
LEFT JOIN $tbl_access_rel_user a FROM $tblUser u
ON(u.id= a.user_id) LEFT JOIN $tbl_access_rel_user a
WHERE ON(u.id= a.user_id)
status='1' AND WHERE
active = 1 AND status='1' AND
access_url_id = $access_url_id ". active = 1 AND
$order_clause; access_url_id = $access_url_id ".
$order_clause;
} else {
$sql = "SELECT id as user_id,lastname,firstname,username
FROM $tblUser
WHERE
status = '1' AND
active = 1 ".
$order_clause;
}
$result = Database::query($sql); $result = Database::query($sql);
$coaches = Database::store_result($result); $coaches = Database::store_result($result);

@ -39,24 +39,36 @@ if (isset($_POST['formSent'])) {
$file_type = isset($_POST['file_type']) ? $_POST['file_type'] : 'csv'; $file_type = isset($_POST['file_type']) ? $_POST['file_type'] : 'csv';
$session_id = $_POST['session_id']; $session_id = $_POST['session_id'];
if (empty($session_id)) { if (empty($session_id)) {
$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
$sql = "SELECT $sql = "SELECT
s.id, s.id,
s.title, s.title,
u.username, u.username,
s.access_start_date, s.access_start_date,
s.access_end_date, s.access_end_date,
s.visibility, s.visibility,
s.session_category_id s.session_category_id
FROM $tblSession s FROM $tblSession s
INNER JOIN $tbl_session_rel_access_url as session_rel_url INNER JOIN $tblSessionRelUser sru
ON (s.id= session_rel_url.session_id) ON (s.id = sru.session_id AND sru.relation_type = ".Session::GENERAL_COACH.")
INNER JOIN $tblSessionRelUser sru INNER JOIN $tblUser u
ON (s.id = sru.session_id AND sru.relation_type = ".Session::GENERAL_COACH.") ON u.id = sru.user_id
INNER JOIN $tblUser u ON (u.id = sru.user_id) ORDER BY s.id";
WHERE session_rel_url.access_url_id = $access_url_id
ORDER BY s.id"; if (api_is_multiple_url_enabled()) {
$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "SELECT s.id, s.title, u.username,s.access_start_date,s.access_end_date,s.visibility,s.session_category_id
FROM $tblSession s
INNER JOIN $tbl_session_rel_access_url as session_rel_url
ON (s.id= session_rel_url.session_id)
INNER JOIN $tblSessionRelUser sru
ON (s.id = sru.session_id AND sru.relation_type = ".Session::GENERAL_COACH.")
INNER JOIN $tblUser u ON (u.id = sru.user_id)
WHERE session_rel_url.access_url_id = $access_url_id
ORDER BY s.id";
}
}
$result = Database::query($sql); $result = Database::query($sql);
} else { } else {
@ -266,13 +278,19 @@ if (isset($_POST['formSent'])) {
Display::display_header($tool_name); Display::display_header($tool_name);
//select of sessions //select of sessions
$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $sql = "SELECT id, title FROM $tblSession ORDER BY title";
$access_url_id = api_get_current_access_url_id();
$sql = "SELECT s.id, title FROM $tblSession s if (api_is_multiple_url_enabled()) {
INNER JOIN $tbl_session_rel_access_url as session_rel_url $tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
ON (s.id = session_rel_url.session_id) $access_url_id = api_get_current_access_url_id();
WHERE access_url_id = $access_url_id if (-1 != $access_url_id) {
ORDER BY title"; $sql = "SELECT s.id, title FROM $tblSession s
INNER JOIN $tbl_session_rel_access_url as session_rel_url
ON (s.id = session_rel_url.session_id)
WHERE access_url_id = $access_url_id
ORDER BY title";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$sessions = Database::store_result($result); $sessions = Database::store_result($result);

@ -376,8 +376,13 @@ if (isset($_POST['formSent']) && $_POST['formSent']) {
} }
// Associate the session with access_url. // Associate the session with access_url.
$accessUrlId = api_get_current_access_url_id(); if (api_is_multiple_url_enabled()) {
UrlManager::add_session_to_url($sessionId, $accessUrlId); $accessUrlId = api_get_current_access_url_id();
UrlManager::add_session_to_url($sessionId, $accessUrlId);
} else {
// We fill by default the access_url_rel_session table.
UrlManager::add_session_to_url($sessionId, 1);
}
// Adding users to the new session. // Adding users to the new session.
foreach ($nodeSession->User as $nodeUser) { foreach ($nodeSession->User as $nodeUser) {

@ -112,28 +112,20 @@ if ('true' === $allowTutors) {
} }
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
switch ($type) { switch ($type) {
case 'single': case 'single':
// search users where username or firstname or lastname begins likes $needle // search users where username or firstname or lastname begins likes $needle
$sql = 'SELECT user.user_id, username, lastname, firstname $sql = 'SELECT user.user_id, username, lastname, firstname
FROM '.$tbl_user.' user FROM '.$tbl_user.' user
INNER JOIN '.$tbl_user_rel_access_url.' url_user
ON (url_user.user_id=user.user_id)
WHERE user.active <> '.USER_SOFT_DELETED.' AND (username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%" WHERE user.active <> '.USER_SOFT_DELETED.' AND (username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%"
OR lastname LIKE "'.$needle.'%") AND user.status<>6 AND user.status<>'.DRH.' OR lastname LIKE "'.$needle.'%") AND user.status<>6 AND user.status<>'.DRH.''.
AND access_url_id = '.$access_url_id.
$order_clause. $order_clause.
' LIMIT 11'; ' LIMIT 11';
break; break;
case 'multiple': case 'multiple':
$sql = 'SELECT user.user_id, username, lastname, firstname $sql = 'SELECT user.user_id, username, lastname, firstname
FROM '.$tbl_user.' user FROM '.$tbl_user.' user
INNER JOIN '.$tbl_user_rel_access_url.' url_user
ON (url_user.user_id=user.user_id)
WHERE user.active <> '.USER_SOFT_DELETED.' AND '.(api_sort_by_first_name() ? 'firstname' : 'lastname').' WHERE user.active <> '.USER_SOFT_DELETED.' AND '.(api_sort_by_first_name() ? 'firstname' : 'lastname').'
AND access_url_id = '.$access_url_id.' AND
LIKE "'.$needle.'%" AND LIKE "'.$needle.'%" AND
user.status<>'.DRH.' AND user.status<>'.DRH.' AND
user.status<>6 '.$cond_user_id. user.status<>6 '.$cond_user_id.
@ -143,17 +135,62 @@ if ('true' === $allowTutors) {
$sql = 'SELECT DISTINCT user.user_id, username, lastname, firstname $sql = 'SELECT DISTINCT user.user_id, username, lastname, firstname
FROM '.$tbl_user.' user FROM '.$tbl_user.' user
LEFT OUTER JOIN '.$tbl_session_rel_user.' s ON (s.user_id = user.user_id) LEFT OUTER JOIN '.$tbl_session_rel_user.' s ON (s.user_id = user.user_id)
INNER JOIN '.$tbl_user_rel_access_url.' url_user ON (url_user.user_id=user.user_id)
WHERE WHERE
user.active <> '.USER_SOFT_DELETED.' AND user.active <> '.USER_SOFT_DELETED.' AND
access_url_id = '.$access_url_id.' AND s.user_id IS NULL AND
s.user_id IS null AND user.status <>'.DRH.' AND
user.status<>'.DRH.' AND user.status <> 6 '.$cond_user_id.
user.status<>6 '.$cond_user_id. $order_clause;
$order_clause;
break; break;
} }
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
switch ($type) {
case 'single':
$sql = 'SELECT user.user_id, username, lastname, firstname
FROM '.$tbl_user.' user
INNER JOIN '.$tbl_user_rel_access_url.' url_user
ON (url_user.user_id=user.user_id)
WHERE
user.active <> '.USER_SOFT_DELETED.' AND
access_url_id = '.$access_url_id.' AND
(username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%" OR lastname LIKE "'.$needle.'%") AND
user.status<>6 AND
user.status<>'.DRH.' '.
$order_clause.
' LIMIT 11';
break;
case 'multiple':
$sql = 'SELECT user.user_id, username, lastname, firstname
FROM '.$tbl_user.' user
INNER JOIN '.$tbl_user_rel_access_url.' url_user
ON (url_user.user_id=user.user_id)
WHERE user.active <> '.USER_SOFT_DELETED.' AND access_url_id = '.$access_url_id.' AND
'.(api_sort_by_first_name() ? 'firstname' : 'lastname').' LIKE "'.$needle.'%" AND user.status<>'.DRH.' AND user.status<>6 '.$cond_user_id.
$order_clause;
break;
case 'any_session':
$sql = 'SELECT DISTINCT user.user_id, username, lastname, firstname
FROM '.$tbl_user.' user
LEFT OUTER JOIN '.$tbl_session_rel_user.' s
ON (s.user_id = user.user_id)
INNER JOIN '.$tbl_user_rel_access_url.' url_user
ON (url_user.user_id=user.user_id)
WHERE
user.active <> '.USER_SOFT_DELETED.' AND
access_url_id = '.$access_url_id.' AND
s.user_id IS null AND
user.status<>'.DRH.' AND
user.status<>6 '.$cond_user_id.
$order_clause;
break;
}
}
}
$rs = Database::query($sql); $rs = Database::query($sql);
$i = 0; $i = 0;
if ('single' === $type) { if ('single' === $type) {
@ -255,18 +292,32 @@ if ('true' === $allowTutors) {
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username'; $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
if ($ajax_search) { if ($ajax_search) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
$sql = "SELECT u.id as user_id, lastname, firstname, username, session_id $sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
FROM $tbl_user u FROM $tbl_user u
INNER JOIN $tbl_session_rel_user INNER JOIN $tbl_session_rel_user
ON ON
$tbl_session_rel_user.user_id = u.id AND $tbl_session_rel_user.user_id = u.id AND
$tbl_session_rel_user.relation_type = ".Session::STUDENT." AND $tbl_session_rel_user.relation_type = ".Session::STUDENT." AND
$tbl_session_rel_user.session_id = ".intval($id_session)." $tbl_session_rel_user.session_id = ".intval($id_session)."
INNER JOIN $tbl_user_rel_access_url url_user WHERE u.active <> ".USER_SOFT_DELETED." AND u.status <> ".DRH." AND u.status<>6 $order_clause";
ON (url_user.user_id=u.user_id)
WHERE u.active <> ".USER_SOFT_DELETED." AND u.status<>".DRH." AND u.status<>6 AND access_url_id = $access_url_id $order_clause"; if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
FROM $tbl_user u
INNER JOIN $tbl_session_rel_user
ON
$tbl_session_rel_user.user_id = u.id AND
$tbl_session_rel_user.relation_type = ".Session::STUDENT." AND
$tbl_session_rel_user.session_id = ".intval($id_session)."
INNER JOIN $tbl_user_rel_access_url url_user
ON (url_user.user_id=u.user_id)
WHERE u.active <> ".USER_SOFT_DELETED." AND access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6
$order_clause";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result); $users = Database::store_result($result);
foreach ($users as $user) { foreach ($users as $user) {
@ -294,8 +345,6 @@ if ('true' === $allowTutors) {
} }
} }
$where_filter = '';
if ($use_extra_fields) { if ($use_extra_fields) {
$final_result = []; $final_result = [];
if (count($extra_field_result) > 1) { if (count($extra_field_result) > 1) {
@ -311,25 +360,60 @@ if ('true' === $allowTutors) {
$final_result = $extra_field_result[0]; $final_result = $extra_field_result[0];
} }
if (is_array($final_result) && count($final_result) > 0) { $where_filter = '';
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') "; if (api_is_multiple_url_enabled()) {
if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " AND u.id = -1";
}
} else { } else {
//no results if (is_array($final_result) && count($final_result) > 0) {
$where_filter = " AND u.id = -1"; $where_filter = " WHERE u.id IN ('".implode("','", $final_result)."') ";
} else {
//no results
$where_filter = " WHERE u.id = -1";
}
} }
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if ($use_extra_fields) {
$access_url_id = api_get_current_access_url_id(); $sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
$sql = "SELECT u.id as user_id, lastname, firstname, username, session_id FROM $tbl_user u
FROM $tbl_user u LEFT JOIN $tbl_session_rel_user
LEFT JOIN $tbl_session_rel_user ON $tbl_session_rel_user.user_id = u.id AND
ON $tbl_session_rel_user.user_id = u.id AND $tbl_session_rel_user.session_id = '$id_session' AND
$tbl_session_rel_user.session_id = '$id_session' AND $tbl_session_rel_user.relation_type = ".Session::STUDENT."
$tbl_session_rel_user.relation_type = ".Session::STUDENT." $where_filter AND u.status<>".DRH." AND u.status<>6 AND u.active <> ".USER_SOFT_DELETED."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=u.user_id) $order_clause";
WHERE access_url_id = $access_url_id $where_filter AND u.status<>".DRH." AND u.status<>6 AND u.active <> ".USER_SOFT_DELETED." } else {
$order_clause"; $sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
FROM $tbl_user u
LEFT JOIN $tbl_session_rel_user
ON $tbl_session_rel_user.user_id = u.id AND
$tbl_session_rel_user.session_id = '$id_session' AND
$tbl_session_rel_user.relation_type = ".Session::STUDENT."
WHERE u.status <> ".DRH." AND u.status<>6 AND u.active <> ".USER_SOFT_DELETED."
$order_clause";
}
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
FROM $tbl_user u
LEFT JOIN $tbl_session_rel_user
ON
$tbl_session_rel_user.user_id = u.id AND
$tbl_session_rel_user.session_id = '$id_session' AND
$tbl_session_rel_user.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=u.user_id)
WHERE access_url_id = $access_url_id $where_filter AND u.status<>".DRH." AND u.status<>6 AND u.active <> ".USER_SOFT_DELETED."
$order_clause";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result, 'ASSOC'); $users = Database::store_result($result, 'ASSOC');
@ -347,17 +431,31 @@ if ('true' === $allowTutors) {
unset($users); //clean to free memory unset($users); //clean to free memory
//filling the correct users in list //filling the correct users in list
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $sql = "SELECT user_id, lastname, firstname, username, session_id
$access_url_id = api_get_current_access_url_id();
$sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
FROM $tbl_user u FROM $tbl_user u
LEFT JOIN $tbl_session_rel_user LEFT JOIN $tbl_session_rel_user
ON ON
$tbl_session_rel_user.user_id = u.id AND $tbl_session_rel_user.user_id = u.id AND
$tbl_session_rel_user.session_id = '$id_session' AND $tbl_session_rel_user.session_id = '$id_session' AND
$tbl_session_rel_user.relation_type = ".Session::STUDENT." $tbl_session_rel_user.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=u.user_id) WHERE u.active <> ".USER_SOFT_DELETED." AND u.status <> ".DRH." AND u.status<>6 $order_clause";
WHERE u.active <> ".USER_SOFT_DELETED." AND access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6 $order_clause";
if (api_is_multiple_url_enabled()) {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$sql = "SELECT u.id as user_id, lastname, firstname, username, session_id
FROM $tbl_user u
LEFT JOIN $tbl_session_rel_user
ON
$tbl_session_rel_user.user_id = u.id AND
$tbl_session_rel_user.session_id = '$id_session' AND
$tbl_session_rel_user.relation_type = ".Session::STUDENT."
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=u.user_id)
WHERE u.active <> ".USER_SOFT_DELETED." AND access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6
$order_clause";
}
}
$result = Database::query($sql); $result = Database::query($sql);
$users = Database::store_result($result, 'ASSOC'); $users = Database::store_result($result, 'ASSOC');
foreach ($users as $uid => $user) { foreach ($users as $uid => $user) {

@ -230,12 +230,10 @@ function get_number_of_users()
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); $table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES);
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$courseCode = api_get_course_id(); $courseCode = api_get_course_id();
$sessionId = api_get_session_id(); $sessionId = api_get_session_id();
$courseId = api_get_course_int_id(); $courseId = api_get_course_int_id();
$url_access_id = api_get_current_access_url_id();
$studentRoleFilter = " AND ( $studentRoleFilter = " AND (
u.roles LIKE '%ROLE_STUDENT%' u.roles LIKE '%ROLE_STUDENT%'
@ -256,28 +254,63 @@ function get_number_of_users()
LEFT JOIN $tbl_session_rel_course_user cu LEFT JOIN $tbl_session_rel_course_user cu
ON ON
u.id = cu.user_id AND u.id = cu.user_id AND
cu.c_id = $courseId AND c_id = $courseId AND
session_id = $sessionId session_id = $sessionId
INNER JOIN $tbl_url_rel_user as url_rel_user ON (url_rel_user.user_id = u.id)
WHERE WHERE
u.active <> ".USER_SOFT_DELETED." AND u.active <> ".USER_SOFT_DELETED." AND
cu.user_id IS NULL AND cu.user_id IS NULL
access_url_id = $url_access_id
$teacherRoleFilter AND $teacherRoleFilter AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL) (u.official_code <> 'ADMIN' OR u.official_code IS NULL) ";
";
if (api_is_multiple_url_enabled()) {
$url_access_id = api_get_current_access_url_id();
if (-1 != $url_access_id) {
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "SELECT COUNT(u.id)
FROM $user_table u
LEFT JOIN $tbl_session_rel_course_user cu
ON
u.id = cu.user_id AND cu.c_id = $courseId AND
session_id = $sessionId
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id)
WHERE
u.active <> ".USER_SOFT_DELETED." AND
cu.user_id IS NULL AND
access_url_id = $url_access_id
$teacherRoleFilter AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL)
";
}
}
} else { } else {
$sql = "SELECT COUNT(u.id) $sql = "SELECT COUNT(u.id)
FROM $user_table u FROM $user_table u
LEFT JOIN $course_user_table cu LEFT JOIN $course_user_table cu
ON u.id = cu.user_id AND c_id = $courseId ON u.id = cu.user_id and c_id = $courseId
INNER JOIN $tbl_url_rel_user as url_rel_user WHERE
ON (url_rel_user.user_id = u.id) u.active <> ".USER_SOFT_DELETED." AND
WHERE cu.user_id IS NULL
u.active <> ".USER_SOFT_DELETED." AND $teacherRoleFilter ";
cu.user_id IS NULL
$teacherRoleFilter AND if (api_is_multiple_url_enabled()) {
access_url_id = $url_access_id "; $url_access_id = api_get_current_access_url_id();
if (-1 != $url_access_id) {
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "SELECT COUNT(u.id)
FROM $user_table u
LEFT JOIN $course_user_table cu
ON u.id = cu.user_id AND c_id = $courseId
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id)
WHERE
u.active <> ".USER_SOFT_DELETED." AND
cu.user_id IS NULL
$teacherRoleFilter AND
access_url_id = $url_access_id ";
}
}
} }
} else { } else {
// students // students
@ -289,24 +322,42 @@ function get_number_of_users()
u.id = cu.user_id AND u.id = cu.user_id AND
c_id = $courseId AND c_id = $courseId AND
session_id = $sessionId session_id = $sessionId
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id)
WHERE WHERE
u.active <> ".USER_SOFT_DELETED." AND u.active <> ".USER_SOFT_DELETED." AND
cu.user_id IS NULL cu.user_id IS NULL
$studentRoleFilter AND $studentRoleFilter AND
access_url_id = $url_access_id AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL) "; (u.official_code <> 'ADMIN' OR u.official_code IS NULL) ";
} else {
if (api_is_multiple_url_enabled()) {
$url_access_id = api_get_current_access_url_id();
if (-1 != $url_access_id) {
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "SELECT COUNT(u.id)
FROM $user_table u
LEFT JOIN $tbl_session_rel_course_user cu
ON
u.id = cu.user_id AND
c_id = $courseId AND
session_id = $sessionId
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id)
WHERE
u.active <> ".USER_SOFT_DELETED." AND
cu.user_id IS NULL
$studentRoleFilter AND
access_url_id = $url_access_id AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL) ";
}
}
} else {
$sql = "SELECT COUNT(u.id) $sql = "SELECT COUNT(u.id)
FROM $user_table u FROM $user_table u
LEFT JOIN $course_user_table cu LEFT JOIN $course_user_table cu
ON u.id = cu.user_id AND c_id = $courseId ON u.id = cu.user_id AND c_id = $courseId";
INNER JOIN $tbl_url_rel_user as url_rel_user ON (url_rel_user.user_id = u.id)";
// we change the SQL when we have a filter // we change the SQL when we have a filter
if (!empty($_GET['subscribe_user_filter_value']) && if (isset($_GET['subscribe_user_filter_value']) &&
!empty($_GET['subscribe_user_filter_value']) &&
'true' === api_get_setting('profiling_filter_adding_users') 'true' === api_get_setting('profiling_filter_adding_users')
) { ) {
$field_identification = explode('*', $_GET['subscribe_user_filter_value']); $field_identification = explode('*', $_GET['subscribe_user_filter_value']);
@ -323,7 +374,23 @@ function get_number_of_users()
$sql .= " WHERE cu.user_id IS NULL $studentRoleFilter "; $sql .= " WHERE cu.user_id IS NULL $studentRoleFilter ";
} }
$sql .= " AND access_url_id = $url_access_id"; if (api_is_multiple_url_enabled()) {
$url_access_id = api_get_current_access_url_id();
if (-1 != $url_access_id) {
$tbl_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "SELECT COUNT(u.id)
FROM $user_table u
LEFT JOIN $course_user_table cu
ON u.id = cu.user_id AND c_id = $courseId
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id)
WHERE
cu.user_id IS NULL AND
access_url_id = $url_access_id
$studentRoleFilter ";
}
}
} }
} }
@ -462,16 +529,14 @@ function get_user_data($from, $number_of_items, $column, $direction)
} }
$sql .= " AND access_url_id = $url_access_id"; $sql .= " AND access_url_id = $url_access_id";
} else { } else {
// adding a teacher NOT through a session on a portal with multiple URLs // adding a teacher NOT through a session
$sql = "SELECT $select_fields $sql = "SELECT $select_fields
FROM $user_table u FROM $user_table u
LEFT JOIN $course_user_table cu LEFT JOIN $course_user_table cu
ON (u.id = cu.user_id AND c_id = $courseId) ON u.id = cu.user_id AND c_id = $courseId";
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id) ";
// applying the filter of the additional user profile fields // applying the filter of the additional user profile fields
if (!empty($_GET['subscribe_user_filter_value']) && if (isset($_GET['subscribe_user_filter_value']) &&
!empty($_GET['subscribe_user_filter_value']) &&
'true' === api_get_setting('profiling_filter_adding_users') 'true' === api_get_setting('profiling_filter_adding_users')
) { ) {
$field_identification = explode('*', $_GET['subscribe_user_filter_value']); $field_identification = explode('*', $_GET['subscribe_user_filter_value']);
@ -480,17 +545,45 @@ function get_user_data($from, $number_of_items, $column, $direction)
ON field_values.item_id = u.id ON field_values.item_id = u.id
WHERE WHERE
cu.user_id IS NULL cu.user_id IS NULL
$teacherRoleFilter AND $studentRoleFilter AND
field_values.field_id = '".intval($field_identification[0])."' AND field_values.field_id = '".intval($field_identification[0])."' AND
field_values.value = '".Database::escape_string($field_identification[1])."'"; field_values.value = '".Database::escape_string($field_identification[1])."'";
} else { } else {
$sql .= " WHERE $sql .= " WHERE cu.user_id IS NULL $teacherRoleFilter";
cu.user_id IS NULL
$teacherRoleFilter AND
access_url_id = $url_access_id ";
} }
$sql .= " AND access_url_id = $url_access_id "; // adding a teacher NOT through a session on a portal with multiple URLs
if (api_is_multiple_url_enabled()) {
if (-1 != $url_access_id) {
$sql = "SELECT $select_fields
FROM $user_table u
LEFT JOIN $course_user_table cu
ON (u.id = cu.user_id AND c_id = $courseId)
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id) ";
// applying the filter of the additional user profile fields
if (isset($_GET['subscribe_user_filter_value']) &&
!empty($_GET['subscribe_user_filter_value']) &&
'true' === api_get_setting('profiling_filter_adding_users')
) {
$field_identification = explode('*', $_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.item_id = u.id
WHERE
cu.user_id IS NULL
$teacherRoleFilter AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.value = '".Database::escape_string($field_identification[1])."'";
} else {
$sql .= " WHERE
cu.user_id IS NULL
$teacherRoleFilter AND
access_url_id = $url_access_id ";
}
}
}
} }
} else { } else {
// adding a student // adding a student
@ -501,9 +594,12 @@ function get_user_data($from, $number_of_items, $column, $direction)
ON ON
u.id = cu.user_id AND u.id = cu.user_id AND
c_id = $courseId AND c_id = $courseId AND
session_id = $sessionId session_id = $sessionId ";
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id) "; if (api_is_multiple_url_enabled()) {
$sql .= " INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id) ";
}
// applying the filter of the additional user profile fields // applying the filter of the additional user profile fields
if (isset($_GET['subscribe_user_filter_value']) && if (isset($_GET['subscribe_user_filter_value']) &&
@ -525,33 +621,65 @@ function get_user_data($from, $number_of_items, $column, $direction)
$studentRoleFilter AND $studentRoleFilter AND
(u.official_code <> 'ADMIN' OR u.official_code IS NULL) "; (u.official_code <> 'ADMIN' OR u.official_code IS NULL) ";
} }
$sql .= " AND access_url_id = $url_access_id"; if (api_is_multiple_url_enabled()) {
$sql .= " AND access_url_id = $url_access_id";
}
} else { } else {
//showing only the courses of the current Chamilo access_url_id
$sql = "SELECT $select_fields $sql = "SELECT $select_fields
FROM $user_table u FROM $user_table u
LEFT JOIN $course_user_table cu LEFT JOIN $course_user_table cu
ON u.id = cu.user_id AND c_id = $courseId ON
INNER JOIN $tbl_url_rel_user as url_rel_user u.id = cu.user_id AND
ON (url_rel_user.user_id = u.id) "; c_id = $courseId ";
// applying the filter of the additional user profile fields // applying the filter of the additional user profile fields
if (!empty($_GET['subscribe_user_filter_value']) && if (isset($_GET['subscribe_user_filter_value']) && !empty($_GET['subscribe_user_filter_value'])) {
'true' === api_get_setting('profiling_filter_adding_users')
) {
$field_identification = explode('*', $_GET['subscribe_user_filter_value']); $field_identification = explode('*', $_GET['subscribe_user_filter_value']);
$sql .= " $sql .= "
LEFT JOIN $table_user_field_values field_values LEFT JOIN $table_user_field_values field_values
ON field_values.item_id = u.id ON field_values.item_id = u.id
WHERE WHERE
cu.user_id IS NULL cu.user_id IS NULL
$studentRoleFilter AND $studentRoleFilter AND
field_values.field_id = '".intval($field_identification[0])."' AND field_values.field_id = '".intval($field_identification[0])."' AND
field_values.value = '".Database::escape_string($field_identification[1])."' AND field_values.value = '".Database::escape_string($field_identification[1])."'";
access_url_id = $url_access_id
";
} else { } else {
$sql .= " WHERE cu.user_id IS NULL $studentRoleFilter AND access_url_id = $url_access_id "; $sql .= " WHERE cu.user_id IS NULL $studentRoleFilter ";
}
//showing only the courses of the current Chamilo access_url_id
if (api_is_multiple_url_enabled()) {
if (-1 != $url_access_id) {
$sql = "SELECT $select_fields
FROM $user_table u
LEFT JOIN $course_user_table cu
ON u.id = cu.user_id AND c_id = $courseId
INNER JOIN $tbl_url_rel_user as url_rel_user
ON (url_rel_user.user_id = u.id) ";
// applying the filter of the additional user profile fields
if (isset($_GET['subscribe_user_filter_value']) &&
!empty($_GET['subscribe_user_filter_value']) &&
'true' === api_get_setting('profiling_filter_adding_users')
) {
$field_identification = explode('*', $_GET['subscribe_user_filter_value']);
$sql .= "
LEFT JOIN $table_user_field_values field_values
ON field_values.item_id = u.id
WHERE
cu.user_id IS NULL
$studentRoleFilter AND
field_values.field_id = '".intval($field_identification[0])."' AND
field_values.value = '".Database::escape_string($field_identification[1])."' AND
access_url_id = $url_access_id
";
} else {
$sql .= " WHERE
cu.user_id IS NULL
$studentRoleFilter AND
access_url_id = $url_access_id ";
}
}
} }
} }
} }

@ -228,12 +228,19 @@ if (isset($_GET['action'])) {
active active
$legal $legal
FROM $table_session_course_user as session_course_user, FROM $table_session_course_user as session_course_user,
$table_users as user, " $table_users as user ";
.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER)." au if (api_is_multiple_url_enabled()) {
$sql .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ';
}
$sql .= "
WHERE user.active <> ".USER_SOFT_DELETED." AND c_id = $courseId WHERE user.active <> ".USER_SOFT_DELETED." AND c_id = $courseId
AND session_course_user.user_id = user.id AND session_course_user.user_id = user.id
AND session_id = $sessionId AND session_id = $sessionId
AND user.id = au.user_id AND access_url_id = $current_access_url_id "; ";
if (api_is_multiple_url_enabled()) {
$sql .= " AND user.id = au.user_id AND access_url_id = $current_access_url_id ";
}
// only users no coaches/teachers // only users no coaches/teachers
if (COURSEMANAGER == $type) { if (COURSEMANAGER == $type) {
@ -309,14 +316,19 @@ if (isset($_GET['action'])) {
phone, phone,
user.official_code, user.official_code,
active $legal active $legal
FROM $table_course_user as course_user, $table_users as user, FROM $table_course_user as course_user, $table_users as user ";
".Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER)." au if (api_is_multiple_url_enabled()) {
WHERE $sql .= ' , '.Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER).' au ';
}
$sql .= " WHERE
user.active <> ".USER_SOFT_DELETED." AND user.active <> ".USER_SOFT_DELETED." AND
c_id = '$courseId' AND c_id = '$courseId' AND
course_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND course_user.relation_type <> ".COURSE_RELATION_TYPE_RRHH." AND
course_user.user_id = user.id course_user.user_id = user.id ";
AND user.id = au.user_id AND access_url_id = $current_access_url_id ";
if (api_is_multiple_url_enabled()) {
$sql .= " AND user.id = au.user_id AND access_url_id = $current_access_url_id ";
}
// only users no teachers/coaches // only users no teachers/coaches
if (COURSEMANAGER == $type) { if (COURSEMANAGER == $type) {

@ -47,11 +47,17 @@ if (is_array($courseSessionValue) && isset($courseSessionValue[1])) {
$sessionInfo = api_get_session_info($sessionId); $sessionInfo = api_get_session_info($sessionId);
} }
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $extraUrlJoin = '';
$access_url_id = api_get_current_access_url_id(); $extraUrlCondition = '';
$extraUrlJoin = " INNER JOIN $tbl_user_rel_access_url as user_rel_url if (api_is_multiple_url_enabled()) {
ON (u.id = user_rel_url.user_id) "; $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$extraUrlCondition = " AND access_url_id = $access_url_id"; $access_url_id = api_get_current_access_url_id();
if (-1 != $access_url_id) {
$extraUrlJoin .= " INNER JOIN $tbl_user_rel_access_url as user_rel_url
ON (u.id = user_rel_url.user_id) ";
$extraUrlCondition = " AND access_url_id = $access_url_id";
}
}
$sql = "SELECT $sql = "SELECT
u.id AS UserId, u.id AS UserId,
@ -101,13 +107,19 @@ if (strlen($course_code) > 0) {
ORDER BY lastname,firstname"; ORDER BY lastname,firstname";
$filename = 'export_users_'.$sessionInfo['name'].'_'.api_get_local_time(); $filename = 'export_users_'.$sessionInfo['name'].'_'.api_get_local_time();
} else { } else {
$tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); if (api_is_multiple_url_enabled()) {
$access_url_id = api_get_current_access_url_id(); $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql .= " FROM $userTable u $access_url_id = api_get_current_access_url_id();
INNER JOIN $tbl_user_rel_access_url as user_rel_url if (-1 != $access_url_id) {
ON (u.id = user_rel_url.user_id) $sql .= " FROM $userTable u
WHERE u.active <> ".USER_SOFT_DELETED." AND access_url_id = $access_url_id INNER JOIN $tbl_user_rel_access_url as user_rel_url
ORDER BY lastname,firstname"; ON (u.id = user_rel_url.user_id)
WHERE u.active <> ".USER_SOFT_DELETED." AND access_url_id = $access_url_id
ORDER BY lastname,firstname";
}
} else {
$sql .= " FROM $userTable u WHERE u.active <> ".USER_SOFT_DELETED." ORDER BY lastname,firstname";
}
$filename = 'export_users_'.api_get_local_time(); $filename = 'export_users_'.api_get_local_time();
} }
$data = []; $data = [];

@ -31,18 +31,22 @@ $sessionId = isset($_GET['session_id']) ? (int) $_GET['session_id'] : null;
$dateBegin = isset($_GET['date_begin']) ? strtotime($_GET['date_begin']) : null; $dateBegin = isset($_GET['date_begin']) ? strtotime($_GET['date_begin']) : null;
$dateEnd = isset($_GET['date_end']) ? strtotime($_GET['date_end'].' 23:59:59') : null; $dateEnd = isset($_GET['date_end']) ? strtotime($_GET['date_end'].' 23:59:59') : null;
$result = Database::select( if (api_is_multiple_url_enabled()) {
'*', if (-1 != $accessUrlId) {
"$tblSessionRelAccessUrl", $result = Database::select(
[ '*',
'where' => [ "$tblSessionRelAccessUrl",
"access_url_id = ? AND session_id = ?" => [$accessUrlId, $sessionId], [
], 'where' => [
] "access_url_id = ? AND session_id = ?" => [$accessUrlId, $sessionId],
); ],
]
);
if (empty($result)) { if (empty($result)) {
api_not_allowed(); api_not_allowed();
}
}
} }
$exportAllInOne = isset($_GET['export_pdf']) ? (int) $_GET['export_pdf'] : false; $exportAllInOne = isset($_GET['export_pdf']) ? (int) $_GET['export_pdf'] : false;

@ -9,12 +9,12 @@ namespace Chamilo\CoreBundle\EventListener;
use Chamilo\CoreBundle\Entity\User; use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository; use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Chamilo\CoreBundle\ServiceHelper\AccessUrlHelper;
use Chamilo\CoreBundle\Settings\SettingsManager; use Chamilo\CoreBundle\Settings\SettingsManager;
use Exception; use Exception;
use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserInterface;
@ -37,7 +37,6 @@ class LegacyListener
private readonly ParameterBagInterface $parameterBag, private readonly ParameterBagInterface $parameterBag,
private readonly SettingsManager $settingsManager, private readonly SettingsManager $settingsManager,
private readonly ContainerInterface $container, private readonly ContainerInterface $container,
private readonly AccessUrlHelper $accessUrlHelper,
) {} ) {}
public function __invoke(RequestEvent $event): void public function __invoke(RequestEvent $event): void
@ -148,9 +147,16 @@ class LegacyListener
$session->set('cid_reset', false); $session->set('cid_reset', false);
} }
$session->set( $urlId = $this->accessUrlRepository->getFirstId();
'access_url_id',
$this->accessUrlHelper->getCurrent()->getId() if (1 === (int) $this->parameterBag->get('multiple_access_url')) {
); $url = $this->router->generate('index', [], UrlGeneratorInterface::ABSOLUTE_URL);
$accessUrl = $this->accessUrlRepository->findOneBy(['url' => $url]);
if (null !== $accessUrl) {
$urlId = $accessUrl->getId();
}
}
$session->set('access_url_id', $urlId);
} }
} }

@ -49,10 +49,14 @@ class UsergroupRepository extends ResourceRepository
} }
} }
$qb->innerJoin('g.urls', 'u') if ($this->accessUrlHelper->isMultipleEnabled()) {
->andWhere('u.url = :urlId') $accessUrl = $this->accessUrlHelper->getCurrent();
->setParameter('urlId', $this->accessUrlHelper->getCurrent()->getId())
; $qb->innerJoin('g.urls', 'u')
->andWhere('u.url = :urlId')
->setParameter('urlId', $accessUrl->getId())
;
}
$qb->orderBy('g.createdAt', 'DESC'); $qb->orderBy('g.createdAt', 'DESC');
$query = $qb->getQuery(); $query = $qb->getQuery();
@ -77,16 +81,22 @@ class UsergroupRepository extends ResourceRepository
$qb = $this->createQueryBuilder('g') $qb = $this->createQueryBuilder('g')
->select('g, COUNT(gu) AS HIDDEN memberCount') ->select('g, COUNT(gu) AS HIDDEN memberCount')
->innerJoin('g.users', 'gu') ->innerJoin('g.users', 'gu')
->innerJoin('g.urls', 'u')
->where('g.groupType = :socialClass') ->where('g.groupType = :socialClass')
->andWhere('u.accessUrl = :urlId')
->setParameter('socialClass', Usergroup::SOCIAL_CLASS) ->setParameter('socialClass', Usergroup::SOCIAL_CLASS)
->setParameter('urlId', $this->accessUrlHelper->getCurrent()->getId())
->groupBy('g') ->groupBy('g')
->orderBy('g.createdAt', 'DESC') ->orderBy('g.createdAt', 'DESC')
->setMaxResults($limit) ->setMaxResults($limit)
; ;
if ($this->accessUrlHelper->isMultipleEnabled()) {
$accessUrl = $this->accessUrlHelper->getCurrent();
$qb->innerJoin('g.urls', 'u')
->andWhere('u.url = :urlId')
->setParameter('urlId', $accessUrl->getId())
;
}
if (!empty($query)) { if (!empty($query)) {
$qb->andWhere('g.title LIKE :query OR g.description LIKE :query') $qb->andWhere('g.title LIKE :query OR g.description LIKE :query')
->setParameter('query', '%'.$query.'%') ->setParameter('query', '%'.$query.'%')
@ -101,9 +111,7 @@ class UsergroupRepository extends ResourceRepository
$qb = $this->createQueryBuilder('g') $qb = $this->createQueryBuilder('g')
->select('g, COUNT(gu) as HIDDEN memberCount') ->select('g, COUNT(gu) as HIDDEN memberCount')
->innerJoin('g.users', 'gu') ->innerJoin('g.users', 'gu')
->innerJoin('g.urls', 'u')
->where('g.groupType = :socialClass') ->where('g.groupType = :socialClass')
->andWhere('u.accessUrl = :urlId')
->setParameter('socialClass', Usergroup::SOCIAL_CLASS) ->setParameter('socialClass', Usergroup::SOCIAL_CLASS)
->andWhere('gu.relationType IN (:relationTypes)') ->andWhere('gu.relationType IN (:relationTypes)')
->setParameter('relationTypes', [ ->setParameter('relationTypes', [
@ -111,12 +119,20 @@ class UsergroupRepository extends ResourceRepository
Usergroup::GROUP_USER_PERMISSION_READER, Usergroup::GROUP_USER_PERMISSION_READER,
Usergroup::GROUP_USER_PERMISSION_HRM, Usergroup::GROUP_USER_PERMISSION_HRM,
]) ])
->setParameter('urlId', $this->accessUrlHelper->getCurrent()->getId())
->groupBy('g') ->groupBy('g')
->orderBy('memberCount', 'DESC') ->orderBy('memberCount', 'DESC')
->setMaxResults($limit) ->setMaxResults($limit)
; ;
if ($this->accessUrlHelper->isMultipleEnabled()) {
$accessUrl = $this->accessUrlHelper->getCurrent();
$qb->innerJoin('g.urls', 'u')
->andWhere('u.url = :urlId')
->setParameter('urlId', $accessUrl->getId())
;
}
return $qb->getQuery()->getResult(); return $qb->getQuery()->getResult();
} }
@ -295,17 +311,22 @@ class UsergroupRepository extends ResourceRepository
$qb->select('g.id, g.title, g.description, g.url, g.picture'); $qb->select('g.id, g.title, g.description, g.url, g.picture');
} }
$qb if ($this->accessUrlHelper->isMultipleEnabled()) {
->innerJoin('g.accessUrls', 'a', 'WITH', 'g.id = a.usergroup') $accessUrl = $this->accessUrlHelper->getCurrent();
->where(
$qb->expr()->orX( $qb->innerJoin('g.accessUrls', 'a', 'WITH', 'g.id = a.usergroup')
$qb->expr()->like('g.title', ':tag'), ->andWhere('a.url = :urlId')
$qb->expr()->like('g.description', ':tag'), ->setParameter('urlId', $accessUrl->getId())
$qb->expr()->like('g.url', ':tag') ;
) }
$qb->where(
$qb->expr()->orX(
$qb->expr()->like('g.title', ':tag'),
$qb->expr()->like('g.description', ':tag'),
$qb->expr()->like('g.url', ':tag')
) )
->andWhere('a.accessUrl = :urlId') )
->setParameter('urlId', $this->accessUrlHelper->getCurrent()->getId())
->setParameter('tag', '%'.$tag.'%') ->setParameter('tag', '%'.$tag.'%')
; ;

@ -117,4 +117,12 @@ final class ResourceNormalizer implements NormalizerInterface, NormalizerAwareIn
return $data instanceof AbstractResource || $data instanceof User; return $data instanceof AbstractResource || $data instanceof User;
} }
public function getSupportedTypes(?string $format): array
{
return [
AbstractResource::class => false,
User::class => false,
];
}
} }

@ -8,6 +8,7 @@ namespace Chamilo\CoreBundle\ServiceHelper;
use Chamilo\CoreBundle\Entity\AccessUrl; use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository; use Chamilo\CoreBundle\Repository\Node\AccessUrlRepository;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Routing\RouterInterface;
@ -15,9 +16,15 @@ class AccessUrlHelper
{ {
public function __construct( public function __construct(
private readonly AccessUrlRepository $accessUrlRepository, private readonly AccessUrlRepository $accessUrlRepository,
private readonly ParameterBagInterface $parameterBag,
private readonly RouterInterface $router, private readonly RouterInterface $router,
) {} ) {}
public function isMultipleEnabled(): bool
{
return 1 === (int) $this->parameterBag->get('multiple_access_url');
}
public function getFirstAccessUrl(): AccessUrl public function getFirstAccessUrl(): AccessUrl
{ {
$urlId = $this->accessUrlRepository->getFirstId(); $urlId = $this->accessUrlRepository->getFirstId();
@ -33,13 +40,13 @@ class AccessUrlHelper
return $accessUrl; return $accessUrl;
} }
$url = $this->router->generate('index', [], UrlGeneratorInterface::ABSOLUTE_URL); $accessUrl = $this->getFirstAccessUrl();
/** @var AccessUrl $accessUrl */ if ($this->isMultipleEnabled()) {
$accessUrl = $this->accessUrlRepository->findOneBy(['url' => $url]); $url = $this->router->generate('index', [], UrlGeneratorInterface::ABSOLUTE_URL);
if (!$accessUrl) { /** @var AccessUrl $accessUrl */
$accessUrl = $this->getFirstAccessUrl(); $accessUrl = $this->accessUrlRepository->findOneBy(['url' => $url]);
} }
return $accessUrl; return $accessUrl;

@ -96,10 +96,12 @@ if ($debug) {
echo count($dbUsers) . " users with id > 1 found in internal database\n"; echo count($dbUsers) . " users with id > 1 found in internal database\n";
} }
$accessUrls = api_get_access_urls(0,100000,'id'); if (api_is_multiple_url_enabled()) {
$multipleUrlLDAPConfig = true; $accessUrls = api_get_access_urls(0,100000,'id');
if (!empty($extldap_config) && array_key_exists('host', $extldap_config) && !empty($extldap_config['host'])) { $multipleUrlLDAPConfig = true;
$multipleUrlLDAPConfig = false; if (!empty($extldap_config) && array_key_exists('host', $extldap_config) && !empty($extldap_config['host'])) {
$multipleUrlLDAPConfig = false;
}
} }
if (!$multipleUrlLDAPConfig) { if (!$multipleUrlLDAPConfig) {
@ -337,6 +339,9 @@ foreach ($accessUrls as $accessUrl) {
} }
if ($multipleUrlLDAPConfig) { if ($multipleUrlLDAPConfig) {
UrlManager::add_user_to_url($user->getId(), $accessUrlId); UrlManager::add_user_to_url($user->getId(), $accessUrlId);
} elseif (!api_is_multiple_url_enabled()) {
//we are adding by default the access_url_user table with access_url_id = 1
UrlManager::add_user_to_url($user->getId(), 1);
} }
} }
} }

@ -1,6 +1,6 @@
const Encore = require("@symfony/webpack-encore") const Encore = require("@symfony/webpack-encore")
const dotenv = require('dotenv'); const dotenv = require("dotenv")
const webpack = require('webpack'); const webpack = require("webpack")
const env = dotenv.config() const env = dotenv.config()
@ -9,7 +9,7 @@ if (!Encore.isRuntimeEnvironmentConfigured()) {
} }
Encore.setOutputPath("public/build/") Encore.setOutputPath("public/build/")
.setManifestKeyPrefix("public/build/") //.setManifestKeyPrefix("public/build/")
.setPublicPath("/build") .setPublicPath("/build")
.cleanupOutputBeforeBuild() .cleanupOutputBeforeBuild()
.enableBuildNotifications() .enableBuildNotifications()
@ -106,9 +106,12 @@ Encore.setOutputPath("public/build/")
]) ])
.addPlugin( .addPlugin(
new webpack.DefinePlugin({ new webpack.DefinePlugin({
'ENV_CUSTOM_VUE_TEMPLATE': JSON.stringify(env.parsed?.APP_CUSTOM_VUE_TEMPLATE), ENV_CUSTOM_VUE_TEMPLATE: JSON.stringify(env.parsed?.APP_CUSTOM_VUE_TEMPLATE),
}) }),
) )
.configureDevServerOptions((options) => {
options.host = "0.0.0.0"
})
Encore.copyFiles({ Encore.copyFiles({
from: "./node_modules/mediaelement/build", from: "./node_modules/mediaelement/build",

Loading…
Cancel
Save