ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilObjFileInfoRepository.php
Go to the documentation of this file.
1<?php
2
22
30{
31 private static array $cache = [];
32 private readonly Services $irss;
33 private readonly ilDBInterface $db;
34 private array $inline_suffixes = [];
35
36 public function __construct(bool $with_cleared_cache = false)
37 {
38 global $DIC;
39 if ($with_cleared_cache) {
40 self::$cache = [];
41 }
42 $this->irss = $DIC->resourceStorage();
43 $this->db = $DIC->database();
44 $this->inline_suffixes = $this->initInlineSuffixes();
45 }
46
47 public function getByRefId(int $ref_id): ilObjFileInfo
48 {
50
51 return $this->getByObjectId($object_id);
52 }
53
54 private function initInlineSuffixes(): array
55 {
56 $settings = new ilSetting('file_access');
57 return array_map('strtolower', explode(' ', (string) $settings->get('inline_file_extensions', '')));
58 }
59
60 public function preloadData(array $ids, bool $are_ref_ids = false): void
61 {
62 if ($are_ref_ids) {
63 $query = "SELECT title, rid, file_id, page_count, on_click_mode
64 FROM file_data
65 JOIN object_data ON object_data.obj_id = file_data.file_id
66 JOIN object_reference ON object_reference.obj_id = object_data.obj_id
67 WHERE rid IS NOT NULL AND " . $this->db->in(
68 'ref_id',
69 $ids,
70 false,
71 'integer'
72 );
73 } else {
74 $query = "SELECT title, rid, file_id, page_count, on_click_mode FROM file_data JOIN object_data ON object_data.obj_id = file_data.file_id WHERE rid IS NOT NULL AND " . $this->db->in(
75 'file_id',
76 $ids,
77 false,
78 'integer'
79 );
80 }
81
82 $res = $this->db->query(
83 $query
84 );
85 $rids = [];
86 $page_counts = [];
87 $object_titles = [];
88 $click_modes = [];
89
90 while ($row = $this->db->fetchObject($res)) {
91 $rids[(int) $row->file_id] = $row->rid;
92 $page_counts[(int) $row->file_id] = $row->page_count;
93 $object_titles[(int) $row->file_id] = $row->title;
94 $click_modes[(int) $row->file_id] = (int) ($row->on_click_mode ?? ilObjFile::CLICK_MODE_DOWNLOAD);
95 }
96 $this->irss->preload($rids);
97
98 foreach ($rids as $file_id => $rid) {
99 if (($id = $this->irss->manage()->find($rid)) !== null) {
100 $max = $this->irss->manage()->getResource($id)->getCurrentRevision();
101
102 $info = new ilObjFileInfo(
103 $object_titles[$file_id] ?? $max->getTitle(),
104 $id,
105 $max->getInformation()->getTitle(),
106 $max->getInformation()->getSuffix(),
107 in_array(strtolower($max->getInformation()->getSuffix()), $this->inline_suffixes, true),
108 $click_modes[$file_id] === ilObjFile::CLICK_MODE_DOWNLOAD,
109 $max->getVersionNumber(),
110 $max->getInformation()->getCreationDate(),
111 in_array(strtolower($max->getInformation()->getMimeType()), [
112 MimeType::APPLICATION__ZIP,
113 MimeType::APPLICATION__X_ZIP_COMPRESSED
114 ], true),
115 $max->getInformation()->getMimeType(),
116 new DataSize($max->getInformation()->getSize() ?? 0, DataSize::Byte),
117 $page_counts[$file_id] === null ? null : (int) $page_counts[$file_id]
118 );
119
120 self::$cache[$file_id] = $info;
121 }
122 }
123 }
124
125 public function getByObjectId(int $object_id): ilObjFileInfo
126 {
127 if (isset(self::$cache[$object_id])) {
128 return self::$cache[$object_id];
129 }
130
131 $this->preloadData([$object_id]);
132
133 return self::$cache[$object_id] ?? new ilObjFileInfo(
134 'Unknown',
135 null,
136 'Unknown',
137 '',
138 false,
139 false,
140 0,
141 new DateTimeImmutable(),
142 false,
143 '',
144 new DataSize(0, DataSize::Byte),
145 null
146 );
147 }
148
149}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
This class provides the data size with additional information to remove the work to calculate the siz...
Definition: DataSize.php:31
Mime type determination.
Definition: MimeType.php:30
__construct(bool $with_cleared_cache=false)
preloadData(array $ids, bool $are_ref_ids=false)
const CLICK_MODE_DOWNLOAD
static _lookupObjectId(int $ref_id)
ILIAS Setting Class.
$info
Definition: entry_point.php:21
Interface ilDBInterface.
$ref_id
Definition: ltiauth.php:66
$res
Definition: ltiservices.php:69
global $DIC
Definition: shib_login.php:26