diff --git a/admin/index.php b/admin/index.php index 1863f18739a..9a4c1162f97 100644 --- a/admin/index.php +++ b/admin/index.php @@ -165,6 +165,7 @@ // Install core message providers message_update_providers(); + message_update_providers('message'); /// This is used to handle any settings that must exist in $CFG but which do not exist in /// admin_get_root()/$ADMIN as admin_setting objects (there are some exceptions). @@ -332,6 +333,7 @@ // Update core message providers message_update_providers(); + message_update_providers('message'); if (set_config("version", $version)) { remove_dir($CFG->dataroot . '/cache', true); // flush cache diff --git a/lang/en_utf8/message.php b/lang/en_utf8/message.php index 275ce4d33a6..985bad91ecd 100644 --- a/lang/en_utf8/message.php +++ b/lang/en_utf8/message.php @@ -83,6 +83,6 @@ $string['noframesjs'] = 'No frames and JavaScript'; $string['providerstag'] = 'Source: '; $string['processortag'] = 'Destination: '; $string['cannotsavemessageprefs'] = 'Could not save user messaging preferences'; - +$string['messageprovider:instantmessage'] = 'User to User Instant Message'; ?> diff --git a/lib/messagelib.php b/lib/messagelib.php index 363b881ec5d..bf39affcd7f 100644 --- a/lib/messagelib.php +++ b/lib/messagelib.php @@ -57,7 +57,7 @@ function message_send_handler($eventdata){ } else { $userstate = 'loggedin'; } - + /// Create the message object $savemessage = new object(); $savemessage->useridfrom = $eventdata->userfrom->id; @@ -95,9 +95,8 @@ function message_send_handler($eventdata){ } else { // Process the message /// Store unread message just in case we can not send it - $savemessage->id = $DB->insert_record('message', $savemessage); - - + $savemessage->id = $DB->insert_record('message', $savemessage); + /// Try to deliver the message to each processor $processorlist = explode(',', $processor); foreach ($processorlist as $procname) { diff --git a/message/discussion.php b/message/discussion.php index 025d0a62e66..75b2d91dda5 100644 --- a/message/discussion.php +++ b/message/discussion.php @@ -197,7 +197,7 @@ $options = new object(); $options->para = false; $options->newlines = true; - + $params = array('uid1'=>$USER->id ,'userid1'=>$userid, 'start1'=>$start, 'uid2'=>$USER->id ,'userid2'=>$userid, 'start2'=>$start); if ($newonly) { $lastsql1 = " AND timecreated > :last1"; @@ -209,6 +209,7 @@ $lastsql2 = ""; } + //LR: change here the way to if ($messages = $DB->get_records_select('message_read', "(useridto = :uid1 AND useridfrom = :userid1 AND timeread > :start1 $lastsql1) OR (useridto = :userid2 AND useridfrom = :uid2 AND timeread > :start2 $lastsql2)", $params)) { foreach ($messages as $message) { $time = userdate($message->timecreated, get_string('strftimedatetimeshort')); @@ -219,7 +220,11 @@ $fullname = $userfullname; } - $printmessage = format_text($message->message, $message->format, $options, 0); + if ($message->format == FORMAT_HTML){ + $printmessage = format_text($message->fullmessagehtml, $message->format, $options, 0); + } else{ + $printmessage = format_text($message->fullmessage, $message->format, $options, 0); + } $printmessage = '
'.$fullname.' '. '['.$time.']: '. ''.$printmessage.'
'; @@ -236,8 +241,12 @@ if ($messages = $DB->get_records_select('message', "useridto = :userid1 AND useridfrom = :uid1 $lastsql1", $params)) { foreach ($messages as $message) { $time = userdate($message->timecreated, get_string('strftimedatetimeshort')); - - $printmessage = format_text($message->message, $message->format, $options, 0); + + if ($message->format == FORMAT_HTML){ + $printmessage = format_text($message->fullmessagehtml, $message->format, $options, 0); + } else{ + $printmessage = format_text($message->fullmessage, $message->format, $options, 0); + } $printmessage = '
'.$mefullname.' '. '['.$time.']: '. ''.$printmessage.'
'; @@ -250,7 +259,35 @@ $allmessages[$sortkey] = $printmessage; } } - + /*Get still to be read message, use message/lib.php funtion*/ + $messages = message_get_popup_messages($USER->id, $userid); + if ($messages) { + foreach ($messages as $message) { + $time = userdate($message->timecreated, get_string('strftimedatetimeshort')); + + if ($message->format == FORMAT_HTML){ + $printmessage = format_text($message->fullmessagehtml, $message->format, $options, 0); + } else{ + $printmessage = format_text($message->fullmessage, $message->format, $options, 0); + } + $printmessage = '
'.$userfullname.' '. + '['.$time.']: '. + ''.$printmessage.'
'; + $i=0; + $sortkey = $message->timecreated."$i"; // we need string bacause we would run out of int range + while (array_key_exists($sortkey, $allmessages)) { + $i++; + $sortkey = $message->timecreated."$i"; + } + $allmessages[$sortkey] = $printmessage; + + if ($message->timecreated < $start) { + $start = $message->timecreated; // move start back so that we see all current history + } + } + $playbeep = true; + } + /* old code, to be deleted if ($messages = $DB->get_records_select('message', "useridto = :uid2 AND useridfrom = userid2 $lastsql2", $params)) { foreach ($messages as $message) { $time = userdate($message->timecreated, get_string('strftimedatetimeshort')); @@ -280,7 +317,7 @@ } } $playbeep = true; - } + }*/ krsort($allmessages); diff --git a/message/edit.php b/message/edit.php index ed57a42d093..34b7f8731ae 100644 --- a/message/edit.php +++ b/message/edit.php @@ -142,7 +142,7 @@ if ( ($form = data_submitted()) && confirm_sesskey()) { $preferences = new object(); //get the message general preferences -$preferences->showmessagewindow = get_user_preferences( 'message_showmessagewindow', '', $user->id); +$preferences->showmessagewindow = get_user_preferences( 'message_showmessagewindow', 1, $user->id); $preferences->blocknoncontacts = get_user_preferences( 'message_blocknoncontacts', '', $user->id); $preferences->beepnewmessage = get_user_preferences( 'message_beepnewmessage', '', $user->id); $preferences->noframesjs = get_user_preferences( 'message_noframesjs', '', $user->id); diff --git a/message/lib.php b/message/lib.php index f1b710f5a98..9a26a84c36f 100644 --- a/message/lib.php +++ b/message/lib.php @@ -946,92 +946,19 @@ function message_format_message(&$message, &$user, $format='', $keywords='', $cl */ function message_post_message($userfrom, $userto, $message, $format, $messagetype) { global $CFG, $SITE, $USER, $DB; - -/// Set up current language to suit the receiver of the message - $savelang = $USER->lang; - - if (!empty($userto->lang)) { - $USER->lang = $userto->lang; - } $eventdata = new object(); - $eventdata->modulename = 'moodle'; + $eventdata->component = 'message'; + $eventdata->name = 'instantmessage'; $eventdata->userfrom = $userfrom; $eventdata->userto = $userto; - $eventdata->subject = "MESSAGE"; + $eventdata->subject = "IM"; $eventdata->fullmessage = $message; $eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessagehtml = ''; $eventdata->smallmessage = ''; - events_trigger('message_send', $eventdata); + return events_trigger('message_send', $eventdata); - -/// Save the new message in the database - - $savemessage = NULL; - $savemessage->useridfrom = $userfrom->id; - $savemessage->useridto = $userto->id; - $savemessage->message = $message; - $savemessage->format = $format; - $savemessage->timecreated = time(); - $savemessage->messagetype = 'direct'; - - if ($CFG->messaging) { - //if (!$savemessage->id = $DB->insert_record('message', $savemessage)) { - // return false; - //} - $emailforced = false; - } else { // $CFG->messaging is not on, we need to force sending of emails - $emailforced = true; - $savemessage->id = true; - } - -/// Check to see if anything else needs to be done with it - - $preference = (object)get_user_preferences(NULL, NULL, $userto->id); - - if ($emailforced || (!isset($preference->message_emailmessages) || $preference->message_emailmessages)) { // Receiver wants mail forwarding - if (!isset($preference->message_emailtimenosee)) { - $preference->message_emailtimenosee = 10; - } - if (!isset($preference->message_emailformat)) { - $preference->message_emailformat = FORMAT_HTML; - } - if ($emailforced || (time() - $userto->lastaccess) > ((int)$preference->message_emailtimenosee * 60)) { // Long enough - - $tagline = get_string('emailtagline', 'message', $SITE->shortname); - - $messagesubject = preg_replace('/\s+/', ' ', strip_tags($message)); // make sure it's all on one line - $messagesubject = message_shorten_message($messagesubject, 30).'...'; - - $messagetext = format_text_email($message, $format). - "\n\n--\n".$tagline."\n"."$CFG->wwwroot/message/index.php?popup=1"; - - if (isset($preference->message_emailformat) and $preference->message_emailformat == FORMAT_HTML) { - $messagehtml = format_text($message, $format); - // MDL-10294, do not print link if messaging is disabled - if ($CFG->messaging) { - $messagehtml .= '

'.$tagline.'

'; - } - } else { - $messagehtml = NULL; - } - - if (!empty($preference->message_emailaddress)) { - $userto->email = $preference->message_emailaddress; // Use custom messaging address - } - - if (email_to_user($userto, $userfrom, $messagesubject, $messagetext, $messagehtml)) { - $CFG->messagewasjustemailed = true; - } - - sleep(3); - } - } - - $USER->lang = $savelang; // restore original language - - return $savemessage->id; } @@ -1091,4 +1018,37 @@ function message_print_contactlist_user($contact, $incontactlist = true){ echo ''; } +function message_get_popup_messages($destuserid, $fromuserid=NULL){ + global $DB; + + $processor = $DB->get_record('message_processors', array('name' => 'popup')); + + $messagesproc = $DB->get_records('message_working', array('processorid'=>$processor->id)); + + //for every message to process check if it's for current user and process + $messages = array(); + foreach ($messagesproc as $msgp){ + $query = array('id'=>$msgp->unreadmessageid, 'useridto'=>$destuserid); + if ($fromuserid){ + $query['useridfrom'] = $fromuserid; + } + if ($message = $DB->get_record('message', $query)){ + $messages[] = $message; + /// Move the entry to the other table + $message->timeread = time(); + $messageid = $message->id; + unset($message->id); + + //delete what we've processed and check if can move message + $DB->delete_records('message_working', array('id' => $msgp->id)); + if ( $DB->count_records('message_working', array('unreadmessageid'=>$messageid)) == 0){ + if ($DB->insert_record('message_read', $message)) { + $DB->delete_records('message', array('id' => $messageid)); + } + } + } + } + return $messages; +} + ?> diff --git a/message/output/popup/popup_interface.php b/message/output/popup/popup_interface.php deleted file mode 100644 index d475851b16c..00000000000 --- a/message/output/popup/popup_interface.php +++ /dev/null @@ -1,70 +0,0 @@ -dirroot.'/user/profile/lib.php'); - - -$processor = $DB->get_record('message_processors', array('name' => 'popup')); - -$messagesproc = $DB->get_records('message_working', array('processorid'=>$processor->id)); - -//for every message to process check if it's for current user and process -foreach ($messagesproc as $msgp){ - $message = $DB->get_record('message', array('id'=>$msgp->unreadmessageid, 'useridto'=>$USER->id)); - if (!$message){ - continue; - } - - //this is the show for now --> SHOULD BE SOMETHING ELSE... - echo "Usr from: ".$message->useridfrom." to: ".$message->useridto." subject:".$message->subject."
"; - - /// Move the entry to the other table - $message->timeread = time(); - $messageid = $message->id; - unset($message->id); - - //delete what we've processed and check if can move message - $DB->delete_records('message_working', array('id' => $msgp->id)); - if ( $DB->count_records('message_working', array('unreadmessageid'=>$messageid)) == 0){ - if ($DB->insert_record('message_read', $message)) { - $DB->delete_records('message', array('id' => $messageid)); - } - } - -} - -?> diff --git a/message/refresh.php b/message/refresh.php index 5b098ec20f0..b2c10748759 100644 --- a/message/refresh.php +++ b/message/refresh.php @@ -1,6 +1,7 @@ id, $userid); + if ($messages ) { + foreach ($messages as $message) { + $time = userdate($message->timecreated, get_string('strftimedatetimeshort')); + + $options = new object(); + $options->para = false; + $options->newlines = true; + if ($message->format == FORMAT_HTML){ + $printmessage = format_text($message->fullmessagehtml, $message->format, $options, 0); + } else{ + $printmessage = format_text($message->fullmessage, $message->format, $options, 0); + } + $printmessage = '
'.s($userfullname).' '. + '['.$time.']: '. + ''.$printmessage.'
'; + $printmessage = addslashes_js($printmessage); // So Javascript can write it + echo "parent.messages.document.write('".$printmessage."');\n"; + } + if (get_user_preferences('message_beepnewmessage', 0)) { + $playbeep = true; + } + echo 'parent.messages.scroll(1,5000000);'."\n"; + echo 'parent.send.focus();'."\n"; + $wait = MESSAGE_DEFAULT_REFRESH; + } else { + if ($wait < 300) { // Until the wait is five minutes + $wait = ceil(1.2 * (float)$wait); // Exponential growth + } + } + /* old code to be deleted if ($messages = $DB->get_records('message', array('useridto'=>$USER->id, 'useridfrom'=>$userid), 'timecreated')) { foreach ($messages as $message) { $time = userdate($message->timecreated, get_string('strftimedatetimeshort')); @@ -80,7 +113,7 @@ $wait = ceil(1.2 * (float)$wait); // Exponential growth } } - +*/ echo '-->'."\n"; echo ''."\n"; echo ''."\n";