ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilForumDraftsHistory.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
26 {
27  public const MEDIAOBJECT_TYPE = 'frm~h:html';
28 
29  private ilDBInterface $db;
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  {
58  return $this->post_subject;
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  {
68  return $this->post_message;
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'],
102  [$history_id]
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 
117  public static function getInstancesByDraftId(int $draft_id): array
118  {
119  global $DIC;
120 
121  $ilDB = $DIC->database();
122 
123  $res = $ilDB->queryF(
124  'SELECT * FROM frm_drafts_history WHERE draft_id = %s ORDER BY draft_date DESC',
125  ['integer'],
126  [$draft_id]
127  );
128  $instances = [];
129  while ($row = $ilDB->fetchAssoc($res)) {
130  $draftHistory = new self();
131  $draftHistory = self::populateWithDatabaseRecord($draftHistory, $row);
132 
133  $instances[] = $draftHistory;
134  }
135 
136  return $instances;
137  }
138 
139  protected static function populateWithDatabaseRecord(
140  ilForumDraftsHistory $history_draft,
141  array $row
143  $history_draft->setHistoryId((int) $row['history_id']);
144  $history_draft->setDraftId((int) $row['draft_id']);
145  $history_draft->setPostMessage($row['post_message']);
146  $history_draft->setPostSubject($row['post_subject']);
147  $history_draft->setDraftDate($row['draft_date']);
148 
149  return $history_draft;
150  }
151 
152  public function delete(): void
153  {
154  $this->db->manipulateF(
155  'DELETE FROM frm_drafts_history WHERE history_id = %s',
156  ['integer'],
157  [$this->getHistoryId()]
158  );
159  }
160 
161  public function getFirstAutosaveByDraftId(int $draft_id): void
162  {
163  $res = $this->db->queryF(
164  'SELECT * FROM frm_drafts_history WHERE draft_id = %s ORDER BY history_id ASC',
165  ['integer'],
166  [$draft_id]
167  );
168 
169  if ($row = $this->db->fetchAssoc($res)) {
170  $this->setHistoryId((int) $row['history_id']);
171  $this->setDraftId((int) $row['draft_id']);
172  $this->setPostSubject($row['post_subject']);
173  $this->setPostMessage($row['post_message']);
174  }
175  }
176 
177  public function getLastAutosaveByDraftId(int $draft_id): void
178  {
179  $res = $this->db->queryF(
180  'SELECT * FROM frm_drafts_history WHERE draft_id = %s ORDER BY history_id DESC',
181  ['integer'],
182  [$draft_id]
183  );
184 
185  while ($row = $this->db->fetchAssoc($res)) {
186  $this->setHistoryId((int) $row['history_id']);
187  $this->setDraftId((int) $row['draft_id']);
188  $this->setPostSubject($row['post_subject']);
189  $this->setPostMessage($row['post_message']);
190  }
191  }
192 
193  public function addDraftToHistory(): void
194  {
195  $next_id = $this->db->nextId('frm_drafts_history');
196  $this->db->insert(
197  'frm_drafts_history',
198  [
199  'history_id' => ['integer', $next_id],
200  'draft_id' => ['integer', $this->getDraftId()],
201  'post_subject' => ['text', $this->getPostSubject()],
202  'post_message' => ['text', $this->getPostMessage()],
203  'draft_date' => ['timestamp', date("Y-m-d H:i:s")]
204  ]
205  );
206  $this->setHistoryId($next_id);
207  }
208 
209  public function deleteMobs(): void
210  {
211  $oldMediaObjects = ilObjMediaObject::_getMobsOfObject('frm~h:html', $this->getHistoryId());
212  foreach ($oldMediaObjects as $oldMob) {
213  if (ilObjMediaObject::_exists($oldMob)) {
214  ilObjMediaObject::_removeUsage($oldMob, 'frm~h:html', $this->getHistoryId());
215  $mob_obj = new ilObjMediaObject($oldMob);
216  $mob_obj->delete();
217  }
218  }
219  }
220 
222  {
224  $draft->setPostSubject($this->getPostSubject());
225  $draft->setPostMessage($this->getPostMessage());
226 
228  $this->getPostMessage(),
229  self::MEDIAOBJECT_TYPE,
230  $this->getHistoryId(),
232  $draft->getDraftId()
233  );
234 
235  $draft->updateDraft();
236  $this->deleteHistoryByDraftIds([$draft->getDraftId()]);
237 
238  return $draft;
239  }
240 
245  public function deleteHistoryByPostIds(array $post_ids = []): array
246  {
247  $draft_ids = [];
248  if ($post_ids !== []) {
249  $res = $this->db->query('
250  SELECT frm_drafts_history.history_id, frm_drafts_history.draft_id
251  FROM frm_posts_drafts
252  INNER JOIN frm_drafts_history ON frm_posts_drafts.draft_id
253  WHERE ' . $this->db->in('post_id', $post_ids, false, 'integer'));
254 
255  while ($row = $this->db->fetchAssoc($res)) {
256  $draft_ids[] = (int) $row['draft_id'];
257  }
258 
259  $this->deleteHistoryByDraftIds($draft_ids);
260  }
261 
262  return $draft_ids;
263  }
264 
268  public function deleteHistoryByDraftIds(array $draft_ids = []): void
269  {
270  if ($draft_ids !== []) {
271  $res = $this->db->query(
272  'SELECT history_id FROM frm_drafts_history WHERE ' . $this->db->in('draft_id', $draft_ids, false, 'integer')
273  );
274 
275  while ($row = $this->db->fetchAssoc($res)) {
276  $this->setHistoryId((int) $row['history_id']);
277  $this->deleteMobs();
278  }
279 
280  $this->db->manipulate(
281  'DELETE FROM frm_drafts_history WHERE ' . $this->db->in('draft_id', $draft_ids, false, 'integer')
282  );
283  }
284  }
285 }
Class ilForumPostDraft.
$res
Definition: ltiservices.php:69
static getInstancesByDraftId(int $draft_id)
static moveMediaObjects(string $post_message, string $source_type, int $source_id, string $target_type, int $target_id, int $direction=0)
deleteHistoryByPostIds(array $post_ids=[])
setDraftDate(string $draft_date)
Class ilForumDraftHistory.
global $DIC
Definition: feed.php:28
setPostSubject(string $post_subject)
deleteHistoryByDraftIds(array $draft_ids=[])
setPostMessage(string $post_message)
static _exists(int $id, bool $reference=false, ?string $type=null)
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.
static newInstanceByDraftId(int $draft_id)
static populateWithDatabaseRecord(ilForumDraftsHistory $history_draft, array $row)