MDL-56871 core_message: fix inconsistent online status between panels
This commit is contained in:
@@ -361,7 +361,7 @@ class api {
|
||||
$data->city = '';
|
||||
$data->country = '';
|
||||
$data->email = '';
|
||||
$data->isonline = false;
|
||||
$data->isonline = null;
|
||||
// Get the user picture data - messaging has always shown these to the user.
|
||||
$userpicture = new \user_picture($user);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
|
||||
@@ -178,8 +178,10 @@ class helper {
|
||||
$data->messageid = $contact->messageid;
|
||||
}
|
||||
}
|
||||
// Check if the user is online.
|
||||
$data->isonline = self::is_online($userfields->lastaccess);
|
||||
$data->isonline = null;
|
||||
if (self::show_online_status($userfields)) {
|
||||
$data->isonline = self::is_online($userfields->lastaccess);
|
||||
}
|
||||
$data->isblocked = isset($contact->blocked) ? (bool) $contact->blocked : false;
|
||||
$data->isread = isset($contact->isread) ? (bool) $contact->isread : false;
|
||||
$data->unreadcount = isset($contact->unreadcount) ? $contact->unreadcount : null;
|
||||
@@ -187,6 +189,26 @@ class helper {
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for checking if we should show the user's online status.
|
||||
*
|
||||
* @param \stdClass $user
|
||||
* @return boolean
|
||||
*/
|
||||
public static function show_online_status($user) {
|
||||
global $CFG;
|
||||
|
||||
require_once($CFG->dirroot . '/user/lib.php');
|
||||
|
||||
if ($lastaccess = user_get_user_details($user, null, array('lastaccess'))) {
|
||||
if (isset($lastaccess['lastaccess'])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for checking the time meets the 'online' condition.
|
||||
*
|
||||
|
||||
@@ -140,6 +140,7 @@ class contact implements templatable, renderable {
|
||||
} else {
|
||||
$contact->lastmessage = null;
|
||||
}
|
||||
$contact->showonlinestatus = is_null($this->isonline) ? false : true;
|
||||
$contact->isonline = $this->isonline;
|
||||
$contact->isblocked = $this->isblocked;
|
||||
$contact->isread = $this->isread;
|
||||
|
||||
@@ -67,11 +67,13 @@ class messages implements templatable, renderable {
|
||||
* @param array $messages
|
||||
*/
|
||||
public function __construct($currentuserid, $otheruserid, $messages) {
|
||||
$ufields = get_all_user_name_fields(true) . ', lastaccess';
|
||||
$ufields = 'id, ' . get_all_user_name_fields(true) . ', lastaccess';
|
||||
|
||||
$this->currentuserid = $currentuserid;
|
||||
$this->otheruserid = $otheruserid;
|
||||
$this->otheruser = \core_user::get_user($otheruserid, $ufields);
|
||||
if ($otheruserid) {
|
||||
$this->otheruserid = $otheruserid;
|
||||
$this->otheruser = \core_user::get_user($otheruserid, $ufields, MUST_EXIST);
|
||||
}
|
||||
$this->messages = $messages;
|
||||
}
|
||||
|
||||
@@ -81,14 +83,17 @@ class messages implements templatable, renderable {
|
||||
$data = new \stdClass();
|
||||
$data->iscurrentuser = $USER->id == $this->currentuserid;
|
||||
$data->currentuserid = $this->currentuserid;
|
||||
$data->otheruserid = $this->otheruserid;
|
||||
$data->otheruserfullname = fullname($this->otheruser);
|
||||
|
||||
if (empty($this->otheruser)) {
|
||||
$data->isonline = false;
|
||||
} else {
|
||||
$data->isonline = \core_message\helper::is_online($this->otheruser->lastaccess);
|
||||
if ($this->otheruserid) {
|
||||
$data->otheruserid = $this->otheruserid;
|
||||
$data->otheruserfullname = fullname($this->otheruser);
|
||||
}
|
||||
$data->isonline = null;
|
||||
if ($this->otheruserid) {
|
||||
if (\core_message\helper::show_online_status($this->otheruser)) {
|
||||
$data->isonline = \core_message\helper::is_online($this->otheruser->lastaccess);
|
||||
}
|
||||
}
|
||||
$data->showonlinestatus = is_null($data->isonline) ? false : true;
|
||||
|
||||
$data->messages = array();
|
||||
foreach ($this->messages as $message) {
|
||||
|
||||
@@ -110,6 +110,7 @@ class profile implements templatable, renderable {
|
||||
$data = new \stdClass();
|
||||
$data->userid = $this->userid;
|
||||
$data->fullname = $this->fullname;
|
||||
$data->showonlinestatus = is_null($this->isonline) ? false : true;
|
||||
$data->isonline = $this->isonline;
|
||||
$data->email = $this->email;
|
||||
if (!empty($this->country)) {
|
||||
|
||||
@@ -489,6 +489,7 @@ class core_message_external extends external_api {
|
||||
'sentfromcurrentuser' => new external_value(PARAM_BOOL, 'Was the last message sent from the current user?'),
|
||||
'lastmessage' => new external_value(PARAM_NOTAGS, 'The user\'s last message'),
|
||||
'messageid' => new external_value(PARAM_INT, 'The unique search message id', VALUE_DEFAULT, null),
|
||||
'showonlinestatus' => new external_value(PARAM_BOOL, 'Show the user\'s online status?'),
|
||||
'isonline' => new external_value(PARAM_BOOL, 'The user\'s online status'),
|
||||
'isread' => new external_value(PARAM_BOOL, 'If the user has read the message'),
|
||||
'isblocked' => new external_value(PARAM_BOOL, 'If the user has been blocked'),
|
||||
@@ -993,6 +994,7 @@ class core_message_external extends external_api {
|
||||
'currentuserid' => new external_value(PARAM_INT, 'The current user\'s id'),
|
||||
'otheruserid' => new external_value(PARAM_INT, 'The other user\'s id'),
|
||||
'otheruserfullname' => new external_value(PARAM_NOTAGS, 'The other user\'s fullname'),
|
||||
'showonlinestatus' => new external_value(PARAM_BOOL, 'Show the user\'s online status?'),
|
||||
'isonline' => new external_value(PARAM_BOOL, 'The user\'s online status'),
|
||||
'messages' => new external_multiple_structure(
|
||||
self::get_messagearea_message_structure()
|
||||
@@ -1132,6 +1134,7 @@ class core_message_external extends external_api {
|
||||
'fullname' => new external_value(PARAM_NOTAGS, 'The user\'s name'),
|
||||
'profileimageurl' => new external_value(PARAM_URL, 'User picture URL'),
|
||||
'profileimageurlsmall' => new external_value(PARAM_URL, 'Small user picture URL'),
|
||||
'showonlinestatus' => new external_value(PARAM_BOOL, 'Show the user\'s online status?'),
|
||||
'isonline' => new external_value(PARAM_BOOL, 'The user\'s online status'),
|
||||
'isblocked' => new external_value(PARAM_BOOL, 'Is the user blocked?'),
|
||||
'iscontact' => new external_value(PARAM_BOOL, 'Is the user a contact?')
|
||||
|
||||
@@ -23,9 +23,11 @@
|
||||
<div class="information">
|
||||
<div class="name">
|
||||
{{fullname}}
|
||||
<span {{^isonline}}class="hidden"{{/isonline}} data-region="contact-icon-online">
|
||||
{{#pix}} t/go, core, {{#str}} online, message {{/str}} {{/pix}}
|
||||
</span>
|
||||
{{#showonlinestatus}}
|
||||
<span {{^isonline}}class="hidden"{{/isonline}} data-region="contact-icon-online">
|
||||
{{#pix}} t/go, core, {{#str}} online, message {{/str}} {{/pix}}
|
||||
</span>
|
||||
{{/showonlinestatus}}
|
||||
<span {{^isblocked}}class="hidden"{{/isblocked}} data-region="contact-icon-blocked">
|
||||
{{#pix}} t/block, core, {{#str}} contactblocked, message {{/str}} {{/pix}}
|
||||
</span>
|
||||
|
||||
@@ -62,10 +62,12 @@
|
||||
</span>
|
||||
{{/isblocked}}
|
||||
</div>
|
||||
<div class="status {{#isonline}}online{{/isonline}}">
|
||||
<span class="offline-text">{{#str}} offline, message {{/str}}</span>
|
||||
<span class="online-text">{{#str}} online, message {{/str}}</span>
|
||||
</div>
|
||||
{{#showonlinestatus}}
|
||||
<div class="status {{#isonline}}online{{/isonline}}">
|
||||
<span class="offline-text">{{#str}} offline, message {{/str}}</span>
|
||||
<span class="online-text">{{#str}} online, message {{/str}}</span>
|
||||
</div>
|
||||
{{/showonlinestatus}}
|
||||
</div>
|
||||
<div class="delete-instructions">
|
||||
{{#str}} selectmessagestodelete, message {{/str}}
|
||||
|
||||
@@ -24,10 +24,12 @@
|
||||
<img class="profile-picture" src="{{profileimageurl}}" alt="" />
|
||||
<div class="name-container">
|
||||
<div class="name">{{fullname}}</div>
|
||||
<div class="status {{#isonline}}online{{/isonline}}">
|
||||
<div class="online-text">{{#str}} online, message {{/str}}</div>
|
||||
<div class="offline-text">{{#str}} offline, message {{/str}}</div>
|
||||
</div>
|
||||
{{#showonlinestatus}}
|
||||
<div class="status {{#isonline}}online{{/isonline}}">
|
||||
<div class="online-text">{{#str}} online, message {{/str}}</div>
|
||||
<div class="offline-text">{{#str}} offline, message {{/str}}</div>
|
||||
</div>
|
||||
{{/showonlinestatus}}
|
||||
</div>
|
||||
<ul class="information">
|
||||
{{#email}}<li><div class="name">{{#str}} email {{/str}}</div><div class="value">{{.}}</div></li>{{/email}}
|
||||
|
||||
+10
-10
@@ -164,7 +164,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertFalse($user->ismessaging);
|
||||
$this->assertNull($user->lastmessage);
|
||||
$this->assertNull($user->messageid);
|
||||
$this->assertTrue($user->isonline);
|
||||
$this->assertNull($user->isonline);
|
||||
$this->assertFalse($user->isread);
|
||||
$this->assertTrue($user->isblocked);
|
||||
$this->assertNull($user->unreadcount);
|
||||
@@ -303,7 +303,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue($message1->ismessaging);
|
||||
$this->assertEquals('Word.', $message1->lastmessage);
|
||||
$this->assertNotEmpty($message1->messageid);
|
||||
$this->assertFalse($message1->isonline);
|
||||
$this->assertNull($message1->isonline);
|
||||
$this->assertFalse($message1->isread);
|
||||
$this->assertFalse($message1->isblocked);
|
||||
$this->assertNull($message1->unreadcount);
|
||||
@@ -314,7 +314,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue($message2->ismessaging);
|
||||
$this->assertEquals('Yo!', $message2->lastmessage);
|
||||
$this->assertNotEmpty($message2->messageid);
|
||||
$this->assertFalse($message2->isonline);
|
||||
$this->assertNull($message2->isonline);
|
||||
$this->assertTrue($message2->isread);
|
||||
$this->assertFalse($message2->isblocked);
|
||||
$this->assertNull($message2->unreadcount);
|
||||
@@ -364,7 +364,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue($message1->ismessaging);
|
||||
$this->assertEquals('Dope.', $message1->lastmessage);
|
||||
$this->assertNull($message1->messageid);
|
||||
$this->assertFalse($message1->isonline);
|
||||
$this->assertNull($message1->isonline);
|
||||
$this->assertTrue($message1->isread);
|
||||
$this->assertFalse($message1->isblocked);
|
||||
$this->assertEquals(0, $message1->unreadcount);
|
||||
@@ -374,7 +374,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue($message2->ismessaging);
|
||||
$this->assertEquals('Cool.', $message2->lastmessage);
|
||||
$this->assertNull($message2->messageid);
|
||||
$this->assertFalse($message2->isonline);
|
||||
$this->assertNull($message2->isonline);
|
||||
$this->assertFalse($message2->isread);
|
||||
$this->assertFalse($message2->isblocked);
|
||||
$this->assertEquals(2, $message2->unreadcount);
|
||||
@@ -384,7 +384,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertTrue($message3->ismessaging);
|
||||
$this->assertEquals('Word.', $message3->lastmessage);
|
||||
$this->assertNull($message3->messageid);
|
||||
$this->assertFalse($message3->isonline);
|
||||
$this->assertNull($message3->isonline);
|
||||
$this->assertFalse($message3->isread);
|
||||
$this->assertFalse($message3->isblocked);
|
||||
$this->assertEquals(2, $message3->unreadcount);
|
||||
@@ -440,7 +440,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertFalse($contact1->ismessaging);
|
||||
$this->assertNull($contact1->lastmessage);
|
||||
$this->assertNull($contact1->messageid);
|
||||
$this->assertFalse($contact1->isonline);
|
||||
$this->assertNull($contact1->isonline);
|
||||
$this->assertFalse($contact1->isread);
|
||||
$this->assertFalse($contact1->isblocked);
|
||||
$this->assertNull($contact1->unreadcount);
|
||||
@@ -450,7 +450,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertFalse($contact2->ismessaging);
|
||||
$this->assertNull($contact2->lastmessage);
|
||||
$this->assertNull($contact2->messageid);
|
||||
$this->assertFalse($contact2->isonline);
|
||||
$this->assertNull($contact2->isonline);
|
||||
$this->assertFalse($contact2->isread);
|
||||
$this->assertFalse($contact2->isblocked);
|
||||
$this->assertNull($contact2->unreadcount);
|
||||
@@ -460,7 +460,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertFalse($contact3->ismessaging);
|
||||
$this->assertNull($contact3->lastmessage);
|
||||
$this->assertNull($contact3->messageid);
|
||||
$this->assertFalse($contact3->isonline);
|
||||
$this->assertNull($contact3->isonline);
|
||||
$this->assertFalse($contact3->isread);
|
||||
$this->assertFalse($contact3->isblocked);
|
||||
$this->assertNull($contact3->unreadcount);
|
||||
@@ -566,7 +566,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
||||
$this->assertEmpty($profile->country);
|
||||
$this->assertEmpty($profile->city);
|
||||
$this->assertEquals(fullname($user2), $profile->fullname);
|
||||
$this->assertFalse($profile->isonline);
|
||||
$this->assertNull($profile->isonline);
|
||||
$this->assertFalse($profile->isblocked);
|
||||
$this->assertFalse($profile->iscontact);
|
||||
}
|
||||
|
||||
@@ -1030,7 +1030,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($user['sentfromcurrentuser']);
|
||||
$this->assertNull($user['lastmessage']);
|
||||
$this->assertNull($user['messageid']);
|
||||
$this->assertTrue($user['isonline']);
|
||||
$this->assertNull($user['isonline']);
|
||||
$this->assertFalse($user['isread']);
|
||||
$this->assertTrue($user['isblocked']);
|
||||
$this->assertNull($user['unreadcount']);
|
||||
@@ -1402,7 +1402,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($message1['sentfromcurrentuser']);
|
||||
$this->assertEquals('Word.', $message1['lastmessage']);
|
||||
$this->assertNotEmpty($message1['messageid']);
|
||||
$this->assertFalse($message1['isonline']);
|
||||
$this->assertNull($message1['isonline']);
|
||||
$this->assertFalse($message1['isread']);
|
||||
$this->assertFalse($message1['isblocked']);
|
||||
$this->assertNull($message1['unreadcount']);
|
||||
@@ -1413,7 +1413,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertTrue($message2['sentfromcurrentuser']);
|
||||
$this->assertEquals('Yo!', $message2['lastmessage']);
|
||||
$this->assertNotEmpty($message2['messageid']);
|
||||
$this->assertFalse($message2['isonline']);
|
||||
$this->assertNull($message2['isonline']);
|
||||
$this->assertTrue($message2['isread']);
|
||||
$this->assertFalse($message2['isblocked']);
|
||||
$this->assertNull($message2['unreadcount']);
|
||||
@@ -1567,7 +1567,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertTrue($message1['sentfromcurrentuser']);
|
||||
$this->assertEquals('Dope.', $message1['lastmessage']);
|
||||
$this->assertNull($message1['messageid']);
|
||||
$this->assertFalse($message1['isonline']);
|
||||
$this->assertNull($message1['isonline']);
|
||||
$this->assertTrue($message1['isread']);
|
||||
$this->assertFalse($message1['isblocked']);
|
||||
$this->assertEquals(0, $message1['unreadcount']);
|
||||
@@ -1577,7 +1577,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($message2['sentfromcurrentuser']);
|
||||
$this->assertEquals('Cool.', $message2['lastmessage']);
|
||||
$this->assertNull($message2['messageid']);
|
||||
$this->assertFalse($message2['isonline']);
|
||||
$this->assertNull($message2['isonline']);
|
||||
$this->assertFalse($message2['isread']);
|
||||
$this->assertFalse($message2['isblocked']);
|
||||
$this->assertEquals(2, $message2['unreadcount']);
|
||||
@@ -1587,7 +1587,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($message3['sentfromcurrentuser']);
|
||||
$this->assertEquals('Word.', $message3['lastmessage']);
|
||||
$this->assertNull($message3['messageid']);
|
||||
$this->assertFalse($message3['isonline']);
|
||||
$this->assertNull($message3['isonline']);
|
||||
$this->assertFalse($message3['isread']);
|
||||
$this->assertFalse($message3['isblocked']);
|
||||
$this->assertEquals(2, $message3['unreadcount']);
|
||||
@@ -1767,7 +1767,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($contact1['sentfromcurrentuser']);
|
||||
$this->assertNull($contact1['lastmessage']);
|
||||
$this->assertNull($contact1['messageid']);
|
||||
$this->assertFalse($contact1['isonline']);
|
||||
$this->assertNull($contact1['isonline']);
|
||||
$this->assertFalse($contact1['isread']);
|
||||
$this->assertFalse($contact1['isblocked']);
|
||||
$this->assertNull($contact1['unreadcount']);
|
||||
@@ -1777,7 +1777,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($contact2['sentfromcurrentuser']);
|
||||
$this->assertNull($contact2['lastmessage']);
|
||||
$this->assertNull($contact2['messageid']);
|
||||
$this->assertFalse($contact2['isonline']);
|
||||
$this->assertNull($contact2['isonline']);
|
||||
$this->assertFalse($contact2['isread']);
|
||||
$this->assertFalse($contact2['isblocked']);
|
||||
$this->assertNull($contact2['unreadcount']);
|
||||
@@ -1787,7 +1787,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertFalse($contact3['sentfromcurrentuser']);
|
||||
$this->assertNull($contact3['lastmessage']);
|
||||
$this->assertNull($contact3['messageid']);
|
||||
$this->assertFalse($contact3['isonline']);
|
||||
$this->assertNull($contact3['isonline']);
|
||||
$this->assertFalse($contact3['isread']);
|
||||
$this->assertFalse($contact3['isblocked']);
|
||||
$this->assertNull($contact3['unreadcount']);
|
||||
@@ -1947,7 +1947,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertEquals($user1->id, $result['currentuserid']);
|
||||
$this->assertEquals($user2->id, $result['otheruserid']);
|
||||
$this->assertEquals(fullname($user2), $result['otheruserfullname']);
|
||||
$this->assertFalse($result['isonline']);
|
||||
$this->assertNull($result['isonline']);
|
||||
|
||||
// Confirm the message data is correct.
|
||||
$messages = $result['messages'];
|
||||
@@ -2258,7 +2258,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
||||
$this->assertEmpty($result['country']);
|
||||
$this->assertEmpty($result['city']);
|
||||
$this->assertEquals(fullname($user2), $result['fullname']);
|
||||
$this->assertFalse($result['isonline']);
|
||||
$this->assertNull($result['isonline']);
|
||||
$this->assertFalse($result['isblocked']);
|
||||
$this->assertFalse($result['iscontact']);
|
||||
}
|
||||
|
||||
+3
-3
@@ -384,18 +384,18 @@ function user_get_user_details($user, $course = null, array $userfields = array(
|
||||
$hiddenfields = array();
|
||||
// Address, phone1 and phone2 not appears in hidden fields list but require viewhiddenfields capability
|
||||
// according to user/profile.php.
|
||||
if ($user->address && in_array('address', $userfields)) {
|
||||
if (!empty($user->address) && in_array('address', $userfields)) {
|
||||
$userdetails['address'] = $user->address;
|
||||
}
|
||||
} else {
|
||||
$hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields));
|
||||
}
|
||||
|
||||
if ($user->phone1 && in_array('phone1', $userfields) &&
|
||||
if (!empty($user->phone1) && in_array('phone1', $userfields) &&
|
||||
(in_array('phone1', $showuseridentityfields) or $canviewhiddenuserfields)) {
|
||||
$userdetails['phone1'] = $user->phone1;
|
||||
}
|
||||
if ($user->phone2 && in_array('phone2', $userfields) &&
|
||||
if (!empty($user->phone2) && in_array('phone2', $userfields) &&
|
||||
(in_array('phone2', $showuseridentityfields) or $canviewhiddenuserfields)) {
|
||||
$userdetails['phone2'] = $user->phone2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user