Skip to content

Commit

Permalink
Merge branch 'MDL-48933-master' of git://github.com/FMCorz/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
danpoltawski committed Feb 3, 2015
2 parents cc70e0f + aa6409c commit 8c506df
Show file tree
Hide file tree
Showing 18 changed files with 2,025 additions and 10 deletions.
9 changes: 7 additions & 2 deletions blocks/online_users/block_online_users.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ function has_config() {
}

function get_content() {
global $USER, $CFG, $DB, $OUTPUT;
global $USER, $CFG, $DB, $OUTPUT, $PAGE;

if ($this->content !== NULL) {
return $this->content;
Expand Down Expand Up @@ -167,6 +167,7 @@ function get_content() {
if (isloggedin() && has_capability('moodle/site:sendmessage', $this->page->context)
&& !empty($CFG->messaging) && !isguestuser()) {
$canshowicon = true;
message_messenger_requirejs();
} else {
$canshowicon = false;
}
Expand All @@ -185,7 +186,11 @@ function get_content() {
}
if ($canshowicon and ($USER->id != $user->id) and !isguestuser($user)) { // Only when logged in and messaging active etc
$anchortagcontents = '<img class="iconsmall" src="'.$OUTPUT->pix_url('t/message') . '" alt="'. get_string('messageselectadd') .'" />';
$anchortag = '<a href="'.$CFG->wwwroot.'/message/index.php?id='.$user->id.'" title="'.get_string('messageselectadd').'">'.$anchortagcontents .'</a>';
$anchorurl = new moodle_url('/message/index.php', array('id' => $user->id));
$anchortag = html_writer::link($anchorurl, $anchortagcontents, array_merge(
message_messenger_sendmessage_link_params($user),
array('title' => get_string('messageselectadd'))
));

$this->content->text .= '<div class="message">'.$anchortag.'</div>';
}
Expand Down
5 changes: 5 additions & 0 deletions lang/en/message.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
$string['emptysearchstring'] = 'You must search for something';
$string['enabled'] = 'Enabled';
$string['errorcallingprocessor'] = 'Error calling defined output';
$string['errorwhilesendingmessage'] = 'An error occured while sending the message, please try again later.';
$string['errortranslatingdefault'] = 'Error translating default setting provided by plugin, using system defaults instead.';
$string['eventmessagecontactadded'] = 'Message contact added';
$string['eventmessagecontactblocked'] = 'Message contact blocked';
Expand Down Expand Up @@ -85,7 +86,9 @@
$string['messagehistory'] = 'Message history';
$string['messagehistoryfull'] = 'All messages';
$string['messagenavigation'] = 'Message navigation:';
$string['messagetosend'] = 'Message to send';
$string['messages'] = 'Messages';
$string['messagesent'] = 'Message sent';
$string['messaging'] = 'Messaging';
$string['messagingblockednoncontact'] = '{$a} will not be able to reply as you have blocked non-contacts';
$string['messagingdisabled'] = 'Messaging is disabled on this site, emails will be sent instead';
Expand Down Expand Up @@ -125,6 +128,7 @@
$string['searchcombined'] = 'Search people and messages';
$string['sendingvia'] = 'Sending "{$a->provider}" via "{$a->processor}"';
$string['sendingviawhen'] = 'Sending "{$a->provider}" via "{$a->processor}" when {$a->state}';
$string['sendingmessage'] = 'Sending message';
$string['sendmessage'] = 'Send message';
$string['sendmessageto'] = 'Send message to {$a}';
$string['sendmessagetopopup'] = 'Send message to {$a} - new window';
Expand All @@ -143,3 +147,4 @@
$string['userisblockingyou'] = 'This user has blocked you from sending messages to them';
$string['userisblockingyounoncontact'] = '{$a} only accepts messages from their contacts.';
$string['userssearchresults'] = 'Users found: {$a}';
$string['viewconversation'] = 'View conversation';
76 changes: 76 additions & 0 deletions message/ajax.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle 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 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Message ajax.
*
* @package core_message
* @copyright 2015 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

define('AJAX_SCRIPT', true);

require('../config.php');
require_once($CFG->libdir . '/filelib.php');
require_once(__DIR__ . '/lib.php');

// Only real logged in users.
require_login(null, false, null, true, true);
if (isguestuser()) {
throw new require_login_exception();
}

// Messaging needs to be enabled.
if (empty($CFG->messaging)) {
throw new moodle_exception('disabled', 'core_message');
}

require_sesskey();
$action = optional_param('action', null, PARAM_ALPHA);
$response = null;

switch ($action) {

// Sending a message.
case 'sendmessage':

require_capability('moodle/site:sendmessage', context_system::instance());

$userid = required_param('userid', PARAM_INT);
if (empty($userid) || isguestuser($userid) || $userid == $USER->id) {
// Cannot send messags to self, nobody or a guest.
throw new coding_exception('Invalid user to send the message to');
}

$message = required_param('message', PARAM_RAW);
$user2 = core_user::get_user($userid);
$messageid = message_post_message($USER, $user2, $message, FORMAT_MOODLE);

if (!$messageid) {
throw new moodle_exception('errorwhilesendingmessage', 'core_message');
}

$response = array();
break;
}

if ($response !== null) {
echo json_encode($response);
exit();
}

throw new coding_exception('Invalid request');
46 changes: 46 additions & 0 deletions message/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -2660,3 +2660,49 @@ function message_get_messages($useridto, $useridfrom = 0, $notifications = -1, $
$messages = $DB->get_records_sql($sql, $params, $limitfrom, $limitnum);
return $messages;
}

/**
* Requires the JS libraries to send a message using a dialog.
*
* @return void
*/
function message_messenger_requirejs() {
global $PAGE;

static $done = false;
if ($done) {
return;
}

$PAGE->requires->yui_module(
array('moodle-core_message-messenger'),
'Y.M.core_message.messenger.init',
array(array())
);
$PAGE->requires->strings_for_js(array(
'errorwhilesendingmessage',
'messagesent',
'messagetosend',
'sendingmessage',
'sendmessage',
'viewconversation',
), 'core_message');
$PAGE->requires->string_for_js('error', 'core');

$done = true;
}

/**
* Returns the attributes to place on a link to open the 'Send message' dialog.
*
* @param object $user User object.
* @return void
*/
function message_messenger_sendmessage_link_params($user) {
return array(
'data-trigger' => 'core_message-messenger::sendmessage',
'data-fullname' => fullname($user),
'data-userid' => $user->id,
'role' => 'button'
);
}
53 changes: 53 additions & 0 deletions message/tests/behat/send_message.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
@core @core_message
Feature: Users can send messages to each other
In order to communicate with another user
As a user
I can send private messages

Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| user1 | User | One | one@asd.com |
| user2 | User | Two | two@asd.com |

@javascript
Scenario: Using the 'Send message' dialog on one's profile
Given I log in as "admin"
And I set the following administration settings values:
| forceloginforprofiles | 0 |
And I log out
And I log in as "user1"
And I navigate to "Messages" node in "My profile"
And I set the field "Search people and messages" to "User Two"
And I press "Search people and messages"
And I follow "Picture of User Two"
When I follow "Send a message"
And I set the field "Message to send" to "Lorem ipsum sa messagus textus"
And I press "Send message"
And I navigate to "Messages" node in "My profile"
And I set the field "Search people and messages" to "User Two"
And I press "Search people and messages"
And I follow "Send message to User Two"
Then I should see "Lorem ipsum sa messagus textus"

@javascript
Scenario: Using the 'Send message' dialog on one's course profile
Given the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "course enrolments" exist:
| user | course | role |
| user1 | C1 | student |
| user2 | C1 | student |
And I log in as "user1"
And I follow "Course 1"
And I follow "Participants"
And I follow "User Two"
When I follow "Send a message"
And I set the field "Message to send" to "Lorem ipsum sa messagus textus"
And I press "Send message"
And I navigate to "Messages" node in "My profile"
And I set the field "Search people and messages" to "User Two"
And I press "Search people and messages"
And I follow "Send message to User Two"
Then I should see "Lorem ipsum sa messagus textus"
Loading

0 comments on commit 8c506df

Please sign in to comment.