Actualización
This commit is contained in:
690
main/user/add_users_to_session.php
Normal file
690
main/user/add_users_to_session.php
Normal file
@@ -0,0 +1,690 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
/**
|
||||
* @package chamilo.admin
|
||||
*/
|
||||
$cidReset = true;
|
||||
|
||||
// including some necessary files
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
require_once '../inc/lib/xajax/xajax.inc.php';
|
||||
|
||||
$xajax = new xajax();
|
||||
$xajax->registerFunction('search_users');
|
||||
|
||||
// setting the section (for the tabs)
|
||||
$this_section = SECTION_PLATFORM_ADMIN;
|
||||
$id_session = intval($_GET['id_session']);
|
||||
|
||||
SessionManager::protect_teacher_session_edit($id_session);
|
||||
|
||||
// setting breadcrumbs
|
||||
if (api_is_platform_admin()) {
|
||||
$interbreadcrumb[] = [
|
||||
'url' => 'index.php',
|
||||
'name' => get_lang('PlatformAdmin'),
|
||||
];
|
||||
$interbreadcrumb[] = [
|
||||
'url' => 'session_list.php',
|
||||
'name' => get_lang('SessionList'),
|
||||
];
|
||||
$interbreadcrumb[] = [
|
||||
'url' => "resume_session.php?id_session=".$id_session,
|
||||
"name" => get_lang('SessionOverview'),
|
||||
];
|
||||
}
|
||||
$allowTutors = api_get_setting('allow_tutors_to_assign_students_to_session');
|
||||
$extra_field_list = [];
|
||||
if ($allowTutors == 'true') {
|
||||
// Database Table Definitions
|
||||
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
|
||||
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
|
||||
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
|
||||
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
|
||||
|
||||
// setting the name of the tool
|
||||
$tool_name = get_lang('SubscribeUsersToSession');
|
||||
$add_type = 'unique';
|
||||
|
||||
if (isset($_REQUEST['add_type']) && $_REQUEST['add_type'] != '') {
|
||||
$add_type = Security::remove_XSS($_REQUEST['add_type']);
|
||||
}
|
||||
|
||||
$page = isset($_GET['page']) ? Security::remove_XSS($_GET['page']) : null;
|
||||
|
||||
// Checking for extra field with filter on
|
||||
$extra_field_list = UserManager::get_extra_fields();
|
||||
$new_field_list = [];
|
||||
if (is_array($extra_field_list)) {
|
||||
foreach ($extra_field_list as $extra_field) {
|
||||
//if is enabled to filter and is a "<select>" field type
|
||||
if ($extra_field[8] == 1 && $extra_field[2] == 4) {
|
||||
$new_field_list[] = [
|
||||
'name' => $extra_field[3],
|
||||
'variable' => $extra_field[1],
|
||||
'data' => $extra_field[9],
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function search_users($needle, $type)
|
||||
{
|
||||
global $id_session;
|
||||
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
|
||||
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
|
||||
$xajax_response = new xajaxResponse();
|
||||
$return = '';
|
||||
|
||||
if (!empty($needle) && !empty($type)) {
|
||||
//normal behaviour
|
||||
if ($type == 'any_session' && $needle == 'false') {
|
||||
$type = 'multiple';
|
||||
$needle = '';
|
||||
}
|
||||
|
||||
// xajax send utf8 datas... datas in db can be non-utf8 datas
|
||||
$charset = api_get_system_encoding();
|
||||
$needle = Database::escape_string($needle);
|
||||
$needle = api_convert_encoding($needle, $charset, 'utf-8');
|
||||
|
||||
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
|
||||
$cond_user_id = '';
|
||||
|
||||
//Only for single & multiple
|
||||
if (in_array($type, ['single', 'multiple'])) {
|
||||
if (!empty($id_session)) {
|
||||
$id_session = intval($id_session);
|
||||
// check id_user from session_rel_user table
|
||||
$sql = 'SELECT user_id FROM '.$tbl_session_rel_user.'
|
||||
WHERE session_id ="'.$id_session.'" AND relation_type<>'.SESSION_RELATION_TYPE_RRHH.' ';
|
||||
$res = Database::query($sql);
|
||||
$user_ids = [];
|
||||
if (Database::num_rows($res) > 0) {
|
||||
while ($row = Database::fetch_row($res)) {
|
||||
$user_ids[] = (int) $row[0];
|
||||
}
|
||||
}
|
||||
if (count($user_ids) > 0) {
|
||||
$cond_user_id = ' AND user.user_id NOT IN('.implode(",", $user_ids).')';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch ($type) {
|
||||
case 'single':
|
||||
// search users where username or firstname or lastname begins likes $needle
|
||||
$sql = 'SELECT user.user_id, username, lastname, firstname
|
||||
FROM '.$tbl_user.' user
|
||||
WHERE (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
|
||||
WHERE '.(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)
|
||||
WHERE
|
||||
s.user_id IS NULL AND
|
||||
user.status <>'.DRH.' AND
|
||||
user.status <> 6 '.$cond_user_id.
|
||||
$order_clause;
|
||||
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 ($access_url_id != -1) {
|
||||
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
|
||||
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 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
|
||||
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);
|
||||
$i = 0;
|
||||
if ($type == 'single') {
|
||||
while ($user = Database::fetch_array($rs)) {
|
||||
$i++;
|
||||
if ($i <= 10) {
|
||||
$person_name = api_get_person_name($user['firstname'], $user['lastname']);
|
||||
$return .= '<a href="javascript: void(0);" onclick="javascript: add_user_to_session(\''.$user['user_id'].'\',\''.$person_name.' ('.$user['username'].')'.'\')">'.$person_name.' ('.$user['username'].')</a><br />';
|
||||
} else {
|
||||
$return .= '...<br />';
|
||||
}
|
||||
}
|
||||
|
||||
$xajax_response->addAssign('ajax_list_users_single', 'innerHTML', api_utf8_encode($return));
|
||||
} else {
|
||||
$return .= '<select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15" style="width:360px;">';
|
||||
while ($user = Database::fetch_array($rs)) {
|
||||
$person_name = api_get_person_name($user['firstname'], $user['lastname']);
|
||||
$return .= '<option value="'.$user['user_id'].'">'.$person_name.' ('.$user['username'].')</option>';
|
||||
}
|
||||
$return .= '</select>';
|
||||
$xajax_response->addAssign('ajax_list_users_multiple', 'innerHTML', api_utf8_encode($return));
|
||||
}
|
||||
}
|
||||
|
||||
return $xajax_response;
|
||||
}
|
||||
|
||||
$xajax->processRequests();
|
||||
$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
|
||||
$htmlHeadXtra[] = '<script>
|
||||
function add_user_to_session (code, content) {
|
||||
document.getElementById("user_to_add").value = "";
|
||||
document.getElementById("ajax_list_users_single").innerHTML = "";
|
||||
destination = document.getElementById("destination_users");
|
||||
for (i=0;i<destination.length;i++) {
|
||||
if(destination.options[i].text == content) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
destination.options[destination.length] = new Option(content,code);
|
||||
destination.selectedIndex = -1;
|
||||
sortOptions(destination.options);
|
||||
}
|
||||
|
||||
function remove_item(origin) {
|
||||
for(var i = 0 ; i<origin.options.length ; i++) {
|
||||
if(origin.options[i].selected) {
|
||||
origin.options[i]=null;
|
||||
i = i-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validate_filter() {
|
||||
document.formulaire.add_type.value = \''.$add_type.'\';
|
||||
document.formulaire.form_sent.value=0;
|
||||
document.formulaire.submit();
|
||||
}
|
||||
|
||||
function checked_in_no_session(checked) {
|
||||
$("#first_letter_user")
|
||||
.find("option")
|
||||
.attr("selected", false);
|
||||
xajax_search_users(checked, "any_session");
|
||||
}
|
||||
|
||||
function change_select(val) {
|
||||
$("#user_with_any_session_id").attr("checked", false);
|
||||
xajax_search_users(val,"multiple");
|
||||
}
|
||||
</script>';
|
||||
$form_sent = 0;
|
||||
$firstLetterUser = $firstLetterSession = '';
|
||||
$UserList = $SessionList = [];
|
||||
$sessions = [];
|
||||
if (isset($_POST['form_sent']) && $_POST['form_sent']) {
|
||||
$form_sent = $_POST['form_sent'];
|
||||
$firstLetterUser = $_POST['firstLetterUser'];
|
||||
$firstLetterSession = $_POST['firstLetterSession'];
|
||||
$UserList = $_POST['sessionUsersList'];
|
||||
|
||||
if (!is_array($UserList)) {
|
||||
$UserList = [];
|
||||
}
|
||||
|
||||
if ($form_sent == 1) {
|
||||
//added a parameter to send emails when registering a user
|
||||
SessionManager::subscribeUsersToSession($id_session, $UserList, null, true);
|
||||
header('Location: resume_session.php?id_session='.$id_session);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$session_info = SessionManager::fetch($id_session);
|
||||
Display::display_header($tool_name);
|
||||
$nosessionUsersList = $sessionUsersList = [];
|
||||
$ajax_search = $add_type === 'unique' ? true : false;
|
||||
|
||||
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
|
||||
if ($ajax_search) {
|
||||
$sql = "SELECT u.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.user_id AND
|
||||
$tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH." AND
|
||||
$tbl_session_rel_user.session_id = ".intval($id_session)."
|
||||
WHERE 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 ($access_url_id != -1) {
|
||||
$sql = "SELECT u.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.user_id AND
|
||||
$tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH." 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 access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6
|
||||
$order_clause";
|
||||
}
|
||||
}
|
||||
$result = Database::query($sql);
|
||||
$users = Database::store_result($result);
|
||||
foreach ($users as $user) {
|
||||
$sessionUsersList[$user['user_id']] = $user;
|
||||
}
|
||||
unset($users); //clean to free memory
|
||||
} else {
|
||||
//Filter by Extra Fields
|
||||
$use_extra_fields = false;
|
||||
if (is_array($extra_field_list)) {
|
||||
if (is_array($new_field_list) && count($new_field_list) > 0) {
|
||||
$result_list = [];
|
||||
foreach ($new_field_list as $new_field) {
|
||||
$varname = 'field_'.$new_field['variable'];
|
||||
if (UserManager::is_extra_field_available($new_field['variable'])) {
|
||||
if (isset($_POST[$varname]) && $_POST[$varname] != '0') {
|
||||
$use_extra_fields = true;
|
||||
$extra_field_result[] = UserManager::get_extra_user_data_by_value(
|
||||
$new_field['variable'],
|
||||
$_POST[$varname]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($use_extra_fields) {
|
||||
$final_result = [];
|
||||
if (count($extra_field_result) > 1) {
|
||||
for ($i = 0; $i < count($extra_field_result) - 1; $i++) {
|
||||
if (is_array($extra_field_result[$i + 1])) {
|
||||
$final_result = array_intersect(
|
||||
$extra_field_result[$i],
|
||||
$extra_field_result[$i + 1]
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$final_result = $extra_field_result[0];
|
||||
}
|
||||
|
||||
$where_filter = '';
|
||||
if (api_is_multiple_url_enabled()) {
|
||||
if (is_array($final_result) && count($final_result) > 0) {
|
||||
$where_filter = " AND u.user_id IN ('".implode("','", $final_result)."') ";
|
||||
} else {
|
||||
//no results
|
||||
$where_filter = " AND u.user_id = -1";
|
||||
}
|
||||
} else {
|
||||
if (is_array($final_result) && count($final_result) > 0) {
|
||||
$where_filter = " WHERE u.user_id IN ('".implode("','", $final_result)."') ";
|
||||
} else {
|
||||
//no results
|
||||
$where_filter = " WHERE u.user_id = -1";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($use_extra_fields) {
|
||||
$sql = "SELECT u.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.user_id AND
|
||||
$tbl_session_rel_user.session_id = '$id_session' AND
|
||||
$tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH."
|
||||
$where_filter AND u.status<>".DRH." AND u.status<>6
|
||||
$order_clause";
|
||||
} else {
|
||||
$sql = "SELECT 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.user_id AND
|
||||
$tbl_session_rel_user.session_id = '$id_session' AND
|
||||
$tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH."
|
||||
WHERE 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 ($access_url_id != -1) {
|
||||
$sql = "SELECT u.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.user_id AND
|
||||
$tbl_session_rel_user.session_id = '$id_session' AND
|
||||
$tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH."
|
||||
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
|
||||
$order_clause";
|
||||
}
|
||||
}
|
||||
|
||||
$result = Database::query($sql);
|
||||
$users = Database::store_result($result, 'ASSOC');
|
||||
|
||||
foreach ($users as $uid => $user) {
|
||||
if ($user['session_id'] != $id_session) {
|
||||
$nosessionUsersList[$user['user_id']] = [
|
||||
'fn' => $user['firstname'],
|
||||
'ln' => $user['lastname'],
|
||||
'un' => $user['username'],
|
||||
];
|
||||
unset($users[$uid]);
|
||||
}
|
||||
}
|
||||
unset($users); //clean to free memory
|
||||
|
||||
//filling the correct users in list
|
||||
$sql = "SELECT 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_RELATION_TYPE_RRHH."
|
||||
WHERE 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 ($access_url_id != -1) {
|
||||
$sql = "SELECT u.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.user_id AND
|
||||
$tbl_session_rel_user.session_id = '$id_session' AND
|
||||
$tbl_session_rel_user.relation_type<>".SESSION_RELATION_TYPE_RRHH."
|
||||
INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=u.user_id)
|
||||
WHERE access_url_id = $access_url_id AND u.status<>".DRH." AND u.status<>6
|
||||
$order_clause";
|
||||
}
|
||||
}
|
||||
$result = Database::query($sql);
|
||||
$users = Database::store_result($result, 'ASSOC');
|
||||
foreach ($users as $uid => $user) {
|
||||
if ($user['session_id'] == $id_session) {
|
||||
$sessionUsersList[$user['user_id']] = $user;
|
||||
if (array_key_exists($user['user_id'], $nosessionUsersList)) {
|
||||
unset($nosessionUsersList[$user['user_id']]);
|
||||
}
|
||||
}
|
||||
unset($users[$uid]);
|
||||
}
|
||||
unset($users); //clean to free memory
|
||||
}
|
||||
|
||||
if ($add_type === 'multiple') {
|
||||
$link_add_type_unique = '<a href="'.api_get_self().'?id_session='.$id_session.'&add='.Security::remove_XSS($_GET['add']).'&add_type=unique">'.
|
||||
Display::return_icon('single.gif').get_lang('SessionAddTypeUnique').'</a>';
|
||||
$link_add_type_multiple = Display::return_icon('multiple.gif').get_lang('SessionAddTypeMultiple');
|
||||
} else {
|
||||
$link_add_type_unique = Display::return_icon('single.gif').get_lang('SessionAddTypeUnique');
|
||||
$link_add_type_multiple = '<a href="'.api_get_self().'?id_session='.$id_session.'&add='.Security::remove_XSS($_GET['add']).'&add_type=multiple">'.
|
||||
Display::return_icon('multiple.gif').get_lang('SessionAddTypeMultiple').'</a>';
|
||||
}
|
||||
$link_add_group = '<a href="usergroups.php">'.
|
||||
Display::return_icon('multiple.gif', get_lang('RegistrationByUsersGroups')).get_lang('RegistrationByUsersGroups').'</a>'; ?>
|
||||
<div class="actions">
|
||||
<?php echo $link_add_type_unique; ?> | <?php echo $link_add_type_multiple; ?> | <?php echo $link_add_group; ?>
|
||||
</div>
|
||||
<form name="formulaire" method="post"
|
||||
action="<?php echo api_get_self(); ?>?page=<?php echo $page; ?>&id_session=<?php echo $id_session; ?><?php if (!empty($_GET['add'])) {
|
||||
echo '&add=true';
|
||||
} ?>" style="margin:0px;" <?php if ($ajax_search) {
|
||||
echo ' onsubmit="valide();"';
|
||||
} ?>>
|
||||
<?php echo '<legend>'.$tool_name.' ('.$session->getName().') </legend>'; ?>
|
||||
<?php
|
||||
if ($add_type === 'multiple') {
|
||||
if (is_array($extra_field_list)) {
|
||||
if (is_array($new_field_list) && count($new_field_list) > 0) {
|
||||
echo '<h3>'.get_lang('FilterUsers').'</h3>';
|
||||
foreach ($new_field_list as $new_field) {
|
||||
echo $new_field['name'];
|
||||
$varname = 'field_'.$new_field['variable'];
|
||||
echo ' <select name="'.$varname.'">';
|
||||
echo '<option value="0">--'.get_lang('Select').'--</option>';
|
||||
foreach ($new_field['data'] as $option) {
|
||||
$checked = '';
|
||||
if (isset($_POST[$varname])) {
|
||||
if ($_POST[$varname] == $option[1]) {
|
||||
$checked = 'selected="true"';
|
||||
}
|
||||
}
|
||||
echo '<option value="'.$option[1].'" '.$checked.'>'.$option[1].'</option>';
|
||||
}
|
||||
echo '</select>';
|
||||
echo ' ';
|
||||
}
|
||||
echo '<input type="button" value="'.get_lang('Filter').'" onclick="validate_filter()" />';
|
||||
echo '<br /><br />';
|
||||
}
|
||||
}
|
||||
} ?>
|
||||
<input type="hidden" name="form_sent" value="1" />
|
||||
<input type="hidden" name="add_type" />
|
||||
<div class="row">
|
||||
<div class="span5">
|
||||
<div class="multiple_select_header">
|
||||
<b><?php echo get_lang('UserListInPlatform'); ?> :</b>
|
||||
<?php if ($add_type == 'multiple') {
|
||||
?>
|
||||
<?php echo get_lang('FirstLetterUser'); ?> :
|
||||
<select id="first_letter_user" name="firstLetterUser" onchange = "change_select(this.value);" >
|
||||
<option value = "%">--</option>
|
||||
<?php
|
||||
echo Display::get_alphabet_options(); ?>
|
||||
</select>
|
||||
<?php
|
||||
} ?>
|
||||
</div>
|
||||
<div id="content_source">
|
||||
<?php
|
||||
if (!($add_type == 'multiple')) {
|
||||
?>
|
||||
<input type="text" id="user_to_add" onkeyup="xajax_search_users(this.value,'single')" />
|
||||
<div id="ajax_list_users_single"></div>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<div id="ajax_list_users_multiple">
|
||||
<select id="origin_users" name="nosessionUsersList[]" multiple="multiple" size="15" class="span5">
|
||||
<?php
|
||||
foreach ($nosessionUsersList as $uid => $enreg) {
|
||||
?>
|
||||
<option value="<?php echo $uid; ?>" <?php if (in_array($uid, $UserList)) {
|
||||
echo 'selected="selected"';
|
||||
} ?>><?php echo api_get_person_name($enreg['fn'], $enreg['ln']).' ('.$enreg['un'].')'; ?></option>
|
||||
<?php
|
||||
} ?>
|
||||
</select>
|
||||
</div>
|
||||
<input type="checkbox" onchange="checked_in_no_session(this.checked);" name="user_with_any_session" id="user_with_any_session_id">
|
||||
<label for="user_with_any_session_id"><?php echo get_lang('UsersRegisteredInNoSession'); ?></label>
|
||||
<?php
|
||||
}
|
||||
unset($nosessionUsersList); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="span2">
|
||||
<div style="padding-top:54px;width:auto;text-align: center;">
|
||||
<?php
|
||||
if ($ajax_search) {
|
||||
?>
|
||||
<button class="btn btn-default" type="button" onclick="remove_item(document.getElementById('destination_users'))" ><em class="fa fa-arrow-left"></em></button>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<button class="btn btn-default" type="button" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))">
|
||||
<em class="fa fa-arrow-right"></em>
|
||||
</button>
|
||||
<br /><br />
|
||||
<button class="btn btn-default" type="button" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))">
|
||||
<em class="fa fa-arrow-left"></em>
|
||||
</button>
|
||||
<?php
|
||||
} ?>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<?php
|
||||
if (isset($_GET['add'])) {
|
||||
echo '<button class="btn btn-primary" type="button" value="" onclick="valide()" >'.get_lang('FinishSessionCreation').'</button>';
|
||||
} else {
|
||||
//@todo see that the call to "valide()" doesn't duplicate the onsubmit of the form (necessary to avoid delete on "enter" key pressed)
|
||||
echo '<button class="save" type="button" value="" onclick="valide()" >'.get_lang('SubscribeUsersToSession').'</button>';
|
||||
} ?>
|
||||
</div>
|
||||
<div class="span5">
|
||||
<div class="multiple_select_header">
|
||||
<b><?php echo get_lang('UserListInSession'); ?> :</b>
|
||||
</div>
|
||||
<select id="destination_users" name="sessionUsersList[]" multiple="multiple" size="15" class="span5">
|
||||
<?php
|
||||
foreach ($sessionUsersList as $enreg) {
|
||||
?>
|
||||
<option value="<?php echo $enreg['user_id']; ?>"><?php echo api_get_person_name($enreg['firstname'], $enreg['lastname']).' ('.$enreg['username'].')'; ?></option>
|
||||
<?php
|
||||
}
|
||||
unset($sessionUsersList); ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
function moveItem(origin , destination) {
|
||||
for (var i = 0 ; i<origin.options.length ; i++) {
|
||||
if (origin.options[i].selected) {
|
||||
destination.options[destination.length] = new Option(origin.options[i].text,origin.options[i].value);
|
||||
origin.options[i]=null;
|
||||
i = i-1;
|
||||
}
|
||||
}
|
||||
destination.selectedIndex = -1;
|
||||
sortOptions(destination.options);
|
||||
}
|
||||
|
||||
function sortOptions(options)
|
||||
{
|
||||
newOptions = new Array();
|
||||
for (i = 0 ; i<options.length ; i++)
|
||||
newOptions[i] = options[i];
|
||||
|
||||
newOptions = newOptions.sort(mysort);
|
||||
options.length = 0;
|
||||
for (i = 0 ; i < newOptions.length ; i++)
|
||||
options[i] = newOptions[i];
|
||||
}
|
||||
|
||||
function mysort(a, b)
|
||||
{
|
||||
if (a.text.toLowerCase() > b.text.toLowerCase()) {
|
||||
return 1;
|
||||
}
|
||||
if (a.text.toLowerCase() < b.text.toLowerCase()) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function valide()
|
||||
{
|
||||
var options = document.getElementById('destination_users').options;
|
||||
for (i = 0 ; i<options.length ; i++)
|
||||
options[i].selected = true;
|
||||
document.forms.formulaire.submit();
|
||||
}
|
||||
|
||||
function loadUsersInSelect(select)
|
||||
{
|
||||
var xhr_object = null;
|
||||
if(window.XMLHttpRequest) // Firefox
|
||||
xhr_object = new XMLHttpRequest();
|
||||
else if(window.ActiveXObject) // Internet Explorer
|
||||
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
else // XMLHttpRequest non supporté par le navigateur
|
||||
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
|
||||
|
||||
//xhr_object.open("GET", "loadUsersInSelect.ajax.php?id_session=<?php echo $id_session; ?>&letter="+select.options[select.selectedIndex].text, false);
|
||||
xhr_object.open("POST", "loadUsersInSelect.ajax.php");
|
||||
xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
nosessionUsers = makepost(document.getElementById('origin_users'));
|
||||
sessionUsers = makepost(document.getElementById('destination_users'));
|
||||
nosessionClasses = makepost(document.getElementById('origin_classes'));
|
||||
sessionClasses = makepost(document.getElementById('destination_classes'));
|
||||
xhr_object.send("nosessionusers="+nosessionUsers+"&sessionusers="+sessionUsers+"&nosessionclasses="+nosessionClasses+"&sessionclasses="+sessionClasses);
|
||||
xhr_object.onreadystatechange = function() {
|
||||
if (xhr_object.readyState == 4) {
|
||||
document.getElementById('content_source').innerHTML = result = xhr_object.responseText;
|
||||
//alert(xhr_object.responseText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function makepost(select)
|
||||
{
|
||||
var options = select.options;
|
||||
var ret = "";
|
||||
for (i = 0 ; i<options.length ; i++)
|
||||
ret = ret + options[i].value +'::'+options[i].text+";;";
|
||||
return ret;
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
} else {
|
||||
api_not_allowed();
|
||||
}
|
||||
Display::display_footer();
|
||||
107
main/user/career_diagram.php
Normal file
107
main/user/career_diagram.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
/*
|
||||
*
|
||||
* Requires extra_field_values.value to be longtext to save diagram:
|
||||
*
|
||||
UPDATE extra_field_values SET created_at = NULL WHERE CAST(created_at AS CHAR(20)) = '0000-00-00 00:00:00';
|
||||
UPDATE extra_field_values SET updated_at = NULL WHERE CAST(updated_at AS CHAR(20)) = '0000-00-00 00:00:00';
|
||||
ALTER TABLE extra_field_values modify column value longtext null;
|
||||
*/
|
||||
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
|
||||
if (false === api_get_configuration_value('allow_career_diagram')) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
|
||||
api_block_anonymous_users();
|
||||
|
||||
$this_section = SECTION_COURSES;
|
||||
|
||||
$careerId = $_GET['career_id'] ?? null;
|
||||
$userId = isset($_GET['user_id']) ? $_GET['user_id'] : api_get_user_id();
|
||||
|
||||
if (empty($careerId)) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
|
||||
$career = new Career();
|
||||
$careerInfo = $career->getCareerFromId($careerId);
|
||||
if (empty($careerInfo)) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
$careerId = $careerInfo['id'];
|
||||
|
||||
/*$allow = UserManager::userHasCareer($userId, $careerId) || api_is_platform_admin() || api_is_drh();
|
||||
if (false === $allow) {
|
||||
api_not_allowed(true);
|
||||
}*/
|
||||
|
||||
$htmlHeadXtra[] = api_get_js('jsplumb2.js');
|
||||
$htmlHeadXtra[] = api_get_asset('qtip2/jquery.qtip.min.js');
|
||||
$htmlHeadXtra[] = api_get_css_asset('qtip2/jquery.qtip.min.css');
|
||||
|
||||
$interbreadcrumb[] = [
|
||||
'url' => api_get_path(WEB_CODE_PATH).'auth/my_progress.php',
|
||||
'name' => get_lang('Progress'),
|
||||
];
|
||||
|
||||
$interbreadcrumb[] = [
|
||||
'url' => '#',
|
||||
'name' => get_lang('Careers'),
|
||||
];
|
||||
|
||||
$extraFieldValue = new ExtraFieldValue('career');
|
||||
|
||||
// Check urls
|
||||
$itemUrls = $extraFieldValue->get_values_by_handler_and_field_variable(
|
||||
$careerId,
|
||||
'career_urls',
|
||||
false,
|
||||
false,
|
||||
false
|
||||
);
|
||||
|
||||
$urlToString = '';
|
||||
if (!empty($itemUrls) && !empty($itemUrls['value'])) {
|
||||
$urls = explode(',', $itemUrls['value']);
|
||||
$urlToString = ' ';
|
||||
if (!empty($urls)) {
|
||||
foreach ($urls as $urlData) {
|
||||
$urlData = explode('@', $urlData);
|
||||
if (isset($urlData[1])) {
|
||||
$urlToString .= Display::url($urlData[0], $urlData[1]).' ';
|
||||
} else {
|
||||
$urlToString .= $urlData[0].' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$showFullPage = isset($_REQUEST['iframe']) && 1 === (int) $_REQUEST['iframe'] ? false : true;
|
||||
$tpl = new Template(get_lang('Diagram'), $showFullPage, $showFullPage, !$showFullPage);
|
||||
$html = Display::page_subheader2($careerInfo['name'].$urlToString);
|
||||
$diagram = Career::renderDiagramByColumn($careerInfo, $tpl, $userId, $showFullPage);
|
||||
|
||||
if (!empty($diagram)) {
|
||||
$html .= $diagram;
|
||||
} else {
|
||||
Display::addFlash(
|
||||
Display::return_message(
|
||||
sprintf(get_lang('CareerXDoesntHaveADiagram'), $careerInfo['name']),
|
||||
'warning'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$tpl->assign('content', $html);
|
||||
if ($showFullPage) {
|
||||
$layout = $tpl->get_template('career/diagram_full.tpl');
|
||||
} else {
|
||||
$layout = $tpl->get_template('career/diagram_iframe.tpl');
|
||||
}
|
||||
|
||||
$tpl->display($layout);
|
||||
198
main/user/class.php
Normal file
198
main/user/class.php
Normal file
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
$this_section = SECTION_COURSES;
|
||||
|
||||
$sessionId = api_get_session_id();
|
||||
|
||||
api_protect_course_script(true, false, 'user');
|
||||
|
||||
if ('false' === api_get_setting('allow_user_course_subscription_by_course_admin')) {
|
||||
if (!api_is_platform_admin()) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (api_get_configuration_value('session_classes_tab_disable') && !api_is_platform_admin() && $sessionId) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
|
||||
$tool_name = get_lang('Classes');
|
||||
$htmlHeadXtra[] = api_get_jqgrid_js();
|
||||
|
||||
$interbreadcrumb[] = [
|
||||
'url' => 'user.php?'.api_get_cidreq(),
|
||||
'name' => get_lang('ToolUser'),
|
||||
];
|
||||
|
||||
$type = isset($_GET['type']) ? Security::remove_XSS($_GET['type']) : 'registered';
|
||||
$groupFilter = isset($_GET['group_filter']) ? (int) $_GET['group_filter'] : 0;
|
||||
$keyword = isset($_GET['keyword']) ? Security::remove_XSS($_GET['keyword']) : '';
|
||||
|
||||
$htmlHeadXtra[] = '
|
||||
<script>
|
||||
$(function() {
|
||||
$("#group_filter").change(function() {
|
||||
window.location = "class.php?'.api_get_cidreq().'&type='.$type.'" +"&group_filter=" + $(this).val();
|
||||
});
|
||||
});
|
||||
</script>';
|
||||
|
||||
$actionsLeft = '';
|
||||
$actionsRight = '';
|
||||
$usergroup = new UserGroup();
|
||||
$actions = '';
|
||||
|
||||
if (api_is_allowed_to_edit()) {
|
||||
if ($type === 'registered') {
|
||||
$actionsLeft .= '<a href="class.php?'.api_get_cidreq().'&type=not_registered">'.
|
||||
Display::return_icon('add-class.png', get_lang('AddClassesToACourse'), [], ICON_SIZE_MEDIUM).'</a>';
|
||||
} else {
|
||||
$actionsLeft .= '<a href="class.php?'.api_get_cidreq().'&type=registered">'.
|
||||
Display::return_icon('back.png', get_lang('Classes'), [], ICON_SIZE_MEDIUM).'</a>';
|
||||
|
||||
$form = new FormValidator(
|
||||
'groups',
|
||||
'get',
|
||||
api_get_self().'?type='.$type,
|
||||
'',
|
||||
[],
|
||||
FormValidator::LAYOUT_INLINE
|
||||
);
|
||||
$options = [
|
||||
-1 => get_lang('All'),
|
||||
1 => get_lang('SocialGroups'),
|
||||
0 => get_lang('Classes'),
|
||||
];
|
||||
$form->addSelect(
|
||||
'group_filter',
|
||||
get_lang('Groups'),
|
||||
$options,
|
||||
['id' => 'group_filter', 'disable_js' => 'disable_js']
|
||||
);
|
||||
$form->addHidden('type', $type);
|
||||
$form->addText('keyword', '', false);
|
||||
$form->setDefaults(['group_filter' => $groupFilter]);
|
||||
$form->addCourseHiddenParams();
|
||||
$form->addButtonSearch(get_lang('SearchButton'));
|
||||
|
||||
$actionsRight .= $form->returnForm();
|
||||
}
|
||||
|
||||
$actions = Display::toolbarAction('actions-class', [$actionsLeft, $actionsRight]);
|
||||
$action = isset($_GET['action']) ? $_GET['action'] : null;
|
||||
switch ($action) {
|
||||
case 'add_class_to_course':
|
||||
$id = $_GET['id'];
|
||||
if (!empty($id) && $sessionId == 0) {
|
||||
/* To suscribe Groups*/
|
||||
$usergroup->subscribe_courses_to_usergroup(
|
||||
$id,
|
||||
[api_get_course_int_id()],
|
||||
false
|
||||
);
|
||||
Display::addFlash(Display::return_message(get_lang('Added')));
|
||||
header('Location: class.php?'.api_get_cidreq().'&type=registered');
|
||||
exit;
|
||||
} elseif ($sessionId != 0) {
|
||||
/* To suscribe session*/
|
||||
$usergroup->subscribe_sessions_to_usergroup($id, [$sessionId]);
|
||||
Display::addFlash(Display::return_message(get_lang('Added')));
|
||||
header('Location: class.php?'.api_get_cidreq().'&type=registered');
|
||||
exit;
|
||||
}
|
||||
break;
|
||||
case 'remove_class_from_course':
|
||||
$id = $_GET['id'];
|
||||
if (!empty($id)) {
|
||||
$usergroup->unsubscribe_courses_from_usergroup(
|
||||
$id,
|
||||
[api_get_course_int_id()]
|
||||
);
|
||||
Display::addFlash(Display::return_message(get_lang('Deleted')));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// jqgrid will use this URL to do the selects
|
||||
$url = api_get_path(WEB_AJAX_PATH).
|
||||
'model.ajax.php?a=get_usergroups_teacher&type='.$type.'&group_filter='.$groupFilter.'&keyword='.$keyword;
|
||||
// The order is important you need to check the the $column variable in the model.ajax.php file
|
||||
$columns = [
|
||||
get_lang('Name'),
|
||||
get_lang('Users'),
|
||||
get_lang('Status'),
|
||||
get_lang('Type'),
|
||||
get_lang('Actions'),
|
||||
];
|
||||
|
||||
// Column config
|
||||
$columnModel = [
|
||||
[
|
||||
'name' => 'name',
|
||||
'index' => 'name',
|
||||
'width' => '35',
|
||||
'align' => 'left',
|
||||
],
|
||||
[
|
||||
'name' => 'users',
|
||||
'index' => 'users',
|
||||
'width' => '15',
|
||||
'align' => 'left',
|
||||
],
|
||||
[
|
||||
'name' => 'status',
|
||||
'index' => 'status',
|
||||
'width' => '15',
|
||||
'align' => 'left',
|
||||
],
|
||||
[
|
||||
'name' => 'group_type',
|
||||
'index' => 'group_type',
|
||||
'width' => '15',
|
||||
'align' => 'center',
|
||||
],
|
||||
[
|
||||
'name' => 'actions',
|
||||
'index' => 'actions',
|
||||
'width' => '10',
|
||||
'align' => 'center',
|
||||
'sortable' => 'false',
|
||||
],
|
||||
];
|
||||
|
||||
// Autowidth
|
||||
$extraParams['autowidth'] = 'true';
|
||||
// height auto
|
||||
$extraParams['height'] = 'auto';
|
||||
|
||||
Display::display_header($tool_name, 'User');
|
||||
|
||||
?>
|
||||
<script>
|
||||
$(function() {
|
||||
<?php
|
||||
// grid definition see the $usergroup>display() function
|
||||
echo Display::grid_js(
|
||||
'usergroups',
|
||||
$url,
|
||||
$columns,
|
||||
$columnModel,
|
||||
$extraParams,
|
||||
[],
|
||||
'',
|
||||
true
|
||||
);
|
||||
?>
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
|
||||
echo $actions;
|
||||
echo UserManager::getUserSubscriptionTab(4);
|
||||
echo Display::return_message(get_lang('UserClassExplanation'));
|
||||
$usergroup->display_teacher_view();
|
||||
Display::display_footer();
|
||||
51
main/user/classes.php
Normal file
51
main/user/classes.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
/**
|
||||
* @author Julio Montoya <gugli100@gmail.com>
|
||||
*/
|
||||
$cidReset = true;
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
|
||||
api_block_anonymous_users();
|
||||
|
||||
$this_section = SECTION_COURSES;
|
||||
|
||||
$interbreadcrumb[] = ['url' => 'classes.php', 'name' => get_lang('Classes')];
|
||||
if (isset($_GET['id'])) {
|
||||
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Groups')];
|
||||
}
|
||||
|
||||
$content = '';
|
||||
|
||||
$usergroup = new UserGroup();
|
||||
$usergroup_list = $usergroup->get_usergroup_by_user(api_get_user_id());
|
||||
if (!empty($usergroup_list)) {
|
||||
$content .= Display::tag('h1', get_lang('MyClasses'));
|
||||
foreach ($usergroup_list as $group_id) {
|
||||
if (isset($_GET['id']) && $_GET['id'] != $group_id) {
|
||||
continue;
|
||||
}
|
||||
$data = $usergroup->get($group_id);
|
||||
$content .= Display::tag('h2', $data['name']);
|
||||
$content .= Display::div($data['description']);
|
||||
}
|
||||
} else {
|
||||
if (api_is_platform_admin()) {
|
||||
Display::addFlash(
|
||||
Display::return_message(
|
||||
Display::url(
|
||||
get_lang('AddClasses'),
|
||||
api_get_path(WEB_CODE_PATH).'admin/usergroups.php?action=add'
|
||||
),
|
||||
'normal',
|
||||
false
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Display::display_header('', 'Classes');
|
||||
|
||||
echo $content;
|
||||
|
||||
Display::display_footer();
|
||||
7
main/user/index.html
Normal file
7
main/user/index.html
Normal file
@@ -0,0 +1,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="refresh" content="0; url=user.php">
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
376
main/user/resume_session.php
Normal file
376
main/user/resume_session.php
Normal file
@@ -0,0 +1,376 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
/**
|
||||
* @author Bart Mollet, Julio Montoya lot of fixes
|
||||
*
|
||||
* @package chamilo.admin
|
||||
*/
|
||||
$cidReset = true;
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
|
||||
// setting the section (for the tabs)
|
||||
$this_section = SECTION_PLATFORM_ADMIN;
|
||||
$id_session = (int) $_GET['id_session'];
|
||||
SessionManager::protect_teacher_session_edit($id_session);
|
||||
|
||||
$tool_name = get_lang('SessionOverview');
|
||||
|
||||
$allowTutors = api_get_setting('allow_tutors_to_assign_students_to_session');
|
||||
if ($allowTutors === 'true') {
|
||||
// Database Table Definitions
|
||||
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
|
||||
$tbl_session_rel_class = Database::get_main_table(TABLE_MAIN_SESSION_CLASS);
|
||||
$tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
|
||||
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
|
||||
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
|
||||
$tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
|
||||
$tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
|
||||
$tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
|
||||
$table_access_url_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
|
||||
|
||||
$sql = 'SELECT
|
||||
name,
|
||||
nbr_courses,
|
||||
nbr_users,
|
||||
nbr_classes,
|
||||
DATE_FORMAT(access_start_date,"%d-%m-%Y") as access_start_date,
|
||||
DATE_FORMAT(access_end_date,"%d-%m-%Y") as access_end_date,
|
||||
lastname,
|
||||
firstname,
|
||||
username,
|
||||
session_admin_id,
|
||||
coach_access_start_date,
|
||||
coach_access_end_date,
|
||||
session_category_id,
|
||||
visibility
|
||||
FROM '.$tbl_session.'
|
||||
LEFT JOIN '.$tbl_user.'
|
||||
ON id_coach = user_id
|
||||
WHERE '.$tbl_session.'.id='.$id_session;
|
||||
|
||||
$rs = Database::query($sql);
|
||||
$session = Database::store_result($rs);
|
||||
$session = $session[0];
|
||||
|
||||
$sql = 'SELECT name
|
||||
FROM '.$tbl_session_category.'
|
||||
WHERE id = '.intval($session['session_category_id']);
|
||||
$rs = Database::query($sql);
|
||||
$session_category = '';
|
||||
|
||||
if (Database::num_rows($rs) > 0) {
|
||||
$rows_session_category = Database::store_result($rs);
|
||||
$rows_session_category = $rows_session_category[0];
|
||||
$session_category = $rows_session_category['name'];
|
||||
}
|
||||
|
||||
$action = isset($_GET['action']) ? $_GET['action'] : null;
|
||||
|
||||
$url_id = api_get_current_access_url_id();
|
||||
|
||||
switch ($action) {
|
||||
case 'add_user_to_url':
|
||||
$user_id = $_REQUEST['user_id'];
|
||||
$result = UrlManager::add_user_to_url($user_id, $url_id);
|
||||
$user_info = api_get_user_info($user_id);
|
||||
if ($result) {
|
||||
Display::addFlash(
|
||||
Display::return_message(
|
||||
get_lang('UserAdded').' '.api_get_person_name(
|
||||
$user_info['firstname'],
|
||||
$user_info['lastname']
|
||||
),
|
||||
'confirm'
|
||||
)
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 'delete':
|
||||
$idChecked = $_GET['idChecked'];
|
||||
if (is_array($idChecked)) {
|
||||
$my_temp = [];
|
||||
foreach ($idChecked as $id) {
|
||||
$courseInfo = api_get_course_info($id);
|
||||
$my_temp[] = $courseInfo['real_id']; // forcing the escape_string
|
||||
}
|
||||
$idChecked = $my_temp;
|
||||
$idChecked = "'".implode("','", $idChecked)."'";
|
||||
|
||||
$result = Database::query("DELETE FROM $tbl_session_rel_course WHERE session_id='$id_session' AND c_id IN($idChecked)");
|
||||
$nbr_affected_rows = Database::affected_rows($result);
|
||||
|
||||
Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE session_id='$id_session' AND c_id IN($idChecked)");
|
||||
Database::query("UPDATE $tbl_session SET nbr_courses=nbr_courses-$nbr_affected_rows WHERE id='$id_session'");
|
||||
}
|
||||
|
||||
if (!empty($_GET['class'])) {
|
||||
$result = Database::query("DELETE FROM $tbl_session_rel_class WHERE session_id='$id_session' AND class_id=".intval($_GET['class']));
|
||||
$nbr_affected_rows = Database::affected_rows($result);
|
||||
Database::query("UPDATE $tbl_session SET nbr_classes=nbr_classes-$nbr_affected_rows WHERE id='$id_session'");
|
||||
}
|
||||
|
||||
if (!empty($_GET['user'])) {
|
||||
$result = Database::query("DELETE FROM $tbl_session_rel_user WHERE relation_type<>".SESSION_RELATION_TYPE_RRHH." AND session_id ='$id_session' AND user_id=".intval($_GET['user']));
|
||||
$nbr_affected_rows = Database::affected_rows($result);
|
||||
Database::query("UPDATE $tbl_session SET nbr_users=nbr_users-$nbr_affected_rows WHERE id='$id_session'");
|
||||
|
||||
$result = Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE session_id ='$id_session' AND user_id=".intval($_GET['user']));
|
||||
$nbr_affected_rows = Database::affected_rows($result);
|
||||
|
||||
Database::query("UPDATE $tbl_session_rel_course SET nbr_users=nbr_users-$nbr_affected_rows WHERE session_id ='$id_session'");
|
||||
}
|
||||
break;
|
||||
}
|
||||
Display::display_header($tool_name);
|
||||
|
||||
echo Display::page_header(
|
||||
Display::return_icon(
|
||||
'session.png',
|
||||
get_lang('Session')
|
||||
).' '.$session['name']
|
||||
);
|
||||
echo Display::page_subheader(get_lang('GeneralProperties').$url); ?>
|
||||
<!-- General properties -->
|
||||
<table class="table table-hover table-striped data_table">
|
||||
<tr>
|
||||
<td><?php echo get_lang('GeneralCoach'); ?> :</td>
|
||||
<td><?php echo api_get_person_name($session['firstname'], $session['lastname']).' ('.$session['username'].')'; ?></td>
|
||||
</tr>
|
||||
<?php if (!empty($session_category)) {
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo get_lang('SessionCategory'); ?></td>
|
||||
<td><?php echo $session_category; ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
} ?>
|
||||
<tr>
|
||||
<td><?php echo get_lang('Date'); ?> :</td>
|
||||
<td>
|
||||
<?php
|
||||
if ($session['access_start_date'] == '00-00-0000' && $session['access_end_date'] == '00-00-0000') {
|
||||
echo get_lang('NoTimeLimits');
|
||||
} else {
|
||||
if ($session['access_start_date'] != '00-00-0000') {
|
||||
//$session['date_start'] = Display::tag('i', get_lang('NoTimeLimits'));
|
||||
$session['access_start_date'] = get_lang('From').' '.$session['access_start_date'];
|
||||
} else {
|
||||
$session['access_start_date'] = '';
|
||||
}
|
||||
if ($session['access_end_date'] == '00-00-0000') {
|
||||
$session['access_end_date'] = '';
|
||||
} else {
|
||||
$session['access_end_date'] = get_lang('Until').' '.$session['access_end_date'];
|
||||
}
|
||||
echo $session['access_start_date'].' '.$session['access_end_date'];
|
||||
} ?>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- show nb_days_before and nb_days_after only if they are different from 0 -->
|
||||
<tr>
|
||||
<td>
|
||||
<?php echo api_ucfirst(get_lang('SessionCoachStartDate')); ?> :
|
||||
</td>
|
||||
<td>
|
||||
<?php echo intval($session['coach_access_start_date']); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<?php echo api_ucfirst(get_lang('SessionCoachEndDate')); ?> :
|
||||
</td>
|
||||
<td>
|
||||
<?php echo intval($session['coach_session_access_end_date']); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<?php echo api_ucfirst(get_lang('SessionVisibility')); ?> :
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($session['visibility'] == 1) {
|
||||
echo get_lang('ReadOnly');
|
||||
} elseif ($session['visibility'] == 2) {
|
||||
echo get_lang('Visible');
|
||||
} elseif ($session['visibility'] == 3) {
|
||||
echo api_ucfirst(get_lang('Invisible'));
|
||||
} ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
|
||||
$multiple_url_is_on = api_get_multiple_access_url();
|
||||
if ($multiple_url_is_on) {
|
||||
echo '<tr><td>';
|
||||
echo 'URL';
|
||||
echo '</td>';
|
||||
echo '<td>';
|
||||
$url_list = UrlManager::get_access_url_from_session($id_session);
|
||||
foreach ($url_list as $url_data) {
|
||||
echo $url_data['url'].'<br />';
|
||||
}
|
||||
echo '</td></tr>';
|
||||
} ?>
|
||||
</table>
|
||||
<br />
|
||||
<?php
|
||||
echo Display::page_subheader(get_lang('CourseList').$url); ?>
|
||||
<!--List of courses -->
|
||||
<table class="table table-hover table-striped data_table">
|
||||
<tr>
|
||||
<th width="35%"><?php echo get_lang('CourseTitle'); ?></th>
|
||||
<th width="30%"><?php echo get_lang('CourseCoach'); ?></th>
|
||||
<th width="20%"><?php echo get_lang('UsersNumber'); ?></th>
|
||||
</tr>
|
||||
<?php
|
||||
if ($session['nbr_courses'] == 0) {
|
||||
echo '<tr>
|
||||
<td colspan="4">'.get_lang('NoCoursesForThisSession').'</td>
|
||||
</tr>';
|
||||
} else {
|
||||
// select the courses
|
||||
$sql = "SELECT c.id, code,title,visual_code, nbr_users
|
||||
FROM $tbl_course c,$tbl_session_rel_course sc
|
||||
WHERE c.id = sc.c_id
|
||||
AND session_id='$id_session'
|
||||
ORDER BY title";
|
||||
$result = Database::query($sql);
|
||||
$courses = Database::store_result($result);
|
||||
foreach ($courses as $course) {
|
||||
// Select the number of users
|
||||
$sql = "SELECT count(*) FROM $tbl_session_rel_user sru, $tbl_session_rel_course_rel_user srcru
|
||||
WHERE
|
||||
srcru.user_id = sru.user_id AND
|
||||
srcru.session_id = sru.session_id AND
|
||||
srcru.c_id = '".Database::escape_string($course['id'])."'AND
|
||||
sru.relation_type<>".SESSION_RELATION_TYPE_RRHH." AND
|
||||
srcru.session_id = '".intval($id_session)."'";
|
||||
|
||||
$rs = Database::query($sql);
|
||||
$course['nbr_users'] = Database::result($rs, 0, 0);
|
||||
|
||||
// Get coachs of the courses in session
|
||||
|
||||
$sql = "SELECT user.lastname,user.firstname,user.username
|
||||
FROM $tbl_session_rel_course_rel_user session_rcru, $tbl_user user
|
||||
WHERE
|
||||
session_rcru.user_id = user.id AND
|
||||
session_rcru.session_id = '".intval($id_session)."' AND
|
||||
session_rcru.c_id ='".Database::escape_string($course['id'])."' AND
|
||||
session_rcru.status=2";
|
||||
$rs = Database::query($sql);
|
||||
|
||||
$coachs = [];
|
||||
if (Database::num_rows($rs) > 0) {
|
||||
while ($info_coach = Database::fetch_array($rs)) {
|
||||
$coachs[] = api_get_person_name(
|
||||
$info_coach['firstname'],
|
||||
$info_coach['lastname']
|
||||
).' ('.$info_coach['username'].')';
|
||||
}
|
||||
} else {
|
||||
$coach = get_lang('None');
|
||||
}
|
||||
|
||||
if (count($coachs) > 0) {
|
||||
$coach = implode('<br />', $coachs);
|
||||
} else {
|
||||
$coach = get_lang('None');
|
||||
}
|
||||
|
||||
$orig_param = '&origin=resume_session';
|
||||
//hide_course_breadcrumb the parameter has been added to hide the
|
||||
// name of the course, that appeared in the default $interbreadcrumb
|
||||
echo '
|
||||
<tr>
|
||||
<td>'.Display::url($course['title'].' ('.$course['visual_code'].')', api_get_path(WEB_COURSE_PATH).$course['code'].'/?id_session='.$id_session), '</td>
|
||||
<td>'.$coach.'</td>
|
||||
<td>'.$course['nbr_users'].'</td>
|
||||
|
||||
</tr>';
|
||||
}
|
||||
} ?>
|
||||
</table>
|
||||
<br />
|
||||
<?php
|
||||
echo Display::page_subheader(get_lang('UserList').$url); ?>
|
||||
<!--List of users -->
|
||||
<table class="table table-hover table-striped data_table">
|
||||
<tr>
|
||||
<th>
|
||||
<?php echo get_lang('User'); ?>
|
||||
</th>
|
||||
<th>
|
||||
<?php echo get_lang('Actions'); ?>
|
||||
</th>
|
||||
</tr>
|
||||
<?php
|
||||
|
||||
if ($session['nbr_users'] == 0) {
|
||||
echo '<tr>
|
||||
<td colspan="2">'.get_lang('NoUsersForThisSession').'</td>
|
||||
</tr>';
|
||||
} else {
|
||||
$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname';
|
||||
|
||||
if ($multiple_url_is_on) {
|
||||
$sql = "SELECT u.user_id, lastname, firstname, username, access_url_id
|
||||
FROM $tbl_user u
|
||||
INNER JOIN $tbl_session_rel_user su
|
||||
ON u.user_id = su.user_id AND su.relation_type<>".SESSION_RELATION_TYPE_RRHH."
|
||||
LEFT OUTER JOIN $table_access_url_user uu ON (uu.user_id = u.user_id)
|
||||
WHERE su.session_id = $id_session AND (access_url_id = $url_id OR access_url_id is null )
|
||||
$order_clause";
|
||||
} else {
|
||||
$sql = "SELECT u.user_id, lastname, firstname, username
|
||||
FROM $tbl_user u
|
||||
INNER JOIN $tbl_session_rel_user su
|
||||
ON u.user_id = su.user_id AND su.relation_type<>".SESSION_RELATION_TYPE_RRHH."
|
||||
AND su.session_id = ".$id_session.$order_clause;
|
||||
}
|
||||
|
||||
$result = Database::query($sql);
|
||||
$users = Database::store_result($result);
|
||||
// change breadcrumb in destination page
|
||||
$orig_param = '&origin=resume_session&id_session='.$id_session;
|
||||
foreach ($users as $user) {
|
||||
$user_link = '';
|
||||
if (!empty($user['user_id'])) {
|
||||
$user_link = '<a href="'.api_get_path(WEB_CODE_PATH).'admin/user_information.php?user_id='.intval($user['user_id']).'">'.
|
||||
api_htmlentities(api_get_person_name($user['firstname'], $user['lastname']), ENT_QUOTES, $charset).' ('.$user['username'].')</a>';
|
||||
}
|
||||
|
||||
$link_to_add_user_in_url = '';
|
||||
|
||||
if ($multiple_url_is_on) {
|
||||
if ($user['access_url_id'] != $url_id) {
|
||||
$user_link .= ' '.Display::return_icon('warning.png', get_lang('UserNotAddedInURL'), [], ICON_SIZE_SMALL);
|
||||
$add = Display::return_icon('add.png', get_lang('AddUsersToURL'), [], ICON_SIZE_SMALL);
|
||||
$link_to_add_user_in_url = '<a href="resume_session.php?action=add_user_to_url&id_session='.$id_session.'&user_id='.$user['user_id'].'">'.$add.'</a>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '<tr>
|
||||
<td width="90%">
|
||||
'.$user_link.'
|
||||
</td>
|
||||
<td>
|
||||
<a href="../mySpace/myStudents.php?student='.$user['user_id'].''.$orig_param.'">'.
|
||||
Display::return_icon('statistics.gif', get_lang('Reporting')).'</a>
|
||||
<a href="session_course_user.php?id_user='.$user['user_id'].'&id_session='.$id_session.'">'.
|
||||
Display::return_icon('course.png', get_lang('BlockCoursesForThisUser')).'</a>
|
||||
<a href="'.api_get_self().'?id_session='.$id_session.'&action=delete&user='.$user['user_id'].'" onclick="javascript:if(!confirm(\''.get_lang('ConfirmYourChoice').'\')) return false;">'.
|
||||
Display::return_icon('delete.png', get_lang('Delete')).'</a>
|
||||
'.$link_to_add_user_in_url.'
|
||||
</td>
|
||||
</tr>';
|
||||
}
|
||||
} ?>
|
||||
</table>
|
||||
<?php
|
||||
} else {
|
||||
api_not_allowed();
|
||||
}
|
||||
// footer
|
||||
Display::display_footer();
|
||||
149
main/user/session_list.php
Normal file
149
main/user/session_list.php
Normal file
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
/**
|
||||
* List sessions in an efficient and usable way.
|
||||
*/
|
||||
$cidReset = true;
|
||||
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
$this_section = SECTION_PLATFORM_ADMIN;
|
||||
|
||||
api_protect_teacher_script(true);
|
||||
|
||||
// Add the JS needed to use the jqgrid
|
||||
$htmlHeadXtra[] = api_get_jqgrid_js();
|
||||
$tool_name = get_lang('SessionList');
|
||||
$allowTutors = api_get_setting('allow_tutors_to_assign_students_to_session');
|
||||
|
||||
if ($allowTutors !== 'true') {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
|
||||
Display::display_header($tool_name);
|
||||
|
||||
// jqgrid will use this URL to do the selects
|
||||
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&from_course_session=1';
|
||||
if (isset($_REQUEST['keyword'])) {
|
||||
//Begin with see the searchOper param
|
||||
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&from_course_session=1&_search=true&rows=20&page=1&sidx=&sord=asc&filters=&searchField=name&searchString='.Security::remove_XSS($_REQUEST['keyword']).'&searchOper=bw';
|
||||
}
|
||||
|
||||
//The order is important you need to check the the $column variable in the model.ajax.php file
|
||||
$columns = [
|
||||
get_lang('Name'),
|
||||
get_lang('NumberOfCourses'),
|
||||
get_lang('NumberOfUsers'),
|
||||
get_lang('SessionCategoryName'),
|
||||
get_lang('StartDate'),
|
||||
get_lang('EndDate'),
|
||||
get_lang('Coach'),
|
||||
get_lang('Status'),
|
||||
get_lang('Visibility'),
|
||||
get_lang('Actions'),
|
||||
];
|
||||
|
||||
//Column config
|
||||
$column_model = [
|
||||
['name' => 'name', 'index' => 'name', 'width' => '160', 'align' => 'left', 'search' => 'true', 'wrap_cell' => "true"],
|
||||
['name' => 'nbr_courses', 'index' => 'nbr_courses', 'width' => '30', 'align' => 'left', 'search' => 'true'],
|
||||
['name' => 'nbr_users', 'index' => 'nbr_users', 'width' => '30', 'align' => 'left', 'search' => 'true'],
|
||||
['name' => 'category_name', 'index' => 'category_name', 'width' => '70', 'align' => 'left', 'search' => 'true'],
|
||||
['name' => 'access_start_date', 'index' => 'access_start_date', 'width' => '40', 'align' => 'left', 'search' => 'true'],
|
||||
['name' => 'access_end_date', 'index' => 'access_end_date', 'width' => '40', 'align' => 'left', 'search' => 'true'],
|
||||
['name' => 'coach_name', 'index' => 'coach_name', 'width' => '80', 'align' => 'left', 'search' => 'false'],
|
||||
['name' => 'status', 'index' => 'session_active', 'width' => '40', 'align' => 'left', 'search' => 'true', 'stype' => 'select',
|
||||
//for the bottom bar
|
||||
'searchoptions' => [
|
||||
'defaultValue' => '1',
|
||||
'value' => '1:'.get_lang('Active').';0:'.get_lang('Inactive'),
|
||||
],
|
||||
//for the top bar
|
||||
'editoptions' => ['value' => ':'.get_lang('All').';1:'.get_lang('Active').';0:'.get_lang('Inactive')], ],
|
||||
['name' => 'visibility', 'index' => 'visibility', 'width' => '40', 'align' => 'left', 'search' => 'false'],
|
||||
['name' => 'actions', 'index' => 'actions', 'width' => '100', 'align' => 'left', 'formatter' => 'action_formatter', 'sortable' => 'false', 'search' => 'false'],
|
||||
];
|
||||
//Autowidth
|
||||
$extra_params['autowidth'] = 'true';
|
||||
|
||||
//height auto
|
||||
$extra_params['height'] = 'auto';
|
||||
//$extra_params['excel'] = 'excel';
|
||||
//$extra_params['rowList'] = array(10, 20 ,30);
|
||||
|
||||
//With this function we can add actions to the jgrid (edit, delete, etc)
|
||||
$action_links = 'function action_formatter(cellvalue, options, rowObject) {
|
||||
return \' <a href="add_users_to_session.php?page=session_list.php&id_session=\'+options.rowId+\'">'.Display::return_icon('user_subscribe_session.png', get_lang('SubscribeUsersToSession'), '', ICON_SIZE_SMALL).'</a>'.
|
||||
'\';
|
||||
}';
|
||||
?>
|
||||
<script>
|
||||
function setSearchSelect(columnName) {
|
||||
$("#sessions").jqGrid('setColProp', columnName,
|
||||
{
|
||||
searchoptions:{
|
||||
dataInit:function(el){
|
||||
$("option[value='2']",el).attr("selected", "selected");
|
||||
setTimeout(function(){
|
||||
$(el).trigger('change');
|
||||
},1000);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(function() {
|
||||
<?php
|
||||
echo Display::grid_js('sessions', $url, $columns, $column_model, $extra_params, [], $action_links, true);
|
||||
?>
|
||||
|
||||
setSearchSelect("status");
|
||||
$("#sessions").jqGrid('navGrid','#sessions_pager', {edit:false,add:false,del:false},
|
||||
{height:280,reloadAfterSubmit:false}, // edit options
|
||||
{height:280,reloadAfterSubmit:false}, // add options
|
||||
{reloadAfterSubmit:false}, // del options
|
||||
{width:500} // search options
|
||||
);
|
||||
/*
|
||||
// add custom button to export the data to excel
|
||||
jQuery("#sessions").jqGrid('navButtonAdd','#sessions_pager',{
|
||||
caption:"",
|
||||
onClickButton : function () {
|
||||
jQuery("#sessions").excelExport();
|
||||
}
|
||||
});
|
||||
|
||||
jQuery('#sessions').jqGrid('navButtonAdd','#sessions_pager',{id:'pager_csv',caption:'',title:'Export To CSV',onClickButton : function(e)
|
||||
{
|
||||
try {
|
||||
jQuery("#sessions").jqGrid('excelExport',{tag:'csv', url:'grid.php'});
|
||||
} catch (e) {
|
||||
window.location= 'grid.php?oper=csv';
|
||||
}
|
||||
},buttonicon:'ui-icon-document'})
|
||||
*/
|
||||
//Adding search options
|
||||
var options = {
|
||||
'stringResult': true,
|
||||
'autosearch' : true,
|
||||
'searchOnEnter':false
|
||||
}
|
||||
jQuery("#sessions").jqGrid('filterToolbar',options);
|
||||
var sgrid = $("#sessions")[0];
|
||||
sgrid.triggerToolbar();
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
|
||||
if (api_is_platform_admin()) {
|
||||
echo '<div class="actions">';
|
||||
echo '<a href="'.api_get_path(WEB_CODE_PATH).'session/session_add.php">'.
|
||||
Display::return_icon('new_session.png', get_lang('AddSession'), '', ICON_SIZE_MEDIUM).'</a>';
|
||||
echo '<a href="'.api_get_path(WEB_CODE_PATH).'session/add_many_session_to_category.php">'.
|
||||
Display::return_icon('session_to_category.png', get_lang('AddSessionsInCategories'), '', ICON_SIZE_MEDIUM).'</a>';
|
||||
echo '<a href="'.api_get_path(WEB_CODE_PATH).'session/session_category_list.php">'.
|
||||
Display::return_icon('folder.png', get_lang('ListSessionCategory'), '', ICON_SIZE_MEDIUM).'</a>';
|
||||
echo '</div>';
|
||||
}
|
||||
echo Display::grid_html('sessions');
|
||||
Display::display_footer();
|
||||
1064
main/user/subscribe_user.php
Normal file
1064
main/user/subscribe_user.php
Normal file
File diff suppressed because it is too large
Load Diff
1080
main/user/user.php
Normal file
1080
main/user/user.php
Normal file
File diff suppressed because it is too large
Load Diff
187
main/user/user_export.php
Normal file
187
main/user/user_export.php
Normal file
@@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
$this_section = SECTION_COURSES;
|
||||
|
||||
api_protect_admin_script(true, true, null, true);
|
||||
|
||||
$export = [];
|
||||
$export['file_type'] = isset($_REQUEST['file_type']) ? $_REQUEST['file_type'] : null;
|
||||
$export['course_code'] = isset($_REQUEST['course_code']) ? $_REQUEST['course_code'] : null;
|
||||
$export['course_session'] = isset($_REQUEST['course_session']) ? $_REQUEST['course_session'] : null;
|
||||
$export['addcsvheader'] = isset($_REQUEST['addcsvheader']) ? $_REQUEST['addcsvheader'] : null;
|
||||
$export['session'] = isset($_REQUEST['session']) ? $_REQUEST['session'] : null;
|
||||
|
||||
// Database table definitions
|
||||
$course_table = Database::get_main_table(TABLE_MAIN_COURSE);
|
||||
$userTable = Database::get_main_table(TABLE_MAIN_USER);
|
||||
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
|
||||
$session_course_user_table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
|
||||
$session_user_table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
|
||||
|
||||
$fileType = $export['file_type'];
|
||||
$course_code = Database::escape_string($export['course_code']);
|
||||
$courseInfo = api_get_course_info($course_code);
|
||||
$courseId = isset($courseInfo['real_id']) ? $courseInfo['real_id'] : 0;
|
||||
|
||||
$courseSessionValue = explode(':', $export['course_session']);
|
||||
$courseSessionCode = '';
|
||||
$sessionId = 0;
|
||||
$courseSessionId = 0;
|
||||
$sessionInfo = [];
|
||||
|
||||
if (!empty($export['session'])) {
|
||||
$sessionInfo = api_get_session_info($export['session']);
|
||||
$sessionId = isset($sessionInfo['id']) ? $sessionInfo['id'] : 0;
|
||||
}
|
||||
|
||||
if (is_array($courseSessionValue) && isset($courseSessionValue[1])) {
|
||||
$courseSessionCode = $courseSessionValue[0];
|
||||
$sessionId = $courseSessionValue[1];
|
||||
$courseSessionInfo = api_get_course_info($courseSessionCode);
|
||||
$courseSessionId = $courseSessionInfo['real_id'];
|
||||
$sessionInfo = api_get_session_info($sessionId);
|
||||
}
|
||||
|
||||
$extraUrlJoin = '';
|
||||
$extraUrlCondition = '';
|
||||
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 ($access_url_id != -1) {
|
||||
$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
|
||||
u.id AS UserId,
|
||||
u.lastname AS LastName,
|
||||
u.firstname AS FirstName,
|
||||
u.email AS Email,
|
||||
u.username AS UserName,
|
||||
".(($_configuration['password_encryption'] != 'none') ? " " : "u.password AS Password, ")."
|
||||
u.auth_source AS AuthSource,
|
||||
u.status AS Status,
|
||||
u.official_code AS OfficialCode,
|
||||
u.phone AS Phone,
|
||||
u.registration_date AS RegistrationDate";
|
||||
if (strlen($course_code) > 0) {
|
||||
$sql .= " FROM $userTable u
|
||||
INNER JOIN $course_user_table cu
|
||||
ON (u.id = cu.user_id)
|
||||
$extraUrlJoin
|
||||
WHERE
|
||||
cu.c_id = $courseId AND
|
||||
cu.relation_type <> ".COURSE_RELATION_TYPE_RRHH."
|
||||
$extraUrlCondition
|
||||
ORDER BY lastname,firstname";
|
||||
$filename = 'export_users_'.$course_code.'_'.api_get_local_time();
|
||||
} elseif (strlen($courseSessionCode) > 0) {
|
||||
$sql .= " FROM $userTable u
|
||||
INNER JOIN $session_course_user_table scu
|
||||
ON (u.id = scu.user_id)
|
||||
$extraUrlJoin
|
||||
WHERE
|
||||
scu.c_id = $courseSessionId AND
|
||||
scu.session_id = $sessionId
|
||||
$extraUrlCondition
|
||||
ORDER BY lastname,firstname";
|
||||
$filename = 'export_users_'.$courseSessionCode.'_'.$sessionInfo['name'].'_'.api_get_local_time();
|
||||
} elseif ($sessionId > 0) {
|
||||
$sql .= " FROM $userTable u
|
||||
INNER JOIN $session_user_table su
|
||||
ON (u.id = su.user_id)
|
||||
$extraUrlJoin
|
||||
WHERE
|
||||
su.session_id = $sessionId
|
||||
$extraUrlCondition
|
||||
ORDER BY lastname,firstname";
|
||||
$filename = 'export_users_'.$sessionInfo['name'].'_'.api_get_local_time();
|
||||
} else {
|
||||
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 ($access_url_id != -1) {
|
||||
$sql .= " FROM $userTable u
|
||||
INNER JOIN $tbl_user_rel_access_url as user_rel_url
|
||||
ON (u.id = user_rel_url.user_id)
|
||||
WHERE access_url_id = $access_url_id
|
||||
ORDER BY lastname,firstname";
|
||||
}
|
||||
} else {
|
||||
$sql .= " FROM $userTable u ORDER BY lastname,firstname";
|
||||
}
|
||||
$filename = 'export_users_'.api_get_local_time();
|
||||
}
|
||||
$data = [];
|
||||
$extra_fields = UserManager::get_extra_fields(0, 0, 5, 'ASC', false);
|
||||
if ($export['addcsvheader'] == '1' && $export['file_type'] === 'csv') {
|
||||
if ($_configuration['password_encryption'] !== 'none') {
|
||||
$data[] = [
|
||||
'UserId',
|
||||
'LastName',
|
||||
'FirstName',
|
||||
'Email',
|
||||
'UserName',
|
||||
'AuthSource',
|
||||
'Status',
|
||||
'OfficialCode',
|
||||
'PhoneNumber',
|
||||
'RegistrationDate',
|
||||
];
|
||||
} else {
|
||||
$data[] = [
|
||||
'UserId',
|
||||
'LastName',
|
||||
'FirstName',
|
||||
'Email',
|
||||
'UserName',
|
||||
'Password',
|
||||
'AuthSource',
|
||||
'Status',
|
||||
'OfficialCode',
|
||||
'PhoneNumber',
|
||||
'RegistrationDate',
|
||||
];
|
||||
}
|
||||
|
||||
foreach ($extra_fields as $extra) {
|
||||
$data[0][] = $extra[1];
|
||||
}
|
||||
}
|
||||
|
||||
$res = Database::query($sql);
|
||||
while ($user = Database::fetch_array($res, 'ASSOC')) {
|
||||
$studentData = UserManager::get_extra_user_data(
|
||||
$user['UserId'],
|
||||
true,
|
||||
false
|
||||
);
|
||||
foreach ($studentData as $key => $value) {
|
||||
$key = substr($key, 6);
|
||||
if (is_array($value)) {
|
||||
$user[$key] = $value['extra_'.$key];
|
||||
} else {
|
||||
$user[$key] = $value;
|
||||
}
|
||||
}
|
||||
$data[] = $user;
|
||||
}
|
||||
|
||||
switch ($fileType) {
|
||||
case 'xml':
|
||||
Export::arrayToXml($data, $filename, 'Contact', 'Contacts');
|
||||
exit;
|
||||
break;
|
||||
case 'csv':
|
||||
Export::arrayToCsv($data, $filename);
|
||||
exit;
|
||||
case 'xls':
|
||||
Export::arrayToXls($data, $filename);
|
||||
exit;
|
||||
break;
|
||||
}
|
||||
172
main/user/user_import.php
Normal file
172
main/user/user_import.php
Normal file
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
/* For licensing terms, see /license.txt */
|
||||
|
||||
require_once __DIR__.'/../inc/global.inc.php';
|
||||
$this_section = SECTION_COURSES;
|
||||
|
||||
// notice for unauthorized people.
|
||||
api_protect_course_script(true);
|
||||
|
||||
if (api_get_setting('allow_user_course_subscription_by_course_admin') == 'false') {
|
||||
if (!api_is_platform_admin()) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we know if we're importing students or teachers into the course
|
||||
$userType = STUDENT;
|
||||
if (!empty($_REQUEST['type']) && $_REQUEST['type'] == COURSEMANAGER) {
|
||||
$userType = COURSEMANAGER;
|
||||
}
|
||||
|
||||
$tool_name = get_lang('ImportUsersToACourse');
|
||||
|
||||
$interbreadcrumb[] = ["url" => "user.php", "name" => get_lang("Users")];
|
||||
$interbreadcrumb[] = ["url" => "#", "name" => get_lang("ImportUsersToACourse")];
|
||||
|
||||
$form = new FormValidator('user_import', 'post', 'user_import.php');
|
||||
$form->addElement('header', $tool_name);
|
||||
$form->addElement('file', 'import_file', get_lang('ImportCSVFileLocation'));
|
||||
$form->addElement('checkbox', 'unsubscribe_users', null, get_lang('UnsubscribeUsersAlreadyAddedInCourse'));
|
||||
$form->addElement('hidden', 'type', $userType);
|
||||
$form->addButtonImport(get_lang('Import'));
|
||||
|
||||
$course_code = api_get_course_id();
|
||||
|
||||
if (empty($course_code)) {
|
||||
api_not_allowed(true);
|
||||
}
|
||||
|
||||
$session_id = api_get_session_id();
|
||||
$message = '';
|
||||
$user_to_show = [];
|
||||
$type = '';
|
||||
|
||||
if ($form->validate()) {
|
||||
if (isset($_FILES['import_file']['size']) && $_FILES['import_file']['size'] !== 0) {
|
||||
$unsubscribe_users = isset($_POST['unsubscribe_users']) ? true : false;
|
||||
//@todo : csvToArray deprecated
|
||||
$users = Import::csvToArray($_FILES['import_file']['tmp_name']);
|
||||
$invalid_users = [];
|
||||
$clean_users = [];
|
||||
|
||||
if (!empty($users)) {
|
||||
$empty_line = 0;
|
||||
foreach ($users as $user_data) {
|
||||
$user_id = null;
|
||||
$user_data = array_change_key_case($user_data, CASE_LOWER);
|
||||
|
||||
// Checking "username" field
|
||||
if (isset($user_data['username']) && !empty($user_data['username'])) {
|
||||
$user_id = UserManager::get_user_id_from_username($user_data['username']);
|
||||
}
|
||||
|
||||
// Checking "id" field
|
||||
if (isset($user_data['id']) && !empty($user_data['id'])) {
|
||||
$user_id = $user_data['id'];
|
||||
}
|
||||
|
||||
if (UserManager::is_user_id_valid($user_id)) {
|
||||
$clean_users[] = $user_id;
|
||||
} else {
|
||||
$invalid_users[] = $user_data;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($invalid_users)) {
|
||||
$type = 'confirmation';
|
||||
$message = get_lang('ListOfUsersSubscribedToCourse');
|
||||
|
||||
if ($unsubscribe_users) {
|
||||
$current_user_list = CourseManager::get_user_list_from_course_code(
|
||||
$course_code,
|
||||
$session_id,
|
||||
null,
|
||||
null,
|
||||
$userType
|
||||
);
|
||||
if (!empty($current_user_list)) {
|
||||
$user_ids = [];
|
||||
foreach ($current_user_list as $user) {
|
||||
if ($userType == COURSEMANAGER) {
|
||||
if (CourseManager::is_course_teacher($user['user_id'], $course_code)) {
|
||||
$user_ids[] = $user['user_id'];
|
||||
}
|
||||
} else {
|
||||
if (!CourseManager::is_course_teacher($user['user_id'], $course_code)) {
|
||||
$user_ids[] = $user['user_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
CourseManager::unsubscribe_user($user_ids, $course_code, $session_id);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($clean_users as $userId) {
|
||||
$userInfo = api_get_user_info($userId);
|
||||
CourseManager::subscribeUser($userId, $course_code, $userType, $session_id);
|
||||
if (empty($session_id)) {
|
||||
//just to make sure
|
||||
if (CourseManager::is_user_subscribed_in_course($userId, $course_code)) {
|
||||
$user_to_show[] = $userInfo['complete_name'];
|
||||
}
|
||||
} else {
|
||||
//just to make sure
|
||||
if (CourseManager::is_user_subscribed_in_course($userId, $course_code, true, $session_id)) {
|
||||
$user_to_show[] = $userInfo['complete_name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$message = get_lang('CheckUsersWithId');
|
||||
$type = 'warning';
|
||||
foreach ($invalid_users as $invalid_user) {
|
||||
$user_to_show[] = $invalid_user;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Display::display_header();
|
||||
|
||||
if (!empty($message)) {
|
||||
if (!empty($user_to_show)) {
|
||||
$userMessage = null;
|
||||
foreach ($user_to_show as $user) {
|
||||
if (!is_array($user)) {
|
||||
$user = [$user];
|
||||
}
|
||||
$user = array_filter($user);
|
||||
$userMessage .= implode(', ', $user)."<br />";
|
||||
}
|
||||
if ($type == 'confirmation') {
|
||||
echo Display::return_message($message.': <br />'.$userMessage, 'confirm', false);
|
||||
} else {
|
||||
echo Display::return_message($message.': <br />'.$userMessage, 'warning', false);
|
||||
}
|
||||
} else {
|
||||
$empty_line_msg = ($empty_line == 0) ? get_lang('ErrorsWhenImportingFile') : get_lang('ErrorsWhenImportingFile').': '.get_lang('EmptyHeaderLine');
|
||||
echo Display::return_message($empty_line_msg, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
$form->display();
|
||||
|
||||
echo get_lang('CSVMustLookLike');
|
||||
echo '<blockquote><pre>
|
||||
username
|
||||
jdoe
|
||||
jmontoya
|
||||
</pre>
|
||||
</blockquote>';
|
||||
|
||||
echo get_lang('Or');
|
||||
echo '<blockquote><pre>
|
||||
id
|
||||
23
|
||||
1337
|
||||
</pre>
|
||||
</blockquote>';
|
||||
|
||||
Display::display_footer();
|
||||
Reference in New Issue
Block a user