ILIAS  release_8 Revision v8.24
class.ilForumDraftsHistory.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
26{
27 public const MEDIAOBJECT_TYPE = 'frm~h:html';
28
30 private int $history_id = 0;
31 private int $draft_id = 0;
32 private string $post_subject = '';
33 private string $post_message = '';
34 protected string $draft_date = '0000-00-00 00:00:00';
35
36 public function getHistoryId(): int
37 {
38 return $this->history_id;
39 }
40
41 public function setHistoryId(int $history_id): void
42 {
43 $this->history_id = $history_id;
44 }
45
46 public function getDraftId(): int
47 {
48 return $this->draft_id;
49 }
50
51 public function setDraftId(int $draft_id): void
52 {
53 $this->draft_id = $draft_id;
54 }
55
56 public function getPostSubject(): string
57 {
59 }
60
61 public function setPostSubject(string $post_subject): void
62 {
63 $this->post_subject = $post_subject;
64 }
65
66 public function getPostMessage(): string
67 {
69 }
70
71 public function setPostMessage(string $post_message): void
72 {
73 $this->post_message = $post_message;
74 }
75
76 public function getDraftDate(): string
77 {
78 return $this->draft_date;
79 }
80
81 public function setDraftDate(string $draft_date): void
82 {
83 $this->draft_date = $draft_date;
84 }
85
86 public function __construct(int $history_id = 0)
87 {
88 global $DIC;
89
90 $this->db = $DIC->database();
91
92 if ($history_id > 0) {
93 $this->readByHistoryId($history_id);
94 }
95 }
96
97 private function readByHistoryId(int $history_id): void
98 {
99 $res = $this->db->queryF(
100 'SELECT * FROM frm_drafts_history WHERE history_id = %s',
101 ['integer'],
103 );
104
105 while ($row = $this->db->fetchAssoc($res)) {
106 $this->setHistoryId((int) $row['history_id']);
107 $this->setDraftId((int) $row['draft_id']);
108 $this->setPostMessage($row['post_message']);
109 $this->setPostSubject($row['post_subject']);
110 $this->setDraftDate($row['draft_date']);
111 }
112 }
113
118 public static function getInstancesByDraftId(int $draft_id): array
119 {
120 global $DIC;
121
122 $ilDB = $DIC->database();
123
124 $res = $ilDB->queryF(
125 'SELECT * FROM frm_drafts_history WHERE draft_id = %s ORDER BY draft_date DESC',
126 ['integer'],
127 [$draft_id]
128 );
129 $instances = [];
130 while ($row = $ilDB->fetchAssoc($res)) {
131 $draftHistory = new self();
132 $draftHistory = self::populateWithDatabaseRecord($draftHistory, $row);
133
134 $instances[] = $draftHistory;
135 }
136
137 return $instances;
138 }
139
140 protected static function populateWithDatabaseRecord(
141 ilForumDraftsHistory $history_draft,
142 array $row
144 $history_draft->setHistoryId((int) $row['history_id']);
145 $history_draft->setDraftId((int) $row['draft_id']);
146 $history_draft->setPostMessage($row['post_message']);
147 $history_draft->setPostSubject($row['post_subject']);
148 $history_draft->setDraftDate($row['draft_date']);
149
150 return $history_draft;
151 }
152
153 public function delete(): void
154 {
155 $this->db->manipulateF(
156 'DELETE FROM frm_drafts_history WHERE history_id = %s',
157 ['integer'],
158 [$this->getHistoryId()]
159 );
160 }
161
162 public function getFirstAutosaveByDraftId(int $draft_id): void
163 {
164 $res = $this->db->queryF(
165 'SELECT * FROM frm_drafts_history WHERE draft_id = %s ORDER BY history_id ASC',
166 ['integer'],
167 [$draft_id]
168 );
169
170 if ($row = $this->db->fetchAssoc($res)) {
171 $this->setHistoryId((int) $row['history_id']);
172 $this->setDraftId((int) $row['draft_id']);
173 $this->setPostSubject($row['post_subject']);
174 $this->setPostMessage($row['post_message']);
175 }
176 }
177
178 public function getLastAutosaveByDraftId(int $draft_id): void
179 {
180 $res = $this->db->queryF(
181 'SELECT * FROM frm_drafts_history WHERE draft_id = %s ORDER BY history_id DESC',
182 ['integer'],
183 [$draft_id]
184 );
185
186 while ($row = $this->db->fetchAssoc($res)) {
187 $this->setHistoryId((int) $row['history_id']);
188 $this->setDraftId((int) $row['draft_id']);
189 $this->setPostSubject($row['post_subject']);
190 $this->setPostMessage($row['post_message']);
191 }
192 }
193
194 public function addDraftToHistory(): void
195 {
196 $next_id = $this->db->nextId('frm_drafts_history');
197 $this->db->insert(
198 'frm_drafts_history',
199 [
200 'history_id' => ['integer', $next_id],
201 'draft_id' => ['integer', $this->getDraftId()],
202 'post_subject' => ['text', $this->getPostSubject()],
203 'post_message' => ['text', $this->getPostMessage()],
204 'draft_date' => ['timestamp', date("Y-m-d H:i:s")]
205 ]
206 );
207 $this->setHistoryId($next_id);
208 }
209
210 public function deleteMobs(): void
211 {
212 $oldMediaObjects = ilObjMediaObject::_getMobsOfObject('frm~h:html', $this->getHistoryId());
213 foreach ($oldMediaObjects as $oldMob) {
214 if (ilObjMediaObject::_exists($oldMob)) {
215 ilObjMediaObject::_removeUsage($oldMob, 'frm~h:html', $this->getHistoryId());
216 $mob_obj = new ilObjMediaObject($oldMob);
217 $mob_obj->delete();
218 }
219 }
220 }
221
223 {
224 $draft = ilForumPostDraft::newInstanceByDraftId($this->getDraftId());
225 $draft->setPostSubject($this->getPostSubject());
226 $draft->setPostMessage($this->getPostMessage());
227
229 $this->getPostMessage(),
230 self::MEDIAOBJECT_TYPE,
231 $this->getHistoryId(),
233 $draft->getDraftId()
234 );
235
236 $draft->updateDraft();
237 $this->deleteHistoryByDraftIds([$draft->getDraftId()]);
238
239 return $draft;
240 }
241
246 public function deleteHistoryByPostIds(array $post_ids = []): array
247 {
248 $draft_ids = [];
249 if ($post_ids !== []) {
250 $res = $this->db->query('
251 SELECT frm_drafts_history.history_id, frm_drafts_history.draft_id
252 FROM frm_posts_drafts
253 INNER JOIN frm_drafts_history ON frm_posts_drafts.draft_id
254 WHERE ' . $this->db->in('post_id', $post_ids, false, 'integer'));
255
256 while ($row = $this->db->fetchAssoc($res)) {
257 $draft_ids[] = (int) $row['draft_id'];
258 }
259
260 $this->deleteHistoryByDraftIds($draft_ids);
261 }
262
263 return $draft_ids;
264 }
265
269 public function deleteHistoryByDraftIds(array $draft_ids = []): void
270 {
271 if ($draft_ids !== []) {
272 $res = $this->db->query(
273 'SELECT history_id FROM frm_drafts_history WHERE ' . $this->db->in('draft_id', $draft_ids, false, 'integer')
274 );
275
276 while ($row = $this->db->fetchAssoc($res)) {
277 $this->setHistoryId((int) $row['history_id']);
278 $this->deleteMobs();
279 }
280
281 $this->db->manipulate(
282 'DELETE FROM frm_drafts_history WHERE ' . $this->db->in('draft_id', $draft_ids, false, 'integer')
283 );
284 }
285 }
286}
Class ilForumDraftHistory.
deleteHistoryByPostIds(array $post_ids=[])
deleteHistoryByDraftIds(array $draft_ids=[])
setDraftDate(string $draft_date)
setPostSubject(string $post_subject)
setPostMessage(string $post_message)
static populateWithDatabaseRecord(ilForumDraftsHistory $history_draft, array $row)
static getInstancesByDraftId(int $draft_id)
Class ilForumPostDraft.
static newInstanceByDraftId(int $draft_id)
static moveMediaObjects(string $post_message, string $source_type, int $source_id, string $target_type, int $target_id, int $direction=0)
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
static _getMobsOfObject(string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
static _removeUsage(int $a_mob_id, string $a_type, int $a_id, int $a_usage_hist_nr=0, string $a_lang="-")
Remove usage of mob in another container.
global $DIC
Definition: feed.php:28
Interface ilDBInterface.
$res
Definition: ltiservices.php:69