MDL-81951 communication_matrix: New trait for power levels

A more reliable way of obtaining room power levels is now used in the
new trait get_room_power_levels_v3. This makes
get_room_powerlevels_from_sync_v3 less needed, but not necessarily
redundant. The names of the containing methods have been adjusted to
make better sense of which trait they belong to.
This commit is contained in:
David Woloszyn
2024-08-07 04:13:54 +00:00
committed by Jenkins
parent 5760639c16
commit 4e7ee4e0b9
4 changed files with 56 additions and 9 deletions
@@ -721,14 +721,7 @@ class communication_feature implements
);
}
$powerdata = $this->get_body($response);
$powerdata = array_filter(
$powerdata->rooms->join->{$roomid}->state->events,
fn($value) => $value->type === 'm.room.power_levels'
);
$powerdata = reset($powerdata);
return $powerdata->content;
return $this->get_body($response);
}
/**
@@ -0,0 +1,53 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace communication_matrix\local\spec\features\matrix;
use communication_matrix\local\command;
use GuzzleHttp\Psr7\Response;
/**
* Matrix API feature to fetch room power levels.
*
* https://spec.matrix.org/v1.1/client-server-api/#mroompower_levels
*
* @package communication_matrix
* @copyright 2024 David Woloszyn <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @codeCoverageIgnore
* This code does not warrant being tested. Testing offers no discernible benefit given its usage is tested.
*/
trait get_room_power_levels_v3 {
/**
* Get a list of room members and their power levels.
*
* @param string $roomid The room ID
* @return Response
*/
public function get_room_power_levels(string $roomid): Response {
$params = [
':roomid' => $roomid,
];
return $this->execute(new command(
$this,
method: 'GET',
endpoint: '_matrix/client/r0/rooms/:roomid/state/m.room.power_levels',
params: $params,
));
}
}
@@ -37,7 +37,7 @@ trait get_room_powerlevels_from_sync_v3 {
* @param string $roomid The room ID
* @return Response
*/
public function get_room_power_levels(string $roomid): Response {
public function get_room_power_levels_from_sync(string $roomid): Response {
// Filter the event data according to the API:
// https://spec.matrix.org/v1.1/client-server-api/#filtering
// We have to filter out all of the object data that we do not want,
@@ -36,6 +36,7 @@ class v1p1 extends \communication_matrix\matrix_client {
use features\matrix\upload_content_v3;
use features\matrix\update_room_power_levels_v3;
use features\matrix\get_room_powerlevels_from_sync_v3;
use features\matrix\get_room_power_levels_v3;
// We use the Synapse API here because it can invite users to a room without requiring them to accept the invite.
use features\synapse\invite_member_to_room_v1;