MDL-73325 core_badges: Add tags field to BadgeClass

This commit is contained in:
Damian Hippisley
2023-06-09 13:41:07 +01:00
parent 71c36d2de1
commit faa41cd791
17 changed files with 205 additions and 28 deletions
+11
View File
@@ -939,6 +939,9 @@ class backup_badges_structure_step extends backup_structure_step {
$manual_award = new backup_nested_element('manual_award', array('id'), array('badgeid',
'recipientid', 'issuerid', 'issuerrole', 'datemet'));
$tags = new backup_nested_element('tags');
$tag = new backup_nested_element('tag', ['id'], ['name', 'rawname']);
// Build the tree.
$badges->add_child($badge);
@@ -953,6 +956,8 @@ class backup_badges_structure_step extends backup_structure_step {
$relatedbadges->add_child($relatedbadge);
$badge->add_child($manual_awards);
$manual_awards->add_child($manual_award);
$badge->add_child($tags);
$tags->add_child($tag);
// Define sources.
@@ -980,6 +985,12 @@ class backup_badges_structure_step extends backup_structure_step {
$manual_award->set_source_table('badge_manual_award', array('badgeid' => backup::VAR_PARENTID));
$tag->set_source_sql('SELECT t.id, t.name, t.rawname
FROM {tag} t
JOIN {tag_instance} ti ON ti.tagid = t.id
WHERE ti.itemtype = ?
AND ti.itemid = ?', [backup_helper::is_sqlparam('badge'), backup::VAR_PARENTID]);
// Define id annotations.
$badge->annotate_ids('user', 'usercreated');
+17
View File
@@ -2621,6 +2621,7 @@ class restore_badges_structure_step extends restore_structure_step {
$paths[] = new restore_path_element('alignment', '/badges/badge/alignments/alignment');
$paths[] = new restore_path_element('relatedbadge', '/badges/badge/relatedbadges/relatedbadge');
$paths[] = new restore_path_element('manual_award', '/badges/badge/manual_awards/manual_award');
$paths[] = new restore_path_element('tag', '/badges/badge/tags/tag');
return $paths;
}
@@ -2830,6 +2831,22 @@ class restore_badges_structure_step extends restore_structure_step {
}
}
/**
* Process tag.
*
* @param array $data The data.
* @throws base_step_exception
*/
public function process_tag(array $data): void {
$data = (object)$data;
$badgeid = $this->get_new_parentid('badge');
if (!empty($data->rawname)) {
core_tag_tag::add_item_tag('core_badges', 'badge', $badgeid,
context_course::instance($this->get_courseid()), $data->rawname);
}
}
protected function after_execute() {
global $DB;
// Add related files.