mirror of
https://github.com/moodle/moodle.git
synced 2025-08-08 10:26:40 +02:00
MDL-70059 core_badges: avoid duplicate key error
When 2 or more backpack were created without credentials, a "Duplicate key value violates unique constraint" error was raised because externalbackpackid was not taking the correct value. Other improvements have been done to the code too in order to make it more readable.
This commit is contained in:
parent
6bb7478e8d
commit
01c8c8828b
2 changed files with 92 additions and 47 deletions
|
@ -856,13 +856,13 @@ function badges_save_external_backpack(stdClass $data) {
|
|||
$backpack->sortorder = $data->sortorder;
|
||||
}
|
||||
|
||||
$method = 'insert_record';
|
||||
if (isset($data->id) && $data->id) {
|
||||
if (empty($data->id)) {
|
||||
$backpack->id = $DB->insert_record('badge_external_backpack', $backpack);
|
||||
} else {
|
||||
$backpack->id = $data->id;
|
||||
$method = 'update_record';
|
||||
$DB->update_record('badge_external_backpack', $backpack);
|
||||
}
|
||||
$record = $DB->$method('badge_external_backpack', $backpack, true);
|
||||
$data->externalbackpackid = $data->id ?? $record;
|
||||
$data->externalbackpackid = $backpack->id;
|
||||
|
||||
unset($data->id);
|
||||
badges_save_backpack_credentials($data);
|
||||
|
@ -888,19 +888,18 @@ function badges_save_backpack_credentials(stdClass $data) {
|
|||
$backpack->backpackuid = $data->backpackuid ?? 0;
|
||||
$backpack->autosync = $data->autosync ?? 0;
|
||||
|
||||
$id = null;
|
||||
if (isset($data->badgebackpack) && $data->badgebackpack) {
|
||||
$id = $data->badgebackpack;
|
||||
} else if (isset($data->id) && $data->id) {
|
||||
$id = $data->id;
|
||||
if (!empty($data->badgebackpack)) {
|
||||
$backpack->id = $data->badgebackpack;
|
||||
} else if (!empty($data->id)) {
|
||||
$backpack->id = $data->id;
|
||||
}
|
||||
|
||||
$method = $id ? 'update_record' : 'insert_record';
|
||||
if ($id) {
|
||||
$backpack->id = $id;
|
||||
if (empty($backpack->id)) {
|
||||
$backpack->id = $DB->insert_record('badge_backpack', $backpack);
|
||||
} else {
|
||||
$DB->update_record('badge_backpack', $backpack);
|
||||
}
|
||||
|
||||
$DB->$method('badge_backpack', $backpack);
|
||||
return $backpack->externalbackpackid;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue