From 169ee38402ac3e14b1b10b783ffb53cd891e0ee4 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 29 Jan 2009 22:51:19 +0100 Subject: [PATCH] [svn r18083] Update the access_url funcionality: Adding the UI to edit the course - url relationship requires testing. Courses and users are now filtered by access_url FS#3462 --- main/admin/access_url_add_courses_to_url.php | 199 ++++++++ main/admin/access_url_add_users_to_url.php | 78 ++- main/admin/access_url_edit.php | 18 +- main/admin/access_url_edit_courses_to_url.php | 467 ++++++++++++++++++ main/admin/access_url_edit_users_to_url.php | 68 +-- main/admin/access_urls.php | 61 ++- main/inc/lib/add_course.lib.inc.php | 10 +- main/inc/lib/course.lib.php | 36 +- main/inc/lib/database.lib.php | 3 +- main/inc/lib/display.lib.php | 15 + main/inc/lib/urlmanager.lib.php | 199 +++++++- main/inc/lib/usermanager.lib.php | 74 +-- 12 files changed, 1064 insertions(+), 164 deletions(-) create mode 100755 main/admin/access_url_add_courses_to_url.php create mode 100755 main/admin/access_url_edit_courses_to_url.php diff --git a/main/admin/access_url_add_courses_to_url.php b/main/admin/access_url_add_courses_to_url.php new file mode 100755 index 0000000000..49a6be13f2 --- /dev/null +++ b/main/admin/access_url_add_courses_to_url.php @@ -0,0 +1,199 @@ + + + For a full list of contributors, see "credits.txt". + The full license can be read in "license.txt". + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + See the GNU General Public License for more details. + + Contact address: Dokeos, 44 rue des palais, B-1030 Brussels, Belgium + Mail: info@dokeos.com +============================================================================== +*/ +/** +============================================================================== +* 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 dokeos.admin +============================================================================== +*/ + +// name of the language file that needs to be included +$language_file = 'admin'; +$cidReset = true; +require ('../inc/global.inc.php'); +$this_section=SECTION_PLATFORM_ADMIN; + +require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php'); +api_protect_admin_script(); +if (!$_configuration['multiple_access_urls']) + header('Location: index.php'); + +/* +----------------------------------------------------------- + Global constants and variables +----------------------------------------------------------- +*/ + +$users = $_GET['users']; +$form_sent = 0; +$first_letter_course = ''; +$courses = array (); +$url_list = array(); +$users = 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); + +/* +----------------------------------------------------------- + Header +----------------------------------------------------------- +*/ +$tool_name = get_lang('AddCoursesToURL'); +$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array ('url' => 'access_urls.php', 'name' => get_lang('MultipleAccessURLs')); + +/* +============================================================================== + MAIN CODE +============================================================================== +*/ + +Display :: display_header($tool_name); + +echo '
'; +echo '
+ '.Display::return_icon('course_del.gif',get_lang('AddUserToURL'),'').get_lang('EditCoursesToURL').' +

'; +echo '
'; + +api_display_tool_title($tool_name); + +if ($_POST['form_sent']) { + $form_sent = $_POST['form_sent']; + $courses = is_array($_POST['course_list']) ? $_POST['course_list'] : array() ; + $url_list = is_array($_POST['url_list']) ? $_POST['url_list'] : array() ; + $first_letter_course = $_POST['first_letter_course']; + + foreach($users as $key => $value) { + $users[$key] = intval($value); + } + + if ($form_sent == 1) { + if ( count($courses) == 0 || count($url_list) == 0) { + Display :: display_error_message(get_lang('AtLeastOneCourseAndOneURL')); + //header('Location: access_urls.php?action=show_message&message='.get_lang('AtLeastOneUserAndOneURL')); + } else { + UrlManager::add_courses_to_urls($courses,$url_list); + Display :: display_confirmation_message(get_lang('CourseBelongURL')); + //header('Location: access_urls.php?action=show_message&message='.get_lang('UsersBelongURL')); + } + } +} + + + +/* +----------------------------------------------------------- + Display GUI +----------------------------------------------------------- +*/ + +if(empty($first_letter_user)) +{ + $sql = "SELECT count(*) as num_courses FROM $tbl_course"; + $result = api_sql_query($sql, __FILE__, __LINE__); + $num_row = Database::fetch_array($result); + if($num_row['num_courses']>1000) + {//if there are too much num_courses to gracefully handle with the HTML select list, + // assign a default filter on users names + $first_letter_user = 'A'; + } + unset($result); +} +$sql = "SELECT code, title FROM $tbl_course + WHERE title LIKE '".$first_letter_course."%' OR title LIKE '".strtolower($first_letter_course)."%' + ORDER BY title DESC "; + +$result = api_sql_query($sql, __FILE__, __LINE__); +$db_courses = api_store_result($result); +unset($result); + +$sql = "SELECT id, url FROM $tbl_access_url WHERE active=1 ORDER BY url"; +$result = api_sql_query($sql, __FILE__, __LINE__); +$db_urls = api_store_result($result); +unset($result); +?> + +
+ + + + + + + + + + + + +
+ +

+ : + +
  + : +
+ + + + + +
+
+ \ No newline at end of file diff --git a/main/admin/access_url_add_users_to_url.php b/main/admin/access_url_add_users_to_url.php index 6f9187803e..5f40d46362 100755 --- a/main/admin/access_url_add_users_to_url.php +++ b/main/admin/access_url_add_users_to_url.php @@ -74,24 +74,23 @@ $interbreadcrumb[] = array ('url' => 'access_urls.php', 'name' => get_lang('Mult ============================================================================== */ +Display :: display_header($tool_name); +echo '
'; +echo '
+ '.Display::return_icon('del_user_big.gif',get_lang('EditUsersToURL'),'').get_lang('EditUsersToURL').' +

'; +echo '
'; -/* ------------------------------------------------------------ - React on POSTed request ------------------------------------------------------------ -*/ +api_display_tool_title($tool_name); -Display :: display_header($tool_name); -//api_display_tool_title($tool_name); -if ($_POST['formSent']) { - $form_sent = $_POST['formSent']; - $users = is_array($_POST['UserList']) ? $_POST['UserList'] : array() ; - $url_list = is_array($_POST['URLList']) ? $_POST['URLList'] : array() ; - $first_letter_user = $_POST['firstLetterUser']; - //$first_letter_course = $_POST['firstLetterCourse']; +if ($_POST['form_sent']) { + $form_sent = $_POST['form_sent']; + $users = is_array($_POST['user_list']) ? $_POST['user_list'] : array() ; + $url_list = is_array($_POST['url_list']) ? $_POST['url_list'] : array() ; + $first_letter_user = $_POST['first_letter_user']; foreach($users as $key => $value) { $users[$key] = intval($value); @@ -119,19 +118,20 @@ if ($_POST['formSent']) { */ -if(empty($first_letter_user)) -{ +if(empty($first_letter_user)) { $sql = "SELECT count(*) as nb_users FROM $tbl_user"; $result = api_sql_query($sql, __FILE__, __LINE__); $num_row = Database::fetch_array($result); - if($num_row['nb_users']>1000) - {//if there are too much users to gracefully handle with the HTML select list, - // assign a default filter on users names + if($num_row['nb_users']>1000) { + //if there are too much users to gracefully handle with the HTML select list, + // assign a default filter on users names $first_letter_user = 'A'; } unset($result); } -$sql = "SELECT user_id,lastname,firstname,username FROM $tbl_user WHERE lastname LIKE '".$first_letter_user."%' ORDER BY ". (count($users) > 0 ? "(user_id IN(".implode(',', $users).")) DESC," : "")." lastname"; +$sql = "SELECT user_id,lastname,firstname,username FROM $tbl_user + WHERE lastname LIKE '".$first_letter_user."%' OR lastname LIKE '".strtolower($first_letter_user)."%' + ORDER BY ". (count($users) > 0 ? "(user_id IN(".implode(',', $users).")) DESC," : "")." lastname"; $result = api_sql_query($sql, __FILE__, __LINE__); $db_users = api_store_result($result); unset($result); @@ -143,14 +143,14 @@ unset($result); ?>
- + -   - - */ - ?> -


: -
  - : + : - : -

- : - -
- >>"/> - + + diff --git a/main/admin/access_url_edit.php b/main/admin/access_url_edit.php index 2da8789957..01e288567d 100644 --- a/main/admin/access_url_edit.php +++ b/main/admin/access_url_edit.php @@ -54,8 +54,13 @@ if( $form->validate()) { if ($url_id!='') { //we can't change the status of the url with id=1 if ($url_id==1) - $active=1; - UrlManager::udpate($url_id, $url, $description, $active); + $active=1; + //checking url + if (substr($url,strlen($url)-1, strlen($url))=='/') { + UrlManager::udpate($url_id, $url, $description, $active); + } else { + UrlManager::udpate($url_id, $url.'/', $description, $active); + } $url_to_go='access_urls.php'; $message=get_lang('URLEdited'); } else { @@ -63,13 +68,12 @@ if( $form->validate()) { if ($num == 0) { //checking url if (substr($url,strlen($url)-1, strlen($url))=='/') { - UrlManager::add($url.'/', $description, $active); - $message = get_lang('URLAdded'); + UrlManager::add($url, $description, $active); } else { //create - UrlManager::add($url, $description, $active); - $message = get_lang('URLAdded'); + UrlManager::add($url.'/', $description, $active); } + $message = get_lang('URLAdded'); $url_to_go='access_urls.php'; } else { $url_to_go='access_url_edit.php'; @@ -115,7 +119,7 @@ if (isset($_GET['url_id'])) } $url_data = UrlManager::get_url_data_from_id($url_id); $form->addElement('hidden','id',$url_data['id']); - $form->setDefaults($url_data); + $form->setDefaults($url_data); $submit_name = get_lang('Edit'); } diff --git a/main/admin/access_url_edit_courses_to_url.php b/main/admin/access_url_edit_courses_to_url.php new file mode 100755 index 0000000000..aa22cf5830 --- /dev/null +++ b/main/admin/access_url_edit_courses_to_url.php @@ -0,0 +1,467 @@ + + + For a full list of contributors, see "credits.txt". + The full license can be read in "license.txt". + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + See the GNU General Public License for more details. + + Contact: Dokeos, 181 rue Royale, B-1000 Brussels, Belgium, info@dokeos.com +============================================================================== +*/ +/** +============================================================================== +* @package dokeos.admin +============================================================================== +*/ + +// name of the language file that needs to be included +$language_file='admin'; + +// resetting the course id +$cidReset=true; + +// including some necessary dokeos files +require('../inc/global.inc.php'); + +require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php'); +require_once ('../inc/lib/xajax/xajax.inc.php'); +$xajax = new xajax(); +//$xajax->debugOn(); +$xajax -> registerFunction ('search_courses'); + +// setting the section (for the tabs) +$this_section = SECTION_PLATFORM_ADMIN; + +// Access restrictions +api_protect_admin_script(); +if (!$_configuration['multiple_access_urls']) + header('Location: index.php'); + + +// 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('EditCoursesToURL'); +$interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); +$interbreadcrumb[] = array ('url' => 'access_urls.php', 'name' => get_lang('MultipleAccessURLs')); + +$add_type = 'unique'; +if(isset($_REQUEST['add_type']) && $_REQUEST['add_type']!=''){ + $add_type = $_REQUEST['add_type']; +} + +$access_url_id=1; +if(isset($_REQUEST['access_url_id']) && $_REQUEST['access_url_id']!=''){ + $access_url_id = $_REQUEST['access_url_id']; +} + +function search_courses($needle, $id) +{ + global $tbl_course; + $xajax_response = new XajaxResponse(); + $return = ''; + + if(!empty($needle)) { + // xajax send utf8 datas... datas in db can be non-utf8 datas + $charset = api_get_setting('platform_charset'); + $needle = mb_convert_encoding($needle, $charset, 'utf-8'); + // search courses where username or firstname or lastname begins likes $needle + $sql = 'SELECT code, title FROM '.$tbl_course.' u + WHERE (title LIKE "'.$needle.'%" + OR code LIKE "'.$needle.'%" + ) + ORDER BY title, code + LIMIT 11'; + $rs = api_sql_query($sql, __FILE__, __LINE__); + $i=0; + while ($course = Database :: fetch_array($rs)) { + $i++; + if ($i<=10) { + $return .= ''.$course['title'].' ('.$course['code'].')
'; + } else { + $return .= '...
'; + } + } + } + $xajax_response -> addAssign('ajax_list_courses','innerHTML',utf8_encode($return)); + return $xajax_response; +} + +$xajax -> processRequests(); +$htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); +$htmlHeadXtra[] = ' +'; + +$form_sent=0; +$errorMsg=''; +$UserList=$SessionList=array(); +$users=$sessions=array(); + +if($_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_course($course_list,$access_url_id); + header('Location: access_urls.php?action=show_message&message='.get_lang('CoursesWereEdited')); + } + } +} + +Display::display_header($tool_name); + +echo ''; + +api_display_tool_title($tool_name); + +if ($_GET['action'] == 'show_message') + Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['message']))); + +$no_course_list = $course_list = array(); +$ajax_search = $add_type == 'unique' ? true : false; + +if($ajax_search) { + $courses=UrlManager::get_url_rel_course_data($access_url_id); + foreach($courses as $course) { + $course_list[$course['code']] = $course ; + } +} else { + $courses=UrlManager::get_url_rel_course_data(); + + foreach($courses as $course) { + if($course['access_url_id'] == $access_url_id) { + $course_list[$course['course_code']] = $course ; + } + } + + $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE); + $sql="SELECT code, title + FROM $tbl_course u + ORDER BY title, code"; + $result=api_sql_query($sql,__FILE__,__LINE__); + $courses=api_store_result($result); + $course_list_leys = array_keys($course_list); + foreach($courses as $course) { + if (!in_array($course['code'],$course_list_leys)) + $no_course_list[$course['code']] = $course ; + } +} + + +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(); + +?> + +
+  |  +
+

+ + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
: + :
+
+ + +
+ + + +
+
+ + + + +

+ + +





+
+
+
+ '; + else + echo ''; + ?> +
+ + + + diff --git a/main/admin/access_url_edit_users_to_url.php b/main/admin/access_url_edit_users_to_url.php index a344d0054e..16a4326c78 100755 --- a/main/admin/access_url_edit_users_to_url.php +++ b/main/admin/access_url_edit_users_to_url.php @@ -54,7 +54,6 @@ $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_access_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $tbl_access_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL); - // setting breadcrumbs $tool_name = get_lang('EditUsersToURL'); $interbreadcrumb[] = array ('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); @@ -67,7 +66,7 @@ if(isset($_REQUEST['add_type']) && $_REQUEST['add_type']!=''){ $access_url_id=1; if(isset($_REQUEST['access_url_id']) && $_REQUEST['access_url_id']!=''){ - $access_url_id = $_REQUEST['access_url_id']; + $access_url_id = $_REQUEST['access_url_id']; } function search_users($needle, $id) @@ -87,12 +86,14 @@ function search_users($needle, $id) OR lastname LIKE "'.$needle.'%") ORDER BY lastname, firstname, username LIMIT 11'; + $rs = api_sql_query($sql, __FILE__, __LINE__); $i=0; + while ($user = Database :: fetch_array($rs)) { $i++; if ($i<=10) { - $return .= ''.$user['lastname'].' '.$user['firstname'].' ('.$user['username'].')
'; + $return .= ''.$user['lastname'].' '.$user['firstname'].' ('.$user['username'].')
'; } else { $return .= '...
'; } @@ -106,7 +107,7 @@ $xajax -> processRequests(); $htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); $htmlHeadXtra[] = ' '; -$formSent=0; +$form_sent=0; $errorMsg=''; $UserList=$SessionList=array(); $users=$sessions=array(); -if($_POST['formSent']) { - $formSent=$_POST['formSent']; +if($_POST['form_sent']) { + $form_sent=$_POST['form_sent']; $UserList=$_POST['sessionUsersList']; if(!is_array($UserList)) { $UserList=array(); } - if($formSent == 1) { - if(is_array($UserList) && count($UserList)>0 ) { + 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($UserList) ) { UrlManager::update_urls_rel_user($UserList,$access_url_id); header('Location: access_urls.php?action=show_message&message='.get_lang('UsersWereEdited')); - } - + } } } Display::display_header($tool_name); + +echo ''; + api_display_tool_title($tool_name); +if ($_GET['action'] == 'show_message') + Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['message']))); + $nosessionUsersList = $sessionUsersList = array(); $ajax_search = $add_type == 'unique' ? true : false; -if($ajax_search) -{ +if($ajax_search) { $Users=UrlManager::get_url_rel_user_data($access_url_id); foreach($Users as $user) { $sessionUsersList[$user['user_id']] = $user ; @@ -203,7 +217,7 @@ $url_list = UrlManager::get_url_data();
 | 
-

+



- + processRequests(); $htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); $htmlHeadXtra[] = ' '; @@ -301,11 +314,11 @@ function remove_item(origin)
- - + + + ?>

@@ -324,7 +337,6 @@ foreach($sessionUsersList as $enreg) { diff --git a/main/admin/access_urls.php b/main/admin/access_urls.php index bdfb618a0e..67c5f221c0 100644 --- a/main/admin/access_urls.php +++ b/main/admin/access_urls.php @@ -45,16 +45,19 @@ require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php' require_once (api_get_path(LIBRARY_PATH).'security.lib.php'); require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php'); +$current_access_url_id = api_get_current_access_url_id(); +$my_user_url_list = api_get_access_url_from_user(api_get_user_id()); +$url_list = UrlManager::get_url_data(); + // Actions -if (isset ($_GET['action'])) { - +if (isset ($_GET['action'])) { if ($_GET['action'] == 'show_message') - Display :: display_normal_message(Security::remove_XSS(stripslashes($_GET['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); @@ -71,23 +74,63 @@ if (isset ($_GET['action'])) { case 'unlock'; UrlManager::set_url_status('unlock',$url_id); Display :: display_normal_message(get_lang('URLActivate')); + 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(); } -echo '
'; +$parameters['sec_token'] = Security::get_token(); + + +// checking if the admin is registered in all sites + +$url_string=''; +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); +} + +// checking the current installation +if ($current_access_url_id==-1) { + 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); + } +} + +// action menu +echo ''; $table = new SortableTable('urls', 'url_count_mask', 'get_url_data_mask',2); - -$parameters['sec_token'] = Security::get_token(); $table->set_additional_parameters($parameters); $table->set_header(0, '', false); diff --git a/main/inc/lib/add_course.lib.inc.php b/main/inc/lib/add_course.lib.inc.php index baab99a4e9..54e974c678 100644 --- a/main/inc/lib/add_course.lib.inc.php +++ b/main/inc/lib/add_course.lib.inc.php @@ -2373,7 +2373,15 @@ function register_course($courseSysCode, $courseScreenCode, $courseRepository, $ api_sql_query($sql, __FILE__, __LINE__); } } - + // + global $_configuration; + if ($_configuration['multiple_access_urls']==true) { + require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php'); + $url_id=1; + if (api_get_current_access_url_id()!=-1) + $url_id=api_get_current_access_url_id(); + UrlManager::add_course_to_url($courseSysCode,$url_id); + } } return 0; diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 514637a838..f27e8aab3d 100644 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -281,11 +281,11 @@ class CourseManager */ function get_user_in_course_status($user_id, $course_code) { - $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); - $sql_query = "SELECT * FROM $course_user_table WHERE `course_code` = '$course_code' AND `user_id` = '$user_id'"; + $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); + $sql_query = "SELECT * FROM $course_user_table WHERE course_code = '$course_code' AND user_id = $user_id"; $sql_result = api_sql_query($sql_query, __FILE__, __LINE__); $result = Database::fetch_array($sql_result); - return $result["status"]; + return $result['status']; } @@ -350,10 +350,9 @@ class CourseManager $update_user_session = "UPDATE $tbl_session set nbr_users = '$count' WHERE id = '".$_SESSION["id_session"]."'" ; $result = api_sql_query($update_user_session,__FILE__,__LINE__); - } - else { - $sql = "DELETE FROM $table_course_user WHERE user_id IN (".$user_ids.") AND course_code = '".$course_code."'"; - api_sql_query($sql, __FILE__, __LINE__); + } else { + $sql = "DELETE FROM $table_course_user WHERE user_id IN (".$user_ids.") AND course_code = '".$course_code."'"; + api_sql_query($sql, __FILE__, __LINE__); } } @@ -923,7 +922,7 @@ class CourseManager * @return true if the real course has virtual courses that the user is subscribed to, false otherwise */ function has_virtual_courses_from_code($real_course_code, $user_id) - { + { $user_subscribed_virtual_course_list = CourseManager :: get_list_of_virtual_courses_for_specific_user_and_real_course($user_id, $real_course_code); $number_of_virtual_courses = count($user_subscribed_virtual_course_list); @@ -998,12 +997,11 @@ class CourseManager $table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); - $sql_query = "SELECT * FROM $table WHERE `user_id` = '$user_id' AND `course_code` = '$course_code'"; + $sql_query = "SELECT * FROM $table WHERE user_id = $user_id AND course_code = '$course_code'"; $sql_result = api_sql_query($sql_query, __FILE__, __LINE__); $result = Database::fetch_array($sql_result); - - if (!isset ($result) || empty ($result)) - { + + if (!isset ($result) || empty ($result)) { if($in_a_session) { $sql = 'SELECT 1 FROM '.Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER).' @@ -1033,7 +1031,7 @@ class CourseManager } } } - else + else return false; //user is not registered in course } else @@ -1671,7 +1669,17 @@ class CourseManager api_sql_query($sql,__FILE__,__LINE__); $sql = "DELETE FROM $table_stats_uploads WHERE upload_cours_id = '".$code."'"; api_sql_query($sql,__FILE__,__LINE__); - } + } + + global $_configuration; + if ($_configuration['multiple_access_urls']==true) { + require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php'); + $url_id=1; + if (api_get_current_access_url_id()!=-1) + $url_id=api_get_current_access_url_id(); + UrlManager::delete_url_rel_course($code,$url_id); + } + // Delete the course from the database $sql = "DELETE FROM $table_course WHERE code='".$code."'"; api_sql_query($sql, __FILE__, __LINE__); diff --git a/main/inc/lib/database.lib.php b/main/inc/lib/database.lib.php index a81c388f1c..b050a4ddce 100644 --- a/main/inc/lib/database.lib.php +++ b/main/inc/lib/database.lib.php @@ -1,4 +1,4 @@ -'.$i.''; + } + return $result; + } + /** * Show the so-called "left" menu for navigating */ diff --git a/main/inc/lib/urlmanager.lib.php b/main/inc/lib/urlmanager.lib.php index 7f0b3b5933..fc0cb487e0 100755 --- a/main/inc/lib/urlmanager.lib.php +++ b/main/inc/lib/urlmanager.lib.php @@ -21,7 +21,7 @@ */ /** ============================================================================== -* This library provides functions for the URL management. +* This library provides functions for the access_url management. * Include/require it in your code to use its functionality. * * @package dokeos.library @@ -45,7 +45,7 @@ class UrlManager $tms = time(); $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL); $sql = "INSERT INTO $table_access_url - SET url = '".Database::escape_string($url)."/', + SET url = '".Database::escape_string($url)."', description = '".Database::escape_string($description)."', active = '".Database::escape_string($active)."', created_by = '".Database::escape_string(api_get_user_id())."', @@ -53,6 +53,7 @@ class UrlManager $result = api_sql_query($sql, __FILE__, __LINE__); return $result; } + /** * Updates an URL access to Dokeos * @author Julio Montoya , @@ -77,6 +78,21 @@ class UrlManager $result = api_sql_query($sql, __FILE__, __LINE__); return $result; } + + + /** + * Deletes an url + * @author Julio Montoya + * @param int url id + * @return boolean true if success + * */ + function delete($id) + { + $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL); + $sql= "DELETE FROM $table_access_url WHERE id = ".Database::escape_string($id); + $result = api_sql_query($sql, __FILE__, __LINE__); + return $result; + } /** * @@ -112,8 +128,8 @@ class UrlManager $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL); $sql = "SELECT count(id) as count_result FROM $table_access_url"; $res = api_sql_query($sql, __FILE__, __LINE__); - $url = Database::fetch_row($res); - $result = $url['0']; + $url = Database::fetch_array($res,'ASSOC'); + $result = $url['count_result']; return $result; } @@ -128,8 +144,7 @@ class UrlManager $sql = "SELECT id, url, description, active FROM $table_access_url"; $res = api_sql_query($sql, __FILE__, __LINE__); $urls = array (); - while ($url = Database::fetch_row($res)) - { + while ($url = Database::fetch_array($res)) { $urls[] = $url; } return $urls; @@ -171,18 +186,45 @@ class UrlManager ORDER BY lastname,firstname,username"; $result=api_sql_query($sql,__FILE__,__LINE__); - $Users=api_store_result($result); - return $Users; + $users=api_store_result($result); + return $users; } + /** Gets the inner join of users and courses table + * @author Julio Montoya + * @return int access url id + * @return array api_store_result of the result + * */ + function get_url_rel_course_data($access_url_id='') + { + $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); + + $sql="SELECT course_code, title, access_url_id + FROM $tbl_course u + INNER JOIN $table_url_rel_course + ON $table_url_rel_course.course_code = code + $where + ORDER BY title, code"; + + $result=api_sql_query($sql,__FILE__,__LINE__); + $courses=api_store_result($result); + return $courses; + } + + /** * Sets the status of an URL 1 or 0 * @author Julio Montoya * @param string lock || unlock * @param int url id * */ - function set_url_status($status,$url_id) + function set_url_status($status, $url_id) { $url_table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL); if ($status=='lock') { @@ -196,37 +238,38 @@ class UrlManager $result = api_sql_query($sql, __FILE__, __LINE__); } } - + /** - * Deletes an url + * Checks the relationship between an URL and a User (return the num_rows) * @author Julio Montoya + * @param int user id * @param int url id * @return boolean true if success * */ - function delete($id) + function relation_url_user_exist($user_id, $url_id) { - $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL); - $sql= "DELETE FROM $table_access_url WHERE id = ".Database::escape_string($id); + $table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $sql= "SELECT user_id FROM $table_url_rel_user WHERE access_url_id = ".Database::escape_string($url_id)." AND user_id = ".Database::escape_string($user_id)." "; $result = api_sql_query($sql, __FILE__, __LINE__); - return $result; + $num = Database::num_rows($result); + return $num; } - /** - * Deletes an url + * Checks the relationship between an URL and a Course (return the num_rows) * @author Julio Montoya * @param int user id * @param int url id * @return boolean true if success * */ - function relation_url_user_exist($user_id, $url_id) + function relation_url_course_exist($course_id, $url_id) { - $table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); - $sql= "SELECT user_id FROM $table_url_rel_user WHERE access_url_id = ".Database::escape_string($url_id)." AND user_id = ".Database::escape_string($user_id)." "; + $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)."'"; $result = api_sql_query($sql, __FILE__, __LINE__); $num = Database::num_rows($result); return $num; - } + } /** * Add a group of users into a group of URLs @@ -234,7 +277,7 @@ class UrlManager * @param array of user_ids * @param array of url_ids * */ - function add_users_to_urls($user_list,$url_list) + 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(); @@ -259,6 +302,37 @@ class UrlManager } + /** + * Add a group of courses into a group of URLs + * @author Julio Montoya + * @param array of course ids + * @param array of url_ids + * */ + function add_courses_to_urls($course_list,$url_list) + { + $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $result_array=array(); + + if (is_array($course_list) && is_array($url_list)){ + foreach ($url_list as $url_id) { + foreach ($course_list as $course_code) { + $count = UrlManager::relation_url_course_exist($course_code,$url_id); + if ($count==0) { + $sql = "INSERT INTO $table_url_rel_course + SET course_code = '".Database::escape_string($course_code)."', access_url_id = ".Database::escape_string($url_id); + $result = api_sql_query($sql, __FILE__, __LINE__); + if($result) + $result_array[$url_id][$course_code]=1; + else + $result_array[$url_id][$course_code]=0; + } + } + } + } + return $result_array; + } + + /** * Add a user into a url * @author Julio Montoya @@ -266,9 +340,10 @@ class UrlManager * @param url_id * @return boolean true if success * */ - function add_user_to_url($user_id,$url_id=1) + 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); if (empty($count)) { $sql = "INSERT INTO $table_url_rel_user @@ -278,10 +353,24 @@ class UrlManager return $result; } + 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; + $count = UrlManager::relation_url_course_exist($course_code,$url_id); + if (empty($count)) { + $sql = "INSERT INTO $table_url_rel_course + SET course_code = '".Database::escape_string($course_code)."', access_url_id = ".Database::escape_string($url_id); + $result = api_sql_query($sql, __FILE__, __LINE__); + } + return $result; + } + /** * Deletes an url and user relationship * @author Julio Montoya + * @param int user id * @param int url id * @return boolean true if success * */ @@ -293,6 +382,21 @@ class UrlManager return $result; } + /** + * Deletes an url and course relationship + * @author Julio Montoya + * @param char course code + * @param int url id + * @return boolean true if success + * */ + function delete_url_rel_course($course_code, $url_id) + { + $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $sql= "DELETE FROM $table_url_rel_course WHERE course_code = '".Database::escape_string($course_code)."' AND access_url_id=".Database::escape_string($url_id)." "; + $result = api_sql_query($sql, __FILE__, __LINE__); + return $result; + } + /** * Updates the url_rel_user table with a given user list * @author Julio Montoya @@ -325,6 +429,53 @@ class UrlManager } } } + + + /** + * Updates the url_rel_user table with a given user list + * @author Julio Montoya + * @param array user list + * @param int access_url_id + * */ + function update_urls_rel_course($course_list,$access_url_id) + { + $table_course = Database :: get_main_table(TABLE_MAIN_COURSE); + $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + + $sql = "SELECT course_code FROM $table_url_rel_user WHERE access_url_id=".Database::escape_string($access_url_id); + $result = api_sql_query($sql,__FILE__,__LINE__ ); + $existing_courses = array(); + + while($row = Database::fetch_array($result)){ + $existing_courses[] = $row['course_code']; + } + + //adding users + foreach($course_list as $course) { + if(!in_array($course, $existing_courses)) { + UrlManager::add_course_to_url($course,$access_url_id); + } + } + + //deleting old users + foreach($existing_courses as $existing_course) { + if(!in_array($existing_course, $course_list)) { + UrlManager::delete_url_rel_course($existing_course,$access_url_id); + } + } + } + + function get_access_url_from_user($user_id) { + $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $table_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL); + $sql = "SELECT url, access_url_id FROM $table_url_rel_user url_rel_user INNER JOIN $table_url u + ON (url_rel_user.access_url_id = u.id) + WHERE user_id = ".Database::escape_string($user_id); + $result = api_sql_query($sql, __FILE__, __LINE__); + $url_list = api_store_result($result); + return $url_list; + } + /** * * */ diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index c61e043a7c..e2981c25e5 100644 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -1,4 +1,4 @@ -0) - { + + if(is_array($extra) AND count($extra)>0) { $res = true; - foreach($extra as $fname => $fvalue) - { + foreach($extra as $fname => $fvalue) { $res = $res && UserManager::update_extra_field($return,$fname,$fvalue); } } @@ -248,6 +246,15 @@ class UserManager $sqlv = "DELETE FROM $t_ufv WHERE user_id = $user_id"; $resv = api_sql_query($sqlv,__FILE__,__LINE__); + global $_configuration; + if ($_configuration['multiple_access_urls']) { + require_once (api_get_path(LIBRARY_PATH).'urlmanager.lib.php'); + $url_id=1; + if (api_get_current_access_url_id()!=-1) + $url_id=api_get_current_access_url_id(); + UrlManager::delete_url_rel_user($user_id,$url_id); + } + return true; } @@ -1363,8 +1370,7 @@ class UserManager // all the options of the field $sql = "SELECT * FROM $table_field_options WHERE field_id='".Database::escape_string($field_id)."' ORDER BY option_order ASC"; $result = api_sql_query($sql,__FILE__,__LINE__); - while ($row = Database::fetch_array($result)) - { + while ($row = Database::fetch_array($result)) { $return['options'][$row['id']] = $row; } return $return; @@ -1380,7 +1386,7 @@ class UserManager function get_personal_session_course_list($user_id) { // Database Table Definitions - $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); + $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE); $tbl_user = Database :: get_main_table(TABLE_MAIN_USER); $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); @@ -1388,6 +1394,18 @@ class UserManager $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); + + //we filter the courses from the URL + $join_access_url=$where_access_url=''; + global $_configuration; + if ($_configuration['multiple_access_urls']==true) { + $access_url_id = api_get_current_access_url_id(); + if($access_url_id!=-1) { + $tbl_url_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $join_access_url= "LEFT JOIN $tbl_url_course url_rel_course ON url_rel_course.course_code= course.code"; + $where_access_url=" AND access_url_id = $access_url_id "; + } + } // variable initialisation $personal_course_list_sql = ''; @@ -1410,13 +1428,13 @@ class UserManager ON course.code = course_rel_user.course_code LEFT JOIN ".$tbl_user_course_category." user_course_category ON course_rel_user.user_course_cat = user_course_category.id - WHERE course_rel_user.user_id = '".$user_id."' + $join_access_url + WHERE course_rel_user.user_id = '".$user_id."' $where_access_url ORDER BY user_course_category.sort, course_rel_user.sort ASC, i"; $course_list_sql_result = api_sql_query($personal_course_list_sql, __FILE__, __LINE__); - while ($result_row = Database::fetch_array($course_list_sql_result)) - { + while ($result_row = Database::fetch_array($course_list_sql_result)) { $personal_course_list[] = $result_row; } @@ -1464,10 +1482,8 @@ class UserManager $sessions = array_merge($sessions , api_store_result($result)); - if(api_is_allowed_to_create_course()) - { - foreach($sessions as $enreg) - { + if(api_is_allowed_to_create_course()) { + foreach($sessions as $enreg) { $id_session = $enreg['id']; $personal_course_list_sql = "SELECT DISTINCT course.code k, course.directory d, course.visual_code c, course.db_name db, course.title i, CONCAT(user.lastname,' ',user.firstname) t, email, course.course_language l, 1 sort, category_code user_course_cat, date_start, date_end, session.id as id_session, session.name as session_name FROM $tbl_session_course as session_course @@ -1483,8 +1499,7 @@ class UserManager $course_list_sql_result = api_sql_query($personal_course_list_sql, __FILE__, __LINE__); - while ($result_row = Database::fetch_array($course_list_sql_result)) - { + while ($result_row = Database::fetch_array($course_list_sql_result)) { $result_row['s'] = 2; $key = $result_row['id_session'].' - '.$result_row['k']; $personal_course_list[$key] = $result_row; @@ -1493,8 +1508,7 @@ class UserManager } - foreach($sessions as $enreg) - { + foreach($sessions as $enreg) { $id_session = $enreg['id']; $personal_course_list_sql = "SELECT DISTINCT course.code k, course.directory d, course.visual_code c, course.db_name db, course.title i, CONCAT(user.lastname,' ',user.firstname) t, email, course.course_language l, 1 sort, category_code user_course_cat, date_start, date_end, session.id as id_session, session.name as session_name, IF(session_course.id_coach = ".$user_id.",'2', '5') FROM $tbl_session_course as session_course @@ -1512,13 +1526,11 @@ class UserManager $course_list_sql_result = api_sql_query($personal_course_list_sql, __FILE__, __LINE__); - while ($result_row = Database::fetch_array($course_list_sql_result)) - { + while ($result_row = Database::fetch_array($course_list_sql_result)) { $key = $result_row['id_session'].' - '.$result_row['k']; $result_row['s'] = $result_row['14']; - if(!isset($personal_course_list[$key])) - { + if(!isset($personal_course_list[$key])) { $personal_course_list[$key] = $result_row; } }