Adding multiple URL support for classes (user group) new DB table added "access_url_rel_usergroup" if table does not exists everthing works as usual. Option disabled for BC. see BT#6915

1.9.x
Julio Montoya 12 years ago
parent ac7f651af0
commit 5cfe24fc4d
  1. 128
      main/admin/access_url_add_usergroup_to_url.php
  2. 2
      main/admin/access_url_add_users_to_url.php
  3. 351
      main/admin/access_url_edit_usergroup_to_url.php
  4. 124
      main/admin/access_urls.php
  5. 18
      main/inc/ajax/model.ajax.php
  6. 1
      main/inc/lib/database.constants.inc.php
  7. 268
      main/inc/lib/urlmanager.lib.php
  8. 416
      main/inc/lib/usergroup.lib.php

@ -0,0 +1,128 @@
<?php
/* For licensing terms, see /license.txt */
/**
* This script allows platform admins to add users to urls.
* It displays a list of users and a list of courses;
* you can select multiple users and courses and then click on
* @package chamilo.admin
* @author Julio Montoya <gugli100@gmail.com>
*/
// name of the language file that needs to be included
$language_file = 'admin';
$cidReset = true;
require_once '../inc/global.inc.php';
require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php';
require_once api_get_path(LIBRARY_PATH).'usergroup.lib.php';
$this_section = SECTION_PLATFORM_ADMIN;
api_protect_global_admin_script();
if (!api_get_multiple_access_url()) {
header('Location: index.php');
exit;
}
$userGroup = new UserGroup();
$form_sent = 0;
$firstLetterUserGroup = null;
$courses = array();
$url_list = array();
$tbl_access_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$tbl_access_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
$tool_name = get_lang('AddUserGroupToURL');
$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
$interbreadcrumb[] = array ('url' => 'access_urls.php', 'name' => get_lang('MultipleAccessURLs'));
Display::display_header($tool_name);
echo '<div class="actions">';
echo Display::url(
Display::return_icon('edit.png', get_lang('EditUserGroupToURL'), ''),
api_get_path(WEB_CODE_PATH).'admin/access_url_edit_usergroup_to_url.php'
);
echo '</div>';
api_display_tool_title($tool_name);
if (isset($_POST['form_sent']) && $_POST['form_sent']) {
$form_sent = $_POST['form_sent'];
$userGroups = is_array($_POST['user_group_list']) ? $_POST['user_group_list'] : array() ;
$urlList = is_array($_POST['url_list']) ? $_POST['url_list'] : array() ;
$firstLetterUserGroup = $_POST['first_letter_user_group'];
if ($form_sent == 1) {
if (count($userGroups) == 0 || count($urlList) == 0) {
Display :: display_error_message(get_lang('AtLeastOneUserGroupAndOneURL'));
} else {
UrlManager::addUserGroupListToUrl($userGroups, $urlList);
Display::display_confirmation_message(get_lang('UserGroupBelongURL'));
}
}
}
$firstLetterUser = null;
if ($userGroup->getTotalCount() > 1000) {
//if there are too much num_courses to gracefully handle with the HTML select list,
// assign a default filter on users names
$firstLetterUser = 'A';
}
$dbUserGroups = $userGroup->filterByFirstLetter($firstLetterUserGroup);
$sql = "SELECT id, url FROM $tbl_access_url WHERE active = 1 ORDER BY url";
$result = Database::query($sql);
$db_urls = Database::store_result($result);
?>
<form name="formulaire" method="post" action="<?php echo api_get_self(); ?>" style="margin:0px;">
<input type="hidden" name="form_sent" value="1"/>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tr>
<td width="40%" align="center">
<b><?php echo get_lang('UserGroupList'); ?></b>
<br/><br/>
<?php echo get_lang('FirstLetter'); ?> :
<select name="first_letter_user_group" onchange="javascript:document.formulaire.form_sent.value='2'; document.formulaire.submit();">
<option value="">--</option>
<?php
echo Display::get_alphabet_options($firstLetterUserGroup);
echo Display::get_numeric_options(0, 9, $firstLetterUserGroup);
?>
</select>
</td>
<td width="20%">&nbsp;</td>
<td width="40%" align="center">
<b><?php echo get_lang('URLList'); ?> :</b>
</td>
</tr>
<tr>
<td width="40%" align="center">
<select name="user_group_list[]" multiple="multiple" size="20" style="width:400px;">
<?php foreach ($dbUserGroups as $item) { ?>
<option value="<?php echo $item['id']; ?>" <?php if (in_array($item['id'], $courses)) echo 'selected="selected"'; ?>><?php echo $item['name']; ?>
</option>
<?php } ?>
</select>
</td>
<td width="20%" valign="middle" align="center">
<button type="submit" class="add"> <?php echo get_lang('AddUserGroupToThatURL'); ?> </button>
</td>
<td width="40%" align="center">
<select name="url_list[]" multiple="multiple" size="20" style="width:300px;">
<?php foreach ($db_urls as $url_obj) { ?>
<option value="<?php echo $url_obj['id']; ?>" <?php if (in_array($url_obj['id'], $url_list)) echo 'selected="selected"'; ?>><?php echo $url_obj['url']; ?>
</option>
<?php } ?>
</select>
</td>
</tr>
</table>
</form>
<?php
Display :: display_footer();

@ -58,7 +58,7 @@ if ($_POST['form_sent']) {
}
if ($form_sent == 1) {
if ( count($users) == 0 || count($url_list) == 0) {
if (count($users) == 0 || count($url_list) == 0) {
Display :: display_error_message(get_lang('AtLeastOneUserAndOneURL'));
} else {
UrlManager::add_users_to_urls($users,$url_list);

@ -0,0 +1,351 @@
<?php
/* For licensing terms, see /license.txt */
/**
* @package chamilo.admin
* @author Julio Montoya <gugli100@gmail.com>
*/
// name of the language file that needs to be included
$language_file = 'admin';
// resetting the course id
$cidReset = true;
require_once '../inc/global.inc.php';
require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php';
require_once api_get_path(LIBRARY_PATH).'usergroup.lib.php';
require_once api_get_path(LIBRARY_PATH).'xajax/xajax.inc.php';
$xajax = new xajax();
$xajax->registerFunction(array('searchUserGroupAjax', 'UserGroup', 'searchUserGroupAjax'));
$userGroup = new UserGroup();
// Setting the section (for the tabs)
$this_section = SECTION_PLATFORM_ADMIN;
// Access restrictions
api_protect_global_admin_script();
if (!api_get_multiple_access_url()) {
header('Location: index.php');
exit;
}
// Database Table Definitions
$tbl_access_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$tbl_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL);
// setting breadcrumbs
$tool_name = get_lang('EditUserGroupToURL');
$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
$interbreadcrumb[] = array ('url' => 'access_urls.php', 'name' => get_lang('MultipleAccessURLs'));
$add_type = 'multiple';
if (isset($_REQUEST['add_type']) && $_REQUEST['add_type'] != '') {
$add_type = Security::remove_XSS($_REQUEST['add_type']);
}
$access_url_id = 1;
if (isset($_REQUEST['access_url_id']) && $_REQUEST['access_url_id'] != '') {
$access_url_id = Security::remove_XSS($_REQUEST['access_url_id']);
}
$xajax->processRequests();
$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/');
$htmlHeadXtra[] = '
<script>
function add_user_to_url(code, content) {
document.getElementById("course_to_add").value = "";
document.getElementById("ajax_list_courses").innerHTML = "";
destination = document.getElementById("destination_users");
destination.options[destination.length] = new Option(content,code);
destination.selectedIndex = -1;
sortOptions(destination.options);
}
function send() {
if (document.formulaire.access_url_id.value!=0) {
document.formulaire.form_sent.value=0;
document.formulaire.add_type.value=\''.$add_type.'\';
document.formulaire.submit();
}
}
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;
}
}
}
</script>';
$form_sent=0;
$errorMsg='';
$UserList=$SessionList=array();
$users=$sessions=array();
if (isset($_POST['form_sent']) && $_POST['form_sent']) {
$form_sent = $_POST['form_sent'];
$course_list = $_POST['course_list'];
if (!is_array($course_list)) {
$course_list = array();
}
if ($form_sent == 1) {
if ($access_url_id == 0) {
header('Location: access_url_edit_users_to_url.php?action=show_message&message='.get_lang('SelectURL'));
} elseif (is_array($course_list)) {
UrlManager::update_urls_rel_usergroup($course_list, $access_url_id);
header('Location: access_urls.php?action=show_message&message='.get_lang('Updated'));
}
exit;
}
}
Display::display_header($tool_name);
echo '<div class="actions">';
echo Display::url(
Display::return_icon('view_more_stats.gif', get_lang('AddUserToURL'), ''),
api_get_path(WEB_CODE_PATH).'admin/access_url_add_usergroup_to_url.php'
);
echo '</div>';
api_display_tool_title($tool_name);
if ($_GET['action'] == 'show_message') {
Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['message'])));
}
$noUserGroupList = $userGroupList = array();
$ajax_search = $add_type == 'unique' ? true : false;
if ($ajax_search) {
$userGroups = UrlManager::get_url_rel_usergroup_data($access_url_id);
foreach ($userGroups as $item) {
$userGroupList[$item['id']] = $item;
}
} else {
$userGroups = UrlManager::get_url_rel_usergroup_data();
foreach ($userGroups as $item) {
if ($item['access_url_id'] == $access_url_id) {
$userGroupList[$item['id']] = $item ;
}
}
$noUserGroupList = $userGroup->getUserGroupNotInList(array_keys($userGroupList));
}
if ($add_type == 'multiple') {
$link_add_type_unique = '<a href="'.api_get_self().'?add_type=unique&access_url_id='.$access_url_id.'">'.get_lang('SessionAddTypeUnique').'</a>';
$link_add_type_multiple = get_lang('SessionAddTypeMultiple');
} else {
$link_add_type_unique = get_lang('SessionAddTypeUnique');
$link_add_type_multiple = '<a href="'.api_get_self().'?add_type=multiple&access_url_id='.$access_url_id.'">'.get_lang('SessionAddTypeMultiple').'</a>';
}
$url_list = UrlManager::get_url_data();
?>
<div style="text-align: left;">
<?php echo $link_add_type_unique ?>&nbsp;|&nbsp;<?php echo $link_add_type_multiple ?>
</div>
<br /><br />
<form
name="formulaire"
method="post"
action="<?php echo api_get_self(); ?>"
style="margin:0px;" <?php if ($ajax_search){ echo ' onsubmit="valide();"'; } ?>
>
<?php echo get_lang('SelectUrl').' : '; ?>
<select name="access_url_id" onchange="javascript:send();">
<option value="0">-- <?php echo get_lang('SelectUrl')?> -- </option>
<?php
$url_selected = '';
foreach ($url_list as $url_obj) {
$checked = '';
if (!empty($access_url_id)) {
if ($url_obj[0] == $access_url_id) {
$checked = 'selected=true';
$url_selected=$url_obj[1];
}
}
if ($url_obj['active']==1) { ?>
<option <?php echo $checked;?> value="<?php echo $url_obj[0]; ?>"> <?php echo $url_obj[1]; ?>
</option>
<?php
}
}
?>
</select>
<br /><br />
<input type="hidden" name="form_sent" value="1" />
<input type="hidden" name="add_type" value = "<?php echo $add_type ?>" />
<?php
if (!empty($errorMsg)) {
Display::display_normal_message($errorMsg); //main API
}
?>
<table border="0" cellpadding="5" cellspacing="0" width="100%">
<!-- Users -->
<tr>
<td align="center"><b><?php echo get_lang('UserGroupListInPlatform') ?> :</b>
</td>
<td></td>
<td align="center"><b><?php echo get_lang('UserGroupListIn').' '.$url_selected; ?></b></td>
</tr>
<tr>
<td align="center">
<div id="content_source">
<?php if ($ajax_search) { ?>
<input type="text" id="course_to_add" onkeyup="xajax_searchUserGroupAjax(this.value,document.formulaire.access_url_id.options[document.formulaire.access_url_id.selectedIndex].value)" />
<div id="ajax_list_courses"></div>
<?php } else { ?>
<select id="origin_users" name="no_course_list[]" multiple="multiple" size="15" style="width:380px;">
<?php
foreach ($noUserGroupList as $noItem) {
?>
<option value="<?php echo $noItem['id']; ?>">
<?php echo $noItem['name']; ?>
</option>
<?php
}
?>
</select>
<?php
}
?>
</div>
</td>
<td width="10%" valign="middle" align="center">
<?php
if ($ajax_search) {
?>
<button class="arrowl" type="button" onclick="remove_item(document.getElementById('destination_users'))" ></button>
<?php
} else {
?>
<button class="arrowr" type="button" onclick="moveItem(document.getElementById('origin_users'), document.getElementById('destination_users'))" ></button>
<br /><br />
<button class="arrowl" type="button" onclick="moveItem(document.getElementById('destination_users'), document.getElementById('origin_users'))" ></button>
<?php
}
?>
<br /><br /><br /><br /><br /><br />
</td>
<td align="center">
<select id="destination_users" name="course_list[]" multiple="multiple" size="15" style="width:380px;">
<?php
foreach($userGroupList as $item) {
?>
<option value="<?php echo $item['id']; ?>">
<?php echo $item['name']; ?>
</option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<br />
<?php
if(isset($_GET['add']))
echo '<button class="save" onclick="valide()" >'.get_lang('AddUserGroupToURL').'</button>';
else
echo '<button class="save" onclick="valide()" >'.get_lang('EditUserGroupToURL').'</button>';
?>
</td>
</tr>
</table>
</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;
}
}
}
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
Display::display_footer();

@ -24,6 +24,7 @@ $tool_name = get_lang('MultipleAccessURLs');
Display :: display_header($tool_name);
require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php';
require_once api_get_path(LIBRARY_PATH).'usergroup.lib.php';
$my_user_url_list = api_get_access_url_from_user(api_get_user_id());
$current_access_url_id = api_get_current_access_url_id();
@ -31,49 +32,49 @@ $url_list = UrlManager::get_url_data();
// Actions
if (isset ($_GET['action'])) {
if ($_GET['action'] == 'show_message')
Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['message'])));
$check = Security::check_token('get');
if ($check) {
$url_id=Database::escape_string($_GET['url_id']);
switch ($_GET['action']) {
case 'delete_url' :
$result = UrlManager::delete($url_id);
if ($result) {
Display :: display_normal_message(get_lang('URLDeleted'));
} else {
Display :: display_error_message(get_lang('CannotDeleteURL'));
}
break;
case 'lock' :
UrlManager::set_url_status('lock',$url_id);
Display :: display_normal_message(get_lang('URLInactive'));
break;
case 'unlock';
UrlManager::set_url_status('unlock',$url_id);
Display :: display_normal_message(get_lang('URLActive'));
break;
case 'register';
// we are going to register the admin
if(api_is_platform_admin()) {
if($current_access_url_id!=-1) {
$url_str = '';
foreach($url_list as $my_url) {
if (!in_array($my_url['id'],$my_user_url_list)){
UrlManager::add_user_to_url(api_get_user_id(),$my_url['id']);
$url_str.=$my_url['url'].' <br />';
}
}
Display :: display_normal_message(get_lang('AdminUserRegisteredToThisURL').': '.$url_str.'<br />',false);
}
}
break;
}
}
Security::clear_token();
if ($_GET['action'] == 'show_message') {
Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['message'])));
}
$check = Security::check_token('get');
if ($check) {
$url_id = Database::escape_string($_GET['url_id']);
switch ($_GET['action']) {
case 'delete_url':
$result = UrlManager::delete($url_id);
if ($result) {
Display :: display_normal_message(get_lang('URLDeleted'));
} else {
Display :: display_error_message(get_lang('CannotDeleteURL'));
}
break;
case 'lock':
UrlManager::set_url_status('lock', $url_id);
Display::display_normal_message(get_lang('URLInactive'));
break;
case 'unlock':
UrlManager::set_url_status('unlock', $url_id);
Display::display_normal_message(get_lang('URLActive'));
break;
case 'register':
// we are going to register the admin
if (api_is_platform_admin()) {
if ($current_access_url_id!=-1) {
$url_str = '';
foreach ($url_list as $my_url) {
if (!in_array($my_url['id'], $my_user_url_list)) {
UrlManager::add_user_to_url(api_get_user_id(), $my_url['id']);
$url_str.=$my_url['url'].' <br />';
}
}
Display :: display_normal_message(get_lang('AdminUserRegisteredToThisURL').': '.$url_str.'<br />',false);
}
}
break;
}
}
Security::clear_token();
}
$parameters['sec_token'] = Security::get_token();
@ -82,10 +83,10 @@ $parameters['sec_token'] = Security::get_token();
$url_string='';
$my_user_url_list = api_get_access_url_from_user(api_get_user_id());
foreach($url_list as $my_url) {
if (!in_array($my_url['id'],$my_user_url_list)){
$url_string.=$my_url['url'].' <br />';
}
foreach ($url_list as $my_url) {
if (!in_array($my_url['id'], $my_user_url_list)){
$url_string.=$my_url['url'].' <br />';
}
}
if(!empty($url_string)) {
Display :: display_warning_message(get_lang('AdminShouldBeRegisterInSite').'<br />'.$url_string,false);
@ -93,12 +94,12 @@ if(!empty($url_string)) {
// checking the current installation
if ($current_access_url_id==-1) {
Display :: display_warning_message(get_lang('URLNotConfiguredPleaseChangedTo').': '.api_get_path(WEB_PATH));
Display::display_warning_message(get_lang('URLNotConfiguredPleaseChangedTo').': '.api_get_path(WEB_PATH));
} elseif(api_is_platform_admin()) {
$quant= UrlManager::relation_url_user_exist(api_get_user_id(),$current_access_url_id);
if ($quant==0) {
Display :: display_warning_message('<a href="'.api_get_self().'?action=register&sec_token='.$parameters['sec_token'].'">'.get_lang('ClickToRegisterAdmin').'</a>',false);
}
$quant= UrlManager::relation_url_user_exist(api_get_user_id(),$current_access_url_id);
if ($quant==0) {
Display :: display_warning_message('<a href="'.api_get_self().'?action=register&sec_token='.$parameters['sec_token'].'">'.get_lang('ClickToRegisterAdmin').'</a>',false);
}
}
// action menu
@ -106,17 +107,21 @@ echo '<div class="actions">';
echo Display::url(Display::return_icon('new_link.png', get_lang('AddUrl'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit.php');
echo Display::url(Display::return_icon('user.png', get_lang('ManageUsers'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit_users_to_url.php');
echo Display::url(Display::return_icon('course.png', get_lang('ManageCourses'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit_courses_to_url.php');
//echo Display::url(Display::return_icon('session.png', get_lang('ManageSessions'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit_sessions_to_url.php');
//echo Display::url(Display::return_icon('session.png', get_lang('ManageSessions'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit_sessions_to_url.php');
$userGroup = new Usergroup();
if ($userGroup->getUseMultipleUrl()) {
echo Display::url(Display::return_icon('class.png', get_lang('ManageUserGroup'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'admin/access_url_edit_usergroup_to_url.php');
}
echo '</div>';
//$table = new SortableTable('urls', 'url_count_mask', 'get_url_data_mask',2);
$sortable_data = UrlManager::get_url_data();
$urls = array();
foreach($sortable_data as $row) {
foreach ($sortable_data as $row) {
//title
$url = Display::url($row['url'], $row['url'], array('target'=>'_blank'));
$url = Display::url($row['url'], $row['url'], array('target'=>'_blank'));
$description = $row['description'];
//Status
$active = $row['active'];
if ($active=='1') {
@ -132,13 +137,13 @@ foreach($sortable_data as $row) {
$status = Display::return_icon($image.'.gif', get_lang(ucfirst($action)));
} else {
$status = '<a href="access_urls.php?action='.$action.'&amp;url_id='.$row['id'].'&amp;sec_token='.$_SESSION['sec_token'].'">'.Display::return_icon($image.'.gif', get_lang(ucfirst($action))).'</a>';
}
//Actions
}
// Actions
$url_id = $row['id'];
$actions = Display::url(Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL), "access_url_edit.php?url_id=$url_id");
if ($url_id != '1') {
$actions .= '<a href="access_urls.php?action=delete_url&amp;url_id='.$url_id.'&amp;sec_token='.$_SESSION['sec_token'].'" onclick="javascript:if(!confirm('."'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES,$charset))."'".')) return false;">'.Display::return_icon('delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL).'</a>';
}
}
$urls[] = array($url, $description, $status, $actions);
}
@ -152,5 +157,4 @@ $table->set_header(2, get_lang('Active'));
$table->set_header(3, get_lang('Modify'), false);
$table->display();
/* FOOTER */
Display :: display_footer();

@ -493,23 +493,7 @@ switch ($action) {
break;
case 'get_usergroups':
$columns = array('name', 'users', 'courses','sessions','actions');
$result = Database::select('*', $obj->table, array('order'=>"name $sord", 'LIMIT'=> "$start , $limit"));
$new_result = array();
if (!empty($result)) {
foreach ($result as $group) {
$group['sessions'] = count($obj->get_sessions_by_usergroup($group['id']));
$group['courses'] = count($obj->get_courses_by_usergroup($group['id']));
$group['users'] = count($obj->get_users_by_usergroup($group['id']));
$new_result[] = $group;
}
$result = $new_result;
}
$columns = array('name', 'users', 'courses','sessions');
if(!in_array($sidx, $columns)) {
$sidx = 'name';
}
//Multidimensional sort
msort($result, $sidx);
$result = $obj->getUsergroupsPagination($sidx, $sord, $start, $limit);
break;
case 'get_extra_fields':
$obj = new ExtraField($type);

@ -82,6 +82,7 @@ define('TABLE_MAIN_ACCESS_URL', 'access_url');
define('TABLE_MAIN_ACCESS_URL_REL_USER', 'access_url_rel_user');
define('TABLE_MAIN_ACCESS_URL_REL_COURSE', 'access_url_rel_course');
define('TABLE_MAIN_ACCESS_URL_REL_SESSION', 'access_url_rel_session');
define('TABLE_MAIN_ACCESS_URL_REL_USERGROUP', 'access_url_rel_usergroup');
// Global calendar
define('TABLE_MAIN_SYSTEM_CALENDAR', 'sys_calendar');

@ -7,7 +7,7 @@
* @package chamilo.library
*/
/**
* @package chamilo.library
* Class UrlManager
*/
class UrlManager
{
@ -19,7 +19,6 @@ class UrlManager
* @param string The URL of the site
* @param string The description of the site
* @param int is active or not
* @param int the user_id of the owner
* @return boolean if success
*/
public static function add($url, $description, $active)
@ -36,47 +35,45 @@ class UrlManager
return $result;
}
/**
* Updates an URL access
* @author Julio Montoya <gugli100@gmail.com>,
*
* @param int The url id
* @param string The description of the site
* @param int is active or not
* @param int the user_id of the owner
* @return boolean if success
*/
/**
* Updates an URL access
* @author Julio Montoya <gugli100@gmail.com>,
*
* @param int The url id
* @param string The description of the site
* @param int is active or not
* @return boolean if success
*/
public static function udpate($url_id, $url, $description, $active)
{
$url_id = intval($url_id);
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$tms = time();
$sql = "UPDATE $table_access_url
$url_id = intval($url_id);
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$tms = time();
$sql = "UPDATE $table_access_url
SET url = '".Database::escape_string($url)."',
description = '".Database::escape_string($description)."',
active = '".Database::escape_string($active)."',
created_by = '".api_get_user_id()."',
tms = FROM_UNIXTIME(".$tms.")
WHERE id = '$url_id'";
$result = Database::query($sql);
return $result;
$result = Database::query($sql);
return $result;
}
/**
* Deletes an url
* @author Julio Montoya
* @param int url id
* @return boolean true if success
* */
/**
* Deletes an url
* @author Julio Montoya
* @param int url id
* @return boolean true if success
* */
public static function delete($id)
{
$id = intval($id);
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$sql= "DELETE FROM $table_access_url WHERE id = ".$id;
$result = Database::query($sql);
return $result;
}
{
$id = intval($id);
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$sql= "DELETE FROM $table_access_url WHERE id = ".$id;
$result = Database::query($sql);
return $result;
}
/**
* @param string $url
@ -84,7 +81,7 @@ class UrlManager
*/
public static function url_exist($url)
{
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$sql = "SELECT id FROM $table_access_url WHERE url = '".Database::escape_string($url)."' ";
$res = Database::query($sql);
$num = Database::num_rows($res);
@ -151,7 +148,8 @@ class UrlManager
return $row;
}
/** Gets the inner join of users and urls table
/**
* Gets the inner join of users and urls table
* @author Julio Montoya
* @param int access url id
* @param string $order_by
@ -180,22 +178,22 @@ class UrlManager
return $users;
}
/**
* Gets the inner join of access_url and the course table
*
*
* @author Julio Montoya
* @param int access url id
* @return array Database::store_result of the result
**/
public static function get_url_rel_course_data($access_url_id='')
public static function get_url_rel_course_data($access_url_id = null)
{
$where ='';
$table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
if (!empty($access_url_id))
$where ="WHERE $table_url_rel_course.access_url_id = ".Database::escape_string($access_url_id);
if (!empty($access_url_id)) {
$where ="WHERE $table_url_rel_course.access_url_id = ".intval($access_url_id);
}
$sql = "SELECT course_code, title, access_url_id
FROM $tbl_course u
@ -216,14 +214,14 @@ class UrlManager
* @return array Database::store_result of the result
*
**/
public static function get_url_rel_session_data($access_url_id='')
public static function get_url_rel_session_data($access_url_id = null)
{
$where ='';
$table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
if (!empty($access_url_id))
$where ="WHERE $table_url_rel_session.access_url_id = ".Database::escape_string($access_url_id);
$where ="WHERE $table_url_rel_session.access_url_id = ".intval($access_url_id);
$sql="SELECT id, name, access_url_id
FROM $tbl_session u
@ -237,6 +235,35 @@ class UrlManager
return $sessions;
}
/**
* Gets the inner join of access_url and the usergroup table
*
* @author Julio Montoya
* @param int access url id
* @return array Database::store_result of the result
**/
public static function get_url_rel_usergroup_data($access_url_id = null)
{
$where = '';
$table_url_rel_usergroup = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$table_user_group = Database::get_main_table(TABLE_USERGROUP);
if (!empty($access_url_id)) {
$where ="WHERE $table_url_rel_usergroup.access_url_id = ".intval($access_url_id);
}
$sql = "SELECT id, name, access_url_id
FROM $table_user_group u
INNER JOIN $table_url_rel_usergroup
ON $table_url_rel_usergroup.usergroup_id = u.id
$where
ORDER BY name";
$result = Database::query($sql);
$courses = Database::store_result($result);
return $courses;
}
/**
* Sets the status of an URL 1 or 0
* @author Julio Montoya
@ -288,14 +315,33 @@ class UrlManager
{
$table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql= "SELECT course_code FROM $table_url_rel_course
WHERE access_url_id = ".Database::escape_string($url_id)." AND course_code = '".Database::escape_string($course_id)."'";
WHERE access_url_id = ".Database::escape_string($url_id)." AND
course_code = '".Database::escape_string($course_id)."'";
$result = Database::query($sql);
$num = Database::num_rows($result);
return $num;
}
/**
* Checks the relationship between an URL and a UserGr
* oup (return the num_rows)
* @author Julio Montoya
* @param int $userGroupId
* @param int $urlId
* @return boolean true if success
* */
public static function relation_url_usergroup_exist($userGroupId, $urlId)
{
$table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$sql= "SELECT usergroup_id FROM $table
WHERE access_url_id = ".Database::escape_string($urlId)." AND
usergroup_id = ".Database::escape_string($userGroupId);
$result = Database::query($sql);
$num = Database::num_rows($result);
return $num;
}
/**
/**
* Checks the relationship between an URL and a Session (return the num_rows)
* @author Julio Montoya
* @param int user id
@ -304,7 +350,7 @@ class UrlManager
* */
public static function relation_url_session_exist($session_id, $url_id)
{
$table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$table_url_rel_session= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$session_id = intval($session_id);
$url_id = intval($url_id);
$sql= "SELECT session_id FROM $table_url_rel_session WHERE access_url_id = ".Database::escape_string($url_id)." AND session_id = ".Database::escape_string($session_id);
@ -313,7 +359,6 @@ class UrlManager
return $num;
}
/**
* Add a group of users into a group of URLs
* @author Julio Montoya
@ -323,8 +368,8 @@ class UrlManager
* */
public static function add_users_to_urls($user_list, $url_list)
{
$table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$result_array=array();
$table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$result_array = array();
if (is_array($user_list) && is_array($url_list)){
foreach ($url_list as $url_id) {
@ -334,10 +379,11 @@ class UrlManager
$sql = "INSERT INTO $table_url_rel_user
SET user_id = ".Database::escape_string($user_id).", access_url_id = ".Database::escape_string($url_id);
$result = Database::query($sql);
if($result)
$result_array[$url_id][$user_id]=1;
else
if ($result) {
$result_array[$url_id][$user_id]=1;
} else {
$result_array[$url_id][$user_id]=0;
}
}
}
}
@ -377,11 +423,58 @@ class UrlManager
return $result_array;
}
/**
* Add a group of user group into a group of URLs
* @author Julio Montoya
* @param array of course ids
* @param array of url_ids
* @return array
**/
public static function addUserGroupListToUrl($userGroupList, $urlList)
{
$resultArray = array();
if (is_array($userGroupList) && is_array($urlList)) {
foreach ($urlList as $urlId) {
foreach ($userGroupList as $userGroupId) {
$count = UrlManager::relation_url_usergroup_exist($userGroupId, $urlId);
if ($count == 0) {
$result = self::addUserGroupToUrl($userGroupId, $urlId);
if ($result) {
$resultArray[$urlId][$userGroupId] = 1;
} else {
$resultArray[$urlId][$userGroupId] = 0;
}
}
}
}
}
return $resultArray;
}
/**
* @param int $userGroupId
* @param int $urlId
* @return int
*/
public static function addUserGroupToUrl($userGroupId, $urlId)
{
$urlRelUserGroupTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$sql = "INSERT INTO $urlRelUserGroupTable
SET
usergroup_id = '".intval($userGroupId)."',
access_url_id = ".intval($urlId);
Database::query($sql);
return Database::insert_id();
}
/**
* Add a group of sessions into a group of URLs
* @author Julio Montoya
* @param array of session ids
* @param array of url_ids
* @return array
* */
public static function add_sessions_to_urls($session_list,$url_list)
{
@ -417,7 +510,7 @@ class UrlManager
* */
public static function add_user_to_url($user_id, $url_id = 1)
{
$table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
if (empty($url_id)) $url_id = 1;
$count = UrlManager::relation_url_user_exist($user_id,$url_id);
$result = true;
@ -435,8 +528,10 @@ class UrlManager
*/
public static function add_course_to_url($course_code, $url_id=1)
{
$table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
if (empty($url_id)) $url_id=1;
$table_url_rel_course= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
if (empty($url_id)) {
$url_id = 1;
}
$count = UrlManager::relation_url_course_exist($course_code,$url_id);
if (empty($count)) {
$sql = "INSERT INTO $table_url_rel_course
@ -470,7 +565,6 @@ class UrlManager
return $result;
}
/**
* Deletes an url and user relationship
* @author Julio Montoya
@ -505,7 +599,25 @@ class UrlManager
return $result;
}
/**
/**
* Deletes an url and $userGroup relationship
* @author Julio Montoya
* @param int $userGroupId
* @param int $urlId
* @return boolean true if success
* */
public static function delete_url_rel_usergroup($userGroupId, $urlId)
{
$table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$sql= "DELETE FROM $table
WHERE usergroup_id = '".intval($userGroupId)."' AND
access_url_id=".intval($urlId)." ";
$result = Database::query($sql);
return $result;
}
/**
* Deletes an url and session relationship
* @author Julio Montoya
* @param char course code
@ -521,7 +633,6 @@ class UrlManager
return $result;
}
/**
* Updates the access_url_rel_user table with a given user list
* @author Julio Montoya
@ -568,7 +679,6 @@ class UrlManager
return array('users_added' => $users_added, 'users_deleted' => $users_deleted);
}
/**
* Updates the access_url_rel_course table with a given user list
* @author Julio Montoya
@ -577,7 +687,6 @@ class UrlManager
* */
public static function update_urls_rel_course($course_list,$access_url_id)
{
$table_course = Database :: get_main_table(TABLE_MAIN_COURSE);
$table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
$sql = "SELECT course_code FROM $table_url_rel_course WHERE access_url_id=".intval($access_url_id);
@ -607,6 +716,39 @@ class UrlManager
}
}
/**
* Updates the access_url_rel_course table with a given user list
* @author Julio Montoya
* @param array user list
* @param int access_url_id
* */
public static function update_urls_rel_usergroup($userGroupList, $urlId)
{
$table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$sql = "SELECT usergroup_id FROM $table WHERE access_url_id = ".intval($urlId);
$result = Database::query($sql);
$existingItems = array();
while ($row = Database::fetch_array($result)){
$existingItems[] = $row['usergroup_id'];
}
// Adding
foreach ($userGroupList as $userGroupId) {
if (!in_array($userGroupId, $existingItems)) {
UrlManager::addUserGroupToUrl($userGroupId, $urlId);
}
}
// Deleting old items
foreach ($existingItems as $userGroupId) {
if (!in_array($userGroupId, $userGroupList)) {
UrlManager::delete_url_rel_usergroup($userGroupId, $urlId);
}
}
}
/**
* Updates the access_url_rel_session table with a given user list
* @author Julio Montoya
@ -615,19 +757,18 @@ class UrlManager
* */
public static function update_urls_rel_session($session_list,$access_url_id)
{
$table_session = Database :: get_main_table(TABLE_MAIN_SESSION);
$table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$table_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$sql = "SELECT session_id FROM $table_url_rel_session WHERE access_url_id=".Database::escape_string($access_url_id);
$result = Database::query($sql);
$existing_sessions = array();
while($row = Database::fetch_array($result)){
while ($row = Database::fetch_array($result)){
$existing_sessions[] = $row['session_id'];
}
// Adding users
foreach($session_list as $session) {
foreach ($session_list as $session) {
if(!in_array($session, $existing_sessions)) {
if (!empty($session) && !empty($access_url_id)) {
UrlManager::add_session_to_url($session, $access_url_id);
@ -681,7 +822,8 @@ class UrlManager
* @param string $url
* @return bool|mixed|null
*/
public static function get_url_id($url) {
public static function get_url_id($url)
{
$table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
$sql = "SELECT id FROM $table_access_url WHERE url = '".Database::escape_string($url)."'";
$result = Database::query($sql);

@ -17,6 +17,7 @@ require_once 'model.lib.php';
class UserGroup extends Model
{
public $columns = array('id', 'name', 'description');
public $useMultipleUrl = false;
/**
* Set ups DB tables
@ -27,18 +28,54 @@ class UserGroup extends Model
$this->usergroup_rel_user_table = Database::get_main_table(TABLE_USERGROUP_REL_USER);
$this->usergroup_rel_course_table = Database::get_main_table(TABLE_USERGROUP_REL_COURSE);
$this->usergroup_rel_session_table = Database::get_main_table(TABLE_USERGROUP_REL_SESSION);
$this->access_url_rel_usergroup = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
$this->table_course = Database::get_main_table(TABLE_MAIN_COURSE);
global $_configuration;
if (isset($_configuration['enable_multiple_support_for_classes'])) {
$this->useMultipleUrl = $_configuration['enable_multiple_support_for_classes'];
}
}
/**
* @return mixed
* @return bool
*/
public function get_count()
public function getUseMultipleUrl()
{
return $this->useMultipleUrl;
}
/**
* @return int
*/
public function getTotalCount()
{
$row = Database::select('count(*) as count', $this->table, array(), 'first');
return $row['count'];
}
/**
* @return int
*/
public function get_count()
{
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT count(u.id) as count FROM ".$this->table." u
INNER JOIN ".$this->access_url_rel_usergroup." a ON (u.id = a.usergroup_id)
WHERE access_url_id = $urlId
";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$row = Database::fetch_array($result);
return $row['count'];
}
return 0;
} else {
return $this->getTotalCount();
}
}
/**
* @param int $course_id
*
@ -46,8 +83,29 @@ class UserGroup extends Model
*/
public function get_usergroup_by_course_with_data_count($course_id)
{
$row = Database::select('count(*) as count', $this->usergroup_rel_course_table, array('where' => array('course_id = ?' => $course_id)), 'first');
return $row['count'];
if ($this->useMultipleUrl) {
$course_id = intval($course_id);
$urlId = api_get_current_access_url_id();
$sql = "SELECT count(c.usergroup_id) as count FROM {$this->usergroup_rel_course_table} c
INNER JOIN {$this->access_url_rel_usergroup} a ON (c.usergroup_id = a.usergroup_id)
WHERE access_url_id = $urlId AND course_id = $course_id
";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$row = Database::fetch_array($result);
return $row['count'];
}
return 0;
} else {
$row = Database::select(
'count(*) as count',
$this->usergroup_rel_course_table,
array('where' => array('course_id = ?' => $course_id)),
'first'
);
return $row['count'];
}
}
/**
@ -64,27 +122,23 @@ class UserGroup extends Model
/**
* Displays the title + grid
*/
function display()
public function display()
{
// action links
echo '<div class="actions">';
echo '<a href="../admin/index.php">'.Display::return_icon('back.png', get_lang('BackTo').' '.get_lang('PlatformAdmin'), '', '32').'</a>';
echo '<a href="'.api_get_self().'?action=add">'.Display::return_icon('new_class.png', get_lang('AddClasses'), '', '32').'</a>';
echo Display::url(Display::return_icon('import_csv.png', get_lang('Import'), array(), ICON_SIZE_MEDIUM), 'usergroup_import.php');
echo Display::url(Display::return_icon('export_csv.png', get_lang('Export'), array(), ICON_SIZE_MEDIUM), 'usergroup_export.php');
echo '</div>';
echo Display::grid_html('usergroups');
}
/**
*
* Get HTML grid
*/
function display_teacher_view()
public function display_teacher_view()
{
// action links
echo Display::grid_html('usergroups');
}
@ -95,7 +149,21 @@ class UserGroup extends Model
*/
public function get_courses_by_usergroup($id)
{
$results = Database::select('course_id', $this->usergroup_rel_course_table, array('where' => array('usergroup_id = ?' => $id)));
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$from = $this->usergroup_rel_course_table." c
INNER JOIN {$this->access_url_rel_usergroup} a ON (a.usergroup_id = c.usergroup_id) ";
$where = array('where' => array('a.usergroup_id = ? AND access_url_id = ? ' => array($id, $urlId)));
} else {
$from = $this->usergroup_rel_course_table;
$where = array('where' => array('usergroup_id = ?' => $id));
}
$results = Database::select(
'course_id',
$from,
$where
);
$array = array();
if (!empty($results)) {
foreach ($results as $row) {
@ -111,14 +179,28 @@ class UserGroup extends Model
*/
public function get_usergroup_in_course($options = array())
{
$sql = "SELECT u.* FROM {$this->usergroup_rel_course_table} usergroup
INNER JOIN {$this->table} u
ON (u.id = usergroup.usergroup_id)
INNER JOIN {$this->table_course} c
ON (usergroup.course_id = c.id)
";
if ($this->useMultipleUrl) {
$sql = "SELECT u.* FROM {$this->usergroup_rel_course_table} usergroup
INNER JOIN {$this->table} u
ON (u.id = usergroup.usergroup_id)
INNER JOIN {$this->table_course} c
ON (usergroup.course_id = c.id)
INNER JOIN {$this->access_url_rel_usergroup} a ON (a.usergroup_id = u.id)
";
} else {
$sql = "SELECT u.* FROM {$this->usergroup_rel_course_table} usergroup
INNER JOIN {$this->table} u
ON (u.id = usergroup.usergroup_id)
INNER JOIN {$this->table_course} c
ON (usergroup.course_id = c.id)
";
}
$conditions = Database::parse_conditions($options);
$sql .= $conditions;
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$sql .= " AND access_url_id = $urlId ";
}
$result = Database::query($sql);
$array = Database::store_result($result, 'ASSOC');
return $array;
@ -138,13 +220,33 @@ class UserGroup extends Model
if (empty($course_id)) {
return false;
}
$sql = "SELECT DISTINCT u.id, name
FROM {$this->table} u
LEFT OUTER JOIN {$this->usergroup_rel_course_table} urc
ON (u.id = urc.usergroup_id AND course_id = $course_id)
";
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT DISTINCT u.id, name
FROM {$this->table} u
INNER JOIN {$this->access_url_rel_usergroup} a
ON (a.usergroup_id = u.id)
LEFT OUTER JOIN {$this->usergroup_rel_course_table} urc
ON (u.id = urc.usergroup_id AND course_id = $course_id)
";
} else {
$sql = "SELECT DISTINCT u.id, name
FROM {$this->table} u
LEFT OUTER JOIN {$this->usergroup_rel_course_table} urc
ON (u.id = urc.usergroup_id AND course_id = $course_id)
";
}
$conditions = Database::parse_conditions($options);
$sql .= $conditions;
if ($this->useMultipleUrl) {
$sql .= " AND access_url_id = $urlId";
}
$result = Database::query($sql);
$array = Database::store_result($result, 'ASSOC');
return $array;
@ -156,8 +258,17 @@ class UserGroup extends Model
*/
public function get_usergroup_by_course($course_id)
{
$options = array('where' => array('course_id = ?' => $course_id));
$results = Database::select('usergroup_id', $this->usergroup_rel_course_table, $options);
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$options = array('where' => array('c.course_id = ? AND access_url_id = ?' => array($course_id, $urlId)));
$from = $this->usergroup_rel_course_table." as c INNER JOIN ".$this->access_url_rel_usergroup." a
ON c.usergroup_id = a.usergroup_id";
} else {
$options = array('where' => array('c.course_id = ?' => $course_id));
$from = $this->usergroup_rel_course_table." c";
}
$results = Database::select('c.usergroup_id', $from, $options);
$array = array();
if (!empty($results)) {
foreach ($results as $row) {
@ -174,7 +285,11 @@ class UserGroup extends Model
*/
public function usergroup_was_added_in_course($usergroup_id, $course_id)
{
$results = Database::select('usergroup_id', $this->usergroup_rel_course_table, array('where' => array('course_id = ? AND usergroup_id = ?' => array($course_id, $usergroup_id))));
$results = Database::select(
'usergroup_id',
$this->usergroup_rel_course_table,
array('where' => array('course_id = ? AND usergroup_id = ?' => array($course_id, $usergroup_id)))
);
if (empty($results)) {
return false;
}
@ -188,7 +303,12 @@ class UserGroup extends Model
*/
public function get_sessions_by_usergroup($id)
{
$results = Database::select('session_id', $this->usergroup_rel_session_table, array('where' => array('usergroup_id = ?' => $id)));
$results = Database::select(
'session_id',
$this->usergroup_rel_session_table,
array('where' => array('usergroup_id = ?' => $id))
);
$array = array();
if (!empty($results)) {
foreach ($results as $row) {
@ -223,10 +343,25 @@ class UserGroup extends Model
/**
* Gets the usergroup id list by user id
* @param int user id
* @return array
*/
public function get_usergroup_by_user($id)
public function get_usergroup_by_user($userId)
{
$results = Database::select('usergroup_id', $this->usergroup_rel_user_table, array('where' => array('user_id = ?' => $id)));
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$from = $this->usergroup_rel_user_table." u
INNER JOIN {$this->access_url_rel_usergroup} a ON (a.usergroup_id AND u.usergroup_id)";
$where = array('where' => array('user_id = ? AND access_url_id = ? ' => array($userId, $urlId)));
} else {
$from = $this->usergroup_rel_user_table." u ";
$where = array('where' => array('user_id = ?' => $userId));
}
$results = Database::select(
'u.usergroup_id',
$from,
$where
);
$array = array();
if (!empty($results)) {
foreach ($results as $row) {
@ -241,7 +376,7 @@ class UserGroup extends Model
* @param int usergroup id
* @param array list of session ids
*/
function subscribe_sessions_to_usergroup($usergroup_id, $list)
public function subscribe_sessions_to_usergroup($usergroup_id, $list)
{
$current_list = self::get_sessions_by_usergroup($usergroup_id);
$user_list = self::get_users_by_usergroup($usergroup_id);
@ -270,11 +405,14 @@ class UserGroup extends Model
SessionManager::unsubscribe_user_from_session($session_id, $user_id);
}
}
Database::delete($this->usergroup_rel_session_table, array('usergroup_id = ? AND session_id = ?' => array($usergroup_id, $session_id)));
Database::delete(
$this->usergroup_rel_session_table,
array('usergroup_id = ? AND session_id = ?' => array($usergroup_id, $session_id))
);
}
}
// Adding new relationships
// Adding new relationships.
if (!empty($new_items)) {
foreach ($new_items as $session_id) {
$params = array('session_id' => $session_id, 'usergroup_id' => $usergroup_id);
@ -291,8 +429,9 @@ class UserGroup extends Model
* Subscribes courses to a group (also adding the members of the group in the course)
* @param int usergroup id
* @param array list of course ids (integers)
* @param bool $delete_groups
*/
function subscribe_courses_to_usergroup($usergroup_id, $list, $delete_groups = true)
public function subscribe_courses_to_usergroup($usergroup_id, $list, $delete_groups = true)
{
$current_list = self::get_courses_by_usergroup($usergroup_id);
$user_list = self::get_users_by_usergroup($usergroup_id);
@ -318,7 +457,7 @@ class UserGroup extends Model
self::unsubscribe_courses_from_usergroup($usergroup_id, $delete_items);
}
//Addding new relationships
// Adding new relationships
if (!empty($new_items)) {
foreach ($new_items as $course_id) {
$course_info = api_get_course_info_by_id($course_id);
@ -337,9 +476,9 @@ class UserGroup extends Model
* @param int $usergroup_id
* @param bool $delete_items
*/
function unsubscribe_courses_from_usergroup($usergroup_id, $delete_items)
public function unsubscribe_courses_from_usergroup($usergroup_id, $delete_items)
{
//Deleting items
// Deleting items.
if (!empty($delete_items)) {
$user_list = self::get_users_by_usergroup($usergroup_id);
foreach ($delete_items as $course_id) {
@ -356,10 +495,11 @@ class UserGroup extends Model
/**
* Subscribe users to a group
* @param int usergroup id
* @param array list of user ids
* @param int usergroup id
* @param array list of user ids
* @param bool $delete_users_not_present_in_list
*/
function subscribe_users_to_usergroup($usergroup_id, $list, $delete_users_not_present_in_list = true)
public function subscribe_users_to_usergroup($usergroup_id, $list, $delete_users_not_present_in_list = true)
{
$current_list = self::get_users_by_usergroup($usergroup_id);
$course_list = self::get_courses_by_usergroup($usergroup_id);
@ -436,8 +576,204 @@ class UserGroup extends Model
*/
public function usergroup_exists($name)
{
$sql = "SELECT * FROM $this->table WHERE name='".Database::escape_string($name)."'";
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$sql = "SELECT * FROM $this->table u
INNER JOIN {$this->access_url_rel_usergroup} a ON (a.usergroup_id = u.id)
WHERE name = '".Database::escape_string($name)."' AND access_url_id = $urlId";
} else {
$sql = "SELECT * FROM $this->table WHERE name = '".Database::escape_string($name)."'";
}
$res = Database::query($sql);
return Database::num_rows($res) != 0;
}
/**
* @param int $sidx
* @param int $sord
* @param int $start
* @param int $limit
* @return array
*/
public function getUsergroupsPagination($sidx, $sord, $start, $limit)
{
$sord = intval($sord);
$start = intval($start);
$limit = intval($limit);
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$from = $this->table." u INNER JOIN {$this->access_url_rel_usergroup} a ON (u.id = a.usergroup_id)";
$where = array(' access_url_id = ?' => $urlId);
} else {
$from = $this->table." u ";
$where = array();
}
$result = Database::select(
'u.*',
$from,
array('where' => $where, 'order'=> "name $sord", 'LIMIT'=> "$start , $limit")
);
$new_result = array();
if (!empty($result)) {
foreach ($result as $group) {
$group['sessions'] = count($this->get_sessions_by_usergroup($group['id']));
$group['courses'] = count($this->get_courses_by_usergroup($group['id']));
$group['users'] = count($this->get_users_by_usergroup($group['id']));
$new_result[] = $group;
}
$result = $new_result;
}
$columns = array('name', 'users', 'courses','sessions');
if (!in_array($sidx, $columns)) {
$sidx = 'name';
}
// Multidimensional sort
msort($result, $sidx);
return $result;
}
/**
* @param array $options
* @return array
*/
public function get_all_for_export($options = null)
{
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$from = $this->table." u INNER JOIN {$this->access_url_rel_usergroup} a ON (u.id = a.usergroup_id)";
$options = array('where' => array('access_url_id = ? ' => $urlId));
return Database::select('name, description', $from, $options);
} else {
return Database::select('name, description', $this->table, $options);
}
}
/**
* @param string $firstLetter
* @return array
*/
public function filterByFirstLetter($firstLetter)
{
$firstLetter = Database::escape_string($firstLetter);
$sql = "SELECT id, name FROM $this->table
WHERE name LIKE '".$firstLetter."%' OR name LIKE '".api_strtolower($firstLetter)."%'
ORDER BY name DESC ";
$result = Database::query($sql);
return Database::store_result($result);
}
/**
* Select user group not in list
* @param array $list
* @return array
*/
public function getUserGroupNotInList($list)
{
if (empty($list)) {
return array();
}
$list = array_map('intval', $list);
$listToString = implode("','", $list);
$sql = "SELECT * FROM {$this->table} WHERE id NOT IN ('$listToString')";
$result = Database::query($sql);
return Database::store_result($result, 'ASSOC');
}
/**
* @param $params
* @param bool $show_query
* @return bool|void
*/
public function save($params, $show_query = false)
{
$id = parent::save($params, $show_query);
if ($this->useMultipleUrl) {
$this->subscribeToUrl($id, api_get_current_access_url_id());
}
return $id;
}
/**
* @param $id
* @return bool|void
*/
public function delete($id)
{
$result = parent::delete($id);
if ($this->useMultipleUrl) {
if ($result) {
$this->unsubscribeToUrl($id, api_get_current_access_url_id());
}
}
}
/**
* @param int $id
* @param int $urlId
*/
public function subscribeToUrl($id, $urlId)
{
Database::insert(
$this->access_url_rel_usergroup,
array(
'access_url_id' => $urlId,
'usergroup_id' =>$id
)
);
}
/**
* @param $id
* @param $urlId
*/
public function unsubscribeToUrl($id, $urlId)
{
Database::delete(
$this->access_url_rel_usergroup,
array(
'access_url_id = ? AND usergroup_id = ? ' => array($urlId, $id)
)
);
}
public static function searchUserGroupAjax($needle)
{
$response = new XajaxResponse();
$return = '';
if (!empty($needle)) {
// xajax send utf8 datas... datas in db can be non-utf8 datas
$charset = api_get_system_encoding();
$needle = api_convert_encoding($needle, $charset, 'utf-8');
$needle = Database::escape_string($needle);
// search courses where username or firstname or lastname begins likes $needle
$sql = 'SELECT id, name FROM '.Database::get_main_table(TABLE_USERGROUP).' u
WHERE name LIKE "'.$needle.'%"
ORDER BY name
LIMIT 11';
$result = Database::query($sql);
$i = 0;
while ($data = Database::fetch_array($result)) {
$i++;
if ($i <= 10) {
$return .= '<a
href="javascript: void(0);"
onclick="javascript: add_user_to_url(\''.addslashes($data['id']).'\',\''.addslashes($data['name']).' \')">'.$data['name'].' </a><br />';
} else {
$return .= '...<br />';
}
}
}
$response->addAssign('ajax_list_courses','innerHTML', api_utf8_encode($return));
return $response;
}
}
/* CREATE TABLE IF NOT EXISTS access_url_rel_usergroup (access_url_id int unsigned NOT NULL, usergroup_id int unsigned NOT NULL, PRIMARY KEY (access_url_id, usergroup_id));*/

Loading…
Cancel
Save