mirror of
https://github.com/moodle/moodle.git
synced 2025-04-21 00:12:56 +02:00
MDL-63211 core: update core to use new APIs
This commit is contained in:
parent
beeadbf783
commit
f219eac7b4
@ -4182,7 +4182,7 @@ EOD;
|
||||
|
||||
// Check to see if we should be displaying a message button.
|
||||
if (!empty($CFG->messaging) && $USER->id != $user->id && has_capability('moodle/site:sendmessage', $context)) {
|
||||
$iscontact = !empty(message_get_contact($user->id));
|
||||
$iscontact = \core_message\api::is_contact($USER->id, $user->id);
|
||||
$contacttitle = $iscontact ? 'removefromyourcontacts' : 'addtoyourcontacts';
|
||||
$contacturlaction = $iscontact ? 'removecontact' : 'addcontact';
|
||||
$contactimage = $iscontact ? 'removecontact' : 'addcontact';
|
||||
|
@ -1 +1 @@
|
||||
define(["jquery","core/ajax","core/templates","core/notification","core/str","core/config","core/custom_interaction_events","core_message/message_area_events"],function(a,b,c,d,e,f,g,h){function i(a){this.messageArea=a,this._init()}var j={PROFILE:"[data-region='profile']",PROFILEADDCONTACT:"[data-action='profile-add-contact']",PROFILEBLOCKCONTACT:"[data-action='profile-block-contact']",PROFILEREMOVECONTACT:"[data-action='profile-remove-contact']",PROFILESENDMESSAGE:"[data-action='profile-send-message']",PROFILEUNBLOCKCONTACT:"[data-action='profile-unblock-contact']",PROFILEVIEW:"[data-action='profile-view']",SHOWCONTACTS:"[data-action='show-contacts']",MESSAGESAREA:"[data-region='messages-area']",MESSAGINGAREA:"[data-region='messaging-area']"};return i.prototype.messageArea=null,i.prototype._init=function(){g.define(this.messageArea.node,[g.events.activate]),this.messageArea.onCustomEvent(h.CONTACTSELECTED,this._viewProfile.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEVIEW,function(a,b){this._viewFullProfile(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILESENDMESSAGE,function(a,b){this._sendMessage(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEUNBLOCKCONTACT,function(a,b){this._unblockContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEBLOCKCONTACT,function(a,b){this._blockContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEADDCONTACT,function(a,b){this._addContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEREMOVECONTACT,function(a,b){this._removeContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.SHOWCONTACTS,this._hideMessagingArea.bind(this))},i.prototype._viewProfile=function(a,e){c.render("core/loading",{}).done(function(a,b){c.replaceNodeContents(this.messageArea.find(j.MESSAGESAREA),a,b)}.bind(this));var f=b.call([{methodname:"core_message_data_for_messagearea_get_profile",args:{currentuserid:this.messageArea.getCurrentUserId(),otheruserid:e}}]);return f[0].then(function(a){return c.render("core_message/message_area_profile",a)}).then(function(a,b){c.replaceNodeContents(this.messageArea.find(j.MESSAGESAREA),a,b)}.bind(this)).fail(d.exception)},i.prototype._viewFullProfile=function(){window.location.href=f.wwwroot+"/user/profile.php?id="+this._getUserId()},i.prototype._sendMessage=function(){this.messageArea.trigger(h.SENDMESSAGE,this._getUserId())},i.prototype._blockContact=function(){var a=this._performAction("core_message_block_contacts","unblockcontact","profile-block-contact","profile-unblock-contact","");return a.then(function(){this.messageArea.trigger(h.CONTACTBLOCKED,this._getUserId())}.bind(this))},i.prototype._unblockContact=function(){var a=this._performAction("core_message_unblock_contacts","blockcontact","profile-unblock-contact","profile-block-contact","danger");return a.then(function(){this.messageArea.trigger(h.CONTACTUNBLOCKED,this._getUserId())}.bind(this))},i.prototype._addContact=function(){var a=this._performAction("core_message_create_contacts","removecontact","profile-add-contact","profile-remove-contact","danger");return a.then(function(){this.messageArea.trigger(h.CONTACTADDED,this._getUserId())}.bind(this))},i.prototype._removeContact=function(){var a=this._performAction("core_message_delete_contacts","addcontact","profile-remove-contact","profile-add-contact","");return a.then(function(){this.messageArea.trigger(h.CONTACTREMOVED,this._getUserId())}.bind(this))},i.prototype._performAction=function(a,c,f,g,h){var i=b.call([{methodname:a,args:{userid:this.messageArea.getCurrentUserId(),userids:[this._getUserId()]}}]);return i[0].then(function(){return e.get_string(c,"message")}).then(function(a){this._changeText(a,f,g,h)}.bind(this)).fail(d.exception)},i.prototype._changeText=function(a,b,c,d){var e=this.messageArea.find("[data-action='"+b+"']");e.text(a),e.removeClass(),d&&e.addClass(d),e.attr("data-action",c)},i.prototype._getUserId=function(){return this.messageArea.find(j.PROFILE).data("userid")},i.prototype._hideMessagingArea=function(){this.messageArea.find(j.MESSAGINGAREA).removeClass("show-messages").addClass("hide-messages")},i});
|
||||
define(["jquery","core/ajax","core/templates","core/notification","core/str","core/config","core/custom_interaction_events","core_message/message_area_events"],function(a,b,c,d,e,f,g,h){function i(a){this.messageArea=a,this._init()}var j={PROFILE:"[data-region='profile']",PROFILEADDCONTACT:"[data-action='profile-add-contact']",PROFILEBLOCKCONTACT:"[data-action='profile-block-contact']",PROFILEREMOVECONTACT:"[data-action='profile-remove-contact']",PROFILESENDMESSAGE:"[data-action='profile-send-message']",PROFILEUNBLOCKCONTACT:"[data-action='profile-unblock-contact']",PROFILEVIEW:"[data-action='profile-view']",SHOWCONTACTS:"[data-action='show-contacts']",MESSAGESAREA:"[data-region='messages-area']",MESSAGINGAREA:"[data-region='messaging-area']"};return i.prototype.messageArea=null,i.prototype._init=function(){g.define(this.messageArea.node,[g.events.activate]),this.messageArea.onCustomEvent(h.CONTACTSELECTED,this._viewProfile.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEVIEW,function(a,b){this._viewFullProfile(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILESENDMESSAGE,function(a,b){this._sendMessage(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEUNBLOCKCONTACT,function(a,b){this._unblockContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEBLOCKCONTACT,function(a,b){this._blockContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEADDCONTACT,function(a,b){this._addContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.PROFILEREMOVECONTACT,function(a,b){this._removeContact(),b.originalEvent.preventDefault()}.bind(this)),this.messageArea.onDelegateEvent(g.events.activate,j.SHOWCONTACTS,this._hideMessagingArea.bind(this))},i.prototype._viewProfile=function(a,e){c.render("core/loading",{}).done(function(a,b){c.replaceNodeContents(this.messageArea.find(j.MESSAGESAREA),a,b)}.bind(this));var f=b.call([{methodname:"core_message_data_for_messagearea_get_profile",args:{currentuserid:this.messageArea.getCurrentUserId(),otheruserid:e}}]);return f[0].then(function(a){return c.render("core_message/message_area_profile",a)}).then(function(a,b){c.replaceNodeContents(this.messageArea.find(j.MESSAGESAREA),a,b)}.bind(this)).fail(d.exception)},i.prototype._viewFullProfile=function(){window.location.href=f.wwwroot+"/user/profile.php?id="+this._getUserId()},i.prototype._sendMessage=function(){this.messageArea.trigger(h.SENDMESSAGE,this._getUserId())},i.prototype._blockContact=function(){var a=this._performAction("core_message_block_user","unblockcontact","profile-block-contact","profile-unblock-contact","");return a.then(function(){this.messageArea.trigger(h.CONTACTBLOCKED,this._getUserId())}.bind(this))},i.prototype._unblockContact=function(){var a=this._performAction("core_message_unblock_user","blockcontact","profile-unblock-contact","profile-block-contact","danger");return a.then(function(){this.messageArea.trigger(h.CONTACTUNBLOCKED,this._getUserId())}.bind(this))},i.prototype._addContact=function(){var a=this._performAction("core_message_create_contact_request","removecontact","profile-add-contact","profile-remove-contact","danger");return a.then(function(){this.messageArea.trigger(h.CONTACTADDED,this._getUserId())}.bind(this))},i.prototype._removeContact=function(){var a=this._performAction("core_message_delete_contacts","addcontact","profile-remove-contact","profile-add-contact","");return a.then(function(){this.messageArea.trigger(h.CONTACTREMOVED,this._getUserId())}.bind(this))},i.prototype._performAction=function(a,c,f,g,h){var i="";switch(a){case"core_message_block_user":i={userid:this.messageArea.getCurrentUserId(),blockeduserid:this._getUserId()};break;case"core_message_unblock_user":i={userid:this.messageArea.getCurrentUserId(),unblockeduserid:this._getUserId()};break;case"core_message_create_contact_request":i={userid:this.messageArea.getCurrentUserId(),requesteduserid:this._getUserId()};break;default:i={userid:this.messageArea.getCurrentUserId(),userids:[this._getUserId()]}}var j=b.call([{methodname:a,args:i}]);return j[0].then(function(){return e.get_string(c,"message")}).then(function(a){this._changeText(a,f,g,h)}.bind(this)).fail(d.exception)},i.prototype._changeText=function(a,b,c,d){var e=this.messageArea.find("[data-action='"+b+"']");e.text(a),e.removeClass(),d&&e.addClass(d),e.attr("data-action",c)},i.prototype._getUserId=function(){return this.messageArea.find(j.PROFILE).data("userid")},i.prototype._hideMessagingArea=function(){this.messageArea.find(j.MESSAGINGAREA).removeClass("show-messages").addClass("hide-messages")},i});
|
@ -153,7 +153,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
|
||||
* @private
|
||||
*/
|
||||
Profile.prototype._blockContact = function() {
|
||||
var action = this._performAction('core_message_block_contacts', 'unblockcontact', 'profile-block-contact',
|
||||
var action = this._performAction('core_message_block_user', 'unblockcontact', 'profile-block-contact',
|
||||
'profile-unblock-contact', '');
|
||||
return action.then(function() {
|
||||
this.messageArea.trigger(Events.CONTACTBLOCKED, this._getUserId());
|
||||
@ -167,7 +167,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
|
||||
* @private
|
||||
*/
|
||||
Profile.prototype._unblockContact = function() {
|
||||
var action = this._performAction('core_message_unblock_contacts', 'blockcontact', 'profile-unblock-contact',
|
||||
var action = this._performAction('core_message_unblock_user', 'blockcontact', 'profile-unblock-contact',
|
||||
'profile-block-contact', 'danger');
|
||||
return action.then(function() {
|
||||
this.messageArea.trigger(Events.CONTACTUNBLOCKED, this._getUserId());
|
||||
@ -181,7 +181,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
|
||||
* @private
|
||||
*/
|
||||
Profile.prototype._addContact = function() {
|
||||
var action = this._performAction('core_message_create_contacts', 'removecontact', 'profile-add-contact',
|
||||
var action = this._performAction('core_message_create_contact_request', 'removecontact', 'profile-add-contact',
|
||||
'profile-remove-contact', 'danger');
|
||||
return action.then(function() {
|
||||
this.messageArea.trigger(Events.CONTACTADDED, this._getUserId());
|
||||
@ -214,14 +214,40 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
|
||||
* @private
|
||||
*/
|
||||
Profile.prototype._performAction = function(service, string, oldaction, newaction, newclass) {
|
||||
// This is a temporary hack as we are getting rid of this UI.
|
||||
var userargs = '';
|
||||
switch (service) {
|
||||
case 'core_message_block_user':
|
||||
userargs = {
|
||||
userid: this.messageArea.getCurrentUserId(),
|
||||
blockeduserid: this._getUserId()
|
||||
};
|
||||
break;
|
||||
case 'core_message_unblock_user':
|
||||
userargs = {
|
||||
userid: this.messageArea.getCurrentUserId(),
|
||||
unblockeduserid: this._getUserId()
|
||||
};
|
||||
break;
|
||||
case 'core_message_create_contact_request':
|
||||
userargs = {
|
||||
userid: this.messageArea.getCurrentUserId(),
|
||||
requesteduserid: this._getUserId()
|
||||
};
|
||||
break;
|
||||
default:
|
||||
userargs = {
|
||||
userid: this.messageArea.getCurrentUserId(),
|
||||
userids: [
|
||||
this._getUserId()
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
var promises = Ajax.call([{
|
||||
methodname: service,
|
||||
args: {
|
||||
userid: this.messageArea.getCurrentUserId(),
|
||||
userids: [
|
||||
this._getUserId()
|
||||
]
|
||||
}
|
||||
args: userargs
|
||||
}]);
|
||||
|
||||
return promises[0].then(function() {
|
||||
|
@ -63,8 +63,8 @@ class api {
|
||||
$ufields2 = \user_picture::fields('u2', array('lastaccess'), 'userto_id', 'userto_');
|
||||
|
||||
$sql = "SELECT m.id, m.useridfrom, mcm.userid as useridto, m.subject, m.fullmessage, m.fullmessagehtml, m.fullmessageformat,
|
||||
m.smallmessage, m.timecreated, 0 as isread, $ufields, mcont.blocked as userfrom_blocked, $ufields2,
|
||||
mcont2.blocked as userto_blocked
|
||||
m.smallmessage, m.timecreated, 0 as isread, $ufields, mub.id as userfrom_blocked, $ufields2,
|
||||
mub2.id as userto_blocked
|
||||
FROM {messages} m
|
||||
INNER JOIN {user} u
|
||||
ON u.id = m.useridfrom
|
||||
@ -74,10 +74,10 @@ class api {
|
||||
ON mcm.conversationid = m.conversationid
|
||||
INNER JOIN {user} u2
|
||||
ON u2.id = mcm.userid
|
||||
LEFT JOIN {message_contacts} mcont
|
||||
ON (mcont.contactid = u.id AND mcont.userid = ?)
|
||||
LEFT JOIN {message_contacts} mcont2
|
||||
ON (mcont2.contactid = u2.id AND mcont2.userid = ?)
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON (mub.blockeduserid = u.id AND mub.userid = ?)
|
||||
LEFT JOIN {message_users_blocked} mub2
|
||||
ON (mub2.blockeduserid = u2.id AND mub2.userid = ?)
|
||||
LEFT JOIN {message_user_actions} mua
|
||||
ON (mua.messageid = m.id AND mua.userid = ? AND mua.action = ?)
|
||||
WHERE (m.useridfrom = ? OR mcm.userid = ?)
|
||||
@ -101,7 +101,7 @@ class api {
|
||||
$message->isread = true;
|
||||
}
|
||||
$blockedcol = $prefix . 'blocked';
|
||||
$message->blocked = $message->$blockedcol;
|
||||
$message->blocked = $message->$blockedcol ? 1 : 0;
|
||||
|
||||
$message->messageid = $message->id;
|
||||
$conversations[] = helper::create_contact($message, $prefix);
|
||||
@ -126,12 +126,12 @@ class api {
|
||||
|
||||
// Get all the users in the course.
|
||||
list($esql, $params) = get_enrolled_sql(\context_course::instance($courseid), '', 0, true);
|
||||
$sql = "SELECT u.*, mc.blocked
|
||||
$sql = "SELECT u.*, mub.id as isblocked
|
||||
FROM {user} u
|
||||
JOIN ($esql) je
|
||||
ON je.id = u.id
|
||||
LEFT JOIN {message_contacts} mc
|
||||
ON (mc.contactid = u.id AND mc.userid = :userid)
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON (mub.blockeduserid = u.id AND mub.userid = :userid)
|
||||
WHERE u.deleted = 0";
|
||||
// Add more conditions.
|
||||
$fullname = $DB->sql_fullname();
|
||||
@ -144,6 +144,7 @@ class api {
|
||||
$contacts = array();
|
||||
if ($users = $DB->get_records_sql($sql, $params, $limitfrom, $limitnum)) {
|
||||
foreach ($users as $user) {
|
||||
$user->blocked = $user->isblocked ? 1 : 0;
|
||||
$contacts[] = helper::create_contact($user);
|
||||
}
|
||||
}
|
||||
@ -172,19 +173,22 @@ class api {
|
||||
|
||||
// Ok, let's search for contacts first.
|
||||
$contacts = array();
|
||||
$sql = "SELECT $ufields, mc.blocked
|
||||
$sql = "SELECT $ufields, mub.id as isuserblocked
|
||||
FROM {user} u
|
||||
JOIN {message_contacts} mc
|
||||
ON u.id = mc.contactid
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON (mub.userid = :userid2 AND mub.blockeduserid = u.id)
|
||||
WHERE mc.userid = :userid
|
||||
AND u.deleted = 0
|
||||
AND u.confirmed = 1
|
||||
AND " . $DB->sql_like($fullname, ':search', false) . "
|
||||
AND u.id $exclude
|
||||
ORDER BY " . $DB->sql_fullname();
|
||||
if ($users = $DB->get_records_sql($sql, array('userid' => $userid, 'search' => '%' . $search . '%') + $excludeparams,
|
||||
0, $limitnum)) {
|
||||
if ($users = $DB->get_records_sql($sql, array('userid' => $userid, 'userid2' => $userid,
|
||||
'search' => '%' . $search . '%') + $excludeparams, 0, $limitnum)) {
|
||||
foreach ($users as $user) {
|
||||
$user->blocked = $user->isuserblocked ? 1 : 0;
|
||||
$contacts[] = helper::create_contact($user);
|
||||
}
|
||||
}
|
||||
@ -225,7 +229,7 @@ class api {
|
||||
WHERE userid = :userid)
|
||||
ORDER BY " . $DB->sql_fullname();
|
||||
if ($users = $DB->get_records_sql($sql, array('userid' => $userid, 'search' => '%' . $search . '%') + $excludeparams,
|
||||
0, $limitnum)) {
|
||||
0, $limitnum)) {
|
||||
foreach ($users as $user) {
|
||||
$noncontacts[] = helper::create_contact($user);
|
||||
}
|
||||
@ -324,7 +328,7 @@ class api {
|
||||
return [];
|
||||
}
|
||||
|
||||
$contactssql = "SELECT contactid, blocked
|
||||
$contactssql = "SELECT contactid
|
||||
FROM {message_contacts}
|
||||
WHERE userid = ?
|
||||
AND contactid $useridsql";
|
||||
@ -401,21 +405,41 @@ class api {
|
||||
public static function get_contacts($userid, $limitfrom = 0, $limitnum = 0) {
|
||||
global $DB;
|
||||
|
||||
$arrcontacts = array();
|
||||
$sql = "SELECT u.*, mc.blocked
|
||||
$contactids = [];
|
||||
$sql = "SELECT mc.*
|
||||
FROM {message_contacts} mc
|
||||
JOIN {user} u
|
||||
ON mc.contactid = u.id
|
||||
WHERE mc.userid = :userid
|
||||
AND u.deleted = 0
|
||||
ORDER BY " . $DB->sql_fullname();
|
||||
if ($contacts = $DB->get_records_sql($sql, array('userid' => $userid), $limitfrom, $limitnum)) {
|
||||
WHERE mc.userid = ? OR mc.contactid = ?
|
||||
ORDER BY timecreated DESC";
|
||||
if ($contacts = $DB->get_records_sql($sql, [$userid, $userid], $limitfrom, $limitnum)) {
|
||||
foreach ($contacts as $contact) {
|
||||
$arrcontacts[] = helper::create_contact($contact);
|
||||
if ($userid == $contact->userid) {
|
||||
$contactids[] = $contact->contactid;
|
||||
} else {
|
||||
$contactids[] = $contact->userid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $arrcontacts;
|
||||
if (!empty($contactids)) {
|
||||
list($insql, $inparams) = $DB->get_in_or_equal($contactids);
|
||||
|
||||
$sql = "SELECT u.*, mub.id as isblocked
|
||||
FROM {user} u
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON u.id = mub.blockeduserid
|
||||
WHERE u.id $insql";
|
||||
if ($contacts = $DB->get_records_sql($sql, $inparams)) {
|
||||
$arrcontacts = [];
|
||||
foreach ($contacts as $contact) {
|
||||
$contact->blocked = $contact->isblocked ? 1 : 0;
|
||||
$arrcontacts[] = helper::create_contact($contact);
|
||||
}
|
||||
|
||||
return $arrcontacts;
|
||||
}
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -434,21 +458,24 @@ class api {
|
||||
$unreadcountssql = "SELECT $userfields, count(m.id) as messagecount
|
||||
FROM {message_contacts} mc
|
||||
INNER JOIN {user} u
|
||||
ON u.id = mc.contactid
|
||||
ON (u.id = mc.contactid OR u.id = mc.userid)
|
||||
LEFT JOIN {messages} m
|
||||
ON m.useridfrom = mc.contactid
|
||||
ON ((m.useridfrom = mc.contactid OR m.useridfrom = mc.userid) AND m.useridfrom != ?)
|
||||
LEFT JOIN {message_conversation_members} mcm
|
||||
ON mcm.conversationid = m.conversationid AND mcm.userid = ? AND mcm.userid != m.useridfrom
|
||||
LEFT JOIN {message_user_actions} mua
|
||||
ON (mua.messageid = m.id AND mua.userid = ? AND mua.action = ?)
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON (mub.userid = ? AND mub.blockeduserid = u.id)
|
||||
WHERE mua.id is NULL
|
||||
AND mc.userid = ?
|
||||
AND mc.blocked = 0
|
||||
AND mub.id is NULL
|
||||
AND (mc.userid = ? OR mc.contactid = ?)
|
||||
AND u.id != ?
|
||||
AND u.deleted = 0
|
||||
GROUP BY $userfields";
|
||||
|
||||
return $DB->get_records_sql($unreadcountssql, [$userid, $userid, self::MESSAGE_ACTION_READ,
|
||||
$userid, $userid], $limitfrom, $limitnum);
|
||||
return $DB->get_records_sql($unreadcountssql, [$userid, $userid, $userid, self::MESSAGE_ACTION_READ,
|
||||
$userid, $userid, $userid, $userid], $limitfrom, $limitnum);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -474,14 +501,17 @@ class api {
|
||||
ON (mua.messageid = m.id AND mua.userid = ? AND mua.action = ?)
|
||||
LEFT JOIN {message_contacts} mc
|
||||
ON (mc.userid = ? AND mc.contactid = u.id)
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON (mub.userid = ? AND mub.blockeduserid = u.id)
|
||||
WHERE mcm.userid = ?
|
||||
AND mcm.userid != m.useridfrom
|
||||
AND mua.id is NULL
|
||||
AND mub.id is NULL
|
||||
AND mc.id is NULL
|
||||
AND u.deleted = 0
|
||||
GROUP BY $userfields";
|
||||
|
||||
return $DB->get_records_sql($unreadcountssql, [$userid, self::MESSAGE_ACTION_READ, $userid, $userid],
|
||||
return $DB->get_records_sql($unreadcountssql, [$userid, self::MESSAGE_ACTION_READ, $userid, $userid, $userid],
|
||||
$limitfrom, $limitnum);
|
||||
}
|
||||
|
||||
@ -550,7 +580,7 @@ class api {
|
||||
* @return \stdClass
|
||||
*/
|
||||
public static function get_profile($userid, $otheruserid) {
|
||||
global $CFG, $DB, $PAGE;
|
||||
global $CFG, $PAGE;
|
||||
|
||||
require_once($CFG->dirroot . '/user/lib.php');
|
||||
|
||||
@ -587,15 +617,8 @@ class api {
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the contact has been blocked.
|
||||
$contact = $DB->get_record('message_contacts', array('userid' => $userid, 'contactid' => $otheruserid));
|
||||
if ($contact) {
|
||||
$data->isblocked = (bool) $contact->blocked;
|
||||
$data->iscontact = true;
|
||||
} else {
|
||||
$data->isblocked = false;
|
||||
$data->iscontact = false;
|
||||
}
|
||||
$data->isblocked = self::is_blocked($userid, $otheruserid);
|
||||
$data->iscontact = self::is_contact($userid, $otheruserid);
|
||||
|
||||
return $data;
|
||||
}
|
||||
@ -854,9 +877,9 @@ class api {
|
||||
$user = $USER;
|
||||
}
|
||||
|
||||
$sql = "SELECT count(mc.id)
|
||||
FROM {message_contacts} mc
|
||||
WHERE mc.userid = :userid AND mc.blocked = 1";
|
||||
$sql = "SELECT count(mub.id)
|
||||
FROM {message_users_blocked} mub
|
||||
WHERE mub.userid = :userid";
|
||||
return $DB->count_records_sql($sql, array('userid' => $user->id));
|
||||
}
|
||||
|
||||
@ -908,7 +931,7 @@ class api {
|
||||
* @return bool true if $sender is blocked, false otherwise.
|
||||
*/
|
||||
public static function is_user_non_contact_blocked($recipient, $sender = null) {
|
||||
global $USER, $DB;
|
||||
global $USER;
|
||||
|
||||
if (is_null($sender)) {
|
||||
// The message is from the logged in user, unless otherwise specified.
|
||||
@ -918,8 +941,7 @@ class api {
|
||||
$blockednoncontacts = get_user_preferences('message_blocknoncontacts', '', $recipient->id);
|
||||
if (!empty($blockednoncontacts)) {
|
||||
// Confirm the sender is a contact of the recipient.
|
||||
$exists = $DB->record_exists('message_contacts', array('userid' => $recipient->id, 'contactid' => $sender->id));
|
||||
if ($exists) {
|
||||
if (self::is_contact($sender->id, $recipient->id)) {
|
||||
// All good, the recipient is a contact of the sender.
|
||||
return false;
|
||||
} else {
|
||||
@ -954,7 +976,7 @@ class api {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($DB->get_field('message_contacts', 'blocked', ['userid' => $recipientid, 'contactid' => $senderid])) {
|
||||
if (self::is_blocked($recipientid, $senderid)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1079,12 +1101,11 @@ class api {
|
||||
|
||||
$userfields = \user_picture::fields('u', array('lastaccess'));
|
||||
$blockeduserssql = "SELECT $userfields
|
||||
FROM {message_contacts} mc
|
||||
FROM {message_users_blocked} mub
|
||||
INNER JOIN {user} u
|
||||
ON u.id = mc.contactid
|
||||
ON u.id = mub.blockeduserid
|
||||
WHERE u.deleted = 0
|
||||
AND mc.userid = ?
|
||||
AND mc.blocked = 1
|
||||
AND mub.userid = ?
|
||||
GROUP BY $userfields
|
||||
ORDER BY u.firstname ASC";
|
||||
return $DB->get_records_sql($blockeduserssql, [$userid]);
|
||||
|
@ -90,23 +90,30 @@ class core_message_external extends external_api {
|
||||
foreach($params['messages'] as $message) {
|
||||
$receivers[] = $message['touserid'];
|
||||
}
|
||||
list($sqluserids, $sqlparams) = $DB->get_in_or_equal($receivers, SQL_PARAMS_NAMED, 'userid_');
|
||||
list($sqluserids, $sqlparams) = $DB->get_in_or_equal($receivers);
|
||||
$tousers = $DB->get_records_select("user", "id " . $sqluserids . " AND deleted = 0", $sqlparams);
|
||||
$blocklist = array();
|
||||
$contactlist = array();
|
||||
$sqlparams['contactid'] = $USER->id;
|
||||
$contactsqlparams = array_merge($sqlparams, [$USER->id], [$USER->id], $sqlparams);
|
||||
$rs = $DB->get_recordset_sql("SELECT *
|
||||
FROM {message_contacts}
|
||||
WHERE userid $sqluserids
|
||||
AND contactid = :contactid", $sqlparams);
|
||||
WHERE (userid $sqluserids AND contactid = ?)
|
||||
OR (userid = ? AND contactid $sqluserids)", $contactsqlparams);
|
||||
foreach ($rs as $record) {
|
||||
if ($record->blocked) {
|
||||
// $record->userid is blocking current user
|
||||
$blocklist[$record->userid] = true;
|
||||
} else {
|
||||
// $record->userid have current user as contact
|
||||
$contactlist[$record->userid] = true;
|
||||
$useridtouse = $record->userid;
|
||||
if ($record->userid == $USER->id) {
|
||||
$useridtouse = $record->contactid;
|
||||
}
|
||||
$contactlist[$useridtouse] = true;
|
||||
}
|
||||
$rs->close();
|
||||
$blocksqlparams = array_merge($sqlparams, [$USER->id]);
|
||||
$rs = $DB->get_recordset_sql("SELECT *
|
||||
FROM {message_users_blocked}
|
||||
WHERE userid $sqluserids
|
||||
AND blockeduserid = ?", $blocksqlparams);
|
||||
foreach ($rs as $record) {
|
||||
$blocklist[$record->userid] = true;
|
||||
}
|
||||
$rs->close();
|
||||
|
||||
@ -327,7 +334,7 @@ class core_message_external extends external_api {
|
||||
$params = self::validate_parameters(self::delete_contacts_parameters(), $params);
|
||||
|
||||
foreach ($params['userids'] as $id) {
|
||||
message_remove_contact($id, $userid);
|
||||
\core_message\api::remove_contact($userid, $id);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -187,6 +187,7 @@ function message_search_users($courseids, $searchtext, $sort='', $exceptions='')
|
||||
|
||||
$params = array(
|
||||
'userid' => $USER->id,
|
||||
'userid2' => $USER->id,
|
||||
'query' => "%$searchtext%"
|
||||
);
|
||||
|
||||
@ -207,10 +208,12 @@ function message_search_users($courseids, $searchtext, $sort='', $exceptions='')
|
||||
|
||||
if (in_array(SITEID, $courseids)) {
|
||||
// Search on site level.
|
||||
return $DB->get_records_sql("SELECT $ufields, mc.id as contactlistid, mc.blocked
|
||||
return $DB->get_records_sql("SELECT $ufields, mc.id as contactlistid, mub.id as userblockedid
|
||||
FROM {user} u
|
||||
LEFT JOIN {message_contacts} mc
|
||||
ON mc.contactid = u.id AND mc.userid = :userid
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON mub.userid = :userid2 AND mub.blockeduserid = u.id
|
||||
WHERE u.deleted = '0' AND u.confirmed = '1'
|
||||
AND (".$DB->sql_like($fullname, ':query', false).")
|
||||
$except
|
||||
@ -229,11 +232,13 @@ function message_search_users($courseids, $searchtext, $sort='', $exceptions='')
|
||||
|
||||
// Everyone who has a role assignment in this course or higher.
|
||||
// TODO: add enabled enrolment join here (skodak)
|
||||
$users = $DB->get_records_sql("SELECT DISTINCT $ufields, mc.id as contactlistid, mc.blocked
|
||||
$users = $DB->get_records_sql("SELECT DISTINCT $ufields, mc.id as contactlistid, mub.id as userblockedid
|
||||
FROM {user} u
|
||||
JOIN {role_assignments} ra ON ra.userid = u.id
|
||||
LEFT JOIN {message_contacts} mc
|
||||
ON mc.contactid = u.id AND mc.userid = :userid
|
||||
LEFT JOIN {message_users_blocked} mub
|
||||
ON mub.userid = :userid2 AND mub.blockeduserid = u.id
|
||||
WHERE u.deleted = '0' AND u.confirmed = '1'
|
||||
AND (".$DB->sql_like($fullname, ':query', false).")
|
||||
AND ra.contextid $contextwhere
|
||||
|
@ -102,20 +102,20 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
* Test count_blocked_users.
|
||||
*/
|
||||
public function test_count_blocked_users() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create users to add to the admin's contact list.
|
||||
// Create user to add to the admin's block list.
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
$this->assertEquals(0, \core_message\api::count_blocked_users());
|
||||
|
||||
// Add 1 blocked and 1 normal contact to admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id, 1);
|
||||
// Add 1 blocked user to admin's blocked user list.
|
||||
\core_message\api::block_user($USER->id, $user1->id);
|
||||
|
||||
$this->assertEquals(0, \core_message\api::count_blocked_users($user2));
|
||||
$this->assertEquals(0, \core_message\api::count_blocked_users($user1));
|
||||
$this->assertEquals(1, \core_message\api::count_blocked_users());
|
||||
}
|
||||
|
||||
@ -140,7 +140,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$user2 = self::getDataGenerator()->create_user($user2);
|
||||
|
||||
// Block the second user.
|
||||
message_block_contact($user2->id, $user1->id);
|
||||
\core_message\api::block_user($user1->id, $user2->id);
|
||||
|
||||
$user3 = new stdClass();
|
||||
$user3->firstname = 'User';
|
||||
@ -247,9 +247,9 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->getDataGenerator()->enrol_user($user1->id, $course5->id, $role->id);
|
||||
|
||||
// Add some users as contacts.
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
|
||||
// Remove the viewparticipants capability from one of the courses.
|
||||
$course5context = context_course::instance($course5->id);
|
||||
@ -280,25 +280,31 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
// Create some users.
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
$user3 = self::getDataGenerator()->create_user();
|
||||
|
||||
// The person doing the search.
|
||||
$this->setUser($user1);
|
||||
|
||||
// Send some messages back and forth.
|
||||
$time = 1;
|
||||
$this->send_fake_message($user1, $user2, 'Yo!', 0, $time);
|
||||
$this->send_fake_message($user2, $user1, 'Sup mang?', 0, $time + 1);
|
||||
$this->send_fake_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 2);
|
||||
$this->send_fake_message($user2, $user1, 'Word.', 0, $time + 3);
|
||||
$this->send_fake_message($user3, $user1, 'Don\'t block me.', 0, $time);
|
||||
$this->send_fake_message($user1, $user2, 'Yo!', 0, $time + 1);
|
||||
$this->send_fake_message($user2, $user1, 'Sup mang?', 0, $time + 2);
|
||||
$this->send_fake_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 3);
|
||||
$this->send_fake_message($user2, $user1, 'Word.', 0, $time + 4);
|
||||
|
||||
// Block user 3.
|
||||
\core_message\api::block_user($user1->id, $user3->id);
|
||||
|
||||
// Perform a search.
|
||||
$messages = \core_message\api::search_messages($user1->id, 'o');
|
||||
|
||||
// Confirm the data is correct.
|
||||
$this->assertEquals(2, count($messages));
|
||||
$this->assertEquals(3, count($messages));
|
||||
|
||||
$message1 = $messages[0];
|
||||
$message2 = $messages[1];
|
||||
$message3 = $messages[2];
|
||||
|
||||
$this->assertEquals($user2->id, $message1->userid);
|
||||
$this->assertEquals($user2->id, $message1->useridfrom);
|
||||
@ -321,6 +327,17 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue($message2->isread);
|
||||
$this->assertFalse($message2->isblocked);
|
||||
$this->assertNull($message2->unreadcount);
|
||||
|
||||
$this->assertEquals($user3->id, $message3->userid);
|
||||
$this->assertEquals($user3->id, $message3->useridfrom);
|
||||
$this->assertEquals(fullname($user3), $message3->fullname);
|
||||
$this->assertTrue($message3->ismessaging);
|
||||
$this->assertEquals('Don\'t block me.', $message3->lastmessage);
|
||||
$this->assertNotEmpty($message3->messageid);
|
||||
$this->assertNull($message3->isonline);
|
||||
$this->assertFalse($message3->isread);
|
||||
$this->assertTrue($message3->isblocked);
|
||||
$this->assertNull($message3->unreadcount);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -939,15 +956,16 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$user5 = self::getDataGenerator()->create_user($user5);
|
||||
|
||||
// Add some users as contacts.
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
|
||||
// Retrieve the contacts.
|
||||
$contacts = \core_message\api::get_contacts($user1->id);
|
||||
|
||||
// Confirm the data is correct.
|
||||
$this->assertEquals(3, count($contacts));
|
||||
usort($contacts, ['static', 'sort_contacts']);
|
||||
|
||||
$contact1 = $contacts[0];
|
||||
$contact2 = $contacts[1];
|
||||
@ -1315,7 +1333,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->setUser($user1);
|
||||
|
||||
// Block the second user.
|
||||
message_block_contact($user2->id);
|
||||
\core_message\api::block_user($user1->id, $user2->id);
|
||||
|
||||
// Check that the second user can no longer send the first user a message.
|
||||
$this->assertFalse(\core_message\api::can_post_message($user1, $user2));
|
||||
@ -1343,10 +1361,17 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue(\core_message\api::is_user_non_contact_blocked($user2));
|
||||
|
||||
// Add the first user as a contact for the second user.
|
||||
message_add_contact($user1->id, 0, $user2->id);
|
||||
\core_message\api::add_contact($user2->id, $user1->id);
|
||||
|
||||
// Check that the return result is now false.
|
||||
$this->assertFalse(\core_message\api::is_user_non_contact_blocked($user2));
|
||||
|
||||
// Set the first user's preference to not receive messages from non-contacts.
|
||||
set_user_preference('message_blocknoncontacts', 1, $user1->id);
|
||||
$this->setUser($user2);
|
||||
// Confirm it is still false. We want to ensure a contact request works both ways
|
||||
// as it is now an agreement between users.
|
||||
$this->assertFalse(\core_message\api::is_user_non_contact_blocked($user1));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1365,13 +1390,13 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertFalse(\core_message\api::is_user_blocked($user1->id, $user2->id));
|
||||
|
||||
// Block the user.
|
||||
message_block_contact($user2->id);
|
||||
\core_message\api::block_user($user1->id, $user2->id);
|
||||
|
||||
// User should be blocked.
|
||||
$this->assertTrue(\core_message\api::is_user_blocked($user1->id, $user2->id));
|
||||
|
||||
// Unblock the user.
|
||||
message_unblock_contact($user2->id);
|
||||
\core_message\api::unblock_user($user1->id, $user2->id);
|
||||
$this->assertFalse(\core_message\api::is_user_blocked($user1->id, $user2->id));
|
||||
}
|
||||
|
||||
@ -1386,7 +1411,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->setUser($user1);
|
||||
|
||||
// Block the admin user.
|
||||
message_block_contact(2);
|
||||
\core_message\api::block_user($user1->id, 2);
|
||||
|
||||
// Now change to the admin user.
|
||||
$this->setAdminUser();
|
||||
@ -1623,13 +1648,12 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id, 1);
|
||||
\core_message\api::block_user($USER->id, $user2->id);
|
||||
|
||||
$this->assertCount(1, \core_message\api::get_blocked_users($USER->id));
|
||||
|
||||
// Block other user.
|
||||
message_block_contact($user1->id);
|
||||
\core_message\api::block_user($USER->id, $user1->id);
|
||||
$this->assertCount(2, \core_message\api::get_blocked_users($USER->id));
|
||||
|
||||
// Test deleting users.
|
||||
@ -1649,9 +1673,8 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$user4 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Add the users to each of their contacts.
|
||||
message_add_contact($user1->id, 0, $user2->id);
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user2->id, $user3->id);
|
||||
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user1, $user2);
|
||||
@ -1669,13 +1692,13 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
|
||||
// Get the contacts and the unread message count.
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user2->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(2, $messages);
|
||||
ksort($messages);
|
||||
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$messageinfo2 = array_shift($messages);
|
||||
|
||||
$this->assertEquals($user1->id, $messageinfo1->id);
|
||||
$this->assertEquals(4, $messageinfo1->messagecount);
|
||||
$this->assertEquals($user3->id, $messageinfo2->id);
|
||||
@ -1742,7 +1765,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Add the users to each of their contacts.
|
||||
message_add_contact($user1->id, 0, $user2->id);
|
||||
\core_message\api::add_contact($user2->id, $user1->id);
|
||||
|
||||
// Check we get the correct message count.
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user2->id);
|
||||
@ -1768,8 +1791,8 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$user4 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Add a user to the contact list of the users we are testing this function with.
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
\core_message\api::add_contact($user2->id, $user4->id);
|
||||
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user1, $user2);
|
||||
@ -2167,4 +2190,15 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue(\core_message\api::does_contact_request_exist($user1->id, $user2->id));
|
||||
$this->assertTrue(\core_message\api::does_contact_request_exist($user2->id, $user1->id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Comparison function for sorting contacts.
|
||||
*
|
||||
* @param stdClass $a
|
||||
* @param stdClass $b
|
||||
* @return bool
|
||||
*/
|
||||
protected static function sort_contacts($a, $b) {
|
||||
return $a->userid > $b->userid;
|
||||
}
|
||||
}
|
||||
|
@ -52,6 +52,8 @@ class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
* Test the message contact added event.
|
||||
*/
|
||||
public function test_message_contact_added() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -60,7 +62,7 @@ class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
|
||||
// Trigger and capture the event when adding a contact.
|
||||
$sink = $this->redirectEvents();
|
||||
message_add_contact($user->id);
|
||||
\core_message\api::add_contact($USER->id, $user->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
@ -78,6 +80,8 @@ class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
* Test the message contact removed event.
|
||||
*/
|
||||
public function test_message_contact_removed() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -85,11 +89,11 @@ class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add the user to the admin's contact list.
|
||||
message_add_contact($user->id);
|
||||
\core_message\api::add_contact($USER->id, $user->id);
|
||||
|
||||
// Trigger and capture the event when adding a contact.
|
||||
$sink = $this->redirectEvents();
|
||||
message_remove_contact($user->id);
|
||||
\core_message\api::remove_contact($USER->id, $user->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
@ -104,61 +108,37 @@ class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the message contact blocked event.
|
||||
* Test the message user blocked event.
|
||||
*/
|
||||
public function test_message_contact_blocked() {
|
||||
public function test_message_user_blocked() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create a user to add to the admin's contact list.
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add the user to the admin's contact list.
|
||||
message_add_contact($user->id);
|
||||
\core_message\api::add_contact($USER->id, $user->id);
|
||||
|
||||
// Trigger and capture the event when blocking a contact.
|
||||
$sink = $this->redirectEvents();
|
||||
message_block_contact($user->id);
|
||||
\core_message\api::block_user($USER->id, $user->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Check that the event data is valid.
|
||||
$this->assertInstanceOf('\core\event\message_contact_blocked', $event);
|
||||
$this->assertInstanceOf('\core\event\message_user_blocked', $event);
|
||||
$this->assertEquals(context_user::instance(2), $event->get_context());
|
||||
$expected = array(SITEID, 'message', 'block contact', 'index.php?user1=' . $user->id . '&user2=2', $user->id);
|
||||
$this->assertEventLegacyLogData($expected, $event);
|
||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||
$this->assertEquals($url, $event->get_url());
|
||||
|
||||
// Make sure that the contact blocked event is not triggered again.
|
||||
$sink->clear();
|
||||
message_block_contact($user->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
$this->assertEmpty($event);
|
||||
// Make sure that we still have 1 blocked user.
|
||||
$this->assertEquals(1, \core_message\api::count_blocked_users());
|
||||
|
||||
// Now blocking a user that is not a contact.
|
||||
$sink->clear();
|
||||
message_block_contact($user2->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Check that the event data is valid.
|
||||
$this->assertInstanceOf('\core\event\message_contact_blocked', $event);
|
||||
$this->assertEquals(context_user::instance(2), $event->get_context());
|
||||
$expected = array(SITEID, 'message', 'block contact', 'index.php?user1=' . $user2->id . '&user2=2', $user2->id);
|
||||
$this->assertEventLegacyLogData($expected, $event);
|
||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||
$this->assertEquals($url, $event->get_url());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the message contact unblocked event.
|
||||
* Test the message user unblocked event.
|
||||
*/
|
||||
public function test_message_contact_unblocked() {
|
||||
public function test_message_user_unblocked() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -166,39 +146,25 @@ class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add the user to the admin's contact list.
|
||||
message_add_contact($user->id);
|
||||
\core_message\api::add_contact($USER->id, $user->id);
|
||||
|
||||
// Block the user.
|
||||
message_block_contact($user->id);
|
||||
\core_message\api::block_user($USER->id, $user->id);
|
||||
// Make sure that we have 1 blocked user.
|
||||
$this->assertEquals(1, \core_message\api::count_blocked_users());
|
||||
|
||||
// Trigger and capture the event when unblocking a contact.
|
||||
$sink = $this->redirectEvents();
|
||||
message_unblock_contact($user->id);
|
||||
\core_message\api::unblock_user($USER->id, $user->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Check that the event data is valid.
|
||||
$this->assertInstanceOf('\core\event\message_contact_unblocked', $event);
|
||||
$this->assertInstanceOf('\core\event\message_user_unblocked', $event);
|
||||
$this->assertEquals(context_user::instance(2), $event->get_context());
|
||||
$expected = array(SITEID, 'message', 'unblock contact', 'index.php?user1=' . $user->id . '&user2=2', $user->id);
|
||||
$this->assertEventLegacyLogData($expected, $event);
|
||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||
$this->assertEquals($url, $event->get_url());
|
||||
|
||||
// Make sure that we have no blocked users.
|
||||
$this->assertEmpty(\core_message\api::count_blocked_users());
|
||||
|
||||
// Make sure that the contact unblocked event is not triggered again.
|
||||
$sink->clear();
|
||||
message_unblock_contact($user->id);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
$this->assertEmpty($event);
|
||||
|
||||
// Make sure that we still have no blocked users.
|
||||
$this->assertEmpty(\core_message\api::count_blocked_users());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -91,42 +91,33 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test send_instant_messages
|
||||
* Test send_instant_messages.
|
||||
*/
|
||||
public function test_send_instant_messages() {
|
||||
global $DB, $USER;
|
||||
|
||||
global $DB, $USER, $CFG;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
// Transactions used in tests, tell phpunit use alternative reset method.
|
||||
$this->preventResetByRollback();
|
||||
|
||||
// Turn off all message processors (so nothing is really sent)
|
||||
require_once($CFG->dirroot . '/message/lib.php');
|
||||
$messageprocessors = get_message_processors();
|
||||
foreach($messageprocessors as $messageprocessor) {
|
||||
$messageprocessor->enabled = 0;
|
||||
$DB->update_record('message_processors', $messageprocessor);
|
||||
}
|
||||
|
||||
// Set the required capabilities by the external function
|
||||
$contextid = context_system::instance()->id;
|
||||
$roleid = $this->assignUserCapability('moodle/site:sendmessage', $contextid);
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
// Create test message data.
|
||||
$message1 = array();
|
||||
$message1['touserid'] = $user1->id;
|
||||
$message1['touserid'] = $user2->id;
|
||||
$message1['text'] = 'the message.';
|
||||
$message1['clientmsgid'] = 4;
|
||||
$messages = array($message1);
|
||||
|
||||
$sentmessages = core_message_external::send_instant_messages($messages);
|
||||
|
||||
// We need to execute the return values cleaning process to simulate the web service server.
|
||||
$sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
|
||||
|
||||
$sentmessage = reset($sentmessages);
|
||||
|
||||
$sql = "SELECT m.*, mcm.userid as useridto
|
||||
FROM {messages} m
|
||||
INNER JOIN {message_conversations} mc
|
||||
@ -135,13 +126,196 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
ON mcm.conversationid = mc.id
|
||||
WHERE mcm.userid != ?
|
||||
AND m.id = ?";
|
||||
$themessage = $DB->get_record_sql($sql, [$USER->id, $sentmessages[0]['msgid']]);
|
||||
$themessage = $DB->get_record_sql($sql, [$USER->id, $sentmessage['msgid']]);
|
||||
|
||||
// Confirm that the message was inserted correctly.
|
||||
$this->assertEquals($themessage->useridfrom, $USER->id);
|
||||
$this->assertEquals($themessage->useridfrom, $user1->id);
|
||||
$this->assertEquals($themessage->useridto, $message1['touserid']);
|
||||
$this->assertEquals($themessage->smallmessage, $message1['text']);
|
||||
$this->assertEquals($sentmessages[0]['clientmsgid'], $message1['clientmsgid']);
|
||||
$this->assertEquals($sentmessage['clientmsgid'], $message1['clientmsgid']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test send_instant_messages to a user who has blocked you.
|
||||
*/
|
||||
public function test_send_instant_messages_blocked_user() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
// Transactions used in tests, tell phpunit use alternative reset method.
|
||||
$this->preventResetByRollback();
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
\core_message\api::block_user($user2->id, $user1->id);
|
||||
|
||||
// Create test message data.
|
||||
$message1 = array();
|
||||
$message1['touserid'] = $user2->id;
|
||||
$message1['text'] = 'the message.';
|
||||
$message1['clientmsgid'] = 4;
|
||||
$messages = array($message1);
|
||||
|
||||
$sentmessages = core_message_external::send_instant_messages($messages);
|
||||
$sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
|
||||
|
||||
$sentmessage = reset($sentmessages);
|
||||
|
||||
$this->assertEquals(get_string('userisblockingyou', 'message'), $sentmessage['errormessage']);
|
||||
|
||||
$this->assertEquals(0, $DB->count_records('messages'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test send_instant_messages when sending a message to a non-contact who has blocked non-contacts.
|
||||
*/
|
||||
public function test_send_instant_messages_block_non_contacts() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// Transactions used in tests, tell phpunit use alternative reset method.
|
||||
$this->preventResetByRollback();
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
// Set the user preference so user 2 does not accept messages from non-contacts.
|
||||
set_user_preference('message_blocknoncontacts', 1, $user2);
|
||||
|
||||
// Create test message data.
|
||||
$message1 = array();
|
||||
$message1['touserid'] = $user2->id;
|
||||
$message1['text'] = 'the message.';
|
||||
$message1['clientmsgid'] = 4;
|
||||
$messages = array($message1);
|
||||
|
||||
$sentmessages = core_message_external::send_instant_messages($messages);
|
||||
$sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
|
||||
|
||||
$sentmessage = reset($sentmessages);
|
||||
|
||||
$this->assertEquals(get_string('userisblockingyounoncontact', 'message', fullname($user2)), $sentmessage['errormessage']);
|
||||
|
||||
$this->assertEquals(0, $DB->count_records('messages'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test send_instant_messages when sending a message to a contact who has blocked non-contacts.
|
||||
*/
|
||||
public function test_send_instant_messages_block_non_contacts_but_am_contact() {
|
||||
global $DB, $USER;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// Transactions used in tests, tell phpunit use alternative reset method.
|
||||
$this->preventResetByRollback();
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
// Set the user preference so user 2 does not accept messages from non-contacts.
|
||||
set_user_preference('message_blocknoncontacts', 1, $user2);
|
||||
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
|
||||
// Create test message data.
|
||||
$message1 = array();
|
||||
$message1['touserid'] = $user2->id;
|
||||
$message1['text'] = 'the message.';
|
||||
$message1['clientmsgid'] = 4;
|
||||
$messages = array($message1);
|
||||
|
||||
$sentmessages = core_message_external::send_instant_messages($messages);
|
||||
$sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
|
||||
|
||||
$sentmessage = reset($sentmessages);
|
||||
|
||||
$sql = "SELECT m.*, mcm.userid as useridto
|
||||
FROM {messages} m
|
||||
INNER JOIN {message_conversations} mc
|
||||
ON m.conversationid = mc.id
|
||||
INNER JOIN {message_conversation_members} mcm
|
||||
ON mcm.conversationid = mc.id
|
||||
WHERE mcm.userid != ?
|
||||
AND m.id = ?";
|
||||
$themessage = $DB->get_record_sql($sql, [$USER->id, $sentmessage['msgid']]);
|
||||
|
||||
// Confirm that the message was inserted correctly.
|
||||
$this->assertEquals($themessage->useridfrom, $user1->id);
|
||||
$this->assertEquals($themessage->useridto, $message1['touserid']);
|
||||
$this->assertEquals($themessage->smallmessage, $message1['text']);
|
||||
$this->assertEquals($sentmessage['clientmsgid'], $message1['clientmsgid']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test send_instant_messages with no capabilities
|
||||
*/
|
||||
public function test_send_instant_messages_no_capability() {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// Transactions used in tests, tell phpunit use alternative reset method.
|
||||
$this->preventResetByRollback();
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
// Unset the required capabilities by the external function.
|
||||
$contextid = context_system::instance()->id;
|
||||
$userrole = $DB->get_record('role', array('shortname' => 'user'));
|
||||
$this->unassignUserCapability('moodle/site:sendmessage', $contextid, $userrole->id);
|
||||
|
||||
// Create test message data.
|
||||
$message1 = array();
|
||||
$message1['touserid'] = $user2->id;
|
||||
$message1['text'] = 'the message.';
|
||||
$message1['clientmsgid'] = 4;
|
||||
$messages = array($message1);
|
||||
|
||||
$this->expectException('required_capability_exception');
|
||||
core_message_external::send_instant_messages($messages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test send_instant_messages when messaging is disabled.
|
||||
*/
|
||||
public function test_send_instant_messages_messaging_disabled() {
|
||||
global $CFG;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// Transactions used in tests, tell phpunit use alternative reset method.
|
||||
$this->preventResetByRollback();
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->setUser($user1);
|
||||
|
||||
// Disable messaging.
|
||||
$CFG->messaging = 0;
|
||||
|
||||
// Create test message data.
|
||||
$message1 = array();
|
||||
$message1['touserid'] = $user2->id;
|
||||
$message1['text'] = 'the message.';
|
||||
$message1['clientmsgid'] = 4;
|
||||
$messages = array($message1);
|
||||
|
||||
$this->expectException('moodle_exception');
|
||||
core_message_external::send_instant_messages($messages);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -159,21 +333,25 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Adding a contact.
|
||||
$return = core_message_external::create_contacts(array($user2->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
|
||||
$this->assertEquals(array(), $return);
|
||||
|
||||
// Adding a contact who is already a contact.
|
||||
$return = core_message_external::create_contacts(array($user2->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
|
||||
$this->assertEquals(array(), $return);
|
||||
|
||||
// Adding multiple contacts.
|
||||
$return = core_message_external::create_contacts(array($user3->id, $user4->id));
|
||||
$this->assertDebuggingCalledCount(2);
|
||||
$return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
|
||||
$this->assertEquals(array(), $return);
|
||||
|
||||
// Adding a non-existing user.
|
||||
$return = core_message_external::create_contacts(array(99999));
|
||||
$this->assertDebuggingCalled();
|
||||
$return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
|
||||
$this->assertCount(1, $return);
|
||||
$return = array_pop($return);
|
||||
@ -182,6 +360,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Adding contacts with valid and invalid parameters.
|
||||
$return = core_message_external::create_contacts(array($user5->id, 99999));
|
||||
$this->assertDebuggingCalledCount(2);
|
||||
$return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
|
||||
$this->assertCount(1, $return);
|
||||
$return = array_pop($return);
|
||||
@ -207,8 +386,11 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$user5 = self::getDataGenerator()->create_user();
|
||||
$user6 = self::getDataGenerator()->create_user();
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(
|
||||
array($user3->id, $user4->id, $user5->id, $user6->id)));
|
||||
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
\core_message\api::add_contact($user1->id, $user5->id);
|
||||
\core_message\api::add_contact($user1->id, $user6->id);
|
||||
|
||||
// Removing a non-contact.
|
||||
$return = core_message_external::delete_contacts(array($user2->id));
|
||||
@ -248,25 +430,32 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$user4 = self::getDataGenerator()->create_user();
|
||||
$user5 = self::getDataGenerator()->create_user();
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(array($user3->id, $user4->id, $user5->id)));
|
||||
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
\core_message\api::add_contact($user1->id, $user5->id);
|
||||
|
||||
// Blocking a contact.
|
||||
$return = core_message_external::block_contacts(array($user2->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
|
||||
$this->assertEquals(array(), $return);
|
||||
|
||||
// Blocking a contact who is already a contact.
|
||||
$return = core_message_external::block_contacts(array($user2->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
|
||||
$this->assertEquals(array(), $return);
|
||||
|
||||
// Blocking multiple contacts.
|
||||
$return = core_message_external::block_contacts(array($user3->id, $user4->id));
|
||||
$this->assertDebuggingCalledCount(2);
|
||||
$return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
|
||||
$this->assertEquals(array(), $return);
|
||||
|
||||
// Blocking a non-existing user.
|
||||
$return = core_message_external::block_contacts(array(99999));
|
||||
$this->assertDebuggingCalled();
|
||||
$return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
|
||||
$this->assertCount(1, $return);
|
||||
$return = array_pop($return);
|
||||
@ -275,6 +464,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Blocking contacts with valid and invalid parameters.
|
||||
$return = core_message_external::block_contacts(array($user5->id, 99999));
|
||||
$this->assertDebuggingCalledCount(2);
|
||||
$return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
|
||||
$this->assertCount(1, $return);
|
||||
$return = array_pop($return);
|
||||
@ -300,33 +490,42 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$user5 = self::getDataGenerator()->create_user();
|
||||
$user6 = self::getDataGenerator()->create_user();
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(
|
||||
array($user3->id, $user4->id, $user5->id, $user6->id)));
|
||||
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
\core_message\api::add_contact($user1->id, $user5->id);
|
||||
\core_message\api::add_contact($user1->id, $user6->id);
|
||||
|
||||
// Removing a non-contact.
|
||||
$return = core_message_external::unblock_contacts(array($user2->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertNull($return);
|
||||
|
||||
// Removing one contact.
|
||||
$return = core_message_external::unblock_contacts(array($user3->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertNull($return);
|
||||
|
||||
// Removing multiple contacts.
|
||||
$return = core_message_external::unblock_contacts(array($user4->id, $user5->id));
|
||||
$this->assertDebuggingCalledCount(2);
|
||||
$this->assertNull($return);
|
||||
|
||||
// Removing contact from unexisting user.
|
||||
$return = core_message_external::unblock_contacts(array(99999));
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertNull($return);
|
||||
|
||||
// Removing mixed valid and invalid data.
|
||||
$return = core_message_external::unblock_contacts(array($user6->id, 99999));
|
||||
$this->assertDebuggingCalledCount(2);
|
||||
$this->assertNull($return);
|
||||
|
||||
// Try to unblock a contact of another user contact list, should throw an exception.
|
||||
// All assertions must be added before this point.
|
||||
$this->expectException('required_capability_exception');
|
||||
core_message_external::unblock_contacts(array($user2->id), $user3->id);
|
||||
$this->assertDebuggingCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -771,8 +970,10 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Login as user1.
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(
|
||||
array($user_offline1->id, $user_offline2->id, $user_offline3->id, $user_online->id)));
|
||||
\core_message\api::add_contact($user1->id, $user_offline1->id);
|
||||
\core_message\api::add_contact($user1->id, $user_offline2->id);
|
||||
\core_message\api::add_contact($user1->id, $user_offline3->id);
|
||||
\core_message\api::add_contact($user1->id, $user_online->id);
|
||||
|
||||
// User_stranger sends a couple of messages to user1.
|
||||
$this->send_message($user_stranger, $user1, 'Hello there!');
|
||||
@ -791,6 +992,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertCount(1, $contacts['online']);
|
||||
$this->assertCount(3, $contacts['strangers']);
|
||||
core_message_external::block_contacts(array($user_blocked->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$contacts = core_message_external::get_contacts();
|
||||
$contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts);
|
||||
$this->assertCount(3, $contacts['offline']);
|
||||
@ -1195,8 +1397,9 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Login as user1.
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(
|
||||
array($useroffline1->id, $useroffline2->id)));
|
||||
|
||||
\core_message\api::add_contact($user1->id, $useroffline1->id);
|
||||
\core_message\api::add_contact($user1->id, $useroffline2->id);
|
||||
|
||||
// The userstranger sends a couple of messages to user1.
|
||||
$this->send_message($userstranger, $user1, 'Hello there!');
|
||||
@ -1214,6 +1417,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Block the $userblocked and retrieve again the list.
|
||||
core_message_external::block_contacts(array($userblocked->id));
|
||||
$this->assertDebuggingCalled();
|
||||
$blockedusers = core_message_external::get_blocked_users($user1->id);
|
||||
$blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
|
||||
$this->assertCount(1, $blockedusers['users']);
|
||||
@ -1223,7 +1427,6 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$blockedusers = core_message_external::get_blocked_users($user1->id);
|
||||
$blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
|
||||
$this->assertCount(0, $blockedusers['users']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1238,8 +1441,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Login as user1.
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(
|
||||
array($user2->id, $user3->id)));
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
|
||||
// The user2 sends a couple of messages to user1.
|
||||
$this->send_message($user2, $user1, 'Hello there!');
|
||||
@ -1297,8 +1500,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Login as user1.
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(
|
||||
array($user2->id, $user3->id)));
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
|
||||
// The user2 sends a couple of notifications to user1.
|
||||
$this->send_message($user2, $user1, 'Hello there!', 1);
|
||||
@ -1359,7 +1562,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Login as user1.
|
||||
$this->setUser($user1);
|
||||
$this->assertEquals(array(), core_message_external::create_contacts(array($user2->id, $user3->id)));
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
|
||||
// User user1 does not interchange messages with user3.
|
||||
$m1to2 = message_post_message($user1, $user2, 'some random text 1', FORMAT_MOODLE);
|
||||
@ -1588,7 +1792,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$user2 = self::getDataGenerator()->create_user($user2);
|
||||
|
||||
// Block the second user.
|
||||
message_block_contact($user2->id, $user1->id);
|
||||
\core_message\api::block_user($user1->id, $user2->id);
|
||||
|
||||
$user3 = new stdClass();
|
||||
$user3->firstname = 'User';
|
||||
@ -1798,9 +2002,9 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->getDataGenerator()->enrol_user($user1->id, $course3->id, 'student');
|
||||
|
||||
// Add some users as contacts.
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
|
||||
// Perform a search.
|
||||
$result = core_message_external::data_for_messagearea_search_users($user1->id, 'search');
|
||||
@ -1886,9 +2090,9 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$course3 = $this->getDataGenerator()->create_course($course3);
|
||||
|
||||
// Add some users as contacts.
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
|
||||
// Perform a search.
|
||||
$result = core_message_external::data_for_messagearea_search_users($user1->id, 'search');
|
||||
@ -2336,9 +2540,9 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$user5 = self::getDataGenerator()->create_user($user5);
|
||||
|
||||
// Add some users as contacts.
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
|
||||
// Retrieve the contacts.
|
||||
$result = core_message_external::data_for_messagearea_contacts($user1->id);
|
||||
@ -2349,6 +2553,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Confirm the data is correct.
|
||||
$contacts = $result['contacts'];
|
||||
usort($contacts, ['static', 'sort_contacts']);
|
||||
$this->assertCount(3, $contacts);
|
||||
|
||||
$contact1 = $contacts[0];
|
||||
@ -2418,9 +2623,9 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$user5 = self::getDataGenerator()->create_user($user5);
|
||||
|
||||
// Add some users as contacts.
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
\core_message\api::add_contact($user1->id, $user2->id);
|
||||
\core_message\api::add_contact($user1->id, $user3->id);
|
||||
\core_message\api::add_contact($user1->id, $user4->id);
|
||||
|
||||
// Retrieve the contacts.
|
||||
$result = core_message_external::data_for_messagearea_contacts($user1->id);
|
||||
@ -2431,6 +2636,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
|
||||
// Confirm the data is correct.
|
||||
$contacts = $result['contacts'];
|
||||
usort($contacts, ['static', 'sort_contacts']);
|
||||
$this->assertCount(3, $contacts);
|
||||
|
||||
$contact1 = $contacts[0];
|
||||
@ -3317,4 +3523,15 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->expectException('moodle_exception');
|
||||
$prefs = core_message_external::get_user_message_preferences($otheruser->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Comparison function for sorting contacts.
|
||||
*
|
||||
* @param array $a
|
||||
* @param array $b
|
||||
* @return bool
|
||||
*/
|
||||
protected static function sort_contacts($a, $b) {
|
||||
return $a['userid'] > $b['userid'];
|
||||
}
|
||||
}
|
||||
|
@ -106,6 +106,8 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
* Test message_get_blocked_users.
|
||||
*/
|
||||
public function test_message_get_blocked_users() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -113,15 +115,13 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id, 1);
|
||||
\core_message\api::block_user($USER->id, $user2->id);
|
||||
|
||||
$this->assertCount(1, message_get_blocked_users());
|
||||
$this->assertDebuggingCalled();
|
||||
|
||||
// Block other user.
|
||||
message_block_contact($user1->id);
|
||||
\core_message\api::block_user($USER->id, $user1->id);
|
||||
$this->assertCount(2, message_get_blocked_users());
|
||||
$this->assertDebuggingCalled();
|
||||
|
||||
@ -149,8 +149,8 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
$user3 = $this->getDataGenerator()->create_user(); // Stranger.
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id);
|
||||
\core_message\api::add_contact($USER->id, $user1->id);
|
||||
\core_message\api::add_contact($USER->id, $user2->id);
|
||||
|
||||
// Send some messages.
|
||||
$this->send_fake_message($user1, $USER);
|
||||
@ -173,7 +173,7 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
$this->assertCount(3, $strangers);
|
||||
|
||||
// Block 1 user.
|
||||
message_block_contact($user2->id);
|
||||
\core_message\api::block_user($USER->id, $user2->id);
|
||||
list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts();
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertCount(0, $onlinecontacts);
|
||||
@ -286,29 +286,34 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
* Test message_add_contact.
|
||||
*/
|
||||
public function test_message_add_contact() {
|
||||
global $DB, $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create a user to add to the admin's contact list.
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
$user3 = $this->getDataGenerator()->create_user();
|
||||
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id, 0);
|
||||
// Add duplicate contact and make sure only 1 record exists.
|
||||
message_add_contact($user2->id, 1);
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertEquals(1, $DB->count_records('message_contact_requests'));
|
||||
|
||||
$this->assertNotEmpty(message_get_contact($user1->id));
|
||||
$this->assertNotEmpty(message_get_contact($user2->id));
|
||||
$this->assertEquals(false, message_get_contact($user3->id));
|
||||
$this->assertEquals(1, \core_message\api::count_blocked_users());
|
||||
message_add_contact($user2->id, 1);
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertEquals(1, $DB->count_records('message_users_blocked'));
|
||||
|
||||
message_add_contact($user2->id, 0);
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertEquals(0, $DB->count_records('message_users_blocked'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test message_remove_contact.
|
||||
*/
|
||||
public function test_message_remove_contact() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -316,18 +321,21 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
$user = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add the user to the admin's contact list.
|
||||
message_add_contact($user->id);
|
||||
$this->assertNotEmpty(message_get_contact($user->id));
|
||||
\core_message\api::add_contact($USER->id, $user->id);
|
||||
|
||||
// Remove user from admin's contact list.
|
||||
message_remove_contact($user->id);
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertEquals(false, message_get_contact($user->id));
|
||||
$this->assertDebuggingCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test message_block_contact.
|
||||
*/
|
||||
public function test_message_block_contact() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -336,13 +344,14 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id);
|
||||
\core_message\api::add_contact($USER->id, $user1->id);
|
||||
\core_message\api::add_contact($USER->id, $user2->id);
|
||||
|
||||
$this->assertEquals(0, \core_message\api::count_blocked_users());
|
||||
|
||||
// Block 1 user.
|
||||
message_block_contact($user2->id);
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertEquals(1, \core_message\api::count_blocked_users());
|
||||
|
||||
}
|
||||
@ -351,21 +360,21 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
* Test message_unblock_contact.
|
||||
*/
|
||||
public function test_message_unblock_contact() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create a user to add to the admin's contact list.
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id, 1); // Add blocked contact.
|
||||
|
||||
// Add users to the admin's blocked list.
|
||||
\core_message\api::block_user($USER->id, $user1->id);
|
||||
$this->assertEquals(1, \core_message\api::count_blocked_users());
|
||||
|
||||
// Unblock user.
|
||||
message_unblock_contact($user2->id);
|
||||
message_unblock_contact($user1->id);
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertEquals(0, \core_message\api::count_blocked_users());
|
||||
}
|
||||
|
||||
@ -373,6 +382,8 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
* Test message_search_users.
|
||||
*/
|
||||
public function test_message_search_users() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
@ -381,8 +392,8 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
||||
$user2 = $this->getDataGenerator()->create_user(array('firstname' => 'Test2', 'lastname' => 'user2'));
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id); // Add blocked contact.
|
||||
\core_message\api::add_contact($USER->id, $user1->id);
|
||||
\core_message\api::add_contact($USER->id, $user2->id);
|
||||
|
||||
$this->assertCount(1, message_search_users(0, 'Test1'));
|
||||
$this->assertCount(2, message_search_users(0, 'Test'));
|
||||
|
Loading…
x
Reference in New Issue
Block a user