4 require_once
'./Modules/Forum/classes/class.ilForumProperties.php';
5 require_once
'./Modules/Forum/classes/class.ilObjForum.php';
6 require_once
'./Modules/Forum/classes/class.ilForumTopic.php';
7 require_once
'./Modules/Forum/classes/class.ilForumPost.php';
98 static $lngCache = array();
103 if(!isset($lngCache[$languageShorthandle]))
105 $lngCache[$languageShorthandle] =
new ilLanguage($languageShorthandle);
106 $lngCache[$languageShorthandle]->loadLanguageModule(
'forum');
109 return $lngCache[$languageShorthandle];
120 if (!isset($a_obj_id))
122 $message = get_class($this).
"::setForumId(): No obj_id given!";
123 $this->
ilias->raiseError($message,$this->
ilias->error_obj->WARNING);
126 $this->
id = $a_obj_id;
136 if (!isset($a_ref_id))
138 $message = get_class($this).
"::setForumRefId(): No ref_id given!";
139 $this->
ilias->raiseError($message,$this->
ilias->error_obj->WARNING);
142 $this->ref_id = $a_ref_id;
176 die($this->className .
"::setOrderField(): No orderField given.");
205 die($this->className .
"::setDbTable(): No database table given.");
236 $this->mdb2Query = $query_string;
237 $this->mdb2DataValue = $data_value;
238 $this->mdb2DataType = $data_type;
251 if($this->mdb2Query !=
'')
265 if($this->mdb2DataValue !=
'')
278 if($this->mdb2DataType !=
'')
294 die($this->className .
"::setPageHits(): No int pageHits given.");
325 $data_type = array();
326 $data_value = array();
328 $query =
'SELECT * FROM frm_data WHERE ';
332 $query .=
''.$this->getMDB2Query().
'';
336 $res = $ilDB->queryf(
$query, $data_type, $data_value);
339 if(is_null(
$row))
return NULL;
341 $row[
"top_name"] = trim(
$row[
"top_name"]);
342 $row[
"top_description"] = nl2br(
$row[
"top_description"]);
354 if(!is_array(
$row) || !count(
$row))
return null;
356 $row[
'top_name'] = trim(
$row[
'top_name']);
357 $row[
'top_description'] = nl2br(
$row[
'top_description']);
372 $data_type = array();
373 $data_value = array();
375 $query =
'SELECT * FROM frm_threads WHERE ';
383 $sql_res = $ilDB->queryf(
$query, $data_type, $data_value);
384 $result = $ilDB->fetchAssoc($sql_res);
401 $res = $ilDB->queryf(
' 402 SELECT frm_posts.*, usr_data.lastname FROM frm_posts, usr_data 404 AND pos_usr_id = usr_id',
405 array(
'integer'), array($post));
411 $row[
"pos_message"] = nl2br(
$row[
"pos_message"]);
420 $res = $ilDB->queryf(
' 421 SELECT * FROM frm_posts WHERE pos_pk = %s',
422 array(
'integer'), array($a_id));
424 while(
$row = $ilDB->fetchObject(
$res))
426 return $row->pos_message;
445 public function generatePost($forum_id, $thread_id, $user, $message, $parent_pos, $notify, $subject =
'', $alias =
'', $date =
'', $status = 1, $send_activation_mail = 0)
450 $objNewPost->setForumId($forum_id);
451 $objNewPost->setThreadId($thread_id);
452 $objNewPost->setSubject($subject);
453 $objNewPost->setMessage($message);
454 $objNewPost->setUserId($user);
455 $objNewPost->setUserAlias($alias);
458 $objNewPost->setCreateDate(date(
"Y-m-d H:i:s"));
462 if (strpos($date,
"-") > 0)
464 $objNewPost->setCreateDate($date);
468 $objNewPost->setCreateDate(date(
"Y-m-d H:i:s", $date));
473 $objNewPost->setNotification($notify);
474 $objNewPost->setStatus($status);
475 $objNewPost->insert();
478 if ($parent_pos == 0)
480 $this->
addPostTree($objNewPost->getThreadId(), $objNewPost->getId(), $objNewPost->getCreateDate());
484 $this->
insertPostNode($objNewPost->getId(), $parent_pos, $objNewPost->getThreadId(), $objNewPost->getCreateDate());
489 $lastPost = $objNewPost->getForumId().
"#".$objNewPost->getThreadId().
"#".$objNewPost->getId();
494 SET thr_num_posts = thr_num_posts + 1, 497 array(
'text',
'integer'),
498 array($lastPost, $objNewPost->getThreadId()));
503 SET top_num_posts = top_num_posts + 1, 506 array(
'text',
'integer'),
507 array($lastPost, $objNewPost->getForumId()));
511 $forum_obj->markPostRead($objNewPost->getUserId(), $objNewPost->getThreadId(), $objNewPost->getId());
513 $pos_data = $objNewPost->getDataAsArray();
518 if (!$status && $send_activation_mail)
520 $pos_data[
"top_name"] = $forum_obj->getTitle();
527 require_once
'Services/RTE/classes/class.ilRTE.php';
528 include_once(
"./Services/News/classes/class.ilNewsItem.php");
530 $news_item->setContext($forum_obj->getId(),
'frm', $objNewPost->getId(),
'pos');
532 $news_item->setTitle($objNewPost->getSubject());
534 $news_item->setUserId($user);
536 $news_item->create();
539 return $objNewPost->getId();
555 public function generateThread($forum_id, $user, $subject, $message, $notify, $notify_posts, $alias =
'', $date =
'', $status = 1)
560 $objNewThread->setForumId($forum_id);
561 $objNewThread->setUserId($user);
562 $objNewThread->setSubject($subject);
565 $objNewThread->setCreateDate(date(
"Y-m-d H:i:s"));
569 if (strpos($date,
"-") > 0)
571 $objNewThread->setCreateDate($date);
575 $objNewThread->setCreateDate(date(
"Y-m-d H:i:s", $date));
579 $objNewThread->setUserAlias($alias);
580 $objNewThread->insert();
582 if ($notify_posts == 1)
584 $objNewThread->enableNotification($user);
588 $statement = $ilDB->manipulateF(
' 590 SET top_num_threads = top_num_threads + 1 592 array(
'integer'), array($forum_id));
594 return $this->
generatePost($forum_id, $objNewThread->getId(), $user, $message, 0, $notify, $subject, $alias, $objNewThread->getCreateDate(), $status);
605 public function moveThreads($thread_ids = array(), $src_ref_id = 0, $dest_top_frm_fk = 0)
611 if (is_numeric($src_top_frm_fk) && $src_top_frm_fk > 0 && is_numeric($dest_top_frm_fk) && $dest_top_frm_fk > 0)
622 if ($oldFrmData[
'top_pk'] && $newFrmData[
'top_pk'])
627 foreach ($thread_ids as
$id)
631 $numPosts = $objTmpThread->movePosts($src_top_frm_fk, $oldFrmData[
'top_pk'], $dest_top_frm_fk, $newFrmData[
'top_pk']);
632 if (($last_post_string = $objTmpThread->getLastPostString()) !=
'')
634 $last_post_string = explode(
'#', $last_post_string);
635 $last_post_string[0] = $newFrmData[
'top_pk'];
636 $last_post_string = implode(
'#', $last_post_string);
637 $objTmpThread->setLastPostString($last_post_string);
640 $visits += $objTmpThread->getVisits();
642 $moved_posts += $numPosts;
645 $objTmpThread->setForumId($newFrmData[
'top_pk']);
646 $objTmpThread->update();
648 unset($objTmpThread);
653 $res = $ilDB->queryf(
' 654 SELECT pos_thr_fk, pos_pk 656 WHERE pos_top_fk = %s 657 ORDER BY pos_date DESC',
658 array(
'integer'), array($oldFrmData[
'top_pk']));
661 $last_post_src = $oldFrmData[
'top_pk'] .
'#' .
$row->pos_thr_fk .
'#' .
$row->pos_pk;
663 $statement = $ilDB->manipulateF(
' 665 SET top_num_posts = top_num_posts - %s, 666 top_num_threads = top_num_threads - %s, 667 visits = visits - %s, 670 array(
'integer',
'integer',
'integer',
'text',
'integer'),
675 $oldFrmData[
'top_pk']));
680 $res = $ilDB->queryf(
' 681 SELECT pos_thr_fk, pos_pk 683 WHERE pos_top_fk = %s 684 ORDER BY pos_date DESC',
685 array(
'integer'), array($newFrmData[
'top_kp']));
688 $last_post_dest = $newFrmData[
'top_pk'] .
'#' .
$row->pos_thr_fk .
'#' .
$row->pos_pk;
690 $statement = $ilDB->manipulateF(
' 692 SET top_num_posts = top_num_posts + %s, 693 top_num_threads = top_num_threads + %s, 694 visits = visits + %s, 697 array(
'integer',
'integer',
'integer',
'text',
'integer'),
698 array($moved_posts, $moved_threads, $visits, $last_post_dest, $newFrmData[
'top_pk']));
732 $statement = $ilDB->manipulateF(
' 734 SET pos_cens_com = %s, 739 array(
'text',
'timestamp',
'integer',
'integer',
'integer'),
740 array($message, date(
"Y-m-d H:i:s"), $cens,
$_SESSION[
'AccountId'], $pos_pk));
743 include_once(
"./Services/News/classes/class.ilNewsItem.php");
745 "frm", $pos_pk,
"pos");
752 $news_item->setContent(nl2br($this->
prepareText($message, 0)));
753 $news_item->update();
758 $res = $ilDB->queryf(
' 759 SELECT * FROM frm_posts 761 array(
'integer'), array($pos_pk));
763 $rec = $ilDB->fetchAssoc(
$res);
767 $news_item->setContent(nl2br($this->
prepareText($rec[
"pos_message"], 0)));
768 $news_item->update();
785 include_once
"./Modules/Forum/classes/class.ilObjForum.php";
793 foreach($del_id as $post_id)
795 ilObjForum::_deleteReadEntries($post_id);
801 $dead_pos = count($del_id);
805 if ($p_node[
"parent"] == 0)
808 include_once
'./Modules/Forum/classes/class.ilObjForum.php';
810 ilObjForum::_deleteAccessEntries($p_node[
'tree']);
813 $dead_thr = $p_node[
"tree"];
815 $statement = $ilDB->manipulateF(
' 816 DELETE FROM frm_threads 818 array(
'integer'), array($p_node[
'tree']));
821 $statement = $ilDB->manipulateF(
' 823 SET top_num_threads = top_num_threads - 1 824 WHERE top_frm_fk = %s',
825 array(
'integer'), array($this->
id));
828 $posset = $ilDB->queryf(
' 829 SELECT * FROM frm_posts 830 WHERE pos_thr_fk = %s',
831 array(
'integer'), array($p_node[
'tree']));
833 while ($posrec = $ilDB->fetchAssoc($posset))
835 include_once(
"./Services/News/classes/class.ilNewsItem.php");
837 "frm", $posrec[
"pos_pk"],
"pos");
841 $news_item->delete();
846 include_once
'Services/MediaObjects/classes/class.ilObjMediaObject.php';
848 foreach(
$mobs as $mob)
865 $statement = $ilDB->manipulateF(
' 866 DELETE FROM frm_posts 867 WHERE pos_thr_fk = %s',
868 array(
'integer'), array($p_node[
'tree']));
875 for ($i = 0; $i < $dead_pos; $i++)
877 $statement = $ilDB->manipulateF(
' 878 DELETE FROM frm_posts 880 array(
'integer'), array($del_id[$i]));
883 include_once(
"./Services/News/classes/class.ilNewsItem.php");
885 "frm", $del_id[$i],
"pos");
889 $news_item->delete();
894 include_once
'Services/MediaObjects/classes/class.ilObjMediaObject.php';
896 foreach(
$mobs as $mob)
912 $statement = $ilDB->manipulateF(
' 914 SET thr_num_posts = thr_num_posts - %s 916 array(
'integer',
'integer'),
917 array($dead_pos, $p_node[
'tree']));
921 $res1 = $ilDB->queryf(
' 922 SELECT * FROM frm_posts 923 WHERE pos_thr_fk = %s 924 ORDER BY pos_date DESC',
925 array(
'integer'), array($p_node[
'tree']));
927 if ($res1->numRows() == 0)
935 while ($selData = $ilDB->fetchAssoc($res1))
942 $lastPost_thr = $selData[
"pos_top_fk"].
"#".$selData[
"pos_thr_fk"].
"#".$selData[
"pos_pk"];
947 $statement = $ilDB->manipulateF(
' 949 SET thr_last_post = %s 951 array(
'text',
'integer'), array($lastPost_thr, $p_node[
'tree']));
955 $statement = $ilDB->manipulateF(
' 957 SET top_num_posts = top_num_posts - %s 958 WHERE top_frm_fk = %s',
959 array(
'integer',
'integer'), array($dead_pos, $this->
id));
963 $res2 = $ilDB->queryf(
' 964 SELECT * FROM frm_posts, frm_data 965 WHERE pos_top_fk = top_pk 967 ORDER BY pos_date DESC',
968 array(
'integer'), array($this->
id));
970 if ($res2->numRows() == 0)
978 while ($selData = $ilDB->fetchAssoc($res2))
985 $lastPost_top = $selData[
"pos_top_fk"].
"#".$selData[
"pos_thr_fk"].
"#".$selData[
"pos_pk"];
990 $statement = $ilDB->manipulateF(
' 992 SET top_last_post = %s 993 WHERE top_frm_fk = %s',
994 array(
'text',
'integer'), array($lastPost_top, $this->
id));
1006 public function getAllThreads($a_topic_id, array $params = array(), $limit = 0, $offset = 0)
1015 $frm_overview_setting = (int)$ilSetting::_lookupValue(
'frma',
'forum_overview');
1017 $excluded_ids_condition =
'';
1018 if(isset($params[
'excluded_ids']) && is_array($params[
'excluded_ids']) && $params[
'excluded_ids'])
1020 $excluded_ids_condition =
' AND ' . $ilDB->in(
'thr_pk', $params[
'excluded_ids'],
true,
'integer').
' ';
1024 $query =
"SELECT COUNT(thr_pk) cnt 1026 WHERE thr_top_fk = %s {$excluded_ids_condition}";
1027 $res = $ilDB->queryF(
$query, array(
'integer'), array($a_topic_id));
1029 $cnt = (int)
$data[
'cnt'];
1034 $data_types = array();
1037 $active_inner_query =
'';
1038 if(!$params[
'is_moderator'])
1040 $active_query =
' AND (pos_status = %s OR pos_usr_id = %s) ';
1041 $active_inner_query =
' AND (ipos.pos_status = %s OR ipos.pos_usr_id = %s) ';
1046 $optional_fields =
'';
1047 if($frm_props->getThreadSorting() == 1)
1049 $optional_fields =
',thread_sorting';
1052 if(!$ilUser->isAnonymous())
1055 (CASE WHEN COUNT(DISTINCT(notification_id)) > 0 THEN 1 ELSE 0 END) usr_notification_is_enabled, 1056 MAX(pos_date) post_date, 1057 COUNT(DISTINCT(pos_pk)) num_posts, 1058 COUNT(DISTINCT(pos_pk)) - COUNT(DISTINCT(postread.post_id)) num_unread_posts, ";
1064 (SELECT COUNT(DISTINCT(ipos.pos_pk)) 1066 LEFT JOIN frm_user_read iread ON iread.post_id = ipos.pos_pk AND iread.usr_id = %s 1067 LEFT JOIN frm_thread_access iacc ON (iacc.thread_id = ipos.pos_thr_fk AND iacc.usr_id = %s) 1068 WHERE ipos.pos_thr_fk = thr_pk 1070 AND (ipos.pos_update > iacc.access_old_ts 1072 (iacc.access_old IS NULL AND (ipos.pos_update > " . $ilDB->quote(date(
'Y-m-d H:i:s', NEW_DEADLINE),
'timestamp') .
")) 1075 AND ipos.pos_usr_id != %s 1076 AND iread.usr_id IS NULL $active_inner_query 1080 $query .=
" thr_pk, thr_top_fk, thr_subject, thr_usr_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1084 LEFT JOIN frm_notification 1085 ON frm_notification.thread_id = thr_pk 1086 AND frm_notification.user_id = %s 1089 ON pos_thr_fk = thr_pk $active_query 1091 LEFT JOIN frm_user_read postread 1092 ON postread.post_id = pos_pk 1093 AND postread.usr_id = %s";
1095 if($frm_props->getThreadSorting() == 1)
1097 $additional_sort =
', thread_sorting ASC, post_date DESC ';
1101 $additional_sort =
', post_date DESC';
1104 $query .=
" WHERE thr_top_fk = %s 1105 {$excluded_ids_condition} 1106 GROUP BY thr_pk, thr_top_fk, thr_subject, thr_usr_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1108 ORDER BY is_sticky DESC {$additional_sort}, thr_date DESC";
1114 $data_types[] =
'integer';
1115 $data_types[] =
'integer';
1116 $data_types[] =
'integer';
1118 if(!$params[
'is_moderator'])
1120 array_push($data_types,
'integer',
'integer');
1123 $data_types[] =
'integer';
1124 if(!$params[
'is_moderator'])
1126 array_push($data_types,
'integer',
'integer');
1128 $data_types[] =
'integer';
1129 $data_types[] =
'integer';
1134 $data[] = $ilUser->getId();
1135 $data[] = $ilUser->getId();
1136 $data[] = $ilUser->getId();
1138 if(!$params[
'is_moderator'])
1140 array_push(
$data,
'1', $ilUser->getId());
1143 $data[] = $ilUser->getId();
1144 if(!$params[
'is_moderator'])
1146 array_push($data,
'1', $ilUser->getId());
1148 $data[] = $ilUser->getId();
1149 $data[] = $a_topic_id;
1154 0 usr_notification_is_enabled, 1155 MAX(pos_date) post_date, 1156 COUNT(DISTINCT(pos_pk)) num_posts, 1157 COUNT(DISTINCT(pos_pk)) num_unread_posts, 1158 COUNT(DISTINCT(pos_pk)) num_new_posts, 1159 thr_pk, thr_top_fk, thr_subject, thr_usr_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1164 ON pos_thr_fk = thr_pk $active_query";
1166 if($frm_props->getThreadSorting() == 1)
1168 $additional_sort =
', thread_sorting ASC, post_date DESC ';
1172 $additional_sort =
', post_date DESC';
1175 $query .=
" WHERE thr_top_fk = %s 1176 {$excluded_ids_condition} 1177 GROUP BY thr_pk, thr_top_fk, thr_subject, thr_usr_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1179 ORDER BY is_sticky DESC {$additional_sort}, thr_date DESC";
1181 if(!$params[
'is_moderator'])
1183 array_push($data_types,
'integer',
'integer');
1185 $data_types[] =
'integer';
1187 if(!$params[
'is_moderator'])
1189 array_push(
$data,
'1', $ilUser->getId());
1191 $data[] = $a_topic_id;
1194 if($limit || $offset)
1199 while(
$row = $ilDB->fetchAssoc(
$res))
1202 $thread->assignData(
$row);
1203 $threads[] = $thread;
1207 'items' => $threads,
1216 $statistic = array();
1218 $data_types = array();
1221 $query =
"SELECT COUNT(f.pos_usr_id) ranking, u.login, p.value, u.lastname, u.firstname 1223 INNER JOIN frm_posts_tree t 1224 ON f.pos_pk = t.pos_fk 1225 INNER JOIN frm_threads th 1226 ON t.thr_fk = th.thr_pk 1227 INNER JOIN usr_data u 1228 ON u.usr_id = f.pos_usr_id 1229 INNER JOIN frm_data d 1230 ON d.top_pk = f.pos_top_fk 1231 LEFT JOIN usr_pref p 1232 ON p.usr_id = u.usr_id AND p.keyword = %s 1235 array_push($data_types,
'text');
1236 array_push(
$data,
'public_profile');
1240 $query .=
' AND (pos_status = %s 1242 AND pos_usr_id = %s ))';
1244 array_push($data_types,
'integer',
'integer',
'integer');
1245 array_push(
$data,
'1',
'0', $ilUser->getId());
1248 $query .=
' AND d.top_frm_fk = %s 1249 GROUP BY pos_usr_id, u.login, p.value,u.lastname, u.firstname';
1251 array_push($data_types,
'integer');
1257 while (
$row = $ilDB->fetchAssoc(
$res))
1259 $statistic[$counter][] =
$row[
'ranking'];
1260 $statistic[$counter][] =
$row[
'login'];
1264 if(!$ilUser->isAnonymous() && in_array(
$row[
'value'], array(
'y',
'g')) ||
1265 $ilUser->isAnonymous() &&
'g' ==
$row[
'value'])
1267 $lastname =
$row[
'lastname'];
1268 $firstname =
$row[
'firstname'];
1271 $statistic[$counter][] = $lastname;
1272 $statistic[$counter][] = $firstname;
1277 return is_array($statistic) ? $statistic : array();
1292 $res = $ilDB->queryf(
' 1293 SELECT * FROM frm_posts_tree 1295 AND parent_pos = %s',
1296 array(
'integer',
'integer'), array($a_thread_id,
'0'));
1300 return $row->pos_fk ?
$row->pos_fk : 0;
1327 $rolf = $rbacreview->getRoleFolderOfObject($a_ref_id);
1328 $role_arr = $rbacreview->getRolesOfRoleFolder($rolf[
"ref_id"]);
1330 foreach ($role_arr as $role_id)
1334 if ($title ==
"il_frm_moderator_".$a_ref_id)
1336 #return $rbacreview->assignedUsers($roleObj->getId()); 1337 return $title = $rbacreview->assignedUsers($role_id);
1368 $res = $ilDB->queryf(
' 1369 SELECT * FROM frm_data 1370 INNER JOIN frm_posts ON pos_top_fk = top_pk 1371 WHERE top_frm_fk = %s 1372 AND pos_usr_id = %s',
1373 array(
'integer',
'integer'),
1376 return $res->numRows();
1383 $res = $ilDB->queryf(
' 1384 SELECT * FROM frm_data 1385 INNER JOIN frm_posts ON pos_top_fk = top_pk 1386 WHERE top_frm_fk = %s 1387 AND (pos_status = %s 1392 AND pos_usr_id = %s',
1393 array(
'integer',
'integer',
'integer',
'integer',
'integer'),
1394 array($this->
getForumId(),
'1',
'0', $ilUser->getId(), $a_user_id));
1396 return $res->numRows();
1417 public function addPostTree($a_tree_id, $a_node_id = -1, $a_date =
'')
1421 $a_date = $a_date ? $a_date : date(
"Y-m-d H:i:s");
1423 if ($a_node_id <= 0)
1425 $a_node_id = $a_tree_id;
1428 $nextId = $ilDB->nextId(
'frm_posts_tree');
1430 $statement = $ilDB->manipulateF(
' 1431 INSERT INTO frm_posts_tree 1441 VALUES(%s, %s, %s, %s, %s, %s, %s, %s )',
1442 array(
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'timestamp'),
1443 array($nextId, $a_tree_id, $a_node_id,
'0',
'1',
'2',
'1', $a_date));
1459 $a_date = $a_date ? $a_date : date(
"Y-m-d H:i:s");
1462 $sql_res = $ilDB->queryf(
' 1463 SELECT * FROM frm_posts_tree 1466 array(
'integer',
'integer'),
1467 array($a_parent_id, $tree_id));
1469 $res = $ilDB->fetchObject($sql_res);
1477 $statement = $ilDB->manipulateF(
' 1478 UPDATE frm_posts_tree 1490 array(
'integer',
'integer',
'integer'),
1491 array($left, $left, $tree_id));
1493 $depth = $this->
getPostDepth($a_parent_id, $tree_id) + 1;
1496 $nextId = $ilDB->nextId(
'frm_posts_tree');
1497 $statement = $ilDB->manipulateF(
' 1498 INSERT INTO frm_posts_tree 1508 VALUES(%s,%s,%s, %s, %s, %s,%s, %s)',
1509 array(
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'timestamp'),
1535 $sql_res = $ilDB->queryf(
' 1536 SELECT depth FROM frm_posts_tree 1539 array(
'integer',
'integer'),
1540 array($a_node_id, $tree_id));
1542 $res = $ilDB->fetchObject($sql_res);
1562 $res = $ilDB->queryf(
' 1563 SELECT * FROM frm_posts, frm_posts_tree 1564 WHERE pos_pk = pos_fk 1567 array(
'integer',
'integer'),
1568 array(
'0', $tree_id));
1585 $res = $ilDB->queryf(
' 1586 SELECT * FROM frm_posts, frm_posts_tree 1587 WHERE pos_pk = pos_fk 1607 require_once(
'./Services/User/classes/class.ilObjUser.php');
1611 $tmp_user =
new ilObjUser($a_row->pos_usr_id);
1612 $fullname = $tmp_user->getFullname();
1613 $loginname = $tmp_user->getLogin();
1616 $fullname = $fullname ? $fullname : ($a_row->import_name ? $a_row->import_name : $lng->txt(
"unknown"));
1619 "pos_pk" => $a_row->pos_pk,
1620 "child" => $a_row->pos_pk,
1621 "author" => $a_row->pos_usr_id,
1622 "alias" => $a_row->pos_usr_alias,
1623 "title" => $fullname,
1624 "loginname" => $loginname,
1626 "message" => $a_row->pos_message,
1627 "subject" => $a_row->pos_subject,
1628 "pos_cens_com" => $a_row->pos_cens_com,
1629 "pos_cens" => $a_row->pos_cens,
1631 "date" => $a_row->fpt_date,
1632 "create_date" => $a_row->pos_date,
1633 "update" => $a_row->pos_update,
1634 "update_user" => $a_row->update_user,
1635 "tree" => $a_row->thr_fk,
1636 "parent" => $a_row->parent_pos,
1637 "lft" => $a_row->lft,
1638 "rgt" => $a_row->rgt,
1639 "depth" => $a_row->depth,
1640 "id" => $a_row->fpt_pk,
1641 "notify" => $a_row->notify,
1642 "import_name" => $a_row->import_name,
1643 "pos_status" => $a_row->pos_status
1663 $res = $ilDB->queryf(
' 1664 SELECT * FROM frm_posts_tree 1667 AND parent_pos = %s',
1668 array(
'integer',
'integer',
'integer'),
1669 array($a_node[
'tree'], $a_node[
'pos_pk'], $a_node[
'parent']));
1671 while(
$row = $ilDB->fetchObject(
$res))
1673 $a_node[
"lft"] =
$row->lft;
1674 $a_node[
"rgt"] =
$row->rgt;
1677 $diff = $a_node[
"rgt"] - $a_node[
"lft"] + 1;
1681 SELECT * FROM frm_posts_tree 1682 WHERE lft BETWEEN %s AND %s 1684 array(
'integer',
'integer',
'integer'),
1685 array($a_node[
'lft'], $a_node[
'rgt'], $a_node[
'tree']));
1689 while ($treeData = $ilDB->fetchAssoc(
$result))
1691 $del_id[] = $treeData[
"pos_fk"];
1695 $statement = $ilDB->manipulateF(
' 1696 DELETE FROM frm_posts_tree 1697 WHERE lft BETWEEN %s AND %s 1699 array(
'integer',
'integer',
'integer'),
1700 array($a_node[
'lft'], $a_node[
'rgt'], $a_node[
'tree']));
1704 $statement = $ilDB->manipulateF(
' 1705 UPDATE frm_posts_tree 1717 array(
'integer',
'integer',
'integer',
'integer',
'integer'),
1718 array($a_node[
'lft'], $diff, $a_node[
'lft'], $diff, $a_node[
'tree']));
1734 $checkTime = time() - (60*60);
1736 if (
$_SESSION[
"frm_visit_".$this->dbTable.
"_".$ID] < $checkTime)
1739 $_SESSION[
"frm_visit_".$this->dbTable.
"_".$ID] = time();
1740 $query =
'UPDATE '.$this->dbTable.
' SET visits = visits + 1 WHERE ';
1742 $data_type = array();
1743 $data_value = array();
1751 $res = $ilDB->queryf(
$query, $data_type, $data_value);
1763 public function prepareText($text, $edit=0, $quote_user =
'', $type =
'')
1767 if($type ==
'export')
1769 $this->replQuote1 =
"<blockquote class=\"quote\"><hr size=\"1\" color=\"#000000\">";
1770 $this->replQuote2 =
"<hr size=\"1\" color=\"#000000\"/></blockquote>";
1776 $lname = ($quote_user !=
"")
1777 ?
'="'.$quote_user.
'"' 1780 $text =
"[quote$lname]".$text.
"[/quote]";
1785 $startZ = substr_count ($text,
"[quote");
1786 $endZ = substr_count ($text,
"[/quote]");
1788 if ($startZ > 0 || $endZ > 0)
1791 if ($startZ > $endZ)
1793 $diff = $startZ - $endZ;
1795 for ($i = 0; $i < $diff; $i++)
1798 else $text .=
"[/quote]";
1801 elseif ($startZ < $endZ)
1803 $diff = $endZ - $startZ;
1805 for ($i = 0; $i < $diff; $i++)
1807 if ($type ==
'export') $text = $this->txtQuote1.$text;
1808 else $text =
"[quote]".$text;
1814 $ws=
"[ \t\r\f\v\n]*";
1816 $text = eregi_replace(
"\[(quote$ws=$ws\"([^\"]*)\"$ws)\]",
1817 $this->replQuote1.
'<div class="ilForumQuoteHead">'.$lng->txt(
"quote").
" (\\2)".
'</div>', $text);
1819 $text = str_replace(
"[quote]",
1820 $this->replQuote1.
'<div class="ilForumQuoteHead">'.$lng->txt(
"quote").
'</div>', $text);
1822 $text = str_replace(
"[/quote]", $this->replQuote2, $text);
1827 if($type !=
'export')
1838 $text = str_replace(
"{",
"{", $text);
1839 $text = str_replace(
"}",
"}", $text);
1856 $res = $ilDB->queryf(
' 1857 SELECT frm_data.* FROM frm_data, frm_posts 1859 AND pos_top_fk = top_pk',
1860 array(
'integer'), array($pos_pk));
1870 if(!is_array($a_ids))
1874 include_once
"./Modules/Forum/classes/class.ilFileDataForum.php";
1877 foreach($a_ids as $pos_id)
1879 $tmp_file_obj->setPosId($pos_id);
1880 $files = $tmp_file_obj->getFilesOfPost();
1881 foreach($files as
$file)
1883 $tmp_file_obj->unlinkFile($file[
"name"]);
1886 unset($tmp_file_obj);
1895 $parent_data = $this->
getOnePost($a_parent_pos);
1898 if($parent_data[
"notify"] && $parent_data[
"pos_usr_id"] != $ilUser->getId())
1901 include_once
"Services/Mail/classes/class.ilMail.php";
1902 include_once
'./Services/User/classes/class.ilObjUser.php';
1904 $tmp_user =&
new ilObjUser($parent_data[
"pos_usr_id"]);
1911 $tmp_mail_obj =
new ilMail(ANONYMOUS_USER_ID);
1912 $message = $tmp_mail_obj->sendMail($tmp_user->getLogin(),
"",
"",
1915 array(),array(
"system"));
1918 unset($tmp_mail_obj);
1932 include_once
"./Services/Object/classes/class.ilObjectFactory.php";
1933 $user_lang = self::_getLanguageInstanceByUsrId($user_obj->getId());
1936 $title = $frm_obj->getTitle();
1943 $message .= $this->lng->txt(
"forum_post_replied");
1944 $message .= $this->lng->txt(
"forum").
": ".$title.
" -> ".$thread_data[
"thr_subject"].
"\n\n";
1946 $message .=
"\n------------------------------------------------------------\n";
1947 $message .= $post_data[
"pos_message"];
1948 $message .=
"\n------------------------------------------------------------\n";
1949 $message .= sprintf($this->lng->txt(
"forums_notification_show_post"),
"http://".$_SERVER[
"HTTP_HOST"].dirname($_SERVER[
"PHP_SELF"]).
"/goto.php?target=frm_".$post_data[
"ref_id"].
"_".$post_data[
"pos_thr_fk"].
'&client_id='.CLIENT_ID).
"\n\n";
1957 return $this->import_name;
1961 $this->import_name = $a_import_name;
1978 $res = $ilDB->queryf(
' 1979 SELECT frm_notification.thread_id FROM frm_data, frm_notification, frm_threads 1980 WHERE frm_notification.user_id = %s 1981 AND frm_notification.thread_id = frm_threads.thr_pk 1982 AND frm_threads.thr_top_fk = frm_data.top_pk 1983 AND frm_data.top_frm_fk = %s 1984 GROUP BY frm_notification.thread_id',
1985 array(
'integer',
'integer'),
1986 array($user_id, $this->
id));
1988 if (is_object(
$res) &&
$res->numRows() > 0)
1990 $thread_data = array();
1991 $thread_data_types = array();
1993 $query =
' DELETE FROM frm_notification 1995 AND thread_id IN (';
1997 array_push($thread_data, $user_id);
1998 array_push($thread_data_types,
'integer');
2002 while(
$row = $ilDB->fetchAssoc(
$res))
2004 if($counter < $res->numRows())
2007 array_push($thread_data,
$row[
'thread_id']);
2008 array_push($thread_data_types,
'integer');
2011 if($counter ==
$res->numRows())
2014 array_push($thread_data,
$row[
'thread_id']);
2015 array_push($thread_data_types,
'integer');
2021 $statement = $ilDB->manipulateF(
$query, $thread_data_types, $thread_data);
2026 $nextId = $ilDB->nextId(
'frm_notification');
2028 $statement = $ilDB->manipulateF(
' 2029 INSERT INTO frm_notification 2034 VALUES(%s, %s, %s)',
2035 array(
'integer',
'integer',
'integer'),
2036 array($nextId, $user_id, $this->
id));
2053 $statement = $ilDB->manipulateF(
' 2054 DELETE FROM frm_notification 2057 array(
'integer',
'integer'),
2058 array($user_id, $this->
id));
2073 $result = $ilDB->queryf(
'SELECT COUNT(*) cnt FROM frm_notification WHERE user_id = %s AND frm_id = %s',
2074 array(
'integer',
'integer'), array($user_id, $this->
id));
2076 while($record = $ilDB->fetchAssoc(
$result))
2078 return (
bool)$record[
'cnt'];
2097 $nextId = $ilDB->nextId(
'frm_notification');
2098 $statement = $ilDB->manipulateF(
' 2099 INSERT INTO frm_notification 2104 VALUES (%s, %s, %s)',
2105 array(
'integer',
'integer',
'integer'), array($nextId, $user_id, $thread_id));
2124 SELECT COUNT(*) cnt FROM frm_notification 2126 AND thread_id = %s',
2127 array(
'integer',
'integer'),
2128 array($user_id, $thread_id));
2131 while($record = $ilDB->fetchAssoc(
$result))
2133 return (
bool)$record[
'cnt'];
2141 global $ilDB, $ilAccess,
$lng;
2143 include_once
"Services/Mail/classes/class.ilMail.php";
2144 include_once
'./Services/User/classes/class.ilObjUser.php';
2148 SELECT thr_subject FROM frm_threads 2150 array(
'integer'), array($post_data[
'pos_thr_fk']));
2152 while($record = $ilDB->fetchAssoc(
$result))
2154 $post_data[
'thr_subject'] = $record[
'thr_subject'];
2159 $obj_id = self::_lookupObjIdForForumId($post_data[
'pos_top_fk']);
2162 if($post_data[
'pos_usr_id'])
2166 else if(strlen($post_data[
'pos_usr_alias']))
2168 $post_data[
'pos_usr_name'] = $post_data[
'pos_usr_alias'].
' ('.$lng->txt(
'frm_pseudonym').
')';
2171 if($post_data[
'pos_usr_name'] ==
'')
2173 $post_data[
'pos_usr_name'] = $this->lng->txt(
'forums_anonymous');
2177 $res = $ilDB->queryf(
' 2178 SELECT user_id FROM frm_notification 2179 WHERE thread_id = %s 2181 array(
'integer',
'integer'),
2182 array($post_data[
'pos_thr_fk'],
$_SESSION[
'AccountId']));
2189 $userLanguage =
$lng;
2193 $filesOfPost = $fileDataForum->getFilesOfPost();
2195 $attachments = array();
2196 foreach($filesOfPost as $attachment)
2198 $attachments[] = $attachment[
'name'];
2201 $mail_obj =
new ilMail(ANONYMOUS_USER_ID);
2202 while(
$row = $ilDB->fetchAssoc(
$res))
2206 foreach((array)$frm_references as
$ref_id)
2208 if($ilAccess->checkAccessOfUser(
$row[
'user_id'],
'read',
'',
$ref_id))
2217 $this->
setLanguage(self::_getLanguageInstanceByUsrId(
$row[
'user_id']));
2218 $mail_obj->sendMail(
2222 array(), array(
"system")
2235 include_once
"Services/Mail/classes/class.ilMail.php";
2236 include_once
'./Services/User/classes/class.ilObjUser.php';
2240 SELECT thr_subject FROM frm_threads 2243 array($post_data[
'pos_thr_fk']));
2245 while($record = $ilDB->fetchAssoc(
$result))
2247 $post_data[
'thr_subject'] = $record[
'thr_subject'];
2252 $obj_id = self::_lookupObjIdForForumId($post_data[
'pos_top_fk']);
2255 if($post_data[
'pos_usr_id'])
2259 else if(strlen($post_data[
'pos_usr_alias']))
2261 $post_data[
'pos_usr_name'] = $post_data[
'pos_usr_alias'].
' ('.$lng->txt(
'frm_pseudonym').
')';
2264 if($post_data[
'pos_usr_name'] ==
'')
2266 $post_data[
'pos_usr_name'] = $this->lng->txt(
'forums_anonymous');
2270 $res = $ilDB->queryf(
' 2271 SELECT frm_notification.user_id FROM frm_notification, frm_data 2272 WHERE frm_data.top_pk = %s 2273 AND frm_notification.frm_id = frm_data.top_frm_fk 2274 AND frm_notification.user_id <> %s 2275 GROUP BY frm_notification.user_id',
2276 array(
'integer',
'integer'),
2277 array($post_data[
'pos_top_fk'], $ilUser->getId()));
2284 $userLanguage =
$lng;
2288 $filesOfPost = $fileDataForum->getFilesOfPost();
2289 $attachments = array();
2290 foreach($filesOfPost as $attachment)
2292 $attachments[] = $attachment[
'name'];
2295 $mail_obj =
new ilMail(ANONYMOUS_USER_ID);
2296 while(
$row = $ilDB->fetchAssoc(
$res))
2300 foreach((array)$frm_references as
$ref_id)
2302 if($ilAccess->checkAccessOfUser(
$row[
'user_id'],
'read',
'',
$ref_id))
2311 $this->
setLanguage(self::_getLanguageInstanceByUsrId(
$row[
'user_id']));
2312 $mail_obj->sendMail(
2316 array(), array(
"system")
2332 $user_lang = self::_getLanguageInstanceByUsrId($user_id);
2337 $message .= $this->lng->txt(
'forums_post_activation_mail').
"\n\n";
2339 $message .= $this->lng->txt(
"forum").
": ".$post_data[
"top_name"].
"\n\n";
2340 $message .= $this->lng->txt(
"thread").
": ".$post_data[
"thr_subject"].
"\n\n";
2341 $message .= $this->lng->txt(
"new_post").
":\n------------------------------------------------------------\n";
2342 $message .= $this->lng->txt(
"author").
": ".$post_data[
"pos_usr_name"].
"\n";
2343 $message .= $this->lng->txt(
"date").
": ".$post_data[
"pos_date"].
"\n";
2344 $message .= $this->lng->txt(
"subject").
": ".$post_data[
"pos_subject"].
"\n\n";
2345 if ($post_data[
"pos_cens"] == 1)
2347 $message .= $post_data[
"pos_cens_com"].
"\n";
2351 $pos_message = $post_data[
'pos_message'];
2352 if(strip_tags($pos_message) != $pos_message)
2354 $pos_message = preg_replace(
"/\n/i",
"", $pos_message);
2355 $pos_message = preg_replace(
"/<br(\s*)(\/?)>/i",
"\n", $pos_message);
2356 $pos_message = preg_replace(
"/<p([^>]*)>/i",
"\n\n", $pos_message);
2357 $pos_message = preg_replace(
"/<\/p([^>]*)>/i",
'', $pos_message);
2359 $message .= strip_tags($pos_message).
"\n";
2361 $message .=
"------------------------------------------------------------\n";
2363 $message .= sprintf($this->lng->txt(
'forums_notification_show_post'), ILIAS_HTTP_PATH.
"/goto.php?target=frm_".$post_data[
"ref_id"].
"_".$post_data[
"pos_thr_fk"].
"_".$post_data[
"pos_pk"].
'&client_id='.CLIENT_ID).
"\n\n";
2364 $message .= sprintf($this->lng->txt(
'forums_notification_intro'),
2365 $this->
ilias->ini->readVariable(
'client',
'name'),
2366 ILIAS_HTTP_PATH.
'/?client_id='.CLIENT_ID).
"\n\n";
2379 SELECT thr_subject FROM frm_threads 2382 array($post_data[
'pos_thr_fk']));
2384 while($record = $ilDB->fetchAssoc(
$result))
2386 $post_data[
'thr_subject'] = $record[
'thr_subject'];
2391 if($post_data[
'pos_usr_id'])
2395 else if(strlen($post_data[
'pos_usr_alias']))
2397 $post_data[
'pos_usr_name'] = $post_data[
'pos_usr_alias'].
' ('.$lng->txt(
'frm_pseudonym').
')';
2400 if($post_data[
'pos_usr_name'] ==
'')
2402 $post_data[
'pos_usr_name'] = $this->lng->txt(
'forums_anonymous');
2407 $userLanguage =
$lng;
2409 $mail_obj =
new ilMail(ANONYMOUS_USER_ID);
2410 foreach($moderators as $moderator)
2413 $this->
setLanguage(self::_getLanguageInstanceByUsrId($moderator));
2416 $mail_obj->sendMail(
2420 array(), array(
"system")
2435 return $this->lng->txt(
"forums_notification_subject").
' '.$post_data[
'top_name'];
2449 $user_lang = self::_getLanguageInstanceByUsrId($user_id);
2455 $message .= $this->lng->txt(
"forums_notification_subject").
" ".$post_data[
'top_name'].
"\n\n";
2457 $message .= $this->lng->txt(
"forum").
": ".$post_data[
"top_name"].
"\n\n";
2458 $message .= $this->lng->txt(
"thread").
": ".$post_data[
"thr_subject"].
"\n\n";
2459 $message .= $this->lng->txt(
"new_post").
":\n------------------------------------------------------------\n";
2460 $message .= $this->lng->txt(
"author").
": ".$post_data[
"pos_usr_name"].
"\n";
2461 $message .= $this->lng->txt(
"date").
": ".$post_data[
"pos_date"].
"\n";
2462 $message .= $this->lng->txt(
"subject").
": ".$post_data[
"pos_subject"].
"\n\n";
2464 if ($post_data[
"pos_cens"] == 1)
2466 $message .= $post_data[
"pos_cens_com"].
"\n";
2470 $pos_message = $post_data[
'pos_message'];
2471 if(strip_tags($pos_message) != $pos_message)
2473 $pos_message = preg_replace(
"/\n/i",
"", $pos_message);
2474 $pos_message = preg_replace(
"/<br(\s*)(\/?)>/i",
"\n", $pos_message);
2475 $pos_message = preg_replace(
"/<p([^>]*)>/i",
"\n\n", $pos_message);
2476 $pos_message = preg_replace(
"/<\/p([^>]*)>/i",
'', $pos_message);
2478 $message .= strip_tags($pos_message).
"\n";
2480 $message .=
"------------------------------------------------------------\n";
2482 if(count($attachments) > 0)
2484 foreach($attachments as $attachment)
2486 $message .= $this->lng->txt(
'attachment').
": ".$attachment.
"\n";
2488 $message .=
"\n------------------------------------------------------------\n";
2493 $message .= sprintf($this->lng->txt(
"forums_notification_show_post"), $ilIliasIniFile->readVariable(
"server",
"http_path").
"/goto.php?target=frm_".$post_data[
"ref_id"].
"_".$post_data[
"pos_thr_fk"].
"_".$post_data[
"pos_pk"].
'&client_id='.CLIENT_ID).
"\n\n";
2497 $message .= sprintf($this->lng->txt(
"forums_notification_show_post"), ILIAS_HTTP_PATH.
"/goto.php?target=frm_".$post_data[
"ref_id"].
"_".$post_data[
"pos_thr_fk"].
"_".$post_data[
"pos_pk"].
'&client_id='.CLIENT_ID).
"\n\n";
2502 $message .= sprintf($this->lng->txt(
"forums_notification_intro"),
2503 $this->
ilias->ini->readVariable(
"client",
"name"),
2504 $ilIliasIniFile->readVariable(
"server",
"http_path").
'/?client_id='.CLIENT_ID).
"\n\n";
2508 $message .= sprintf($this->lng->txt(
"forums_notification_intro"),
2509 $this->
ilias->ini->readVariable(
"client",
"name"),
2510 ILIAS_HTTP_PATH.
'/?client_id='.CLIENT_ID).
"\n\n";
2525 public static function _getThreads($a_obj_id,$a_sort_mode = self::SORT_DATE)
2529 switch($a_sort_mode)
2531 case self::SORT_DATE:
2535 case self::SORT_TITLE:
2537 $sort =
'thr_subject';
2541 $res = $ilDB->queryf(
' 2542 SELECT * FROM frm_threads 2543 JOIN frm_data ON top_pk = thr_top_fk 2544 WHERE top_frm_fk = %s 2546 array(
'integer',
'text'), array($a_obj_id, $sort));
2548 while(
$row = $ilDB->fetchObject(
$res))
2550 $threads[
$row->thr_pk] =
$row->thr_subject;
2552 return $threads ? $threads : array();
2559 $res = $ilDB->queryf(
' 2560 SELECT top_frm_fk FROM frm_data 2562 array(
'integer'), array($a_for_id));
2564 if ($fdata = $ilDB->fetchAssoc(
$res))
2566 return $fdata[
"top_frm_fk"];
2576 $res2 = $ilDB->queryf(
' 2577 SELECT pos_top_fk, pos_thr_fk, pos_pk FROM frm_posts, frm_data 2578 WHERE pos_top_fk = top_pk 2580 ORDER BY pos_date DESC',
2581 array(
'integer'), array($a_obj_id));
2583 if ($res2->numRows() == 0)
2591 while ($selData = $ilDB->fetchAssoc($res2))
2598 $lastPost_top = $selData[
"pos_top_fk"].
"#".$selData[
"pos_thr_fk"].
"#".$selData[
"pos_pk"];
2603 $ilDB->update(
'frm_data',
2604 array(
'top_last_post' => array(
'text', $lastPost_top)),
2605 array(
'top_frm_fk' => array(
'integer', $a_obj_id))
2619 $source_thread_obj =
new ilForumTopic((
int)$source_id);
2622 if($source_thread_obj->getForumId() != $target_thread_obj->getForumId())
2624 throw new ilException(
'not_allowed_to_merge_into_another_forum');
2627 if($source_thread_obj->getCreateDate() > $target_thread_obj->getCreateDate())
2629 $merge_thread_source = $source_thread_obj;
2630 $merge_thread_target = $target_thread_obj;
2634 $merge_thread_source = $target_thread_obj;
2635 $merge_thread_target = $source_thread_obj;
2638 $thread_subject = $target_thread_obj->getSubject();
2641 $targed_was_closed = $merge_thread_target->isClosed();
2643 $merge_thread_source->close();
2645 if($targed_was_closed ==
false)
2647 $merge_thread_target->close();
2650 $source_all_posts = $merge_thread_source->getAllPosts();
2651 $source_root_node = $merge_thread_source->getFirstPostNode();
2652 $target_root_node = $merge_thread_target->getFirstPostNode();
2654 $add_difference = $target_root_node->getRgt();
2657 include_once
'Modules/Forum/classes/class.ilForumPostsTree.php';
2659 $new_target_rgt = ($target_root_node->getRgt() + $source_root_node->getRgt());
2662 $new_target_root = $target_root_node->getId();
2665 foreach($source_all_posts as $post)
2670 $posts_tree_obj->setPosFk($post->pos_pk);
2672 if($post_obj->getParentId() == 0)
2674 $posts_tree_obj->setParentPos($new_target_root);
2677 $posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference) - 1);
2678 $posts_tree_obj->setLft($target_root_node->getRgt());
2680 $posts_tree_obj->setDepth(($post_obj->getDepth() + 1));
2681 $posts_tree_obj->setSourceThreadId($merge_thread_source->getId());
2683 $posts_tree_obj->setTargetThreadId($merge_thread_target->getId());
2685 $posts_tree_obj->mergeParentPos();
2689 $posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference) - 1);
2690 $posts_tree_obj->setLft(($post_obj->getLft() + $add_difference) - 1);
2692 $posts_tree_obj->setDepth(($post_obj->getDepth() + 1));
2693 $posts_tree_obj->setSourceThreadId($merge_thread_source->getId());
2695 $posts_tree_obj->setParentPos($post_obj->getParentId());
2696 $posts_tree_obj->setTargetThreadId($merge_thread_target->getId());
2698 $posts_tree_obj->merge();
2703 include_once
'Modules/Forum/classes/class.ilForumPost.php';
2707 include_once
'Modules/Forum/classes/class.ilForumNotification.php';
2711 include_once
'./Modules/Forum/classes/class.ilObjForum.php';
2712 ilObjForum::_deleteAccessEntries($merge_thread_source->getId());
2718 $post_date_source = $merge_thread_source->getLastPost()->getCreateDate();
2719 $post_date_target = $merge_thread_target->getLastPost()->getCreateDate();
2721 $target_last_post = $merge_thread_target->getLastPostString();
2722 $exp = explode(
'#', $target_last_post);
2724 if($post_date_source > $post_date_target)
2726 $exp[2] = $merge_thread_source->getLastPost()->getId();
2730 $exp[2] = $merge_thread_target->getLastPost()->getId();
2732 $new_thr_last_post = implode(
'#', $exp);
2734 $num_posts_source = (int)$merge_thread_source->getNumPosts();
2735 $num_visits_source = (int)$merge_thread_source->getVisits();
2736 $num_posts_target = (int)$merge_thread_target->getNumPosts();
2737 $num_visits_target = (int)$merge_thread_source->getVisits();
2740 $frm_topic_obj->setNumPosts(($num_posts_source + $num_posts_target));
2741 $frm_topic_obj->setVisits(($num_visits_source + $num_visits_target));
2742 $frm_topic_obj->setLastPostString($new_thr_last_post);
2743 $frm_topic_obj->setSubject($thread_subject);
2744 $frm_topic_obj->setId($merge_thread_target->getId());
2746 $frm_topic_obj->updateMergedThread();
2752 if(!$targed_was_closed)
2754 $merge_thread_target->reopen();
static _isModerator($a_ref_id, $a_usr_id)
checks whether a user is moderator of a given forum object
static mergeForumUserRead($merge_source_thread_id, $merge_target_thread_id)
setForumId($a_obj_id)
set object id which refers to ILIAS obj_id
static _lookupObjIdForForumId($a_for_id)
Class Forum core functions for forum.
Base class for ILIAS Exception handling.
getOnePost($post)
get one post-dataset
getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static mergeThreads($obj_id, $source_id, $target_id)
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
static getFirstNewsIdForContext($a_context_obj_id, $a_context_obj_type, $a_context_sub_obj_id="", $a_context_sub_obj_type="")
Get first new id of news set related to a certain context.
sendForumNotifications($post_data)
static insertLatexImages($a_text, $a_start="\ex\, $a_end="\\tex\")
replace [text]...[/tex] tags with formula image code
countUserArticles($a_user_id)
get number of articles from given user-ID
getForumRefId()
get forum ref_id public
disableForumNotification($user_id)
Disable a user's notification about new posts in this forum.
postCensorship($message, $pos_pk, $cens=0)
update dataset in frm_posts with censorship info
getMDB2DataType()
get content of additional condition
getPostDepth($a_node_id, $tree_id)
Return depth of an object private.
insertPostNode($a_node_id, $a_parent_id, $tree_id, $a_date='')
insert node under parent node public
static _lookupTitle($a_id)
lookup object title
static updateTargetRootRgt($root_node_id, $rgt)
getFirstPostByThread($a_thread_id)
Get first post of thread.
updateVisits($ID)
update page hits of given forum- or thread-ID public
getUserStatistic($is_moderator=false)
deletePost($post)
delete post and sub-posts
getFirstPostNode($tree_id)
get data of the first node from frm_posts_tree and frm_posts public
generatePost($forum_id, $thread_id, $user, $message, $parent_pos, $notify, $subject='', $alias='', $date='', $status=1, $send_activation_mail=0)
generate new dataset in frm_posts
fetchPostNodeData($a_row)
get data of parent node from frm_posts_tree and frm_posts private
static _getAllReferences($a_id)
get all reference ids of object
enableForumNotification($user_id)
Enable a user's notification about new posts in this forum.
static mergeThreadNotificiations($merge_source_thread_id, $merge_target_thread_id)
static _lookupObjectId($a_ref_id)
lookup object id
setImportName($a_import_name)
setDbTable($dbTable)
set database table
fetchAssoc($a_set)
Fetch row as associative array from result set.
sendPostActivationNotification($post_data)
__deletePostFiles($a_ids)
static getInstance($a_obj_id=0)
setMDB2WhereCondition($query_string, $data_type, $data_value)
set content for additional condition
getModeratorFromPost($pos_pk)
get one post-dataset
getOneThread()
get one thread-dataset by WhereCondition
prepareText($text, $edit=0, $quote_user='', $type='')
prepares given string public
enableThreadNotification($user_id, $thread_id)
Enable a user's notification about new posts in a thread.
Class Mail this class handles base functions for mail handling.
static updateLastPostByObjId($a_obj_id)
setLimit($a_limit, $a_offset=0)
Set limit and offset for a query.
getOrderField()
get name of orderField
getModerators()
get all users assigned to local role il_frm_moderator_<frm_ref_id>
__formatMessage($thread_data, $post_data=array(), $user_obj)
generates the notificiation message, if a post has been answered
static formatDate(ilDateTime $date)
Format a date public.
formatNotification($post_data, $cron=0, $attachments=array(), $user_id)
static getSalutation($a_usr_id, $a_language=null)
Get salutation.
redirection script todo: (a better solution should control the processing via a xml file) ...
_lookupLogin($a_user_id)
lookup login
deletePostTree($a_node)
delete node and the whole subtree under this node public
isForumNotificationEnabled($user_id)
Check whether a user's notification about new posts in this forum is enabled (result > 0) or not (res...
convertDate($date)
converts the date format
static _getThreads($a_obj_id, $a_sort_mode=self::SORT_DATE)
Get thread infos of object.
getOneTopic()
get one topic-dataset by WhereCondition
countActiveUserArticles($a_user_id)
getMDB2Query()
get content of additional condition
formatNotificationSubject($post_data)
addPostTree($a_tree_id, $a_node_id=-1, $a_date='')
create a new post-tree
formatPostActivationNotification($post_data, $user_id)
isThreadNotificationEnabled($user_id, $thread_id)
Check whether a user's notification about new posts in a thread is enabled (result > 0) or not (resul...
const FORUM_OVERVIEW_WITH_NEW_POSTS
static _replaceMediaObjectImageSrc($a_text, $a_direction=0)
replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
static mergePosts($source_thread_id, $target_thread_id)
moveThreads($thread_ids=array(), $src_ref_id=0, $dest_top_frm_fk=0)
Moves all chosen threads and their posts to a new forum.
while($lm_rec=$ilDB->fetchAssoc($lm_set)) $data
static _lookupLanguage($a_usr_id)
static deleteByThreadId($thr_id)
setPageHits($pageHits)
set number of max.
This class handles all operations on files for the forum object.
sendThreadNotifications($post_data)
_lookupPostMessage($a_id)
getDbTable()
get name of database table
static _getLanguageInstanceByUsrId($usr_id)
Get the ilLanguage instance for the passed user id.
getMDB2DataValue()
/* get content of additional condition
getPageHits()
get number of max.
setForumRefId($a_ref_id)
set reference id which refers to ILIAS obj_id
__sendMessage($a_parent_pos, $post_data=array())
_getModerators($a_ref_id)
get all users assigned to local role il_frm_moderator_<frm_ref_id> (static)
static _getInstallationSignature()
Static getter for the installation signature.
setOrderField($orderField)
set database field for sorting results
__construct()
Constructor public.
generateThread($forum_id, $user, $subject, $message, $notify, $notify_posts, $alias='', $date='', $status=1)
generate new dataset in frm_threads
getPostNode($post_id)
get data of given node from frm_posts_tree and frm_posts public