aboutsummaryrefslogtreecommitdiff
path: root/lib/models/Courseware/Instance.php
diff options
context:
space:
mode:
authorMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2022-01-19 10:25:54 +0000
committerMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2022-01-19 10:25:54 +0000
commitc706fd9205bb45fd3c902b271c626e68a5fe8a10 (patch)
treed7f6647fe667623df6e64d4dbac74104fcc818f4 /lib/models/Courseware/Instance.php
parentd62f1b7480c51a290c168c79a6f8ea05757a6e77 (diff)
Coursewares Übersichtsseite beschleunigen
Diffstat (limited to 'lib/models/Courseware/Instance.php')
-rwxr-xr-xlib/models/Courseware/Instance.php60
1 files changed, 60 insertions, 0 deletions
diff --git a/lib/models/Courseware/Instance.php b/lib/models/Courseware/Instance.php
index 49b7cae..cc9189c 100755
--- a/lib/models/Courseware/Instance.php
+++ b/lib/models/Courseware/Instance.php
@@ -235,4 +235,64 @@ class Instance
{
return StructuralElement::findUsersBookmarksByRange($user, $this->getRange());
}
+
+ public function findAllStructuralElements(): iterable
+ {
+ $sql = 'SELECT se.*
+ FROM cw_structural_elements se
+ WHERE se.range_id = ? AND se.range_type = ?';
+ $statement = \DBManager::get()->prepare($sql);
+ $statement->execute([$this->root['range_id'], $this->root['range_type']]);
+
+ $data = [];
+ foreach ($statement as $key => $row) {
+ $data[] = \Courseware\StructuralElement::build($row, false);
+ }
+
+ return $data;
+ }
+
+ public function findAllBlocks(): iterable
+ {
+ $sql = 'SELECT b.*
+ FROM cw_structural_elements se
+ JOIN cw_containers c ON se.id = c.structural_element_id
+ JOIN cw_blocks b ON c.id = b.container_id
+ WHERE se.range_id = ? AND se.range_type = ?';
+ $statement = \DBManager::get()->prepare($sql);
+ $statement->execute([$this->root['range_id'], $this->root['range_type']]);
+
+ $data = [];
+ foreach ($statement as $key => $row) {
+ $data[] = \Courseware\Block::build($row, false);
+ }
+
+ return $data;
+ }
+
+ public function findAllBlocksGroupedByStructuralElementId(): iterable
+ {
+ $sql = 'SELECT se.id AS structural_element_id, b.*
+ FROM cw_structural_elements se
+ JOIN cw_containers c ON se.id = c.structural_element_id
+ JOIN cw_blocks b ON c.id = b.container_id
+ WHERE se.range_id = ? AND se.range_type = ?';
+
+ $statement = \DBManager::get()->prepare($sql);
+ $statement->execute([$this->root['range_id'], $this->root['range_type']]);
+
+ $data = [];
+ foreach ($statement as $row) {
+ $structuralElementId = $row['structural_element_id'];
+ unset($row['structural_element_id']);
+
+ $block = \Courseware\Block::build($row, false);
+ if (!isset($data[$structuralElementId])) {
+ $data[$structuralElementId] = [];
+ }
+ $data[$structuralElementId][] = $block;
+ }
+
+ return $data;
+ }
}