Skip to content

Commit

Permalink
MDL-81951 communication_matrix: New trait for power levels
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
davewoloszyn authored and Jenkins committed Aug 7, 2024
1 parent 7799642 commit 90c1a76
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -722,14 +722,7 @@ private function get_current_powerlevel_data(): \stdClass {
);
}

$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);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -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 <david.woloszyn@moodle.com>
* @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,
));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions communication/provider/matrix/classes/local/spec/v1p1.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 90c1a76

Please sign in to comment.