api_block_anonymous_users(); if (api_get_setting('allow_social_tool') != 'true') { api_not_allowed(); } require_once api_get_path(LIBRARY_PATH) . 'group_portal_manager.lib.php'; $group_id = intval($_GET['id']); $topic_id = intval($_GET['topic_id']); $message_id = intval($_GET['msg_id']); //todo @this validation could be in a function in group_portal_manager if (empty($group_id)) { api_not_allowed(true); } else { $group_info = GroupPortalManager::get_group_data($group_id); if (empty($group_info)) { api_not_allowed(true); } $is_member = GroupPortalManager::is_group_member($group_id); if ($group_info['visibility'] == GROUP_PERMISSION_CLOSED && !$is_member) { api_not_allowed(true); } } if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'delete') { $group_role = GroupPortalManager::get_user_group_role( api_get_user_id(), $group_id );
/** * Sends a message to a user/group * * @param int $receiver_user_id * @param string $subject * @param string $content * @param array $file_attachments files array($_FILES) (optional) * @param array $file_comments about attachment files (optional) * @param int $group_id (optional) * @param int $parent_id (optional) * @param int $edit_message_id id for updating the message (optional) * @param int $topic_id (optional) the default value is the current user_id * @param int $sender_id * @return bool */ public static function send_message($receiver_user_id, $subject, $content, $file_attachments = array(), $file_comments = array(), $group_id = 0, $parent_id = 0, $edit_message_id = 0, $topic_id = 0, $sender_id = null) { $table_message = Database::get_main_table(TABLE_MESSAGE); $group_id = intval($group_id); $receiver_user_id = intval($receiver_user_id); $parent_id = intval($parent_id); $edit_message_id = intval($edit_message_id); $topic_id = intval($topic_id); if (!empty($receiver_user_id)) { $receiverUserInfo = api_get_user_info($receiver_user_id); // Disabling messages for inactive users. if ($receiverUserInfo['active'] == 0) { return false; } } if (empty($sender_id)) { $user_sender_id = api_get_user_id(); } else { $user_sender_id = intval($sender_id); } $total_filesize = 0; if (is_array($file_attachments)) { foreach ($file_attachments as $file_attach) { $total_filesize += $file_attach['size']; } } // Validating fields if (empty($subject) && empty($group_id)) { return get_lang('YouShouldWriteASubject'); } else { if ($total_filesize > intval(api_get_setting('message_max_upload_filesize'))) { return sprintf(get_lang("FilesSizeExceedsX"), format_file_size(api_get_setting('message_max_upload_filesize'))); } } $inbox_last_id = null; //Just in case we replace the and \n and \n\r while saving in the DB $content = str_replace(array("\n", "\n\r"), '<br />', $content); $now = api_get_utc_datetime(); if (!empty($receiver_user_id) || !empty($group_id)) { // message for user friend $clean_subject = Database::escape_string($subject); $clean_content = Database::escape_string($content); //message in inbox for user friend //@todo it's possible to edit a message? yes, only for groups if ($edit_message_id) { $query = " UPDATE {$table_message} SET\n update_date = '" . $now . "',\n content = '{$clean_content}'\n WHERE id = '{$edit_message_id}' "; Database::query($query); $inbox_last_id = $edit_message_id; } else { $query = "INSERT INTO {$table_message} (user_sender_id, user_receiver_id, msg_status, send_date, title, content, group_id, parent_id, update_date ) " . "VALUES ('{$user_sender_id}', '{$receiver_user_id}', '1', '" . $now . "','{$clean_subject}','{$clean_content}','{$group_id}','{$parent_id}', '" . $now . "')"; Database::query($query); $inbox_last_id = Database::insert_id(); } // Save attachment file for inbox messages if (is_array($file_attachments)) { $i = 0; foreach ($file_attachments as $file_attach) { if ($file_attach['error'] == 0) { self::save_message_attachment_file($file_attach, $file_comments[$i], $inbox_last_id, null, $receiver_user_id, $group_id); } $i++; } } if (empty($group_id)) { //message in outbox for user friend or group $sql = "INSERT INTO {$table_message} (user_sender_id, user_receiver_id, msg_status, send_date, title, content, group_id, parent_id, update_date ) " . " VALUES ('{$user_sender_id}', '{$receiver_user_id}', '4', '" . $now . "','{$clean_subject}','{$clean_content}', '{$group_id}', '{$parent_id}', '" . $now . "')"; Database::query($sql); $outbox_last_id = Database::insert_id(); // save attachment file for outbox messages if (is_array($file_attachments)) { $o = 0; foreach ($file_attachments as $file_attach) { if ($file_attach['error'] == 0) { self::save_message_attachment_file($file_attach, $file_comments[$o], $outbox_last_id, $user_sender_id); } $o++; } } } // Load user settings. $notification = new Notification(); $sender_info = api_get_user_info($user_sender_id); if (empty($group_id)) { $notification->save_notification(Notification::NOTIFICATION_TYPE_MESSAGE, array($receiver_user_id), $subject, $content, $sender_info); } else { $group_info = GroupPortalManager::get_group_data($group_id); $group_info['topic_id'] = $topic_id; $group_info['msg_id'] = $inbox_last_id; $user_list = GroupPortalManager::get_users_by_group($group_id, false, array(), 0, 1000); // Adding more sense to the message group $subject = sprintf(get_lang('ThereIsANewMessageInTheGroupX'), $group_info['name']); $new_user_list = array(); foreach ($user_list as $user_data) { $new_user_list[] = $user_data['user_id']; } $group_info = array('group_info' => $group_info, 'user_info' => $sender_info); $notification->save_notification(Notification::NOTIFICATION_TYPE_GROUP, $new_user_list, $subject, $content, $group_info); } return $inbox_last_id; } return false; }
function manage_form($default, $select_from_user_list = null, $sent_to = null) { $group_id = isset($_REQUEST['group_id']) ? intval($_REQUEST['group_id']) : null; $message_id = isset($_GET['message_id']) ? intval($_GET['message_id']) : null; $param_f = isset($_GET['f']) && $_GET['f'] == 'social' ? 'social' : null; $form = new FormValidator('compose_message', null, api_get_self().'?f='.$param_f, null, array('enctype'=>'multipart/form-data')); if (empty($group_id)) { if (isset($select_from_user_list)) { $form->add_textfield( 'id_text_name', get_lang('SendMessageTo'), true, array( 'class' => 'span4', 'id'=>'id_text_name', 'onkeyup'=>'send_request_and_search()', 'autocomplete'=>'off' ) ); $form->addRule('id_text_name', get_lang('ThisFieldIsRequired'), 'required'); $form->addElement('html','<div id="id_div_search" style="padding:0px" class="message-select-box" > </div>'); $form->addElement('hidden','user_list', 0, array('id'=>'user_list')); } else { if (!empty($sent_to)) { $form->addElement('html',$sent_to); } if (empty($default['users'])) { //fb select $form->addElement('select', 'users', get_lang('SendMessageTo'), array(), array('id' => 'users')); } else { $form->addElement('hidden','hidden_user',$default['users'][0],array('id'=>'hidden_user')); } } } else { $group_info = GroupPortalManager::get_group_data($group_id); $form->addElement('label', get_lang('ToGroup'), api_xml_http_response_encode($group_info['name'])); $form->addElement('hidden','group_id',$group_id); $form->addElement('hidden','parent_id',$message_id); } $form->add_textfield('title', get_lang('Subject'), true, array('class' => 'span4')); $form->add_html_editor('content', get_lang('Message'), false, false, array('ToolbarSet' => 'Messages', 'Width' => '95%', 'Height' => '250')); if (isset($_GET['re_id'])) { $message_reply_info = MessageManager::get_message_by_id($_GET['re_id']); $default['title'] = get_lang('MailSubjectReplyShort')." ".$message_reply_info['title']; $form->addElement('hidden','re_id', intval($_GET['re_id'])); $form->addElement('hidden','save_form','save_form'); //adding reply mail $user_reply_info = UserManager::get_user_info_by_id($message_reply_info['user_sender_id']); $default['content'] = '<p><br/></p>'.sprintf(get_lang('XWroteY'), api_get_person_name($user_reply_info['firstname'], $user_reply_info['lastname']), Security::filter_terms($message_reply_info['content'])); } if (empty($group_id)) { $form->addElement('advanced_settings', get_lang('FilesAttachment').'<span id="filepaths"> <div id="filepath_1"> <input type="file" name="attach_1"/><br /> '.get_lang('Description').' <input type="text" name="legend[]" /><br /><br /> </div> </span>'); $form->addElement('advanced_settings','<span id="link-more-attach"><a href="javascript://" onclick="return add_image_form()">'.get_lang('AddOneMoreFile').'</a></span> ('.sprintf(get_lang('MaximunFileSizeX'),format_file_size(api_get_setting('message_max_upload_filesize'))).')'); } $form->addElement('style_submit_button','compose',api_xml_http_response_encode(get_lang('SendMessage')),'class="save"'); $form->setRequiredNote('<span class="form_required">*</span> <small>'.get_lang('ThisFieldIsRequired').'</small>'); if (!empty($group_id) && !empty($message_id)) { $message_info = MessageManager::get_message_by_id($message_id); $default['title'] = get_lang('MailSubjectReplyShort')." ".$message_info['title']; } $form->setDefaults($default); $html = ''; if ($form->validate()) { $check = Security::check_token('post'); if ($check) { $user_list = $default['users']; $file_comments = $_POST['legend']; $title = $default['title']; $content = $default['content']; $group_id = isset($default['group_id']) ? $default['group_id'] : null; $parent_id = isset($default['parent_id']) ? $default['parent_id'] : null; if (is_array($user_list) && count($user_list)> 0) { //all is well, send the message foreach ($user_list as $user) { $res = MessageManager::send_message( $user, $title, $content, $_FILES, $file_comments, $group_id, $parent_id ); if ($res) { if (is_string($res)) { $html .= Display::return_message($res, 'error'); } else { $html .= MessageManager::display_success_message($user); } } } } else { Display::display_error_message('ErrorSendingMessage'); } } Security::clear_token(); } else { $token = Security::get_token(); $form->addElement('hidden','sec_token'); $form->setConstants(array('sec_token' => $token)); $html .= $form->return_form(); } return $html; }
/** * Shows the left column of the group page * @param int $group_id * @param int $user_id * */ public static function show_group_column_information($group_id, $user_id, $show = '') { global $relation_group_title, $my_group_role; $html = ''; $group_info = GroupPortalManager::get_group_data($group_id); // My relation with the group is set here. $my_group_role = self::get_user_group_role($user_id, $group_id); //@todo this must be move to default.css for dev use only $html .= '<style> #group_members { width:270px; height:300px; overflow-x:none; overflow-y: auto;} .group_member_item { width:100px; height:130px; float:left; margin:5px 5px 15px 5px; } .group_member_picture { display:block; margin:0; overflow:hidden; }; </style>'; //Loading group permission $links = ''; switch ($my_group_role) { case GROUP_USER_PERMISSION_READER: // I'm just a reader $relation_group_title = get_lang('IAmAReader'); $links .= '<li><a href="group_invitation.php?id=' . $group_id . '">' . Display::return_icon('invitation_friend.png', get_lang('InviteFriends'), array('hspace' => '6')) . '<span class="' . ($show == 'invite_friends' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('InviteFriends') . '</span></a></li>'; if (GroupPortalManager::canLeave($group_info)) { $links .= '<li><a href="group_view.php?id=' . $group_id . '&action=leave&u=' . api_get_user_id() . '">' . Display::return_icon('group_leave.png', get_lang('LeaveGroup'), array('hspace' => '6')) . '<span class="social-menu-text4" >' . get_lang('LeaveGroup') . '</span></a></li>'; } break; case GROUP_USER_PERMISSION_ADMIN: $relation_group_title = get_lang('IAmAnAdmin'); $links .= '<li><a href="group_edit.php?id=' . $group_id . '">' . Display::return_icon('group_edit.png', get_lang('EditGroup'), array('hspace' => '6')) . '<span class="' . ($show == 'group_edit' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('EditGroup') . '</span></a></li>'; $links .= '<li><a href="group_waiting_list.php?id=' . $group_id . '">' . Display::return_icon('waiting_list.png', get_lang('WaitingList'), array('hspace' => '6')) . '<span class="' . ($show == 'waiting_list' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('WaitingList') . '</span></a></li>'; $links .= '<li><a href="group_invitation.php?id=' . $group_id . '">' . Display::return_icon('invitation_friend.png', get_lang('InviteFriends'), array('hspace' => '6')) . '<span class="' . ($show == 'invite_friends' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('InviteFriends') . '</span></a></li>'; if (GroupPortalManager::canLeave($group_info)) { $links .= '<li><a href="group_view.php?id=' . $group_id . '&action=leave&u=' . api_get_user_id() . '">' . Display::return_icon('group_leave.png', get_lang('LeaveGroup'), array('hspace' => '6')) . '<span class="social-menu-text4" >' . get_lang('LeaveGroup') . '</span></a></li>'; } break; case GROUP_USER_PERMISSION_PENDING_INVITATION: // $links .= '<li><a href="groups.php?id='.$group_id.'&action=join&u='.api_get_user_id().'">'.Display::return_icon('addd.gif', get_lang('YouHaveBeenInvitedJoinNow'), array('hspace'=>'6')).'<span class="social-menu-text4" >'.get_lang('YouHaveBeenInvitedJoinNow').'</span></a></li>'; break; case GROUP_USER_PERMISSION_PENDING_INVITATION_SENT_BY_USER: $relation_group_title = get_lang('WaitingForAdminResponse'); break; case GROUP_USER_PERMISSION_MODERATOR: $relation_group_title = get_lang('IAmAModerator'); if ($group_info['visibility'] == GROUP_PERMISSION_CLOSED) { $links .= '<li><a href="group_waiting_list.php?id=' . $group_id . '">' . Display::return_icon('waiting_list.png', get_lang('WaitingList'), array('hspace' => '6')) . '<span class="' . ($show == 'waiting_list' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('WaitingList') . '</span></a></li>'; } $links .= '<li><a href="group_invitation.php?id=' . $group_id . '">' . Display::return_icon('invitation_friend.png', get_lang('InviteFriends'), array('hspace' => '6')) . '<span class="' . ($show == 'invite_friends' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('InviteFriends') . '</span></a></li>'; if (GroupPortalManager::canLeave($group_info)) { $links .= '<li><a href="group_view.php?id=' . $group_id . '&action=leave&u=' . api_get_user_id() . '">' . Display::return_icon('group_leave.png', get_lang('LeaveGroup'), array('hspace' => '6')) . '<span class="social-menu-text4" >' . get_lang('LeaveGroup') . '</span></a></li>'; } break; case GROUP_USER_PERMISSION_HRM: $relation_group_title = get_lang('IAmAHRM'); $links .= '<li><a href="' . api_get_path(WEB_CODE_PATH) . 'social/message_for_group_form.inc.php?view_panel=1&height=400&width=610&&user_friend=' . api_get_user_id() . '&group_id=' . $group_id . '&action=add_message_group" class="ajax" data-size="lg" data-title="' . get_lang('ComposeMessage') . ' title="' . get_lang('ComposeMessage') . '">' . Display::return_icon('new-message.png', get_lang('NewTopic'), array('hspace' => '6')) . '<span class="social-menu-text4" >' . get_lang('NewTopic') . '</span></a></li>'; $links .= '<li><a href="group_view.php?id=' . $group_id . '">' . Display::return_icon('message_list.png', get_lang('MessageList'), array('hspace' => '6')) . '<span class="' . ($show == 'messages_list' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('MessageList') . '</span></a></li>'; $links .= '<li><a href="group_invitation.php?id=' . $group_id . '">' . Display::return_icon('invitation_friend.png', get_lang('InviteFriends'), array('hspace' => '6')) . '<span class="' . ($show == 'invite_friends' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('InviteFriends') . '</span></a></li>'; $links .= '<li><a href="group_members.php?id=' . $group_id . '">' . Display::return_icon('member_list.png', get_lang('MemberList'), array('hspace' => '6')) . '<span class="' . ($show == 'member_list' ? 'social-menu-text-active' : 'social-menu-text4') . '" >' . get_lang('MemberList') . '</span></a></li>'; $links .= '<li><a href="group_view.php?id=' . $group_id . '&action=leave&u=' . api_get_user_id() . '">' . Display::return_icon('delete_data.gif', get_lang('LeaveGroup'), array('hspace' => '6')) . '<span class="social-menu-text4" >' . get_lang('LeaveGroup') . '</span></a></li>'; break; default: //$links .= '<li><a href="groups.php?id='.$group_id.'&action=join&u='.api_get_user_id().'">'.Display::return_icon('addd.gif', get_lang('JoinGroup'), array('hspace'=>'6')).'<span class="social-menu-text4" >'.get_lang('JoinGroup').'</a></span></li>'; break; } if (!empty($links)) { $html .= '<div class="well sidebar-nav"><ul class="nav nav-list">'; if (!empty($group_info['description'])) { $html .= Display::tag('li', Security::remove_XSS($group_info['description'], STUDENT, true), array('class' => 'group_description')); } $html .= $links; $html .= '</ul></div>'; } return $html; }
/** * Shows the avatar block in social pages * * @param string highlight link possible values: group_add, home, messages, messages_inbox, messages_compose ,messages_outbox ,invitations, shared_profile, friends, groups search * @param int group id * @param int user id * */ public static function show_social_avatar_block($show = '', $group_id = 0, $user_id = 0) { if (empty($user_id)) { $user_id = api_get_user_id(); } $show_groups = array( 'groups', 'group_messages', 'messages_list', 'group_add', 'mygroups', 'group_edit', 'member_list', 'invite_friends', 'waiting_list', 'browse_groups' ); // get count unread message and total invitations $count_unread_message = MessageManager::get_number_of_messages(true); $count_unread_message = !empty($count_unread_message) ? Display::badge($count_unread_message) : null; $number_of_new_messages_of_friend = SocialManager::get_message_number_invitation_by_user_id(api_get_user_id()); $group_pending_invitations = GroupPortalManager::get_groups_by_user(api_get_user_id(), GROUP_USER_PERMISSION_PENDING_INVITATION, false); $group_pending_invitations = count($group_pending_invitations); $total_invitations = $number_of_new_messages_of_friend + $group_pending_invitations; $total_invitations = (!empty($total_invitations) ? Display::badge($total_invitations) : ''); $showUserImage = user_is_online($user_id) || api_is_platform_admin(); $html = '<div>'; if (in_array($show, $show_groups) && !empty($group_id)) { //--- Group image $group_info = GroupPortalManager::get_group_data($group_id); $big = GroupPortalManager::get_picture_group($group_id, $group_info['picture_uri'], 160, GROUP_IMAGE_SIZE_BIG); $html .= '<div class="social-content-image">'; $html .= '<div class="well social-background-content">'; $html .= Display::url('<img src='.$big['file'].' class="social-groups-image" /> </a><br /><br />', api_get_path(WEB_CODE_PATH).'social/groups.php?id='.$group_id); if (GroupPortalManager::is_group_admin($group_id, api_get_user_id())) { $html .= '<div id="edit_image" class="hidden_message" style="display:none"> <a href="'.api_get_path(WEB_CODE_PATH).'social/group_edit.php?id='.$group_id.'">'. get_lang('EditGroup').'</a></div>'; } $html .= '</div>'; $html .= '</div>'; } else { if ($showUserImage) { $img_array = UserManager::get_user_picture_path_by_id($user_id, 'web', true, true); } else { $img_array = UserManager::get_user_picture_path_by_id(null, 'web', true, true); } $big_image = UserManager::get_picture_user($user_id, $img_array['file'], '', USER_IMAGE_SIZE_BIG); $big_image = $big_image['file'].'?'.uniqid(); $normal_image = $img_array['dir'].$img_array['file'].'?'.uniqid(); //--- User image $html .= '<div class="well social-background-content">'; if ($img_array['file'] != 'unknown.jpg') { $html .= '<a class="thumbnail thickbox" href="'.$big_image.'"><img src='.$normal_image.' /> </a>'; } else { $html .= '<img src='.$normal_image.' width="110px" />'; } if (api_get_user_id() == $user_id) { $html .= '<div id="edit_image" class="hidden_message" style="display:none">'; $html .= '<a href="'.api_get_path(WEB_CODE_PATH).'auth/profile.php">'.get_lang('EditProfile').'</a></div>'; } $html .= '</div>'; } $html .= '</div>'; return $html; }