ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilForumPost.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3
11{
12 private $id = 0;
13
14 private $forum_id = 0;
15
16 private $thread_id = 0;
17
18 private $display_user_id = 0;
19
20 private $user_alias = '';
21
22 private $subject = '';
23
24 private $message = '';
25
26 private $createdate = '0000-00-00 00:00:00';
27
28 private $changedate = '0000-00-00 00:00:00';
29
30 private $user_id_update = 0;
31
32 private $censored = 0;
33
34 private $censorship_comment = '';
35
36 private $censored_date = '0000-00-00 00:00:00';
37
38 private $notification = 0;
39
40 private $import_name = '';
41
42 private $status = 1;
43
44 private $tree_id = 0;
45
46 private $parent_id = 0;
47
48 private $lft = 0;
49
50 private $rgt = 0;
51
52 private $depth = 0;
53
57 private $objThread = null;
58
59 private $db = null;
60 private $lng = null;
61
66 private $is_moderator = false;
67
72 private $is_author_moderator = null;
73
74 private $post_read = false;
75
76 private $pos_author_id = 0;
77
78 private $post_activation_date = null;
79
86 public function __construct($a_id = 0, $a_is_moderator = false, $preventImplicitRead = false)
87 {
88 global $DIC;
89
90 $this->db = $DIC->database();
91 $this->lng = $DIC->language();
92 $this->id = $a_id;
93
94 if (!$preventImplicitRead) {
95 $this->read();
96 }
97 }
98
99 public function __destruct()
100 {
101 unset($this->db);
102 unset($this->objThread);
103 }
104
105 public function insert()
106 {
107 if ($this->forum_id && $this->thread_id) {
108 $this->id = $this->db->nextId('frm_posts');
109
110 $this->db->insert('frm_posts', array(
111 'pos_pk' => array('integer', $this->id),
112 'pos_top_fk' => array('integer', $this->forum_id),
113 'pos_thr_fk' => array('integer', $this->thread_id),
114 'pos_display_user_id' => array('integer', $this->display_user_id),
115 'pos_usr_alias' => array('text', $this->user_alias),
116 'pos_subject' => array('text', $this->subject),
117 'pos_message' => array('clob', $this->message),
118 'pos_date' => array('timestamp', $this->createdate),
119 'pos_update' => array('timestamp', $this->createdate),
120 'update_user' => array('integer', $this->user_id_update),
121 'pos_cens' => array('integer', $this->censored),
122 'notify' => array('integer', (int) $this->notification),
123 'import_name' => array('text', (string) $this->import_name),
124 'pos_status' => array('integer', (int) $this->status),
125 'pos_author_id' => array('integer', (int) $this->pos_author_id),
126 'is_author_moderator' => array('integer', $this->is_author_moderator),
127 'pos_activation_date' => array('timestamp', $this->createdate)
128 ));
129
130 return true;
131 }
132
133 return false;
134 }
135
136 public function update()
137 {
138 if ($this->id) {
139 $this->db->update(
140 'frm_posts',
141 array(
142 'pos_top_fk' => array('integer', $this->forum_id),
143 'pos_thr_fk' => array('integer', $this->thread_id),
144 'pos_subject' => array('text', $this->subject),
145 'pos_message' => array('clob', $this->message),
146 'pos_update' => array('timestamp', $this->changedate),
147 'update_user' => array('integer', $this->user_id_update),
148 'pos_cens' => array('integer', $this->censored),
149 'pos_cens_date' => array('timestamp', $this->censored_date),
150 'pos_cens_com' => array('text', $this->censorship_comment),
151 'notify' => array('integer', (int) $this->notification),
152 'pos_status' => array('integer', (int) $this->status)
153 ),
154 array(
155 'pos_pk' => array('integer', (int) $this->id)
156 )
157 );
158
159 if ($this->objThread->getFirstPostId() == $this->id) {
160 $this->objThread->setSubject($this->subject);
161 $this->objThread->update();
162 $this->objThread->reload();
163 }
164
165 return true;
166 }
167
168 return false;
169 }
170
171 private function read()
172 {
173 if ($this->id) {
174 $res = $this->db->queryF(
175 '
176 SELECT * FROM frm_posts
177 INNER JOIN frm_posts_tree ON pos_fk = pos_pk
178 WHERE pos_pk = %s',
179 array('integer'),
180 array($this->id)
181 );
182 $row = $this->db->fetchObject($res);
183
184 if (is_object($row)) {
185 $this->id = $row->pos_pk;
186 $this->forum_id = $row->pos_top_fk;
187 $this->thread_id = $row->pos_thr_fk;
188 $this->display_user_id = $row->pos_display_user_id;
189 $this->user_alias = $row->pos_usr_alias;
190 $this->subject = $row->pos_subject;
191 $this->message = $row->pos_message;
192 $this->createdate = $row->pos_date;
193 $this->changedate = $row->pos_update;
194 $this->user_id_update = $row->update_user;
195 $this->censored = $row->pos_cens;
196 $this->censored_date = $row->pos_cens_date;
197 $this->censorship_comment = $row->pos_cens_com;
198 $this->notification = $row->notify;
199 $this->import_name = $row->import_name;
200 $this->status = $row->pos_status;
201 $this->tree_id = $row->fpt_pk;
202 $this->parent_id = $row->parent_pos;
203 $this->lft = $row->lft;
204 $this->rgt = $row->rgt;
205 $this->depth = $row->depth;
206 $this->pos_author_id = $row->pos_author_id;
207 $this->is_author_moderator = $row->is_author_moderator;
208 $this->post_activation_date = $row->pos_activation_date;
209
210 $this->objThread = new ilForumTopic($this->thread_id, $this->is_moderator);
211
212 return true;
213 }
214 $this->id = 0;
215 return false;
216 }
217
218 return false;
219 }
220
221 public function isAnyParentDeactivated()
222 {
223 if ($this->id) {
224 $res = $this->db->queryF(
225 '
226 SELECT * FROM frm_posts_tree
227 INNER JOIN frm_posts ON pos_pk = pos_fk
228 WHERE pos_status = %s
229 AND lft < %s AND rgt > %s
230 AND thr_fk = %s',
231 array('integer', 'integer', 'integer', 'integer'),
232 array('0', $this->lft, $this->rgt, $this->thread_id)
233 );
234
235 return $res->numRows();
236 }
237
238 return false;
239 }
240
241 public function reload()
242 {
243 return $this->read();
244 }
245
246 public function activatePost()
247 {
248 if ($this->id) {
249 $now = date("Y-m-d H:i:s");
250 $this->db->update(
251 'frm_posts',
252 array('pos_status' => array('integer', 1),
253 'pos_activation_date' => array('timestamp', $now)),
254 array('pos_pk' => array('integer', $this->id))
255 );
256
257 $this->activateParentPosts();
258 $this->setPostActivationDate($now);
259 $this->setStatus(1);
260 return true;
261 }
262
263 return false;
264 }
265
267 {
268 if ($this->id) {
269 $query = "SELECT pos_pk FROM frm_posts_tree treea "
270 . "INNER JOIN frm_posts_tree treeb ON treeb.thr_fk = treea.thr_fk "
271 . "AND treeb.lft BETWEEN treea.lft AND treea.rgt "
272 . "INNER JOIN frm_posts ON pos_pk = treeb.pos_fk "
273 . "WHERE treea.pos_fk = %s";
274 $result = $this->db->queryF(
275 $query,
276 array('integer'),
277 array($this->id)
278 );
279
280 $now = date("Y-m-d H:i:s");
281 while ($row = $this->db->fetchAssoc($result)) {
282 $this->db->update(
283 'frm_posts',
284 array('pos_status' => array('integer', 1),
285 'pos_activation_date' => array('timestamp', $now)),
286 array('pos_pk' => array('integer', $row['pos_pk']))
287 );
288 }
289
290 $this->activateParentPosts();
291
292 return true;
293 }
294
295 return false;
296 }
297
298 public function activateParentPosts()
299 {
300 if ($this->id) {
301 $query = "SELECT pos_pk FROM frm_posts "
302 . "INNER JOIN frm_posts_tree ON pos_fk = pos_pk "
303 . "WHERE lft < %s AND rgt > %s AND thr_fk = %s";
304 $result = $this->db->queryF(
305 $query,
306 array('integer', 'integer', 'integer'),
307 array($this->lft, $this->rgt, $this->thread_id)
308 );
309
310 $now = date("Y-m-d H:i:s");
311 while ($row = $this->db->fetchAssoc($result)) {
312 $this->db->update(
313 'frm_posts',
314 array('pos_status' => array('integer', 1),
315 'pos_activation_date' => array('timestamp', $now)),
316 array('pos_pk' => array('integer', $row['pos_pk']))
317 );
318 }
319
320 return true;
321 }
322
323 return false;
324 }
325
326 public function isPostRead()
327 {
328 return $this->getIsRead();
329 }
330
331 public function isRead($a_user_id = 0)
332 {
333 if ($a_user_id && $this->id) {
334 $res = $this->db->queryF(
335 '
336 SELECT * FROM frm_user_read
337 WHERE usr_id = %s
338 AND post_id = %s',
339 array('integer', 'integer'),
340 array($a_user_id, $this->id)
341 );
342
343 return $res->numRows() ? true : false;
344 }
345
346 return false;
347 }
348
349 public function hasReplies()
350 {
351 if ($this->id && $this->rgt && $this->lft) {
352 $res = $this->db->queryF(
353 '
354 SELECT * FROM frm_posts_tree
355 WHERE lft > %s AND rgt < %s
356 AND thr_fk = %s',
357 array('integer', 'integer', 'integer'),
358 array($this->lft, $this->rgt, $this->thread_id)
359 );
360
361 return $res->numRows() ? true : false;
362 }
363
364 return false;
365 }
366
367 public function isOwner($a_user_id = 0)
368 {
369 if ($this->pos_author_id && $a_user_id) {
370 if ((int) $this->pos_author_id == (int) $a_user_id) {
371 return true;
372 }
373 return false;
374 }
375 return false;
376 }
377
378 public function setId($a_id)
379 {
380 $this->id = $a_id;
381 }
382 public function getId()
383 {
384 return $this->id;
385 }
386 public function setForumId($a_forum_id)
387 {
388 $this->forum_id = $a_forum_id;
389 }
390 public function getForumId()
391 {
392 return $this->forum_id;
393 }
394 public function setThreadId($a_thread_id)
395 {
396 $this->thread_id = $a_thread_id;
397 }
398 public function getThreadId()
399 {
400 return $this->thread_id;
401 }
402 public function setDisplayUserId($a_user_id)
403 {
404 $this->display_user_id = $a_user_id;
405 }
406 public function getDisplayUserId()
407 {
409 }
410 public function setUserAlias($a_user_alias)
411 {
412 $this->user_alias = $a_user_alias;
413 }
414 public function getUserAlias()
415 {
416 return $this->user_alias;
417 }
418 public function setSubject($a_subject)
419 {
420 $this->subject = $a_subject;
421 }
422 public function getSubject()
423 {
424 return $this->subject;
425 }
426 public function setMessage($a_message)
427 {
428 $this->message = $a_message;
429 }
430 public function getMessage()
431 {
432 return $this->message;
433 }
434 public function setCreateDate($a_createdate)
435 {
436 $this->createdate = $a_createdate;
437 }
438 public function getCreateDate()
439 {
440 return $this->createdate;
441 }
442 public function setChangeDate($a_changedate)
443 {
444 $this->changedate = $a_changedate;
445 }
446 public function getChangeDate()
447 {
448 return $this->changedate;
449 }
450 public function setUpdateUserId($a_user_id_update)
451 {
452 $this->user_id_update = $a_user_id_update;
453 }
454 public function getUpdateUserId()
455 {
457 }
458 public function setCensorship($a_censorship)
459 {
460 $this->censored = $a_censorship;
461 }
462 public function isCensored()
463 {
464 return $this->censored == 1 ? true : false;
465 }
466 public function setCensorshipComment($a_comment)
467 {
468 $this->censorship_comment = $a_comment;
469 }
470 public function getCensorshipComment()
471 {
473 }
474 public function setNotification($a_notification)
475 {
476 $this->notification = $a_notification;
477 }
478 public function isNotificationEnabled()
479 {
480 return $this->notification == 1 ? true : false;
481 }
482 public function setImportName($a_import_name)
483 {
484 $this->import_name = $a_import_name;
485 }
486 public function getImportName()
487 {
488 return $this->import_name;
489 }
490 public function setStatus($a_status)
491 {
492 $this->status = $a_status;
493 }
494 public function isActivated()
495 {
496 return $this->status == 1 ? true : false;
497 }
498 public function setTreeId($a_tree_id)
499 {
500 $this->tree_id = $a_tree_id;
501 }
502 public function getTreeId()
503 {
504 return $this->tree_id;
505 }
506 public function setParentId($a_parent_id)
507 {
508 $this->parent_id = $a_parent_id;
509 }
510
511 public function setIsRead($a_is_read)
512 {
513 $this->post_read = $a_is_read;
514 }
515
516 public function getIsRead()
517 {
518 return $this->post_read;
519 }
520
521 public function getParentId()
522 {
523 return $this->parent_id;
524 }
525 public function setLft($a_lft)
526 {
527 $this->lft = $a_lft;
528 }
529 public function getLft()
530 {
531 return $this->lft;
532 }
533 public function setRgt($a_rgt)
534 {
535 $this->rgt = $a_rgt;
536 }
537 public function getRgt()
538 {
539 return $this->rgt;
540 }
541 public function setDepth($a_depth)
542 {
543 $this->depth = $a_depth;
544 }
545 public function getDepth()
546 {
547 return $this->depth;
548 }
549 public function setThread(ilForumTopic $thread)
550 {
551 $this->objThread = $thread;
552 }
553 public function getThread()
554 {
555 return $this->objThread;
556 }
557
562 {
563 $this->pos_author_id = $pos_author_id;
564 }
565
569 public function getPosAuthorId()
570 {
572 }
576 public function getIsAuthorModerator()
577 {
579 }
580
585 {
586 $this->is_author_moderator = $is_author_moderator;
587 }
588
592 public function getCensoredDate()
593 {
595 }
596
600 public function getPostActivationDate()
601 {
603 }
604
609 {
610 $this->post_activation_date = $post_activation_date;
611 }
612
617 {
618 $this->censored_date = $censored_date;
619 }
620
624 public function assignData($row)
625 {
626 $this->setUserAlias($row['pos_usr_alias']);
627 $this->setSubject($row['pos_subject']);
628 $this->setCreateDate($row['pos_date']);
629 $this->setMessage($row['pos_message']);
630 $this->setForumId($row['pos_top_fk']);
631 $this->setThreadId($row['pos_thr_fk']);
632 $this->setChangeDate($row['pos_update']);
633 $this->setUpdateUserId($row['update_user']);
634 $this->setCensorship($row['pos_cens']);
635 $this->setCensoredDate($row['pos_cens_date']);
636 $this->setCensorshipComment($row['pos_cens_com']);
637 $this->setNotification($row['notify']);
638 $this->setImportName($row['import_name']);
639 $this->setStatus($row['pos_status']);
640 $this->setTreeId($row['fpt_pk']);
641 $this->setParentId($row['parent_pos']);
642 $this->setLft($row['lft']);
643 $this->setRgt($row['rgt']);
644 $this->setDepth($row['depth']);
645 $this->setIsRead($row['post_read']);
646 $this->setDisplayUserId($row['pos_display_user_id']);
647 $this->setPosAuthorId($row['pos_author_id']);
648 $this->setIsAuthorModerator($row['is_author_moderator']);
649 }
650
656 public static function mergePosts(int $sourceThreadId, int $targetThreadId, array $excludedPostIds = [])
657 {
658 global $DIC;
659 $ilDB = $DIC->database();
660
661 $conditions = ['pos_thr_fk = ' . $ilDB->quote($sourceThreadId, 'integer')];
662 if ($excludedPostIds !== []) {
663 $conditions[] = $ilDB->in('pos_pk', $excludedPostIds, true, 'integer');
664 }
665
666 $ilDB->manipulateF(
667 'UPDATE frm_posts SET pos_thr_fk = %s WHERE ' . implode(' AND ', $conditions),
668 ['integer',],
669 [$targetThreadId,]
670 );
671 }
672}
$result
An exception for terminatinating execution or to throw for unit testing.
setNotification($a_notification)
setForumId($a_forum_id)
setTreeId($a_tree_id)
setThread(ilForumTopic $thread)
__construct($a_id=0, $a_is_moderator=false, $preventImplicitRead=false)
ilForumPost constructor.
setStatus($a_status)
setCreateDate($a_createdate)
isOwner($a_user_id=0)
setCensorshipComment($a_comment)
setIsRead($a_is_read)
setCensorship($a_censorship)
setDepth($a_depth)
setThreadId($a_thread_id)
setIsAuthorModerator($is_author_moderator)
setImportName($a_import_name)
setPosAuthorId($pos_author_id)
isRead($a_user_id=0)
setParentId($a_parent_id)
setUserAlias($a_user_alias)
setCensoredDate($censored_date)
setUpdateUserId($a_user_id_update)
setDisplayUserId($a_user_id)
setChangeDate($a_changedate)
setPostActivationDate($post_activation_date)
static mergePosts(int $sourceThreadId, int $targetThreadId, array $excludedPostIds=[])
setSubject($a_subject)
setMessage($a_message)
notification()
Definition: notification.php:2
$query
foreach($_POST as $key=> $value) $res
global $ilDB
$DIC
Definition: xapitoken.php:46