MDL-56089 core_message: modified API so it is not tied to renderables

Also did some minor refactoring/tidying of the code.
This commit is contained in:
Mark Nelson 2016-10-06 14:31:30 +08:00
parent a038fcf5d6
commit de55cb1b53
15 changed files with 152 additions and 168 deletions

View File

@ -284,6 +284,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/cust
this._numConversationsDisplayed, this._numConversationsToRetrieve);
}.bind(this)).then(function(data) {
numberreceived = data.contacts.length;
data.isconversation = true;
return Templates.render('core_message/message_area_contacts', data);
}).then(function(html, js) {
// Remove the loading icon.
@ -338,6 +339,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/cust
this._numContactsDisplayed, this._numContactsToRetrieve);
}.bind(this)).then(function(data) {
numberreceived = data.contacts.length;
data.isconversation = false;
return Templates.render('core_message/message_area_contacts', data);
}).then(function(html, js) {
// Remove the loading icon.

View File

@ -249,7 +249,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
return promises[0];
}.bind(this)).then(function(data) {
numberreceived = data.contacts.length;
return Templates.render('core_message/message_area_messages_search_results', data);
return Templates.render('core_message/message_area_message_search_results', data);
}).then(function(html, js) {
// Remove the loading icon.
this.messageArea.find(SELECTORS.SEARCHRESULTSAREA + " " +
@ -294,7 +294,16 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
"<div style='text-align:center'>" + html + "</div>", js);
return promises[0];
}.bind(this)).then(function(data) {
return Templates.render('core_message/message_area_users_search_results', data);
if (data.contacts.length > 0) {
data.hascontacts = true;
}
if (data.courses.length > 0) {
data.hascourses = true;
}
if (data.noncontacts.length > 0) {
data.hasnoncontacts = true;
}
return Templates.render('core_message/message_area_user_search_results', data);
}).then(function(html, js) {
Templates.replaceNodeContents(this.messageArea.find(SELECTORS.SEARCHRESULTSAREA), html, js);
}.bind(this)).fail(Notification.exception);
@ -337,7 +346,10 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str'
return promises[0];
}.bind(this)).then(function(data) {
numberreceived = data.contacts.length;
return Templates.render('core_message/message_area_users_search_results', data);
if (numberreceived > 0) {
data.hascontacts = true;
}
return Templates.render('core_message/message_area_user_search_results', data);
}).then(function(html, js) {
// Remove the loading icon.
this.messageArea.find(SELECTORS.SEARCHRESULTSAREA + " " +

View File

@ -43,7 +43,7 @@ class api {
* @param string $search The string the user is searching
* @param int $limitfrom
* @param int $limitnum
* @return \core_message\output\messagearea\message_search_results
* @return array
*/
public static function search_messages($userid, $search, $limitfrom = 0, $limitnum = 0) {
global $DB;
@ -95,7 +95,7 @@ class api {
$userid, $userid, $userid, $userid, '%' . $search . '%');
// Convert the messages into searchable contacts with their last message being the message that was searched.
$contacts = array();
$conversations = array();
if ($messages = $DB->get_records_sql($sql, $params, $limitfrom, $limitnum)) {
foreach ($messages as $message) {
$prefix = 'userfrom_';
@ -108,11 +108,11 @@ class api {
$message->blocked = $message->$blockedcol;
$message->messageid = $message->id;
$contacts[] = \core_message\helper::create_contact($message, $prefix);
$conversations[] = helper::create_contact($message, $prefix);
}
}
return new \core_message\output\messagearea\message_search_results($userid, $contacts);
return $conversations;
}
/**
@ -123,7 +123,7 @@ class api {
* @param string $search The string the user is searching
* @param int $limitfrom
* @param int $limitnum
* @return \core_message\output\messagearea\user_search_results
* @return array
*/
public static function search_users_in_course($userid, $courseid, $search, $limitfrom = 0, $limitnum = 0) {
global $DB;
@ -148,11 +148,11 @@ class api {
$contacts = array();
if ($users = $DB->get_records_sql($sql, $params, $limitfrom, $limitnum)) {
foreach ($users as $user) {
$contacts[] = \core_message\helper::create_contact($user);
$contacts[] = helper::create_contact($user);
}
}
return new \core_message\output\messagearea\user_search_results($contacts);
return $contacts;
}
/**
@ -161,7 +161,7 @@ class api {
* @param int $userid The user id doing the searching
* @param string $search The string the user is searching
* @param int $limitnum
* @return \core_message\output\messagearea\user_search_results
* @return array
*/
public static function search_users($userid, $search, $limitnum = 0) {
global $CFG, $DB;
@ -191,7 +191,7 @@ class api {
if ($users = $DB->get_records_sql($sql, array('userid' => $userid, 'search' => '%' . $search . '%') + $excludeparams,
0, $limitnum)) {
foreach ($users as $user) {
$contacts[] = \core_message\helper::create_contact($user);
$contacts[] = helper::create_contact($user);
}
}
@ -224,31 +224,30 @@ class api {
if ($users = $DB->get_records_sql($sql, array('userid' => $userid, 'search' => '%' . $search . '%') + $excludeparams,
0, $limitnum)) {
foreach ($users as $user) {
$noncontacts[] = \core_message\helper::create_contact($user);
$noncontacts[] = helper::create_contact($user);
}
}
return new \core_message\output\messagearea\user_search_results($contacts, $courses, $noncontacts);
return array($contacts, $courses, $noncontacts);
}
/**
* Returns the contacts and their conversation to display in the contacts area.
*
* @param int $userid The user id
* @param int $otheruserid The id of the user we have selected, 0 if none have been selected
* @param int $limitfrom
* @param int $limitnum
* @return \core_message\output\messagearea\contacts
* @return array
*/
public static function get_conversations($userid, $otheruserid = 0, $limitfrom = 0, $limitnum = 0) {
$arrcontacts = array();
public static function get_conversations($userid, $limitfrom = 0, $limitnum = 0) {
$arrconversations = array();
if ($conversations = message_get_recent_conversations($userid, $limitfrom, $limitnum)) {
foreach ($conversations as $conversation) {
$arrcontacts[] = \core_message\helper::create_contact($conversation);
$arrconversations[$conversation->id] = helper::create_contact($conversation);
}
}
return new \core_message\output\messagearea\contacts($userid, $otheruserid, $arrcontacts);
return $arrconversations;
}
/**
@ -257,7 +256,7 @@ class api {
* @param int $userid The user id
* @param int $limitfrom
* @param int $limitnum
* @return \core_message\output\messagearea\contacts
* @return array
*/
public static function get_contacts($userid, $limitfrom = 0, $limitnum = 0) {
global $DB;
@ -272,11 +271,11 @@ class api {
ORDER BY " . $DB->sql_fullname();
if ($contacts = $DB->get_records_sql($sql, array('userid' => $userid), $limitfrom, $limitnum)) {
foreach ($contacts as $contact) {
$arrcontacts[] = \core_message\helper::create_contact($contact);
$arrcontacts[] = helper::create_contact($contact);
}
}
return new \core_message\output\messagearea\contacts($userid, 0, $arrcontacts, false);
return $arrcontacts;
}
/**
@ -287,15 +286,15 @@ class api {
* @param int $limitfrom
* @param int $limitnum
* @param string $sort
* @return \core_message\output\messagearea\messages
* @return array
*/
public static function get_messages($userid, $otheruserid, $limitfrom = 0, $limitnum = 0, $sort = 'timecreated ASC') {
$arrmessages = array();
if ($messages = \core_message\helper::get_messages($userid, $otheruserid, 0, $limitfrom, $limitnum, $sort)) {
$arrmessages = \core_message\helper::create_messages($userid, $messages);
if ($messages = helper::get_messages($userid, $otheruserid, 0, $limitfrom, $limitnum, $sort)) {
$arrmessages = helper::create_messages($userid, $messages);
}
return new \core_message\output\messagearea\messages($userid, $otheruserid, $arrmessages);
return $arrmessages;
}
/**
@ -303,14 +302,14 @@ class api {
*
* @param int $userid the current user
* @param int $otheruserid the other user
* @return \core_message\output\messagearea\message|null
* @return \stdClass|null
*/
public static function get_most_recent_message($userid, $otheruserid) {
// We want two messages here so we get an accurate 'blocktime' value.
if ($messages = \core_message\helper::get_messages($userid, $otheruserid, 0, 0, 2, 'timecreated DESC')) {
if ($messages = helper::get_messages($userid, $otheruserid, 0, 0, 2, 'timecreated DESC')) {
// Swap the order so we now have them in historical order.
$messages = array_reverse($messages);
$arrmessages = \core_message\helper::create_messages($userid, $messages);
$arrmessages = helper::create_messages($userid, $messages);
return array_pop($arrmessages);
}
@ -322,7 +321,7 @@ class api {
*
* @param int $userid The user id
* @param int $otheruserid The id of the user whose profile we want to view.
* @return \core_message\output\messagearea\profile
* @return \stdClass
*/
public static function get_profile($userid, $otheruserid) {
global $CFG, $DB;
@ -347,7 +346,7 @@ class api {
$data->profileimageurlsmall = '';
}
if (isset($userfields['lastaccess'])) {
$data->isonline = \core_message\helper::is_online($userfields['lastaccess']);
$data->isonline = helper::is_online($userfields['lastaccess']);
} else {
$data->isonline = 0;
}
@ -375,7 +374,7 @@ class api {
$data->iscontact = false;
}
return new \core_message\output\messagearea\profile($userid, $data);
return $data;
}
}
@ -448,7 +447,7 @@ class api {
$DB->execute($sql, array('time' => $now, 'userid' => $userid, 'otheruserid' => $otheruserid));
// Now we need to trigger events for these.
if ($messages = \core_message\helper::get_messages($userid, $otheruserid, $now)) {
if ($messages = helper::get_messages($userid, $otheruserid, $now)) {
// Loop through and trigger a deleted event.
foreach ($messages as $message) {
$messagetable = 'message';

View File

@ -72,11 +72,11 @@ class helper {
}
/**
* Helper function to return an array of messages renderables to display in the message area.
* Helper function to return an array of messages.
*
* @param int $userid
* @param array $messages
* @return \core_message\output\messagearea\message[]
* @return array
*/
public static function create_messages($userid, $messages) {
// Store the messages.
@ -113,18 +113,18 @@ class helper {
$msg->displayblocktime = $displayblocktime;
$msg->timecreated = $message->timecreated;
$msg->timeread = $message->timeread;
$arrmessages[] = new \core_message\output\messagearea\message($msg);
$arrmessages[] = $msg;
}
return $arrmessages;
}
/**
* Helper function for creating a contact renderable.
* Helper function for creating a contact object.
*
* @param \stdClass $contact
* @param string $prefix
* @return \core_message\output\messagearea\contact
* @return \stdClass
*/
public static function create_contact($contact, $prefix = '') {
global $PAGE;
@ -159,7 +159,7 @@ class helper {
$data->isread = isset($contact->isread) ? $contact->isread : 0;
$data->unreadcount = isset($contact->unreadcount) ? $contact->unreadcount : null;
return new \core_message\output\messagearea\contact($data);
return $data;
}
/**

View File

@ -38,71 +38,56 @@ use templatable;
*/
class contacts implements templatable, renderable {
/**
* @var int The id of the user that the contacts belong to.
*/
public $userid;
/**
* @var int The id of the user that has been selected.
*/
public $otheruserid;
public $contactuserid;
/**
* @var \core_message\output\messagearea\contact[] The contacts.
* @var array The contacts.
*/
public $contacts;
/**
* @var bool Are we storing conversations or contacts?
*/
public $isconversation;
/**
* Constructor.
*
* @param int $userid The id of the user the contacts belong to
* @param int $otheruserid The id of the user we are viewing
* @param \core_message\output\messagearea\contact[] $contacts
* @param bool $isconversation Are we storing conversations or contacts?
* @param int|null $contactuserid The id of the user that has been selected
* @param array $contacts
*/
public function __construct($userid, $otheruserid, $contacts, $isconversation = true) {
$this->userid = $userid;
$this->otheruserid = $otheruserid;
public function __construct($contactuserid, $contacts) {
$this->contactuserid = $contactuserid;
$this->contacts = $contacts;
$this->isconversation = $isconversation;
}
public function export_for_template(\renderer_base $output) {
$data = new \stdClass();
$data->userid = $this->userid;
$data->otheruserid = $this->otheruserid;
$data->contacts = array();
$userids = array();
foreach ($this->contacts as $contact) {
$contact = new contact($contact);
$contactdata = $contact->export_for_template($output);
$userids[$contactdata->userid] = $contactdata->userid;
// Check if the contact was selected.
if ($this->otheruserid == $contactdata->userid) {
if ($this->contactuserid == $contactdata->userid) {
$contactdata->selected = true;
}
$data->contacts[] = $contactdata;
}
// Check if the other user is not part of the contacts. We may be sending a message to someone
// we have not had a conversation with, so we want to add a new item to the contacts array.
if ($this->otheruserid && !isset($userids[$this->otheruserid])) {
$user = \core_user::get_user($this->otheruserid);
if ($this->contactuserid && !isset($userids[$this->contactuserid])) {
$user = \core_user::get_user($this->contactuserid);
// Set an empty message so that we know we are messaging the user, and not viewing their profile.
$user->smallmessage = '';
$user->useridfrom = $user->id;
$contact = \core_message\helper::create_contact($user);
$contact = new contact($contact);
$contactdata = $contact->export_for_template($output);
$contactdata->selected = true;
// Put the contact at the front.
array_unshift($data->contacts, $contactdata);
}
$data->isconversation = $this->isconversation;
return $data;
}
}

View File

@ -44,12 +44,17 @@ class message_area implements templatable, renderable {
public $userid;
/**
* @var \core_message\output\messagearea\contacts The contacts for the users.
* @var int The other user id.
*/
public $otheruserid;
/**
* @var array The contacts for the users.
*/
public $contacts;
/**
* @var \core_message\output\messagearea\messages The messages for the user.
* @var array The messages for the user.
*/
public $messages;
@ -62,12 +67,14 @@ class message_area implements templatable, renderable {
* Constructor.
*
* @param int $userid The ID of the user whose contacts and messages we are viewing
* @param \core_message\output\messagearea\contacts $contacts
* @param \core_message\output\messagearea\messages|null $messages
* @param int|null $otheruserid The id of the user we are viewing, null if none
* @param array $contacts
* @param array|null $messages
* @param bool $requestedconversation
*/
public function __construct($userid, $contacts, $messages, $requestedconversation) {
public function __construct($userid, $otheruserid, $contacts, $messages, $requestedconversation) {
$this->userid = $userid;
$this->otheruserid = $otheruserid;
$this->contacts = $contacts;
$this->messages = $messages;
$this->requestedconversation = $requestedconversation;
@ -76,10 +83,13 @@ class message_area implements templatable, renderable {
public function export_for_template(\renderer_base $output) {
$data = new \stdClass();
$data->userid = $this->userid;
$data->contacts = $this->contacts->export_for_template($output);
$contacts = new contacts($this->otheruserid, $this->contacts);
$data->contacts = $contacts->export_for_template($output);
if ($this->messages) {
$data->messages = $this->messages->export_for_template($output);
$messages = new messages($this->userid, $this->otheruserid, $this->messages);
$data->messages = $messages->export_for_template($output);
}
$data->isconversation = true;
$data->requestedconversation = $this->requestedconversation;
return $data;

View File

@ -39,31 +39,24 @@ use templatable;
class message_search_results implements templatable, renderable {
/**
* @var int The id of the user that the contacts belong to.
*/
public $userid;
/**
* @var \core_message\output\messagearea\contact[] The list of contacts.
* @var array The list of contacts.
*/
public $contacts;
/**
* Constructor.
*
* @param int $userid The id of the user the search results belong to
* @param \core_message\output\messagearea\contact[] $contacts
* @param array $contacts
*/
public function __construct($userid, $contacts) {
$this->userid = $userid;
public function __construct($contacts) {
$this->contacts = $contacts;
}
public function export_for_template(\renderer_base $output) {
$data = new \stdClass();
$data->userid = $this->userid;
$data->contacts = array();
foreach ($this->contacts as $contact) {
$contact = new contact($contact);
$data->contacts[] = $contact->export_for_template($output);
}

View File

@ -39,7 +39,7 @@ use templatable;
class messages implements templatable, renderable {
/**
* @var \core_message\output\messagearea\message[] The messages.
* @var array The messages.
*/
public $messages;
@ -63,7 +63,7 @@ class messages implements templatable, renderable {
*
* @param int $currentuserid The current user we are wanting to view messages for
* @param int $otheruserid The other user we are wanting to view messages for
* @param \core_message\output\messagearea\message[] $messages
* @param array $messages
*/
public function __construct($currentuserid, $otheruserid, $messages) {
$ufields = get_all_user_name_fields(true) . ', lastaccess';
@ -85,6 +85,7 @@ class messages implements templatable, renderable {
$data->isonline = \core_message\helper::is_online($this->otheruser->lastaccess);
$data->messages = array();
foreach ($this->messages as $message) {
$message = new message($message);
$data->messages[] = $message->export_for_template($output);
}

View File

@ -38,11 +38,6 @@ use templatable;
*/
class profile implements templatable, renderable {
/**
* @var int The id of the user who is viewing the profile.
*/
public $currentuserid;
/**
* @var int The id of the user we are going to view.
*/
@ -96,30 +91,24 @@ class profile implements templatable, renderable {
/**
* Constructor.
*
* @param int $currentuserid
* @param \stdClass $otheruser
* @param \stdClass $profile
*/
public function __construct($currentuserid, $otheruser) {
$this->currentuserid = $currentuserid;
$this->userid = $otheruser->userid;
$this->fullname = $otheruser->fullname;
$this->isonline = $otheruser->isonline;
$this->email = $otheruser->email;
$this->country = $otheruser->country;
$this->city = $otheruser->city;
$this->profileimageurl = $otheruser->profileimageurl;
$this->profileimageurlsmall = $otheruser->profileimageurlsmall;
$this->isblocked = $otheruser->isblocked;
$this->iscontact = $otheruser->iscontact;
public function __construct($profile) {
$this->userid = $profile->userid;
$this->fullname = $profile->fullname;
$this->isonline = $profile->isonline;
$this->email = $profile->email;
$this->country = $profile->country;
$this->city = $profile->city;
$this->profileimageurl = $profile->profileimageurl;
$this->profileimageurlsmall = $profile->profileimageurlsmall;
$this->isblocked = $profile->isblocked;
$this->iscontact = $profile->iscontact;
}
public function export_for_template(\renderer_base $output) {
global $USER;
$data = new \stdClass();
$data->iscurrentuser = $USER->id == $this->userid;
$data->currentuserid = $this->currentuserid;
$data->otheruserid = $this->userid;
$data->userid = $this->userid;
$data->fullname = $this->fullname;
$data->isonline = $this->isonline;
$data->email = $this->email;

View File

@ -39,7 +39,7 @@ use templatable;
class user_search_results implements templatable, renderable {
/**
* @var \core_message\output\messagearea\contact[] The list of contacts.
* @var array The list of contacts.
*/
public $contacts;
@ -49,16 +49,16 @@ class user_search_results implements templatable, renderable {
public $courses;
/**
* @var \core_message\output\messagearea\contact[] The list of non-contacts.
* @var array The list of non-contacts.
*/
public $noncontacts;
/**
* Constructor.
*
* @param \core_message\output\messagearea\contact[] $contacts
* @param array $contacts
* @param array $courses
* @param \core_message\output\messagearea\contact[] $noncontacts
* @param array $noncontacts
*/
public function __construct($contacts, $courses = array(), $noncontacts = array()) {
$this->contacts = $contacts;
@ -80,6 +80,7 @@ class user_search_results implements templatable, renderable {
if (!empty($this->contacts)) {
$data->hascontacts = true;
foreach ($this->contacts as $contact) {
$contact = new contact($contact);
$data->contacts[] = $contact->export_for_template($output);
}
}
@ -94,6 +95,7 @@ class user_search_results implements templatable, renderable {
if (!empty($this->noncontacts)) {
$data->hasnoncontacts = true;
foreach ($this->noncontacts as $noncontact) {
$noncontact = new contact($noncontact);
$data->noncontacts[] = $noncontact->export_for_template($output);
}
}

View File

@ -499,7 +499,7 @@ class core_message_external extends external_api {
* @since 3.2
*/
public static function data_for_messagearea_search_users_in_course($userid, $courseid, $search, $limitfrom = 0,
$limitnum = 0) {
$limitnum = 0) {
global $CFG, $PAGE, $USER;
// Check if messaging is enabled.
@ -523,10 +523,11 @@ class core_message_external extends external_api {
throw new moodle_exception('You do not have permission to perform this action.');
}
$search = \core_message\api::search_users_in_course($userid, $courseid, $search, $limitfrom, $limitnum);
$users = \core_message\api::search_users_in_course($userid, $courseid, $search, $limitfrom, $limitnum);
$results = new \core_message\output\messagearea\user_search_results($users);
$renderer = $PAGE->get_renderer('core_message');
return $search->export_for_template($renderer);
return $results->export_for_template($renderer);
}
/**
@ -538,7 +539,6 @@ class core_message_external extends external_api {
public static function data_for_messagearea_search_users_in_course_returns() {
return new external_single_structure(
array(
'hascontacts' => new external_value(PARAM_BOOL, 'Are there contacts?'),
'contacts' => new external_multiple_structure(
self::get_messagearea_contact_structure()
),
@ -594,7 +594,8 @@ class core_message_external extends external_api {
throw new moodle_exception('You do not have permission to perform this action.');
}
$search = \core_message\api::search_users($userid, $search, $limitnum);
list($contacts, $courses, $noncontacts) = \core_message\api::search_users($userid, $search, $limitnum);
$search = new \core_message\output\messagearea\user_search_results($contacts, $courses, $noncontacts);
$renderer = $PAGE->get_renderer('core_message');
return $search->export_for_template($renderer);
@ -609,11 +610,9 @@ class core_message_external extends external_api {
public static function data_for_messagearea_search_users_returns() {
return new external_single_structure(
array(
'hascontacts' => new external_value(PARAM_BOOL, 'Are there contacts?'),
'contacts' => new external_multiple_structure(
self::get_messagearea_contact_structure()
),
'hascourses' => new external_value(PARAM_BOOL, 'Are there courses?'),
'courses' => new external_multiple_structure(
new external_single_structure(
array(
@ -623,7 +622,6 @@ class core_message_external extends external_api {
)
)
),
'hasnoncontacts' => new external_value(PARAM_BOOL, 'Are there non-contacts?'),
'noncontacts' => new external_multiple_structure(
self::get_messagearea_contact_structure()
)
@ -683,10 +681,11 @@ class core_message_external extends external_api {
throw new moodle_exception('You do not have permission to perform this action.');
}
$search = \core_message\api::search_messages($userid, $search, $limitfrom, $limitnum);
$messages = \core_message\api::search_messages($userid, $search, $limitfrom, $limitnum);
$results = new \core_message\output\messagearea\message_search_results($messages);
$renderer = $PAGE->get_renderer('core_message');
return $search->export_for_template($renderer);
return $results->export_for_template($renderer);
}
/**
@ -698,7 +697,6 @@ class core_message_external extends external_api {
public static function data_for_messagearea_search_messages_returns() {
return new external_single_structure(
array(
'userid' => new external_value(PARAM_INT, 'The id of the user who we are viewing conversations for'),
'contacts' => new external_multiple_structure(
self::get_messagearea_contact_structure()
)
@ -754,10 +752,11 @@ class core_message_external extends external_api {
throw new moodle_exception('You do not have permission to perform this action.');
}
$contacts = \core_message\api::get_conversations($userid, 0, $limitfrom, $limitnum);
$conversations = \core_message\api::get_conversations($userid, $limitfrom, $limitnum);
$conversations = new \core_message\output\messagearea\contacts(null, $conversations);
$renderer = $PAGE->get_renderer('core_message');
return $contacts->export_for_template($renderer);
return $conversations->export_for_template($renderer);
}
/**
@ -769,8 +768,6 @@ class core_message_external extends external_api {
public static function data_for_messagearea_conversations_returns() {
return new external_single_structure(
array(
'userid' => new external_value(PARAM_INT, 'The id of the user who we are viewing conversations for'),
'isconversation' => new external_value(PARAM_BOOL, 'Are we storing conversations or contacts?'),
'contacts' => new external_multiple_structure(
self::get_messagearea_contact_structure()
)
@ -821,6 +818,7 @@ class core_message_external extends external_api {
}
$contacts = \core_message\api::get_contacts($userid, $limitfrom, $limitnum);
$contacts = new \core_message\output\messagearea\contacts(null, $contacts);
$renderer = $PAGE->get_renderer('core_message');
return $contacts->export_for_template($renderer);
@ -897,6 +895,7 @@ class core_message_external extends external_api {
$sort = 'timecreated ASC';
}
$messages = \core_message\api::get_messages($currentuserid, $otheruserid, $limitfrom, $limitnum, $sort);
$messages = new \core_message\output\messagearea\messages($currentuserid, $otheruserid, $messages);
$renderer = $PAGE->get_renderer('core_message');
return $messages->export_for_template($renderer);
@ -970,6 +969,7 @@ class core_message_external extends external_api {
}
$message = \core_message\api::get_most_recent_message($currentuserid, $otheruserid);
$message = new \core_message\output\messagearea\message($message);
$renderer = $PAGE->get_renderer('core_message');
return $message->export_for_template($renderer);
@ -1031,6 +1031,7 @@ class core_message_external extends external_api {
}
$profile = \core_message\api::get_profile($currentuserid, $otheruserid);
$profile = new \core_message\output\messagearea\profile($profile);
$renderer = $PAGE->get_renderer('core_message');
return $profile->export_for_template($renderer);
@ -1045,10 +1046,7 @@ class core_message_external extends external_api {
public static function data_for_messagearea_get_profile_returns() {
return new external_single_structure(
array(
'iscurrentuser' => new external_value(PARAM_BOOL, 'Is the currently logged in user the user we are viewing
the profile on behalf of?'),
'currentuserid' => new external_value(PARAM_INT, 'The current user\'s id'),
'otheruserid' => new external_value(PARAM_INT, 'The id of the user whose profile we are viewing'),
'userid' => new external_value(PARAM_INT, 'The id of the user whose profile we are viewing'),
'email' => new external_value(core_user::get_property_type('email'), 'An email address'),
'country' => new external_value(core_user::get_property_type('country'), 'Home country code of the user'),
'city' => new external_value(core_user::get_property_type('city'), 'Home city of the user'),

View File

@ -98,39 +98,37 @@ $settings->make_active();
// Get the renderer and the information we are going to be use.
$renderer = $PAGE->get_renderer('core_message');
$requestedconversation = false;
$conversations = \core_message\api::get_conversations($user1->id, 0, 20);
$messages = null;
if (!$user2realuser) {
$conversations = \core_message\api::get_conversations($user1->id, 0, 0, 20);
$contacts = $conversations->contacts;
if (!empty($contacts)) {
// If there are conversations then render the most recent one by default.
$contact = reset($contacts);
$otheruserid = $contact->userid;
$conversations->otheruserid = $otheruserid;
// Mark the conversation as read.
if ($currentuser) {
$contact->isread = 1;
\core_message\api::mark_all_read_for_user($user1->id, $otheruserid);
}
$messages = \core_message\api::get_messages($user1->id, $otheruserid, 0, 20, 'timecreated DESC');
} else {
$messages = null;
// If there are conversations, but the user has not chosen a particular one, then render the most recent one.
$user2 = new stdClass();
$user2->id = null;
if (!empty($conversations)) {
$contact = reset($conversations);
$user2->id = $contact->userid;
}
} else {
// Mark the conversation as read.
if ($currentuser) {
\core_message\api::mark_all_read_for_user($user1->id, $user2->id);
}
$conversations = \core_message\api::get_conversations($user1->id, $user2->id, 0, 20);
$messages = \core_message\api::get_messages($user1->id, $user2->id);
// The user has specifically requested to see this conversation. Add the flag
// to the context so that we can render the messaging app appropriately.
// The user has specifically requested to see a conversation. Add the flag to
// the context so that we can render the messaging app appropriately - this is
// used for smaller screens as it allows the UI to be responsive.
$requestedconversation = true;
}
$messagearea = new \core_message\output\messagearea\message_area($user1->id, $conversations, $messages, $requestedconversation);
// Mark the conversation as read.
if (!empty($user2->id)) {
if ($currentuser) {
// Mark the conversation we are loading as read.
\core_message\api::mark_all_read_for_user($user1->id, $user2->id);
// Ensure the UI knows it's read as well.
$conversations[$user2->id]->isread = 1;
}
$messages = \core_message\api::get_messages($user1->id, $user2->id, 0, 20, 'timecreated DESC');
}
$messagearea = new \core_message\output\messagearea\message_area($user1->id, $user2->id, $conversations, $messages,
$requestedconversation);
// Now the page contents.
echo $OUTPUT->header();

View File

@ -3,7 +3,7 @@
<button class="btn btn-link show-contacts" data-action="show-contacts">{{#str}} back {{/str}}</button>
</div>
</div>
<div class="profile" data-userid="{{otheruserid}}" data-region="profile">
<div class="profile" data-userid="{{userid}}" data-region="profile">
<div class="user-container">
<img class="profile-picture" src="{{profileimageurl}}" alt="" />
<div class="name-container">
@ -24,12 +24,7 @@
<a data-action="profile-view" href="#">{{#str}}viewprofile{{/str}}</a>
</div>
<div class="separator">
{{#iscurrentuser}}
<a data-action="profile-send-message" href="#">{{#str}}sendmessage, message{{/str}}</a>
{{/iscurrentuser}}
{{^iscurrentuser}}
<a data-action="profile-send-message" href="#">{{#str}}viewconversation, message{{/str}}</a>
{{/iscurrentuser}}
<a data-action="profile-send-message" href="#">{{#str}}viewconversation, message{{/str}}</a>
</div>
<div class="separator">
{{#isblocked}}