MDL-75810 reportbuilder: entity method for returning tag SQL joins.

This commit is contained in:
Paul Holden 2023-06-15 21:38:40 +01:00
parent 697be4eaa3
commit e8ae9680bc
No known key found for this signature in database
GPG Key ID: A81A96D6045F6164
5 changed files with 28 additions and 36 deletions

View File

@ -305,17 +305,6 @@ class blog extends base {
* @return string[]
*/
public function get_tag_joins(): array {
$postalias = $this->get_table_alias('post');
$taginstancealias = $this->get_table_alias('tag_instance');
$tagalias = $this->get_table_alias('tag');
return [
"LEFT JOIN {tag_instance} {$taginstancealias}
ON {$taginstancealias}.component = 'core'
AND {$taginstancealias}.itemtype = 'post'
AND {$taginstancealias}.itemid = {$postalias}.id",
"LEFT JOIN {tag} {$tagalias}
ON {$tagalias}.id = {$taginstancealias}.tagid",
];
return $this->get_tag_joins_for_entity('core', 'post', $this->get_table_alias('post') . '.id');
}
}

View File

@ -215,6 +215,30 @@ abstract class base {
return array_values($this->joins);
}
/**
* Helper method for returning joins necessary for retrieving tags related to the current entity
*
* Both 'tag' and 'tag_instance' aliases must be returned by the entity {@see get_default_table_aliases} method
*
* @param string $component
* @param string $itemtype
* @param string $itemidfield
* @return string[]
*/
final protected function get_tag_joins_for_entity(string $component, string $itemtype, string $itemidfield): array {
$taginstancealias = $this->get_table_alias('tag_instance');
$tagalias = $this->get_table_alias('tag');
return [
"LEFT JOIN {tag_instance} {$taginstancealias}
ON {$taginstancealias}.component = '{$component}'
AND {$taginstancealias}.itemtype = '{$itemtype}'
AND {$taginstancealias}.itemid = {$itemidfield}",
"LEFT JOIN {tag} {$tagalias}
ON {$tagalias}.id = {$taginstancealias}.tagid",
];
}
/**
* Add a column to the entity
*

View File

@ -206,18 +206,7 @@ class course extends base {
* @return string[]
*/
public function get_tag_joins(): array {
$course = $this->get_table_alias('course');
$taginstance = $this->get_table_alias('tag_instance');
$tag = $this->get_table_alias('tag');
return [
"LEFT JOIN {tag_instance} {$taginstance}
ON {$taginstance}.component = 'core'
AND {$taginstance}.itemtype = 'course'
AND {$taginstance}.itemid = {$course}.id",
"LEFT JOIN {tag} {$tag}
ON {$tag}.id = {$taginstance}.tagid",
];
return $this->get_tag_joins_for_entity('core', 'course', $this->get_table_alias('course') . '.id');
}
/**

View File

@ -144,18 +144,7 @@ class user extends base {
* @return string[]
*/
public function get_tag_joins(): array {
$user = $this->get_table_alias('user');
$taginstance = $this->get_table_alias('tag_instance');
$tag = $this->get_table_alias('tag');
return [
"LEFT JOIN {tag_instance} {$taginstance}
ON {$taginstance}.component = 'core'
AND {$taginstance}.itemtype = 'user'
AND {$taginstance}.itemid = {$user}.id",
"LEFT JOIN {tag} {$tag}
ON {$tag}.id = {$taginstance}.tagid",
];
return $this->get_tag_joins_for_entity('core', 'user', $this->get_table_alias('user') . '.id');
}
/**

View File

@ -3,6 +3,7 @@ Information provided here is intended especially for developers.
=== 4.3 ===
* New `get_tag_joins_for_entity` helper in base entity class, for returning SQL joins necessary for retrieving tags
* New `set_is_deprecated` method in base `local\report\[column|filter]` classes to deprecate report entity columns and filters
* The following report entity columns have been deprecated, with replacements as follows:
- `enrolment:method` => `enrol:name` (plus enrolment formatter `enrolment_name` method)