*/ /** * Initialization */ // name of the language file that needs to be included $language_file=array('userInfo'); // resetting the course id $cidReset=true; // including some necessary dokeos files require_once '../inc/global.inc.php'; require_once '../inc/lib/xajax/xajax.inc.php'; api_block_anonymous_users(); $xajax = new xajax(); //$xajax->debugOn(); $xajax -> registerFunction ('search_users'); // setting the section (for the tabs) $this_section = SECTION_PLATFORM_ADMIN; // setting breadcrumbs $this_section = SECTION_SOCIAL; $interbreadcrumb[]= array ('url' =>'home.php','name' => get_lang('Social')); $interbreadcrumb[]= array ('url' =>'groups.php','name' => get_lang('Groups')); // Database Table Definitions $tbl_group = Database::get_main_table(TABLE_MAIN_GROUP); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_group_rel_user = Database::get_main_table(TABLE_MAIN_USER_REL_GROUP); // setting the name of the tool $tool_name = get_lang('SubscribeUsersToGroup'); $group_id = intval($_REQUEST['id']); $add_type = 'multiple'; if(isset($_REQUEST['add_type']) && $_REQUEST['add_type']!=''){ $add_type = Security::remove_XSS($_REQUEST['add_type']); } //checking for extra field with filter on require_once api_get_path(LIBRARY_PATH).'group_portal_manager.lib.php'; //todo @this validation could be in a function in group_portal_manager if (empty($group_id)) { api_not_allowed(); } else { $group_info = GroupPortalManager::get_group_data($group_id); if (empty($group_info)) { api_not_allowed(); } //only admin or moderator can do that if (!GroupPortalManager::is_group_member($group_id)) { api_not_allowed(); } } function search_users($needle,$type) { global $tbl_user,$tbl_group_rel_user,$group_id; $xajax_response = new XajaxResponse(); $return = ''; if (!empty($needle) && !empty($type)) { // xajax send utf8 datas... datas in db can be non-utf8 datas $charset = api_get_system_encoding(); $needle = Database::escape_string($needle); $needle = api_convert_encoding($needle, $charset, 'utf-8'); $user_anonymous=api_get_anonymous_id(); $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username'; $cond_user_id = ''; if (!empty($id_session)) { $group_id = Database::escape_string($group_id); // check id_user from session_rel_user table $sql = 'SELECT id_user FROM '.$tbl_group_rel_user.' WHERE group_id ="'.(int)$group_id.'"'; $res = Database::query($sql); $user_ids = array(); if (Database::num_rows($res) > 0) { while ($row = Database::fetch_row($res)) { $user_ids[] = (int)$row[0]; } } if (count($user_ids) > 0){ $cond_user_id = ' AND user_id NOT IN('.implode(",",$user_ids).')'; } } if ($type == 'single') { // search users where username or firstname or lastname begins likes $needle $sql = 'SELECT user_id, username, lastname, firstname FROM '.$tbl_user.' user WHERE (username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%" OR lastname LIKE "'.$needle.'%") AND user_id<>"'.$user_anonymous.'"'. $order_clause. ' LIMIT 11'; } else { $sql = 'SELECT user_id, username, lastname, firstname FROM '.$tbl_user.' user WHERE '.(api_sort_by_first_name() ? 'firstname' : 'lastname').' LIKE "'.$needle.'%" AND user_id<>"'.$user_anonymous.'"'.$cond_user_id. $order_clause; } global $_configuration; if ($_configuration['multiple_access_urls']) { $tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_id = api_get_current_access_url_id(); if ($access_url_id != -1){ if ($type == 'single') { $sql = 'SELECT user.user_id, username, lastname, firstname FROM '.$tbl_user.' user INNER JOIN '.$tbl_user_rel_access_url.' url_user ON (url_user.user_id=user.user_id) WHERE access_url_id = '.$access_url_id.' AND (username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%" OR lastname LIKE "'.$needle.'%") AND user.user_id<>"'.$user_anonymous.'"'. $order_clause. ' LIMIT 11'; } else { $sql = 'SELECT user.user_id, username, lastname, firstname FROM '.$tbl_user.' user INNER JOIN '.$tbl_user_rel_access_url.' url_user ON (url_user.user_id=user.user_id) WHERE access_url_id = '.$access_url_id.' AND '.(api_sort_by_first_name() ? 'firstname' : 'lastname').' LIKE "'.$needle.'%" AND user.user_id<>"'.$user_anonymous.'"'.$cond_user_id. $order_clause; } } } $rs = Database::query($sql); $i=0; if ($type=='single') { while ($user = Database :: fetch_array($rs)) { $i++; if ($i<=10) { $person_name = api_get_person_name($user['firstname'], $user['lastname']); $return .= ''.$person_name.' ('.$user['username'].')
'; } else { $return .= '...
'; } } $xajax_response -> addAssign('ajax_list_users_single','innerHTML',api_utf8_encode($return)); } else { global $nosessionUsersList; $return .= ''; $xajax_response -> addAssign('ajax_list_users_multiple','innerHTML',api_utf8_encode($return)); } } return $xajax_response; } $xajax -> processRequests(); $htmlHeadXtra[] = $xajax->getJavascript('../inc/lib/xajax/'); $htmlHeadXtra[] = ' '; $form_sent=0; $errorMsg=$firstLetterUser=$firstLetterSession=''; $UserList=$SessionList=array(); $users=$sessions=array(); //Display :: display_header($tool_name, 'Groups'); if ($_POST['form_sent']) { $form_sent = $_POST['form_sent']; $firstLetterUser = $_POST['firstLetterUser']; $firstLetterSession = $_POST['firstLetterSession']; $user_list = $_POST['sessionUsersList']; $group_id = intval($_POST['id']); if(!is_array($user_list)) { $user_list=array(); } if ($form_sent == 1) { //invite this users $result = GroupPortalManager::add_users_to_groups($user_list, array($group_id), GROUP_USER_PERMISSION_PENDING_INVITATION); $title = get_lang('YouAreInvitedToGroup').' '.$group_info['name']; $content = get_lang('YouAreInvitedToGroupContent').' '.$group_info['name'].'
'; $content .= get_lang('ToSubscribeClickInTheLinkBelow').'
'; $content .= ''.get_lang('Subscribe').''; if (is_array($user_list) && count($user_list) > 0) { //send invitation message foreach($user_list as $user_id ){ $result = MessageManager::send_message($user_id, $title, $content); } } } } $nosessionUsersList = $sessionUsersList = array(); $ajax_search = $add_type == 'unique' ? true : false; global $_configuration; $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username'; if ($ajax_search) { $sql="SELECT u.user_id, lastname, firstname, username, group_id FROM $tbl_user u LEFT JOIN $tbl_group_rel_user gu ON (gu.user_id = u.user_id) WHERE gu.group_id = $group_id ". $order_clause; if ($_configuration['multiple_access_urls']) { $tbl_user_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $access_url_id = api_get_current_access_url_id(); if ($access_url_id != -1){ $sql="SELECT u.user_id, lastname, firstname, username, id_session FROM $tbl_user u INNER JOIN $tbl_session_rel_user ON $tbl_session_rel_user.id_user = u.user_id AND $tbl_session_rel_user.id_session = ".intval($id_session)." INNER JOIN $tbl_user_rel_access_url url_user ON (url_user.user_id=u.user_id) WHERE access_url_id = $access_url_id $order_clause"; } } $result=Database::query($sql); $Users=Database::store_result($result); foreach ($Users as $user) { $sessionUsersList[$user['user_id']] = $user ; } } else { $friends = SocialManager::get_friends(api_get_user_id()); $suggest_friends = false; if (!$friends) { $suggest_friends = true; } else { foreach($friends as $friend) { $group_friend_list = GroupPortalManager::get_groups_by_user($friend['friend_user_id'], 0); //var_dump($group_friend_list); $friend_group_id = ''; if (isset($group_friend_list[$group_id]) && $group_friend_list[$group_id]['id'] == $group_id) { $friend_group_id = $group_id; } //var_dump ($group_friend_list[$group_id]['relation_type']); if ($group_friend_list[$group_id]['relation_type'] == '' ) { $Users[$friend['friend_user_id']]=array('user_id' => $friend['friend_user_id'], 'firstname' =>$friend['firstName'], 'lastname' => $friend['lastName'], 'username' =>$friend['username'],'group_id'=>$friend_group_id ); } } } if (is_array($Users) && count($Users) > 0 ) { foreach ($Users as $user) { if($user['group_id'] != $group_id) $nosessionUsersList[$user['user_id']] = $user ; } } //deleting anonymous users $user_anonymous = api_get_anonymous_id(); foreach($nosessionUsersList as $key_user_list =>$value_user_list) { if ($nosessionUsersList[$key_user_list]['user_id']==$user_anonymous) { unset($nosessionUsersList[$key_user_list]); } } } if ($add_type == 'multiple') { $link_add_type_unique = ''.Display::return_icon('single.gif').get_lang('SessionAddTypeUnique').''; $link_add_type_multiple = Display::return_icon('multiple.gif').get_lang('SessionAddTypeMultiple'); } else { $link_add_type_unique = Display::return_icon('single.gif').get_lang('SessionAddTypeUnique'); $link_add_type_multiple = ''.Display::return_icon('multiple.gif').get_lang('SessionAddTypeMultiple').''; } $social_left_content = SocialManager::show_social_menu('invite_friends',$group_id); $social_right_content .= '

'.Security::remove_XSS($group_info['name'], STUDENT, true).'

'; if (count($nosessionUsersList) == 0) { $friends = SocialManager::get_friends(api_get_user_id()); if ($friends == 0) { $social_right_content .= get_lang('YouNeedToHaveFriendsInYourSocialNetwork'); } else { $social_right_content .= get_lang('YouAlreadyInviteAllYourContacts'); } $social_right_content .= '
'; $social_right_content .= ''.get_lang('TryAndFindSomeFriends').''; $social_right_content .= '
'; } if (!empty($_GET['add'])) $add_true = '&add=true'; if ($ajax_search) $ajax = 'onsubmit="valide();"'; $form = '
'; if ($add_type=='multiple') { if (is_array($extra_field_list)) { if (is_array($new_field_list) && count($new_field_list)>0 ) { $form .= '

'.get_lang('FilterUsers').'

'; foreach ($new_field_list as $new_field) { $form .= $new_field['name']; $varname = 'field_'.$new_field['variable']; $form .= ' '; $form .= '  '; } $form .= ''; $form .= '

'; } } } $form .= ''; $form .= ''; $form .= ''; if(!empty($errorMsg)) { $form .= Display::return_message($errorMsg,'error'); //main API } $form .= ''; if ($add_type=='no') { $form .=' '; } $form .= '
'.get_lang('Friends').' : '.get_lang('SendInvitationTo').':
'.get_lang('FirstLetterUser').' :  
'; if (!($add_type=='multiple')) { $form .='
'; } else { $form .= '
'; $form .= '
'; } unset($nosessionUsersList); $form .= '
'; $form .= '
'; if ($ajax_search) { $form .= ''; } else { $form .= '



'; } $form .= '





'; $social_right_content .= $form; //current group members $members = GroupPortalManager::get_users_by_group($group_id, false, array(GROUP_USER_PERMISSION_PENDING_INVITATION)); if (is_array($members) && count($members)>0) { foreach ($members as &$member) { $image_path = UserManager::get_user_picture_path_by_id($member['user_id'], 'web', false, true); $picture = UserManager::get_picture_user($member['user_id'], $image_path['file'],80); $member['image'] = ''; } $social_right_content .= '

'.get_lang('UsersAlreadyInvited').'

'; $social_right_content .= Display::return_sortable_grid('invitation_profile', array(), $members, array('hide_navigation'=>true, 'per_page' => 100), $query_vars, false, array(true, false, true,true)); } $htmlHeadXtra[] = ' '; $tpl = new Template($tool_name); $tpl->set_help('Groups'); $tpl->assign('social_left_content', $social_left_content); $tpl->assign('social_left_menu', $social_left_menu); $tpl->assign('social_right_content', $social_right_content); $social_layout = $tpl->get_template('layout/social_layout.tpl'); $content = $tpl->fetch($social_layout); $tpl->assign('actions', $actions); $tpl->assign('message', $show_message); $tpl->assign('content', $content); $tpl->display_one_col_template();