From: moodler Date: Tue, 28 Dec 2004 13:49:15 +0000 (+0000) Subject: Latest messaging system X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=e8e2d7f12ff30e5fd5e8f61b41cb829bbc3fefef;p=moodle.git Latest messaging system Needs a lot of work still but you can now manage your contact list and send/receive messages from people so it's usable! --- diff --git a/message/history.php b/message/history.php new file mode 100644 index 0000000000..43ef2bbefc --- /dev/null +++ b/message/history.php @@ -0,0 +1,17 @@ + diff --git a/message/index.php b/message/index.php index c1a0f7d62e..0fed964cad 100644 --- a/message/index.php +++ b/message/index.php @@ -4,26 +4,44 @@ require('../config.php'); require('lib.php'); -$tab = optional_param('tab', 'contacts'); -$ftab = 'message_print_'.$tab; +require_login(0, false); +/// optional variables that may be passed in +$tab = optional_param('tab', 'contacts'); // current tab - default to contacts +$addcontact = optional_param('addcontact', false); // adding a contact +$removecontact = optional_param('removecontact', false); // removing a contact +$blockcontact = optional_param('blockcontact', false); // blocking a contact +$unblockcontact = optional_param('unblockcontact', false); // unblocking a contact +if (($addcontact !== false) and confirm_sesskey()) message_add_contact($addcontact); +if (($removecontact !== false) and confirm_sesskey()) message_remove_contact($removecontact); +if (($blockcontact !== false) and confirm_sesskey()) message_block_contact($blockcontact); +if (($unblockcontact !== false) and confirm_sesskey()) message_unblock_contact($unblockcontact); +/// a print function is associated with each tab +$tabprintfunction = 'message_print_'.$tab; -print_header(get_string('messaging').' - '.$SITE->fullname); + +print_header(get_string('messages', 'message').' - '.$SITE->fullname); ?> - +
- - - + + + -
contactssearchsettings + contacts + + search + + settings +
- + +
diff --git a/message/lib.php b/message/lib.php index 326dbfb2d2..6d87aead93 100644 --- a/message/lib.php +++ b/message/lib.php @@ -1,15 +1,211 @@ id, '', 'id, contactid'); - echo 'contacts'; + global $USER, $CFG; + + $timetoshowusers = 300; //Seconds default + if (isset($CFG->block_online_users_timetosee)) { + $timetoshowusers = $CFG->block_online_users_timetosee * 60; + } + $timefrom = time()-$timetoshowusers; + + + /// get lists of contacts and unread messages + $onlinecontacts = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.picture + FROM {$CFG->prefix}user u, {$CFG->prefix}message_contacts mc + WHERE mc.userid='$USER->id' AND u.id=mc.contactid AND u.lastaccess>=$timefrom + AND mc.blocked='0' + ORDER BY u.lastaccess DESC"); + + $offlinecontacts = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.picture + FROM {$CFG->prefix}user u, {$CFG->prefix}message_contacts mc + WHERE mc.userid='$USER->id' AND u.id=mc.contactid AND u.lastaccess<$timefrom + AND mc.blocked='0' + ORDER BY u.lastaccess DESC"); + + $unreadmessages = get_records_sql("SELECT m.id, m.useridfrom, u.firstname, u.lastname, u.picture + FROM {$CFG->prefix}user u, {$CFG->prefix}message m + WHERE m.useridto='$USER->id' AND u.id=m.useridfrom"); + + $blockedcontacts = get_records_select('message_contacts', "userid='$USER->id' AND blocked='1'", '', 'contactid, id'); + + + echo ''; + echo ''; + + +/// print out list of online contacts + echo ''; + echo ''; + + +/// print out list of offline contacts + echo ''; + echo ''; + + +/// Cycle through messages and extract those that are from unknown contacts +/// We can take advantage of the keys for $onlinecontacts and $offlinecontacts +/// which are set to the userid and therefore we just need to see if the key +/// exists in either of those arrays +/// We can also discard any messages from users in our blocked contact list + $unknownmessages = array(); + if (!empty($unreadmessages)) { + /// make sure we have valid arrays to test against - they may be boolean false + if (empty($onlinecontacts)) $onlinecontacts = array(); + if (empty($offlinecontacts)) $offlinecontacts = array(); + if (empty($blockedcontacts)) $blockedcontacts = array(); + foreach ($unreadmessages as $unreadmessage) { + if (array_key_exists($unreadmessage->useridfrom, $onlinecontacts) or + array_key_exists($unreadmessage->useridfrom, $offlinecontacts) or + array_key_exists($unreadmessage->useridfrom, $blockedcontacts) ) { + continue; + } + if (!isset($unknownmessages[$unreadmessage->useridfrom])) { + $message = $unreadmessage; + $message->count = 1; + $unknownmessages[$unreadmessage->useridfrom] = $message; + } else { + $unknownmessages[$unreadmessage->useridfrom]->count++; + } + } + } + +/// print out list of incoming contacts + if (!empty($unknownmessages)) { + echo ''; + echo ''; + echo ''; + } + + echo '
'.get_string('mycontacts', 'message').'
 '; + + $countcontacts = (is_array($onlinecontacts)) ? count($onlinecontacts) : 0; + + echo ''; + echo ''; + + if (!empty($onlinecontacts)) { + foreach ($onlinecontacts as $contact) { + if ($contact->blocked == 1) continue; + $strcontact = ''; + /// are there any unread messages for this contact? + if (($unread = message_count_messages($unreadmessages, 'useridfrom', $contact->id)) > 0) { + $strcontact .= '( '.get_string('unreadmessages', 'message', $unread).')'; + } + /// link to remove from contact list + $strcontact .= ' ['. + get_string('removecontact', 'message').']'; + + echo ''; + echo ''; + echo ''; + echo ''; + } + } + echo ''; + echo '
'; + echo ''.get_string('onlinecontacts', 'message', $countcontacts).''; + echo '
'; + print_user_picture($contact->id, SITEID, $contact->picture, 20, false, false); + echo ''; + link_to_popup_window("/message/user.php?id=$contact->id", "message_$contact->id", fullname($contact), 400, 400, get_string('sendmessageto', 'message', fullname($contact))); + echo '
 
'; + + echo '
 '; + + $countcontacts = (is_array($offlinecontacts)) ? count($offlinecontacts) : 0; + + echo ''; + echo ''; + + if (!empty($offlinecontacts)) { + foreach ($offlinecontacts as $contact) { + if ($contact->blocked == 1) continue; + $strcontact = ''; + /// are there any unread messages for this contact? + if (($unread = message_count_messages($unreadmessages, 'useridfrom', $contact->id)) > 0) { + $strcontact .= '( '.get_string('unreadmessages', 'message', $unread).')'; + } + /// link to remove from contact list + $strcontact .= ' ['. + get_string('removecontact', 'message').']'; + + echo ''; + echo ''; + echo ''; + echo ''; + } + } + echo ''; + echo '
'; + echo ''.get_string('offlinecontacts', 'message', $countcontacts).''; + echo '
'; + print_user_picture($contact->id, SITEID, $contact->picture, 20, false, false); + echo ''; + link_to_popup_window("/message/user.php?id=$contact->id", "message_$contact->id", fullname($contact), 400, 400, get_string('sendmessageto', 'message', fullname($contact))); + echo '
 
'; + + echo '
'; + echo ''.get_string('incomingcontacts', 'message', count($unknownmessages)).''; + echo '
 '; + + echo ''; + foreach ($unknownmessages as $messageuser) { + $strcontact = '( '.get_string('unreadmessages', 'message', $messageuser->count).')'; + /// link to add to contact list + $strcontact .= ' ['. + get_string('addcontact', 'message').']'; + $strblock = '['. + get_string('blockcontact', 'message').']'; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo '
'; + print_user_picture($messageuser->useridfrom, SITEID, $messageuser->picture, 20, false, false); + echo ''; + link_to_popup_window("/message/user.php?id=$messageuser->useridfrom", "message_$messageuser->useridfrom", fullname($messageuser), 400, 400, get_string('sendmessageto', 'message', fullname($messageuser))); + echo '
'; + echo '
'; +} + + + + +/// $messagearray is an array of objects +/// $field is a valid property of object +/// $value is the value $field should equal to be counted +/// if $field is empty then return count of the whole array +/// if $field is non-existent then return 0; +function message_count_messages($messagearray, $field='', $value='') { + if (!is_array($messagearray)) return 0; + if ($field == '' or empty($messagearray)) return count($messagearray); + + $count = 0; + foreach ($messagearray as $message) { + $count += ($message->$field == $value) ? 1 : 0; + } + return $count; } + function message_print_search() { global $USER; @@ -18,7 +214,6 @@ function message_print_search() { message_print_search_results($frm); } else { - /// todo make the following queries more efficient if ($teachers = get_records('user_teachers', 'userid', $USER->id, '', 'id, course')) { $courses = get_courses('all', 'c.sortorder ASC', 'c.id, c.shortname'); @@ -34,21 +229,450 @@ function message_print_search() { } function message_print_settings() { + global $ME, $USER; + if ($frm = data_submitted()) { - echo 'settings submitted - quick do something'; + $pref = array(); + $pref['message_showmessagewindow'] = (isset($frm->showmessagewindow)) ? '1' : '0'; + $pref['message_beepnewmessage'] = (isset($frm->beepnewmessage)) ? '1' : '0'; + $pref['message_maxmessages'] = ((int)$frm->maxmessages > 0) ? (int)$frm->maxmessages : '20'; + $pref['message_deletemessagesdays'] = ((int)($frm->deletemessagesdays) > 0) ? (int)$frm->deletemessagesdays : '30'; + $pref['message_emailmessages'] = (isset($frm->emailmessages)) ? '1' : '0'; + $pref['message_emailaddress'] = (!empty($frm->emailaddress)) ? $frm->emailaddress : $USER->email; + $pref['message_emailformat'] = (isset($frm->emailformat)) ? $frm->emailformat : FORMAT_PLAIN; + $pref['message_emailtimenosee'] = ((int)$frm->emailtimenosee > 0) ? (int)$frm->emailtimenosee : '10'; + + set_user_preferences($pref); + + redirect($ME, get_string('settingssaved', 'message'), 3); + } + + $cbshowmessagewindow = (get_user_preferences('message_showmessagewindow', 1) == '1') ? 'checked="checked"' : ''; + $cbbeepnewmessage = (get_user_preferences('message_beepnewmessage', 1) == '1') ? 'checked="checked"' : ''; + $txmaxmessages = get_user_preferences('message_maxmessages', 20); + $txdeletemessagesdays = get_user_preferences('message_deletemessagesdays', 30); + $cbemailmessages = (get_user_preferences('message_emailmessages', 1) == '1') ? 'checked="checked"' : ''; + $txemailaddress = get_user_preferences('message_emailaddress', $USER->email); + $txemailtimenosee = get_user_preferences('message_emailtimenosee', 10); + $format_select = choose_from_menu( array(FORMAT_PLAIN => get_string('formatplain'), + FORMAT_HTML => get_string('formathtml')), + 'emailformat', + get_user_preferences('message_emailformat', FORMAT_PLAIN), + false, '', '0', true ); + + include('settings.html'); +} + + + +function message_add_contact($contactid, $blocked=0) { + global $USER; + + if (!record_exists('user', 'id', $contactid)) { // invalid userid + return false; + } + + if (($contact = get_record('message_contacts', 'userid', $USER->id, 'contactid', $contactid)) !== false) { + /// record already exists - we may be changing blocking status + + if ($contact->blocked !== $blocked) { + /// change to blocking status + $contact->blocked = $blocked; + return update_record('message_contacts', $contact); + } else { + /// no changes to blocking status + return true; + } + } else { - echo 'settings form'; + /// new contact record + unset($contact); + $contact->userid = $USER->id; + $contact->contactid = $contactid; + $contact->blocked = $blocked; + return insert_record('message_contacts', $contact, false); } } +function message_remove_contact($contactid) { + global $USER; + + return delete_records('message_contacts', 'userid', $USER->id, 'contactid', $contactid); +} + +function message_unblock_contact($contactid) { + return message_add_contact($contactid, 0); +} + +function message_block_contact($contactid) { + return message_add_contact($contactid, 1); +} + +function message_get_contact($contactid) { + global $USER; + return get_record('message_contacts', 'userid', $USER->id, 'contactid', $contactid); +} + + + function message_print_search_results($frm) { - if (!empty($frm->personsubmit)) { - echo 'searched for person'; - } else if (!empty($frm->keywordssubmit)) { - echo 'searched for keywords'; + global $USER; + + echo '
'; + + /// search for person + if (!empty($frm->personsubmit) and !empty($frm->name)) { + + if ($frm->mycourses) { + $users = array(); + $mycourses = get_my_courses($USER->id); + foreach ($mycourses as $mycourse) { + if (is_array($susers = message_search_users($mycourse->id, $frm->name))) { + foreach ($susers as $suser) $users[$suser->id] = $suser; + } + } + } else { + $users = message_search_users(SITEID, $frm->name); + } + + if (!empty($users)) { + echo ''.get_string('userssearchresults', 'message', count($users)).''; + echo ''; + foreach ($users as $user) { + if (($contact = message_get_contact($user->id)) !== false) { + if ($contact->blocked == 0) { /// not blocked + $strcontact = '['. + get_string('removecontact', 'message').']'; + $strblock = '['. + get_string('blockcontact', 'message').']'; + } else { // blocked + $strcontact = '['. + get_string('addcontact', 'message').']'; + $strblock = '['. + get_string('unblockcontact', 'message').']'; + + } + + } else { + $strcontact = '['. + get_string('addcontact', 'message').']'; + $strblock = '['. + get_string('blockcontact', 'message').']'; + + } + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + } + echo '
'; + print_user_picture($user->id, SITEID, $user->picture, 20, false, false); + echo ''; + link_to_popup_window("/message/user.php?id=$user->id", "message_$user->id", fullname($user), 400, 400, get_string('sendmessageto', 'message', fullname($user))); + echo '
'; + + } else { + notify(get_string('nosearchresults', 'message')); + } + + + /// search messages for keywords + } else if (!empty($frm->keywordssubmit) and !empty($frm->keywords)) { + $keywords = explode(' ', $frm->keywords); + $tome = false; + $fromme = false; + $courseid = 'none'; + + switch ($frm->keywordsoption) { + case 'tome': + $tome = true; + break; + case 'fromme': + $fromme = true; + break; + case 'allmine': + $tome = true; + $fromme = true; + break; + case 'allusers': + $courseid = SITEID; + break; + case 'courseusers': + $courseid = $frm->courseid; + break; + default: + $tome = true; + $fromme = true; + } + + if (($messages = message_search($keywords, $fromme, $tome, $courseid)) !== false) { + + /// get a list of contacts + $contacts = get_records_sql("SELECT contactid, blocked FROM {$CFG->prefix}message_contacts + WHERE userid='$USER->id'"); + + echo ''.get_string('keywordssearchresults', 'message', count($messages)).''; + echo ''; + + foreach ($messages as $message) { + /// ignore messages from blocked users + if ((!$frm->includeblocked) and isset($contacts[$message->useridfrom]) and ($contacts[$message->useridfrom]->blocked == 1)) { + continue; + } + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo '
'; + print_user_picture($message->useridfrom, SITEID, $message->picture, 20, false, false); + echo ''; + link_to_popup_window("/message/user.php?id=$message->useridfrom", "message_$message->useridfrom", fullname($message), 400, 400, get_string('sendmessageto', 'message', fullname($message))); + echo ''.message_shorten_message($message->message, 20).'
'; + + } else { + notify(get_string('nosearchresults', 'message')); + } + + + /// what the ????, probably an empty search string, duh! + } else { + notify(get_string('emptysearchstring', 'message')); + } + + print_single_button($ME, array( 'tab' => 'search'), get_string('newsearch', 'message') ); + + echo '
'; +} + + + + +/** + * Search through course users + * + * If $coursid specifies the site course then this function searches + * through all undeleted and confirmed users + * + * @uses $CFG + * @uses SITEID + * @param int $courseid The course in question. + * @param string $searchtext ? + * @param string $sort ? + * @param string $exceptions ? + * @return array An array of {@link $USER} records. + * @todo Finish documenting this function + */ +function message_search_users($courseid, $searchtext, $sort='', $exceptions='') { + global $CFG; + + switch ($CFG->dbtype) { + case 'mysql': + $fullname = ' CONCAT(u.firstname," ",u.lastname) '; + $LIKE = 'LIKE'; + break; + case 'postgres7': + $fullname = " u.firstname||' '||u.lastname "; + $LIKE = 'ILIKE'; + break; + default: + $fullname = ' u.firstname||" "||u.lastname '; + $LIKE = 'ILIKE'; + } + + if (!empty($exceptions)) { + $except = ' AND u.id NOT IN ('. $exceptions .') '; + } else { + $except = ''; + } + + if (!empty($sort)) { + $order = ' ORDER BY '. $sort; + } else { + $order = ''; + } + + $select = 'u.deleted = \'0\' AND u.confirmed = \'1\''; + + if (!$courseid or $courseid == SITEID) { + return get_records_sql("SELECT u.id, u.firstname, u.lastname + FROM {$CFG->prefix}user u + WHERE $select + AND ($fullname $LIKE '%$searchtext%') + $except $order"); + } else { + + + if (!$teachers = get_records_sql("SELECT u.id, u.firstname, u.lastname + FROM {$CFG->prefix}user u, + {$CFG->prefix}user_teachers s + WHERE $select AND s.course = '$courseid' AND s.userid = u.id + AND ($fullname $LIKE '%$searchtext%') + $except $order")) { + $teachers = array(); + } + if (!$students = get_records_sql("SELECT u.id, u.firstname, u.lastname + FROM {$CFG->prefix}user u, + {$CFG->prefix}user_students s + WHERE $select AND s.course = '$courseid' AND s.userid = u.id + AND ($fullname $LIKE '%$searchtext%') + $except $order")) { + $students = array(); + } + return $teachers + $students; + } +} + + + + +function message_search($searchterms, $fromme=true, $tome=true, $courseid='none') { +/// Returns a list of posts found using an array of search terms +/// eg word +word -word +/// + + global $CFG, $USER; + + /// Some differences in syntax for PostgreSQL + if ($CFG->dbtype == "postgres7") { + $LIKE = "ILIKE"; // case-insensitive + $NOTLIKE = "NOT ILIKE"; // case-insensitive + $REGEXP = "~*"; + $NOTREGEXP = "!~*"; + } else { + $LIKE = "LIKE"; + $NOTLIKE = "NOT LIKE"; + $REGEXP = "REGEXP"; + $NOTREGEXP = "NOT REGEXP"; + } + + $messagesearch = ""; + + foreach ($searchterms as $searchterm) { + if (strlen($searchterm) < 2) { + continue; + } + if ($messagesearch) { + $messagesearch .= " AND "; + } + + if (substr($searchterm,0,1) == "+") { + $searchterm = substr($searchterm,1); + $messagesearch .= " m.message $REGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' "; + } else if (substr($searchterm,0,1) == "-") { + $searchterm = substr($searchterm,1); + $messagesearch .= " m.message $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' "; + } else { + $messagesearch .= " m.message $LIKE '%$searchterm%' "; + } } - print_single_button($ME, array( 'tab' => 'search'), get_string('newsearch') ); + + $messagesearch = "($messagesearch) "; + + + ///////////////////////////////////// + + if ($courseid !== SITEID) { + if ($courseid == 'none') { + if ($fromme and $tome) $messagesearch .= "AND (m.useridfrom='$USER->id' OR m.useridto='$USER->id') "; + elseif ($fromme) $messagesearch .= "AND m.useridfrom='$USER->id' "; + elseif ($tome) $messagesearch .= "AND m.useridto='$USER->id' "; + } else { + /// Code in here for searching for messages between users in a particular course + /// This is not implemented at present because of potential abuse issues + /// Temporary measure, in case we ever get here is all the users messages + $messagesearch .= "AND (m.useridto='$USER->id' OR m.useridfrom='$USER->id') "; + } + } + + $messages = array(); + + if (($m_unread = get_records_sql("SELECT m.id, m.useridfrom, m.message, u.firstname, u.lastname, u.picture + FROM {$CFG->prefix}user u, {$CFG->prefix}message m + WHERE $messagesearch AND u.id=m.useridfrom ") ) !== false) { + foreach ($m_unread as $m) $messages[] = $m; + } + + if (($m_read = get_records_sql("SELECT m.id, m.useridfrom, m.message_read, u.firstname, u.lastname, u.picture + FROM {$CFG->prefix}user u, {$CFG->prefix}message m + WHERE $messagesearch AND u.id=m.useridfrom ") ) !== false) { + foreach ($m_read as $m) $messages[] = $m; + } + + /////////////////////////////////////// + + return (empty($messages)) ? false : $messages; } + + +/// Borrowed with changes from mod/forum/lib.php +function message_shorten_message($message, $minlength=0) { +// Given a post object that we already know has a long message +// this function truncates the message nicely to the first +// sane place between $CFG->forum_longpost and $CFG->forum_shortpost + + $i = 0; + $tag = false; + $length = strlen($message); + $count = 0; + $stopzone = false; + $truncate = 0; + if ($minlength == 0) $minlength = MESSAGE_SHORTLENGTH; + + + for ($i=0; $i<$length; $i++) { + $char = $message[$i]; + + switch ($char) { + case "<": + $tag = true; + break; + case ">": + $tag = false; + break; + default: + if (!$tag) { + if ($stopzone) { + if ($char == '.' or $char == ' ') { + $truncate = $i+1; + break 2; + } + } + $count++; + } + break; + } + if (!$stopzone) { + if ($count > $minlength) { + $stopzone = true; + } + } + } + + if (!$truncate) { + $truncate = $i; + } + + return substr($message, 0, $truncate); +} + + + ?> diff --git a/message/search.html b/message/search.html index 0981c63267..2edb85051d 100644 --- a/message/search.html +++ b/message/search.html @@ -1,11 +1,12 @@
+ - + @@ -13,29 +14,42 @@ - + + + - + - - + + - - - + + + + + + + + + - + - - +'; + +*/ + +?>
:
 

::
 
'.get_string('allstudents', 'message').'
   '.$cs.';
diff --git a/message/settings.html b/message/settings.html new file mode 100644 index 0000000000..bd771dd93e --- /dev/null +++ b/message/settings.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
/>
/>


/>
 :
 : +
 :

+ +
diff --git a/message/user.php b/message/user.php new file mode 100644 index 0000000000..528c728639 --- /dev/null +++ b/message/user.php @@ -0,0 +1,188 @@ + + + <?php echo get_string('discussion', 'message').': '.fullname($user) ?> + + + + + + + Sorry, but support for Frames is required to use Messaging + + '; + echo ''.print_user_picture($user->id, SITEID, $user->picture, true, true, false).''; + echo ''; + echo fullname($user); + echo '
'; + if ($user->lastaccess) { + $datestring = get_string('ago', 'message', format_time(time() - $user->lastaccess)); + } else { + $datestring = get_string("never"); + } + echo get_string("lastaccess").":", $datestring; + echo ''; + echo ''; + echo ''; + echo ''; // Close possible theme tables off + break; + + case 'messages': /// Print the main frame containing the current chat + $THEME->body = '#FFFFFF'; + print_header(); + echo '\n\n"; + break; + + case 'refresh': /// Print the main frame containing the current chat + header("Expires: Sun, 28 Dec 1997 09:32:45 GMT"); + header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); + header("Cache-Control: no-cache, must-revalidate"); + header("Pragma: no-cache"); + header("Content-Type: text/html"); + header("Refresh: 5; url=user.php?id=$user->id&frame=refresh"); + + echo ''; + if ($messages = get_records_select('message', "useridto = '$USER->id' AND useridfrom = '$user->id'", + 'timecreated')) { + foreach ($messages as $message) { + $time = userdate($message->timecreated, get_string('strftimemessage', 'chat')); + + $options = NULL; + $options->para = false; + $options->newlines = true; + $printmessage = format_text($message->message, $message->format, $options, 0); + $printmessage = str_replace("\r", ' ', $printmessage); + $printmessage = str_replace("\n", ' ', $printmessage); + $printmessage = '

'.$user->firstname.' ['.$time.']: '. + $printmessage.'

'; + echo '\n\n"; + + /// Move the entry to the other table + $message->timeread = time(); + $message->message = addslashes($message->message); + $messageid = $message->id; + unset($message->id); + if (insert_record('message_read', $message)) { + delete_records('message', 'id', $messageid); + } + } + echo '\n\n"; + } + $timeago = time() - $user->lastaccess; + if ($user->lastaccess and $timeago > 300) { + echo '\n\n"; + } + echo ''; + break; + + case 'edit': /// Print the bottom frame with the text editor + + /// Check that the user is not blocking us!! + if ($contact = get_record('message_contacts', 'userid', $user->id, 'contact', $USER->id)) { + if ($contact->blocked) { + print_heading(get_string('userisblockingyou', 'message')); + exit; + } + } + + $message = trim($message); + + if ($message and confirm_sesskey()) { /// Current user has just sent a message + + /// Save it to the database... + $savemessage = NULL; + $savemessage->useridfrom = $USER->id; + $savemessage->useridto = $user->id; + $savemessage->message = $message; + $savemessage->format = $format; + $savemessage->timecreated = time(); + $savemessage->messagetype = 'direct'; + + if (!insert_record('message', $savemessage)) { + notify('Error: Message was not sent!!'); + } + + /// Format the message as HTML + $options = NULL; + $options->para = false; + $options->newlines = true; + $message = format_text($message, $format, $options, 0); + $message = str_replace("\r", ' ', $message); + $message = str_replace("\n", ' ', $message); + + /// Then write it to our own screen immediately + $time = userdate(time(), get_string('strftimemessage', 'chat')); + $message = '

'.$USER->firstname.' ['.$time.']: '.$message.'

'; + + $script = "\n\n"; + + add_to_log(SITEID, 'message', 'write', 'history.php?user='.$user->id.'&time='.time(), $user->id); + } else { + $script = ''; + } + + print_header('','','','',$script,false,'','',false,''); + + echo '
'; + echo '
'; + echo ''; + echo ''; + echo ''; + + $usehtmleditor = can_use_html_editor(); + $usehtmleditor = false; // REMOVE + print_textarea($usehtmleditor, 5, 50, 450, 200, 'message', ''); + if ($usehtmleditor) { + use_html_editor("message"); + } + echo '
'; + echo ''; + echo '
'; + echo '
'; + + break; + + } + +?>