Skip to content
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea
/config/config.local.php
phpunit.xml
/.vscode
42 changes: 41 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,47 @@
Release notes
=============

1. (#243) Remove unused class with API insconsistence.
2023062900

1. 2023-06-29 #242 - Add web services to plugin.

2023061900

1. 2023-06-19 #245 - Add list of incremental changes on file CHANGES.md.
2. 2023-06-19 #247 - Fix proper support for Moodle 4.2, thanks to Matthias Opitz.

2023040402

1. 2023-04-13 #243 - remove unused class with API inconsistence.

2023040401

1. 2023-04-04 #211 - add CSV export for merged user logs; added mergedbyuserid field, thanks to Mark Johnson.

2023040400

1. 2023-04-04 Fix CI to run only for supported versions, supporting Moodle 3.11 and up.
2. 2022-12-15 #228 - Add compound indexes for customcert_issues table, thanks to Leon Stringer.
3. 2021-08-01 #197 - Use Github Actions, remove Travis CI usage.

2021072200

1. 2021-07-23 #193 - Allow automatic Moodle Plugins release when defining git tab.
2. 2021-07-14 #175 - Reaggregate completion for target user, thanks to Andrew Hancox.
3. 2021-07-14 #194 - Update unit tests for Moodle 3.10+, thanks to Alistair Spark.
4. 2021-07-02 #177 - Move observer functions into classes to bypass include file error, thanks to Andrew Madden.
5. 2021-06-10 #181 - Guarantee processing any grade item.
6. 2020-02-23 #169 - Fix wrong entries deleted in case of conflict, thanks to Tim Schroeder.
7. 2019-08-18 #166 - Support for duplicated assign submissions and other fixes.
8. 2019-08-16 #67 - Improve and clean up settings.php.
9. 2019-08-16 #163 - Force user to keep not to be suspended.
10. 2019-08-16 #161 - Split in chunks the list of record ids to delete/update to prevent buffer overflow on SQL sentences.
11. 2019-08-15 #147 - Config: Add logstore_standard_log columns related to user.id.
12. 2019-08-15 #151 - Config: Add composed keys for wikis.
13. 2019-08-15 #146 - Fix searching by user.id on pgsql.
14. 2019-08-15 #152 - Support any supported Moodle database.

For a more extense list of changes, [see git logs for changes before April 2019](https://github.com/jpahullo/moodle-tool_mergeusers/commits/master).

Contributors
============
Expand Down
98 changes: 98 additions & 0 deletions classes/external/enqueue_merge_request.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<?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/>.
/**
* Version information
*
* @package tool
* @subpackage mergeusers
* @author Nicola Vallinoto, Liguria Digitale
* @author Jordi Pujol-Ahulló, SREd, Universitat Rovira i Virgili
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace tool_mergeusers\external;
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once("{$CFG->libdir}/externallib.php");
use \tool_mergeusers\merge_request;
use external_function_parameters;
use external_multiple_structure;
use external_single_structure;
use external_value;
use moodle_exception;
class enqueue_merge_request extends \external_api {
/**
* Webservice enqueue_merge_request parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters(
[
'removeuserfield' => new external_value(PARAM_TEXT, 'Remove user field'),
'removeuservalue' => new external_value(PARAM_RAW, 'Remove user value'),
'keepuserfield' => new external_value(PARAM_TEXT, 'Keep user field'),
'keepuservalue' => new external_value(PARAM_RAW, 'Keep user value'),
]
);
}
/**
* Enqueue merge request in Moodle table tool_mergeusers_queue
*
* @param string $removeuserfield user field used to remove
* @param string $removeuservalue user value used to remove (associated to $removeuserfield)
* @param string $keepuserfield user field used to keep
* @param string $keepuservalue user value used to keep (associated to $keepuserfield)
*
* @return int Returns the identifier of the merge request
*/
public static function execute(string $removeuserfield,
string $removeuservalue,
string $keepuserfield,
string $keepuservalue): int {
// Validate all of the parameters.
$params = self::validate_parameters(self::execute_parameters(),
['removeuserfield' => $removeuserfield,
'removeuservalue' => $removeuservalue,
'keepuserfield' => $keepuserfield,
'keepuservalue' => $keepuservalue
]);
global $DB;
// Insert of the merge request into tool_mergeusers_queue Moodle table.
$removeuserid = merge_request::get_user($removeuserfield, $removeuservalue);
$keepuserid = merge_request::get_user($keepuserfield, $keepuservalue);
$timeadded = time();
$status = merge_request::QUEUED_NOT_PROCESSED;
$retries = 0;
return $DB->insert_record(
merge_request::TABLE_MERGE_REQUEST,
[
'removeuserfield' => $removeuserfield,
'removeuservalue' => $removeuservalue,
'removeuserid' => $removeuserid,
'keepuserfield' => $keepuserfield,
'keepuservalue' => $keepuservalue,
'keepuserid' => $keepuserid,
'mergedbyuserid' => $USER->id,
'timeadded' => $timeadded,
'status' => $status,
'retries' => $retries
]
);
}
public static function execute_returns() {
return new external_value(PARAM_INT, 'Identifier of the merge request');
}
}
160 changes: 160 additions & 0 deletions classes/external/get_data_merge_requests.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<?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 tool_mergeusers\external;
use \tool_mergeusers\merge_request;
use external_function_parameters;
use external_multiple_structure;
use external_single_structure;
use external_value;
/**
* Version information
*
* @package tool
* @subpackage mergeusers
* @author Nicola Vallinoto, Liguria Digitale
* @author Jordi Pujol-Ahulló, SREd, Universitat Rovira i Virgili
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class get_data_merge_requests extends \external_api {
/**
* Webservice tool_mergeusers_get_data_merge_request parameters
*
* @return external_function_parameters
*/
public static function execute_parameters(): external_function_parameters {
return new external_function_parameters([
'removeuserfield' => new external_value(
PARAM_TEXT, 'Remove user field', VALUE_DEFAULT, ''),
'removeuservalue' => new external_value(
PARAM_RAW, 'Remove user value', VALUE_DEFAULT, ''),
'removeuserid' => new external_value(
PARAM_INT, 'Identifier of the remove user id', VALUE_DEFAULT, 0),
'keepuserfield' => new external_value(
PARAM_TEXT, 'Keep user field', VALUE_DEFAULT, ''),
'keepuservalue' => new external_value(
PARAM_RAW, 'Keep user value', VALUE_DEFAULT, ''),
'keepuserid' => new external_value(
PARAM_INT, 'Identifier of the keep user id', VALUE_DEFAULT, 0),
'mergedbyuserid' => new external_value(
PARAM_INT, 'Identifier of the user making the merge request.', VALUE_DEFAULT, 0),
'id' => new external_value(
PARAM_INT, 'Identifier of the merge request', VALUE_DEFAULT, 0),
'status' => new external_value(
PARAM_INT, 'Status of the merge request', VALUE_DEFAULT, 0)
]);
}
/**
* Return data of the custom queue of the merge request
* @param $mergeusers id of the merge users request
* Return array with data of the custom queue of the merge request
*/
public static function execute(string $removeuserfield,
string $removeuservalue,
int $removeuserid,
string $keepuserfield,
string $keepuservalue,
int $keepuserid,
int $mergedbyuserid,
int $id,
int $status): array {
global $DB;
// Validate all of the parameters.
$params = self::validate_parameters(self::execute_parameters(),
['removeuserfield' => $removeuserfield,
'removeuservalue' => $removeuservalue,
'removeuserid' => $removeuserid,
'keepuserfield' => $keepuserfield,
'keepuservalue' => $keepuservalue,
'keepuserid' => $keepuserid,
'mergedbyuserid' => $mergeduserid,
'id' => $id,
'status' => $status]);
$sql = "SELECT *
FROM
{" .merge_request::TABLE_MERGE_REQUEST. "}
";
$paramsquery = array();
if (isset($removeuserfield) && !empty($removeuserfield)) {
[$insql, $params] = $DB->get_in_or_equal($removeuserfield);
$whereclauses[] = 'removeuserfield '.$insql;
array_push($paramsquery, $removeuserfield);
}
if (isset($removeuservalue) && !empty($removeuservalue)) {
[$insql, $params] = $DB->get_in_or_equal($removeuservalue);
$whereclauses[] = 'removeuservalue '.$insql;
array_push($paramsquery, $removeuservalue);
}
if (isset($removeuserid) && !empty($removeuserid)) {
[$insql, $params] = $DB->get_in_or_equal($removeuserid);
$whereclauses[] = 'removeuserid '.$insql;
array_push($paramsquery, $removeuserid);
}
if (isset($keepuserfield) && !empty($keepuserfield)) {
[$insql, $params] = $DB->get_in_or_equal($keepuserfield);
$whereclauses[] = 'keepuserfield ' .$insql;
array_push($paramsquery, $keepuserfield);
}
if (isset($keepuservalue) && !empty($keepuservalue)) {
[$insql, $params] = $DB->get_in_or_equal($keepuservalue);
$whereclauses[] = 'keepuservalue '.$insql;
array_push($paramsquery, $keepuservalue);
}
if (isset($keepuserid) && !empty($keepuserid)) {
[$insql, $params] = $DB->get_in_or_equal($keepuserid);
$whereclauses[] = 'keepuserid ' .$insql;
array_push($paramsquery, $keepuserid);
}
if (isset($mergedbyuserid) && !empty($mergedbyuserid)) {
[$insql, $params] = $DB->get_in_or_equal($mergedbyuserid);
$whereclauses[] = 'mergedbyuserid ' .$insql;
array_push($paramsquery, $mergedbyuserid);
}
if (isset($id) && !empty($id)) {
[$insql, $params] = $DB->get_in_or_equal($id);
$whereclauses[] = 'id '.$insql;
array_push($paramsquery, $id);
}
if (isset($status) && !empty($status)) {
[$insql, $params] = $DB->get_in_or_equal($status);
$whereclauses[] = 'status ' .$insql;
array_push($paramsquery, $status);
}
if (count($whereclauses) > 0) {
$sql .= ' WHERE ' . implode(' AND ', $whereclauses);
}
return $DB->get_records_sql($sql, $paramsquery);
}
public static function execute_returns() {
return new external_multiple_structure(
new external_single_structure( [
'id' => new external_value(PARAM_INT, 'Merge users id'),
'removeuserfield' => new external_value(PARAM_TEXT, 'Remove user field'),
'removeuservalue' => new external_value(PARAM_TEXT, 'Remove user value'),
'removeuserid' => new external_value(PARAM_INT, 'Remove user id'),
'keepuserfield' => new external_value(PARAM_TEXT, 'Keep user field'),
'keepuservalue' => new external_value(PARAM_TEXT, 'Keep user value'),
'keepuserid' => new external_value(PARAM_INT, 'Keep user id'),
'mergedbyuserid' => new external_value(PARAM_INT, 'Merged by user id'),
'timeadded' => new external_value(PARAM_RAW, 'Time creation'),
'timemodified' => new external_value(PARAM_RAW, 'Time modified'),
'status' => new external_value(PARAM_INT, 'Status'),
'retries' => new external_value(PARAM_INT, 'Number of retries'),
'log' => new external_value(PARAM_RAW, 'Log')
]
)
);
}
}
Loading