diff options
| author | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2022-01-19 10:25:54 +0000 |
|---|---|---|
| committer | Marcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de> | 2022-01-19 10:25:54 +0000 |
| commit | c706fd9205bb45fd3c902b271c626e68a5fe8a10 (patch) | |
| tree | d7f6647fe667623df6e64d4dbac74104fcc818f4 /lib/models/Courseware/Instance.php | |
| parent | d62f1b7480c51a290c168c79a6f8ea05757a6e77 (diff) | |
Coursewares Übersichtsseite beschleunigen
Diffstat (limited to 'lib/models/Courseware/Instance.php')
| -rwxr-xr-x | lib/models/Courseware/Instance.php | 60 |
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; + } } |
