ILIAS  release_8 Revision v8.24
RevisionDBRepository.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
34
41{
42 public const TABLE_NAME = 'il_resource_revision';
43 public const IDENTIFICATION = 'rid';
47 protected array $cache = [];
48 protected \ilDBInterface $db;
49
50 public function __construct(\ilDBInterface $db)
51 {
52 $this->db = $db;
53 }
54
58 public function getNamesForLocking(): array
59 {
60 return [self::TABLE_NAME];
61 }
62
63 public function blankFromUpload(
64 InfoResolver $info_resolver,
65 StorableResource $resource,
66 UploadResult $result
68 $new_version_number = $info_resolver->getNextVersionNumber();
69 $revision = new UploadedFileRevision($resource->getIdentification(), $result);
70 $revision->setStorageID($resource->getStorageID());
71 $revision->setVersionNumber($new_version_number);
72
73 return $revision;
74 }
75
76 public function blankFromStream(
77 InfoResolver $info_resolver,
78 StorableResource $resource,
79 FileStream $stream,
80 bool $keep_original = false
82 $new_version_number = $info_resolver->getNextVersionNumber();
83 $revision = new FileStreamRevision($resource->getIdentification(), $stream, $keep_original);
84 $revision->setStorageID($resource->getStorageID());
85 $revision->setVersionNumber($new_version_number);
86
87 return $revision;
88 }
89
90 public function blankFromClone(
91 InfoResolver $info_resolver,
92 StorableResource $resource,
93 FileRevision $revision_to_clone
94 ): CloneRevision {
95 $new_version_number = $info_resolver->getNextVersionNumber();
96 $revision = new CloneRevision($resource->getIdentification(), $revision_to_clone);
97 $revision->setStorageID($revision_to_clone->getStorageID());
98 $revision->setVersionNumber($new_version_number);
99
100 return $revision;
101 }
102
103 public function store(Revision $revision): void
104 {
105 $rid = $revision->getIdentification()->serialize();
106 $r = $this->db->queryF(
107 "SELECT " . self::IDENTIFICATION . " FROM " . self::TABLE_NAME . " WHERE " . self::IDENTIFICATION . " = %s AND version_number = %s",
108 ['text', 'integer'],
109 [$rid, $revision->getVersionNumber()]
110 );
111
112 if ($r->numRows() > 0) {
113 // UPDATE
114 $this->db->update(
115 self::TABLE_NAME,
116 [
117 'available' => ['integer', true],
118 'owner_id' => ['integer', $revision->getOwnerId()],
119 'title' => ['text', $revision->getTitle()]
120 ],
121 [
122 self::IDENTIFICATION => ['text', $rid],
123 'version_number' => ['integer', $revision->getVersionNumber()],
124 ]
125 );
126 } else {
127 // CREATE
128 $this->db->insert(
129 self::TABLE_NAME,
130 [
131 self::IDENTIFICATION => ['text', $rid],
132 'version_number' => ['integer', $revision->getVersionNumber()],
133 'available' => ['integer', true],
134 'owner_id' => ['integer', $revision->getOwnerId()],
135 'title' => ['text', $revision->getTitle()]
136 ]
137 );
138 }
139 $this->cache[$rid][$revision->getVersionNumber()] = $revision;
140 }
141
145 public function get(StorableResource $resource): RevisionCollection
146 {
147 $collection = new RevisionCollection($resource->getIdentification());
148
149 $rid = $resource->getIdentification()->serialize();
150 if (isset($this->cache[$rid]) && is_array($this->cache[$rid])) {
151 foreach ($this->cache[$rid] as $rev) {
152 $collection->add($rev);
153 }
154 return $collection;
155 }
156 $r = $this->db->queryF(
157 "SELECT * FROM " . self::TABLE_NAME . " WHERE " . self::IDENTIFICATION . " = %s",
158 ['text'],
159 [$rid]
160 );
161 while ($d = $this->db->fetchObject($r)) {
162 $revision = new FileRevision(new ResourceIdentification($d->rid));
163 $revision->setVersionNumber((int)$d->version_number);
164 $revision->setOwnerId((int)$d->owner_id);
165 $revision->setTitle((string)$d->title);
166 $collection->add($revision);
167 $this->cache[$d->rid][(int)$d->version_number] = $revision;
168 }
169
170 return $collection;
171 }
172
176 public function delete(Revision $revision): void
177 {
178 $rid = $revision->getIdentification()->serialize();
179 $this->db->manipulateF(
180 "DELETE FROM " . self::TABLE_NAME . " WHERE " . self::IDENTIFICATION . " = %s AND version_number = %s",
181 ['text', 'integer'],
182 [$rid, $revision->getVersionNumber()]
183 );
184 unset($this->cache[$rid][$revision->getVersionNumber()]);
185 }
186
187 public function preload(array $identification_strings): void
188 {
189 $r = $this->db->query(
190 "SELECT * FROM " . self::TABLE_NAME . " WHERE " . $this->db->in(
191 self::IDENTIFICATION,
192 $identification_strings,
193 false,
194 'text'
195 )
196 );
197 while ($d = $this->db->fetchAssoc($r)) {
198 $this->populateFromArray($d);
199 }
200 }
201
202 public function populateFromArray(array $data): void
203 {
204 $revision = new FileRevision(new ResourceIdentification($data['rid']));
205 $revision->setVersionNumber((int)$data['version_number']);
206 $revision->setOwnerId((int)$data['owner_id']);
207 $revision->setTitle((string)$data['revision_title']);
208 $this->cache[$data['rid']][(int)$data['version_number']] = $revision;
209 }
210}
blankFromUpload(InfoResolver $info_resolver, StorableResource $resource, UploadResult $result)
blankFromClone(InfoResolver $info_resolver, StorableResource $resource, FileRevision $revision_to_clone)
blankFromStream(InfoResolver $info_resolver, StorableResource $resource, FileStream $stream, bool $keep_original=false)
for( $i=6;$i< 13;$i++) for($i=1; $i< 13; $i++) $d
Definition: date.php:296
Interface ilDBInterface.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...