diff --git a/main/admin/access_url_add_usergroup_to_url.php b/main/admin/access_url_add_usergroup_to_url.php
new file mode 100644
index 0000000000..fb70ddfc7c
--- /dev/null
+++ b/main/admin/access_url_add_usergroup_to_url.php
@@ -0,0 +1,128 @@
+
+*/
+
+// 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 '
';
+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 '
';
+
+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);
+?>
+
+
+
+*/
+
+// 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[] = '
+';
+
+$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 '';
+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 '
';
+
+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 = ''.get_lang('SessionAddTypeUnique').'';
+ $link_add_type_multiple = get_lang('SessionAddTypeMultiple');
+} else {
+ $link_add_type_unique = get_lang('SessionAddTypeUnique');
+ $link_add_type_multiple = ''.get_lang('SessionAddTypeMultiple').'';
+}
+
+$url_list = UrlManager::get_url_data();
+?>
+
+ |
+
+
+
+
+';
- }
- }
- Display :: display_normal_message(get_lang('AdminUserRegisteredToThisURL').': '.$url_str.'
',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'].'
';
+ }
+ }
+ Display :: display_normal_message(get_lang('AdminUserRegisteredToThisURL').': '.$url_str.'
',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'].'
';
- }
+foreach ($url_list as $my_url) {
+ if (!in_array($my_url['id'], $my_user_url_list)){
+ $url_string.=$my_url['url'].'
';
+ }
}
if(!empty($url_string)) {
Display :: display_warning_message(get_lang('AdminShouldBeRegisterInSite').'
'.$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(''.get_lang('ClickToRegisterAdmin').'',false);
- }
+ $quant= UrlManager::relation_url_user_exist(api_get_user_id(),$current_access_url_id);
+ if ($quant==0) {
+ Display :: display_warning_message(''.get_lang('ClickToRegisterAdmin').'',false);
+ }
}
// action menu
@@ -106,17 +107,21 @@ echo '';
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 '
';
//$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 = ''.Display::return_icon($image.'.gif', get_lang(ucfirst($action))).'';
- }
- //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 .= ''.Display::return_icon('delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL).'';
- }
+ }
$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();
\ No newline at end of file
diff --git a/main/inc/ajax/model.ajax.php b/main/inc/ajax/model.ajax.php
index c6c7a354ae..1d4bd9cc21 100644
--- a/main/inc/ajax/model.ajax.php
+++ b/main/inc/ajax/model.ajax.php
@@ -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);
diff --git a/main/inc/lib/database.constants.inc.php b/main/inc/lib/database.constants.inc.php
index 3e9bd781b6..18daac53ae 100644
--- a/main/inc/lib/database.constants.inc.php
+++ b/main/inc/lib/database.constants.inc.php
@@ -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');
diff --git a/main/inc/lib/urlmanager.lib.php b/main/inc/lib/urlmanager.lib.php
index e84eae0266..c505af356e 100644
--- a/main/inc/lib/urlmanager.lib.php
+++ b/main/inc/lib/urlmanager.lib.php
@@ -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 ,
- *
- * @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 ,
+ *
+ * @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);
diff --git a/main/inc/lib/usergroup.lib.php b/main/inc/lib/usergroup.lib.php
index e8cfefa58b..ee924a40bf 100644
--- a/main/inc/lib/usergroup.lib.php
+++ b/main/inc/lib/usergroup.lib.php
@@ -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 '';
echo '
'.Display::return_icon('back.png', get_lang('BackTo').' '.get_lang('PlatformAdmin'), '', '32').'';
-
echo '
'.Display::return_icon('new_class.png', get_lang('AddClasses'), '', '32').'';
-
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 '
';
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 .= ''.$data['name'].'
';
+ } else {
+ $return .= '...
';
+ }
+ }
+ }
+ $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));*/