AutorÃa | Ultima modificación | Ver Log |
<?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/>.
/**
* Group widget external functions contains the add memebrs, get non group members list.
*
* @package block_dash
* @copyright 2022 bdecent gmbh <https://bdecent.de>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace block_dash\local\widget\groups;
defined('MOODLE_INTERNAL') || die('No direct access');
require_once($CFG->libdir . '/externallib.php');
use external_api;
require_once($CFG->dirroot . '/user/selector/lib.php');
require_once($CFG->dirroot . '/group/lib.php');
/**
* Group widget external function definitions.
*/
class external extends external_api {
/**
* Get the users details if not assigned to the group.
*
* @return \external_function_parameters
*/
public static function get_non_members_parameters() {
return new \external_function_parameters([
'query' => new \external_value(PARAM_RAW,
'Query string (full or partial user full name or other details)'),
'groupid' => new \external_value(PARAM_INT, 'group id (0 if none)'),
]);
}
/**
* Returns result type for get_relevant_users function.
*
* @return \external_description Result type
*/
public static function get_non_members_returns() {
return new \external_multiple_structure(
new \external_single_structure([
'id' => new \external_value(PARAM_INT, 'User id'),
'fullname' => new \external_value(PARAM_RAW, 'Full name as text'),
]));
}
/**
* Searches for users given a query, taking into account the current user's permissions and
* possibly a course to check within.
*
* @param string $query Query text
* @param int $groupid Course id or 0 if no restriction
* @return array Defined return structure
*/
public static function get_non_members($query, $groupid) {
global $CFG, $PAGE;
// Validate parameter.
[
'query' => $query,
'groupid' => $groupid,
] = self::validate_parameters(self::get_non_members_parameters(), [
'query' => $query,
'groupid' => $groupid,
]);
// Validate the context (search page is always system context).
$systemcontext = \context_system::instance();
self::validate_context($systemcontext);
$group = groups_get_group($groupid);
$courseid = $group->courseid;
if ($group) {
$potentialmembersselector = new \group_non_members_selector('addselect', [
'groupid' => $groupid, 'courseid' => $courseid,
]);
$users = $potentialmembersselector->find_users($query);
$list = [];
foreach ($users as $role => $user) {
$list = array_merge($list, $user);
}
array_walk($list, function(&$user) use ($potentialmembersselector) {
$user = ['id' => $user->id, 'fullname' => fullname($user)];
});
return $list;
}
return ['id' => '0', 'fullname' => 'No source'];
}
/**
* Add members.
*
* @return void
*/
public static function add_members_parameters() {
return new \external_function_parameters(
[
'formdata' => new \external_value(PARAM_RAW, 'The data from the user notes'),
]
);
}
/**
* Retuns the redirect course url and created pulse id for save method.
*
* @return void
*/
public static function add_members_returns() {
return new \external_value(PARAM_BOOL, 'Result of members added.');
}
/**
* Add memebers to the selected group.
*
* @param \stdclass $formdata
* @return bool
*/
public static function add_members($formdata) {
// Validate parameter.
[
'formdata' => $formdata,
] = self::validate_parameters(self::add_members_parameters(), [
'formdata' => $formdata,
]);
parse_str($formdata, $data);
$groupid = $data['groupid'];
$users = $data['users'];
if (!empty($users) && is_array($users)) {
foreach ($users as $user) {
groups_add_member($groupid, $user);
}
return true;
}
return false;
}
/**
* Prameters definition that helps to leave from the own group.
*
* @return \external_function_parameters
*/
public static function leave_group_parameters() {
return new \external_function_parameters([
'groupid' => new \external_value(PARAM_INT, 'group id (0 if none)'),
]);
}
/**
* Return data of leave group service.
*
* @return \external_value
*/
public static function leave_group_returns() {
return new \external_value(PARAM_BOOL, 'Result of members added.');
}
/**
* Remove the user from the own group.
*
* @param int $groupid
* @return void
*/
public static function leave_group($groupid) {
global $USER;
['groupid' => $groupid] = self::validate_parameters(self::leave_group_parameters(), [
'groupid' => $groupid,
]);
if ($groupid && isloggedin()) {
return groups_remove_member($groupid, $USER->id);
}
return false;
}
/**
* Prameters definition that helps to create groups in the selected course.
*
* @return \external_function_parameters
*/
public static function create_group_parameters() {
return new \external_function_parameters([
'formdata' => new \external_value(PARAM_RAW, 'The data from the user notes'),
]);
}
/**
* Returns the status of group creation in course.
*
* @return void
*/
public static function create_group_returns() {
return new \external_value(PARAM_BOOL, 'Result of members added.');
}
/**
* Create the group in the selected course.
*
* @param stdclass $formdata
* @return void
*/
public static function create_group($formdata) {
global $USER;
[
'formdata' => $formdata,
] = self::validate_parameters(self::add_members_parameters(), [
'formdata' => $formdata,
]);
// TODO: TEST Require capability.
if ($formdata) {
parse_str($formdata, $data);
$data = (object) $data;
if ($groupid = groups_create_group($data)) {
groups_add_member($groupid, $USER->id);
return true;
}
}
return false;
}
}