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_display_user_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;
446 public function generatePost($forum_id, $thread_id, $author_id, $display_user_id, $message, $parent_pos, $notify, $subject =
'', $alias =
'', $date =
'', $status = 1, $send_activation_mail = 0)
451 $objNewPost->setForumId($forum_id);
452 $objNewPost->setThreadId($thread_id);
453 $objNewPost->setSubject($subject);
454 $objNewPost->setMessage($message);
455 $objNewPost->setDisplayUserId($display_user_id);
456 $objNewPost->setUserAlias($alias);
457 $objNewPost->setPosAuthorId($author_id);
460 $objNewPost->setIsAuthorModerator($is_moderator);
464 $objNewPost->setCreateDate(date(
"Y-m-d H:i:s"));
468 if (strpos($date,
"-") > 0)
470 $objNewPost->setCreateDate($date);
474 $objNewPost->setCreateDate(date(
"Y-m-d H:i:s", $date));
479 $objNewPost->setNotification($notify);
480 $objNewPost->setStatus($status);
481 $objNewPost->insert();
484 if ($parent_pos == 0)
486 $this->
addPostTree($objNewPost->getThreadId(), $objNewPost->getId(), $objNewPost->getCreateDate());
490 $this->
insertPostNode($objNewPost->getId(), $parent_pos, $objNewPost->getThreadId(), $objNewPost->getCreateDate());
495 $lastPost = $objNewPost->getForumId().
"#".$objNewPost->getThreadId().
"#".$objNewPost->getId();
500 SET thr_num_posts = thr_num_posts + 1, 503 array(
'text',
'integer'),
504 array($lastPost, $objNewPost->getThreadId()));
509 SET top_num_posts = top_num_posts + 1, 512 array(
'text',
'integer'),
513 array($lastPost, $objNewPost->getForumId()));
517 $forum_obj->markPostRead($objNewPost->getPosAuthorId(), $objNewPost->getThreadId(), $objNewPost->getId());
519 $pos_data = $objNewPost->getDataAsArray();
524 if (!$status && $send_activation_mail)
526 $pos_data[
"top_name"] = $forum_obj->getTitle();
533 require_once
'Services/RTE/classes/class.ilRTE.php';
534 include_once(
"./Services/News/classes/class.ilNewsItem.php");
536 $news_item->setContext($forum_obj->getId(),
'frm', $objNewPost->getId(),
'pos');
538 $news_item->setTitle($objNewPost->getSubject());
540 $news_item->setUserId($display_user_id);
542 $news_item->create();
545 return $objNewPost->getId();
562 public function generateThread($forum_id, $author_id, $display_user_id, $subject, $message, $notify, $notify_posts, $alias =
'', $date =
'', $status = 1)
567 $objNewThread->setForumId($forum_id);
568 $objNewThread->setDisplayUserId($display_user_id);
569 $objNewThread->setSubject($subject);
570 $objNewThread->setThrAuthorId($author_id);
574 $objNewThread->setCreateDate(date(
"Y-m-d H:i:s"));
578 if (strpos($date,
"-") > 0)
580 $objNewThread->setCreateDate($date);
584 $objNewThread->setCreateDate(date(
"Y-m-d H:i:s", $date));
588 $objNewThread->setUserAlias($alias);
589 $objNewThread->insert();
591 if ($notify_posts == 1)
593 $objNewThread->enableNotification($author_id);
597 $statement = $ilDB->manipulateF(
' 599 SET top_num_threads = top_num_threads + 1 601 array(
'integer'), array($forum_id));
603 return $this->
generatePost($forum_id, $objNewThread->getId(), $author_id, $display_user_id, $message, 0, $notify, $subject, $alias, $objNewThread->getCreateDate(), $status, 0);
614 public function moveThreads($thread_ids = array(), $src_ref_id = 0, $dest_top_frm_fk = 0)
620 if (is_numeric($src_top_frm_fk) && $src_top_frm_fk > 0 && is_numeric($dest_top_frm_fk) && $dest_top_frm_fk > 0)
631 if ($oldFrmData[
'top_pk'] && $newFrmData[
'top_pk'])
636 foreach ($thread_ids as
$id)
640 $numPosts = $objTmpThread->movePosts($src_top_frm_fk, $oldFrmData[
'top_pk'], $dest_top_frm_fk, $newFrmData[
'top_pk']);
641 if (($last_post_string = $objTmpThread->getLastPostString()) !=
'')
643 $last_post_string = explode(
'#', $last_post_string);
644 $last_post_string[0] = $newFrmData[
'top_pk'];
645 $last_post_string = implode(
'#', $last_post_string);
646 $objTmpThread->setLastPostString($last_post_string);
649 $visits += $objTmpThread->getVisits();
651 $moved_posts += $numPosts;
654 $objTmpThread->setForumId($newFrmData[
'top_pk']);
655 $objTmpThread->update();
657 unset($objTmpThread);
662 $res = $ilDB->queryf(
' 663 SELECT pos_thr_fk, pos_pk 665 WHERE pos_top_fk = %s 666 ORDER BY pos_date DESC',
667 array(
'integer'), array($oldFrmData[
'top_pk']));
670 $last_post_src = $oldFrmData[
'top_pk'] .
'#' .
$row->pos_thr_fk .
'#' .
$row->pos_pk;
672 $statement = $ilDB->manipulateF(
' 674 SET top_num_posts = top_num_posts - %s, 675 top_num_threads = top_num_threads - %s, 676 visits = visits - %s, 679 array(
'integer',
'integer',
'integer',
'text',
'integer'),
684 $oldFrmData[
'top_pk']));
689 $res = $ilDB->queryf(
' 690 SELECT pos_thr_fk, pos_pk 692 WHERE pos_top_fk = %s 693 ORDER BY pos_date DESC',
694 array(
'integer'), array($newFrmData[
'top_kp']));
697 $last_post_dest = $newFrmData[
'top_pk'] .
'#' .
$row->pos_thr_fk .
'#' .
$row->pos_pk;
699 $statement = $ilDB->manipulateF(
' 701 SET top_num_posts = top_num_posts + %s, 702 top_num_threads = top_num_threads + %s, 703 visits = visits + %s, 706 array(
'integer',
'integer',
'integer',
'text',
'integer'),
707 array($moved_posts, $moved_threads, $visits, $last_post_dest, $newFrmData[
'top_pk']));
741 $statement = $ilDB->manipulateF(
' 743 SET pos_cens_com = %s, 748 array(
'text',
'timestamp',
'integer',
'integer',
'integer'),
749 array($message, date(
"Y-m-d H:i:s"), $cens,
$_SESSION[
'AccountId'], $pos_pk));
752 include_once(
"./Services/News/classes/class.ilNewsItem.php");
754 "frm", $pos_pk,
"pos");
761 $news_item->setContent(nl2br($this->
prepareText($message, 0)));
762 $news_item->update();
767 $res = $ilDB->queryf(
' 768 SELECT * FROM frm_posts 770 array(
'integer'), array($pos_pk));
772 $rec = $ilDB->fetchAssoc(
$res);
776 $news_item->setContent(nl2br($this->
prepareText($rec[
"pos_message"], 0)));
777 $news_item->update();
794 include_once
"./Modules/Forum/classes/class.ilObjForum.php";
802 foreach($del_id as $post_id)
804 ilObjForum::_deleteReadEntries($post_id);
810 $dead_pos = count($del_id);
814 if ($p_node[
"parent"] == 0)
817 include_once
'./Modules/Forum/classes/class.ilObjForum.php';
819 ilObjForum::_deleteAccessEntries($p_node[
'tree']);
822 $dead_thr = $p_node[
"tree"];
824 $statement = $ilDB->manipulateF(
' 825 DELETE FROM frm_threads 827 array(
'integer'), array($p_node[
'tree']));
830 $statement = $ilDB->manipulateF(
' 832 SET top_num_threads = top_num_threads - 1 833 WHERE top_frm_fk = %s',
834 array(
'integer'), array($this->
id));
837 $posset = $ilDB->queryf(
' 838 SELECT * FROM frm_posts 839 WHERE pos_thr_fk = %s',
840 array(
'integer'), array($p_node[
'tree']));
842 while ($posrec = $ilDB->fetchAssoc($posset))
844 include_once(
"./Services/News/classes/class.ilNewsItem.php");
846 "frm", $posrec[
"pos_pk"],
"pos");
850 $news_item->delete();
855 include_once
'Services/MediaObjects/classes/class.ilObjMediaObject.php';
857 foreach(
$mobs as $mob)
874 $statement = $ilDB->manipulateF(
' 875 DELETE FROM frm_posts 876 WHERE pos_thr_fk = %s',
877 array(
'integer'), array($p_node[
'tree']));
884 for ($i = 0; $i < $dead_pos; $i++)
886 $statement = $ilDB->manipulateF(
' 887 DELETE FROM frm_posts 889 array(
'integer'), array($del_id[$i]));
892 include_once(
"./Services/News/classes/class.ilNewsItem.php");
894 "frm", $del_id[$i],
"pos");
898 $news_item->delete();
903 include_once
'Services/MediaObjects/classes/class.ilObjMediaObject.php';
905 foreach(
$mobs as $mob)
921 $statement = $ilDB->manipulateF(
' 923 SET thr_num_posts = thr_num_posts - %s 925 array(
'integer',
'integer'),
926 array($dead_pos, $p_node[
'tree']));
930 $res1 = $ilDB->queryf(
' 931 SELECT * FROM frm_posts 932 WHERE pos_thr_fk = %s 933 ORDER BY pos_date DESC',
934 array(
'integer'), array($p_node[
'tree']));
936 if ($res1->numRows() == 0)
944 while ($selData = $ilDB->fetchAssoc($res1))
951 $lastPost_thr = $selData[
"pos_top_fk"].
"#".$selData[
"pos_thr_fk"].
"#".$selData[
"pos_pk"];
956 $statement = $ilDB->manipulateF(
' 958 SET thr_last_post = %s 960 array(
'text',
'integer'), array($lastPost_thr, $p_node[
'tree']));
964 $statement = $ilDB->manipulateF(
' 966 SET top_num_posts = top_num_posts - %s 967 WHERE top_frm_fk = %s',
968 array(
'integer',
'integer'), array($dead_pos, $this->
id));
972 $res2 = $ilDB->queryf(
' 973 SELECT * FROM frm_posts, frm_data 974 WHERE pos_top_fk = top_pk 976 ORDER BY pos_date DESC',
977 array(
'integer'), array($this->
id));
979 if ($res2->numRows() == 0)
987 while ($selData = $ilDB->fetchAssoc($res2))
994 $lastPost_top = $selData[
"pos_top_fk"].
"#".$selData[
"pos_thr_fk"].
"#".$selData[
"pos_pk"];
999 $statement = $ilDB->manipulateF(
' 1001 SET top_last_post = %s 1002 WHERE top_frm_fk = %s',
1003 array(
'text',
'integer'), array($lastPost_top, $this->
id));
1015 public function getAllThreads($a_topic_id, array $params = array(), $limit = 0, $offset = 0)
1024 $frm_overview_setting = (int)$ilSetting::_lookupValue(
'frma',
'forum_overview');
1027 $excluded_ids_condition =
'';
1028 if(isset($params[
'excluded_ids']) && is_array($params[
'excluded_ids']) && $params[
'excluded_ids'])
1030 $excluded_ids_condition =
' AND ' . $ilDB->in(
'thr_pk', $params[
'excluded_ids'],
true,
'integer').
' ';
1033 if(!in_array(strtolower($params[
'order_column']), array(
'lp_date',
'rating')))
1035 $params[
'order_column'] =
'post_date';
1037 if(!in_array(strtolower($params[
'order_direction']), array(
'asc',
'desc')))
1039 $params[
'order_direction'] =
'desc';
1043 $query =
"SELECT COUNT(thr_pk) cnt 1045 WHERE thr_top_fk = %s {$excluded_ids_condition}";
1046 $res = $ilDB->queryF(
$query, array(
'integer'), array($a_topic_id));
1048 $cnt = (int)
$data[
'cnt'];
1053 $data_types = array();
1056 $active_inner_query =
'';
1057 $is_post_activation_enabled = $frm_props->isPostActivationEnabled();
1058 if($is_post_activation_enabled && !$params[
'is_moderator'])
1060 $active_query =
' AND (pos_status = %s OR pos_author_id = %s) ';
1061 $active_inner_query =
' AND (ipos.pos_status = %s OR ipos.pos_author_id = %s) ';
1064 $optional_fields =
'';
1065 if($frm_props->isIsThreadRatingEnabled())
1067 $optional_fields =
',avg_rating';
1069 if($frm_props->getThreadSorting() == 1)
1071 $optional_fields =
',thread_sorting';
1074 $additional_sort =
'';
1075 if($frm_props->getThreadSorting())
1077 $additional_sort .=
' ,thread_sorting ASC ';
1080 $dynamic_columns = array(
1081 ' ,post_date ' . $params[
'order_direction']
1083 if($frm_props->isIsThreadRatingEnabled())
1085 $dynamic_columns[] =
' ,avg_rating ' . $params[
'order_direction'];
1087 if(
'rating' == strtolower($params[
'order_column']))
1089 $dynamic_columns = array_reverse($dynamic_columns);
1091 $additional_sort .= implode(
' ', $dynamic_columns);
1093 if(!$ilUser->isAnonymous())
1096 (CASE WHEN COUNT(DISTINCT(notification_id)) > 0 THEN 1 ELSE 0 END) usr_notification_is_enabled, 1097 MAX(pos_date) post_date, 1098 COUNT(DISTINCT(pos_pk)) num_posts, 1099 COUNT(DISTINCT(pos_pk)) - COUNT(DISTINCT(postread.post_id)) num_unread_posts, ";
1105 (SELECT COUNT(DISTINCT(ipos.pos_pk)) 1107 LEFT JOIN frm_user_read iread ON iread.post_id = ipos.pos_pk AND iread.usr_id = %s 1108 LEFT JOIN frm_thread_access iacc ON (iacc.thread_id = ipos.pos_thr_fk AND iacc.usr_id = %s) 1109 WHERE ipos.pos_thr_fk = thr_pk 1111 AND (ipos.pos_update > iacc.access_old_ts 1113 (iacc.access_old IS NULL AND (ipos.pos_update > " . $ilDB->quote(date(
'Y-m-d H:i:s', NEW_DEADLINE),
'timestamp') .
")) 1116 AND ipos.pos_author_id != %s 1117 AND iread.usr_id IS NULL $active_inner_query 1121 $query .=
" thr_pk, thr_top_fk, thr_subject, thr_author_id, thr_display_user_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1125 LEFT JOIN frm_notification 1126 ON frm_notification.thread_id = thr_pk 1127 AND frm_notification.user_id = %s 1130 ON pos_thr_fk = thr_pk $active_query 1132 LEFT JOIN frm_user_read postread 1133 ON postread.post_id = pos_pk 1134 AND postread.usr_id = %s";
1136 $query .=
" WHERE thr_top_fk = %s 1137 {$excluded_ids_condition} 1138 GROUP BY thr_pk, thr_top_fk, thr_subject, thr_author_id, thr_display_user_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1140 ORDER BY is_sticky DESC {$additional_sort}, thr_date DESC";
1146 $data_types[] =
'integer';
1147 $data_types[] =
'integer';
1148 $data_types[] =
'integer';
1149 if($is_post_activation_enabled && !$params[
'is_moderator'])
1151 array_push($data_types,
'integer',
'integer');
1154 $data_types[] =
'integer';
1155 if($is_post_activation_enabled && !$params[
'is_moderator'])
1157 array_push($data_types,
'integer',
'integer');
1159 $data_types[] =
'integer';
1160 $data_types[] =
'integer';
1165 $data[] = $ilUser->getId();
1166 $data[] = $ilUser->getId();
1167 $data[] = $ilUser->getId();
1168 if($is_post_activation_enabled && !$params[
'is_moderator'])
1170 array_push(
$data,
'1', $ilUser->getId());
1173 $data[] = $ilUser->getId();
1174 if($is_post_activation_enabled && !$params[
'is_moderator'])
1176 array_push($data,
'1', $ilUser->getId());
1178 $data[] = $ilUser->getId();
1179 $data[] = $a_topic_id;
1184 0 usr_notification_is_enabled, 1185 MAX(pos_date) post_date, 1186 COUNT(DISTINCT(pos_pk)) num_posts, 1187 COUNT(DISTINCT(pos_pk)) num_unread_posts, 1188 COUNT(DISTINCT(pos_pk)) num_new_posts, 1189 thr_pk, thr_top_fk, thr_subject, thr_author_id, thr_display_user_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1194 ON pos_thr_fk = thr_pk $active_query";
1196 $query .=
" WHERE thr_top_fk = %s 1197 {$excluded_ids_condition} 1198 GROUP BY thr_pk, thr_top_fk, thr_subject, thr_author_id, thr_display_user_id, thr_usr_alias, thr_num_posts, thr_last_post, thr_date, thr_update, visits, frm_threads.import_name, is_sticky, is_closed 1200 ORDER BY is_sticky DESC {$additional_sort}, thr_date DESC";
1202 if($is_post_activation_enabled && !$params[
'is_moderator'])
1204 array_push($data_types,
'integer',
'integer');
1206 $data_types[] =
'integer';
1207 if($is_post_activation_enabled && !$params[
'is_moderator'])
1209 array_push(
$data,
'1', $ilUser->getId());
1211 $data[] = $a_topic_id;
1214 if($limit || $offset)
1216 $ilDB->setLimit($limit, $offset);
1219 while(
$row = $ilDB->fetchAssoc(
$res))
1222 $thread->assignData(
$row);
1223 $threads[] = $thread;
1227 'items' => $threads,
1236 $statistic = array();
1238 $data_types = array();
1241 $query =
"SELECT COUNT(f.pos_display_user_id) ranking, u.login, p.value, u.lastname, u.firstname 1243 INNER JOIN frm_posts_tree t 1244 ON f.pos_pk = t.pos_fk 1245 INNER JOIN frm_threads th 1246 ON t.thr_fk = th.thr_pk 1247 INNER JOIN usr_data u 1248 ON u.usr_id = f.pos_display_user_id 1249 INNER JOIN frm_data d 1250 ON d.top_pk = f.pos_top_fk 1251 LEFT JOIN usr_pref p 1252 ON p.usr_id = u.usr_id AND p.keyword = %s 1255 array_push($data_types,
'text');
1256 array_push(
$data,
'public_profile');
1260 $query .=
' AND (pos_status = %s 1262 AND pos_author_id = %s ))';
1264 array_push($data_types,
'integer',
'integer',
'integer');
1265 array_push(
$data,
'1',
'0', $ilUser->getId());
1268 $query .=
' AND d.top_frm_fk = %s 1269 GROUP BY pos_display_user_id, u.login, p.value,u.lastname, u.firstname';
1271 array_push($data_types,
'integer');
1279 while (
$row = $ilDB->fetchAssoc(
$res))
1281 $statistic[$counter][] =
$row[
'ranking'];
1282 $statistic[$counter][] =
$row[
'login'];
1286 if(!$ilUser->isAnonymous() && in_array(
$row[
'value'], array(
'y',
'g')) ||
1287 $ilUser->isAnonymous() &&
'g' ==
$row[
'value'])
1289 $lastname =
$row[
'lastname'];
1290 $firstname =
$row[
'firstname'];
1293 $statistic[$counter][] = $lastname;
1294 $statistic[$counter][] = $firstname;
1299 return is_array($statistic) ? $statistic : array();
1314 $res = $ilDB->queryf(
' 1315 SELECT * FROM frm_posts_tree 1317 AND parent_pos = %s',
1318 array(
'integer',
'integer'), array($a_thread_id,
'0'));
1322 return $row->pos_fk ?
$row->pos_fk : 0;
1349 $role_arr = $rbacreview->getRolesOfRoleFolder($a_ref_id);
1351 foreach ($role_arr as $role_id)
1355 if ($title ==
"il_frm_moderator_".$a_ref_id)
1357 #return $rbacreview->assignedUsers($roleObj->getId()); 1358 return $title = $rbacreview->assignedUsers($role_id);
1389 $res = $ilDB->queryf(
' 1390 SELECT * FROM frm_data 1391 INNER JOIN frm_posts ON pos_top_fk = top_pk 1392 WHERE top_frm_fk = %s 1393 AND pos_author_id = %s',
1394 array(
'integer',
'integer'),
1397 return $res->numRows();
1404 $res = $ilDB->queryf(
' 1405 SELECT * FROM frm_data 1406 INNER JOIN frm_posts ON pos_top_fk = top_pk 1407 WHERE top_frm_fk = %s 1408 AND (pos_status = %s 1410 AND pos_author_id = %s 1413 AND pos_author_id = %s',
1414 array(
'integer',
'integer',
'integer',
'integer',
'integer'),
1415 array($this->
getForumId(),
'1',
'0', $ilUser->getId(), $a_user_id));
1417 return $res->numRows();
1438 public function addPostTree($a_tree_id, $a_node_id = -1, $a_date =
'')
1442 $a_date = $a_date ? $a_date : date(
"Y-m-d H:i:s");
1444 if ($a_node_id <= 0)
1446 $a_node_id = $a_tree_id;
1449 $nextId = $ilDB->nextId(
'frm_posts_tree');
1451 $statement = $ilDB->manipulateF(
' 1452 INSERT INTO frm_posts_tree 1462 VALUES(%s, %s, %s, %s, %s, %s, %s, %s )',
1463 array(
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'timestamp'),
1464 array($nextId, $a_tree_id, $a_node_id,
'0',
'1',
'2',
'1', $a_date));
1480 $a_date = $a_date ? $a_date : date(
"Y-m-d H:i:s");
1483 $sql_res = $ilDB->queryf(
' 1484 SELECT * FROM frm_posts_tree 1487 array(
'integer',
'integer'),
1488 array($a_parent_id, $tree_id));
1490 $res = $ilDB->fetchObject($sql_res);
1498 $statement = $ilDB->manipulateF(
' 1499 UPDATE frm_posts_tree 1511 array(
'integer',
'integer',
'integer'),
1512 array($left, $left, $tree_id));
1514 $depth = $this->
getPostDepth($a_parent_id, $tree_id) + 1;
1517 $nextId = $ilDB->nextId(
'frm_posts_tree');
1518 $statement = $ilDB->manipulateF(
' 1519 INSERT INTO frm_posts_tree 1529 VALUES(%s,%s,%s, %s, %s, %s,%s, %s)',
1530 array(
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'integer',
'timestamp'),
1556 $sql_res = $ilDB->queryf(
' 1557 SELECT depth FROM frm_posts_tree 1560 array(
'integer',
'integer'),
1561 array($a_node_id, $tree_id));
1563 $res = $ilDB->fetchObject($sql_res);
1583 $res = $ilDB->queryf(
' 1584 SELECT * FROM frm_posts, frm_posts_tree 1585 WHERE pos_pk = pos_fk 1588 array(
'integer',
'integer'),
1589 array(
'0', $tree_id));
1606 $res = $ilDB->queryf(
' 1607 SELECT * FROM frm_posts, frm_posts_tree 1608 WHERE pos_pk = pos_fk 1628 require_once(
'./Services/User/classes/class.ilObjUser.php');
1632 $tmp_user =
new ilObjUser($a_row->pos_display_user_id);
1633 $fullname = $tmp_user->getFullname();
1634 $loginname = $tmp_user->getLogin();
1637 $fullname = $fullname ? $fullname : ($a_row->import_name ? $a_row->import_name : $lng->txt(
"unknown"));
1640 "pos_pk" => $a_row->pos_pk,
1641 "child" => $a_row->pos_pk,
1642 "author" => $a_row->pos_display_user_id,
1643 "alias" => $a_row->pos_usr_alias,
1644 "title" => $fullname,
1645 "loginname" => $loginname,
1647 "message" => $a_row->pos_message,
1648 "subject" => $a_row->pos_subject,
1649 "pos_cens_com" => $a_row->pos_cens_com,
1650 "pos_cens" => $a_row->pos_cens,
1652 "date" => $a_row->fpt_date,
1653 "create_date" => $a_row->pos_date,
1654 "update" => $a_row->pos_update,
1655 "update_user" => $a_row->update_user,
1656 "tree" => $a_row->thr_fk,
1657 "parent" => $a_row->parent_pos,
1658 "lft" => $a_row->lft,
1659 "rgt" => $a_row->rgt,
1660 "depth" => $a_row->depth,
1661 "id" => $a_row->fpt_pk,
1662 "notify" => $a_row->notify,
1663 "import_name" => $a_row->import_name,
1664 "pos_status" => $a_row->pos_status
1684 $res = $ilDB->queryf(
' 1685 SELECT * FROM frm_posts_tree 1688 AND parent_pos = %s',
1689 array(
'integer',
'integer',
'integer'),
1690 array($a_node[
'tree'], $a_node[
'pos_pk'], $a_node[
'parent']));
1692 while(
$row = $ilDB->fetchObject(
$res))
1694 $a_node[
"lft"] =
$row->lft;
1695 $a_node[
"rgt"] =
$row->rgt;
1698 $diff = $a_node[
"rgt"] - $a_node[
"lft"] + 1;
1702 SELECT * FROM frm_posts_tree 1703 WHERE lft BETWEEN %s AND %s 1705 array(
'integer',
'integer',
'integer'),
1706 array($a_node[
'lft'], $a_node[
'rgt'], $a_node[
'tree']));
1710 while ($treeData = $ilDB->fetchAssoc(
$result))
1712 $del_id[] = $treeData[
"pos_fk"];
1716 $statement = $ilDB->manipulateF(
' 1717 DELETE FROM frm_posts_tree 1718 WHERE lft BETWEEN %s AND %s 1720 array(
'integer',
'integer',
'integer'),
1721 array($a_node[
'lft'], $a_node[
'rgt'], $a_node[
'tree']));
1725 $statement = $ilDB->manipulateF(
' 1726 UPDATE frm_posts_tree 1738 array(
'integer',
'integer',
'integer',
'integer',
'integer'),
1739 array($a_node[
'lft'], $diff, $a_node[
'lft'], $diff, $a_node[
'tree']));
1755 $checkTime = time() - (60*60);
1757 if (
$_SESSION[
"frm_visit_".$this->dbTable.
"_".$ID] < $checkTime)
1760 $_SESSION[
"frm_visit_".$this->dbTable.
"_".$ID] = time();
1761 $query =
'UPDATE '.$this->dbTable.
' SET visits = visits + 1 WHERE ';
1763 $data_type = array();
1764 $data_value = array();
1772 $res = $ilDB->queryf(
$query, $data_type, $data_value);
1784 public function prepareText($text, $edit=0, $quote_user =
'', $type =
'')
1788 if($type ==
'export')
1790 $this->replQuote1 =
"<blockquote class=\"quote\"><hr size=\"1\" color=\"#000000\">";
1791 $this->replQuote2 =
"<hr size=\"1\" color=\"#000000\"/></blockquote>";
1797 $lname = ($quote_user !=
"")
1798 ?
'="'.$quote_user.
'"' 1801 $text =
"[quote$lname]".$text.
"[/quote]";
1806 $startZ = substr_count ($text,
"[quote");
1807 $endZ = substr_count ($text,
"[/quote]");
1809 if ($startZ > 0 || $endZ > 0)
1812 if ($startZ > $endZ)
1814 $diff = $startZ - $endZ;
1816 for ($i = 0; $i < $diff; $i++)
1819 else $text .=
"[/quote]";
1822 elseif ($startZ < $endZ)
1824 $diff = $endZ - $startZ;
1826 for ($i = 0; $i < $diff; $i++)
1828 if ($type ==
'export') $text = $this->txtQuote1.$text;
1829 else $text =
"[quote]".$text;
1835 $ws=
"[ \t\r\f\v\n]*";
1837 $text = eregi_replace(
"\[(quote$ws=$ws\"([^\"]*)\"$ws)\]",
1838 $this->replQuote1.
'<div class="ilForumQuoteHead">'.$lng->txt(
"quote").
" (\\2)".
'</div>', $text);
1840 $text = str_replace(
"[quote]",
1841 $this->replQuote1.
'<div class="ilForumQuoteHead">'.$lng->txt(
"quote").
'</div>', $text);
1843 $text = str_replace(
"[/quote]", $this->replQuote2, $text);
1848 if($type !=
'export')
1859 $text = str_replace(
"{",
"{", $text);
1860 $text = str_replace(
"}",
"}", $text);
1877 $res = $ilDB->queryf(
' 1878 SELECT frm_data.* FROM frm_data, frm_posts 1880 AND pos_top_fk = top_pk',
1881 array(
'integer'), array($pos_pk));
1891 if(!is_array($a_ids))
1895 include_once
"./Modules/Forum/classes/class.ilFileDataForum.php";
1898 foreach($a_ids as $pos_id)
1900 $tmp_file_obj->setPosId($pos_id);
1901 $files = $tmp_file_obj->getFilesOfPost();
1902 foreach($files as
$file)
1904 $tmp_file_obj->unlinkFile($file[
"name"]);
1907 unset($tmp_file_obj);
1916 $parent_data = $this->
getOnePost($a_parent_pos);
1919 if($parent_data[
"notify"] && $parent_data[
"pos_author_id"] != $ilUser->getId())
1922 include_once
"Services/Mail/classes/class.ilMail.php";
1923 include_once
'./Services/User/classes/class.ilObjUser.php';
1925 $tmp_user =&
new ilObjUser($parent_data[
"pos_author_id"]);
1932 $tmp_mail_obj =
new ilMail(ANONYMOUS_USER_ID);
1933 $message = $tmp_mail_obj->sendMail($tmp_user->getLogin(),
"",
"",
1936 array(),array(
"system"));
1939 unset($tmp_mail_obj);
1953 include_once
"./Services/Object/classes/class.ilObjectFactory.php";
1954 $user_lang = self::_getLanguageInstanceByUsrId($user_obj->getId());
1957 $title = $frm_obj->getTitle();
1964 $message .= $this->lng->txt(
"forum_post_replied");
1965 $message .= $this->lng->txt(
"forum").
": ".$title.
" -> ".$thread_data[
"thr_subject"].
"\n\n";
1967 $message .=
"\n------------------------------------------------------------\n";
1968 $message .= $post_data[
"pos_message"];
1969 $message .=
"\n------------------------------------------------------------\n";
1970 $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";
1978 return $this->import_name;
1982 $this->import_name = $a_import_name;
1999 $res = $ilDB->queryf(
' 2000 SELECT frm_notification.thread_id FROM frm_data, frm_notification, frm_threads 2001 WHERE frm_notification.user_id = %s 2002 AND frm_notification.thread_id = frm_threads.thr_pk 2003 AND frm_threads.thr_top_fk = frm_data.top_pk 2004 AND frm_data.top_frm_fk = %s 2005 GROUP BY frm_notification.thread_id',
2006 array(
'integer',
'integer'),
2007 array($user_id, $this->
id));
2009 if (is_object(
$res) &&
$res->numRows() > 0)
2011 $thread_data = array();
2012 $thread_data_types = array();
2014 $query =
' DELETE FROM frm_notification 2016 AND thread_id IN (';
2018 array_push($thread_data, $user_id);
2019 array_push($thread_data_types,
'integer');
2023 while(
$row = $ilDB->fetchAssoc(
$res))
2025 if($counter < $res->numRows())
2028 array_push($thread_data,
$row[
'thread_id']);
2029 array_push($thread_data_types,
'integer');
2032 if($counter ==
$res->numRows())
2035 array_push($thread_data,
$row[
'thread_id']);
2036 array_push($thread_data_types,
'integer');
2042 $statement = $ilDB->manipulateF(
$query, $thread_data_types, $thread_data);
2047 $nextId = $ilDB->nextId(
'frm_notification');
2049 $statement = $ilDB->manipulateF(
' 2050 INSERT INTO frm_notification 2055 VALUES(%s, %s, %s)',
2056 array(
'integer',
'integer',
'integer'),
2057 array($nextId, $user_id, $this->
id));
2074 $statement = $ilDB->manipulateF(
' 2075 DELETE FROM frm_notification 2078 array(
'integer',
'integer'),
2079 array($user_id, $this->
id));
2094 $result = $ilDB->queryf(
'SELECT COUNT(*) cnt FROM frm_notification WHERE user_id = %s AND frm_id = %s',
2095 array(
'integer',
'integer'), array($user_id, $this->
id));
2097 while($record = $ilDB->fetchAssoc(
$result))
2099 return (
bool)$record[
'cnt'];
2118 $nextId = $ilDB->nextId(
'frm_notification');
2119 $statement = $ilDB->manipulateF(
' 2120 INSERT INTO frm_notification 2125 VALUES (%s, %s, %s)',
2126 array(
'integer',
'integer',
'integer'), array($nextId, $user_id, $thread_id));
2145 SELECT COUNT(*) cnt FROM frm_notification 2147 AND thread_id = %s',
2148 array(
'integer',
'integer'),
2149 array($user_id, $thread_id));
2152 while($record = $ilDB->fetchAssoc(
$result))
2154 return (
bool)$record[
'cnt'];
2164 include_once
"Services/Mail/classes/class.ilMail.php";
2165 include_once
'./Services/User/classes/class.ilObjUser.php';
2169 SELECT thr_subject FROM frm_threads 2171 array(
'integer'), array($post_data[
'pos_thr_fk']));
2173 while($record = $ilDB->fetchAssoc(
$result))
2175 $post_data[
'thr_subject'] = $record[
'thr_subject'];
2180 $obj_id = self::_lookupObjIdForForumId($post_data[
'pos_top_fk']);
2183 if($post_data[
'pos_display_user_id'])
2187 else if(strlen($post_data[
'pos_usr_alias']))
2189 $post_data[
'pos_usr_name'] = $post_data[
'pos_usr_alias'].
' ('.$lng->txt(
'frm_pseudonym').
')';
2192 if($post_data[
'pos_usr_name'] ==
'')
2194 $post_data[
'pos_usr_name'] = $this->lng->txt(
'forums_anonymous');
2198 $res = $ilDB->queryf(
' 2199 SELECT user_id FROM frm_notification 2200 WHERE thread_id = %s 2202 array(
'integer',
'integer'),
2203 array($post_data[
'pos_thr_fk'],
$_SESSION[
'AccountId']));
2210 $userLanguage =
$lng;
2214 $filesOfPost = $fileDataForum->getFilesOfPost();
2216 $attachments = array();
2217 foreach($filesOfPost as $attachment)
2219 $attachments[] = $attachment[
'name'];
2222 $mail_obj =
new ilMail(ANONYMOUS_USER_ID);
2223 while(
$row = $ilDB->fetchAssoc(
$res))
2227 foreach((array)$frm_references as
$ref_id)
2229 if($ilAccess->checkAccessOfUser(
$row[
'user_id'],
'read',
'',
$ref_id))
2238 $this->
setLanguage(self::_getLanguageInstanceByUsrId(
$row[
'user_id']));
2239 $mail_obj->sendMail(
2243 array(), array(
"system")
2256 include_once
"Services/Mail/classes/class.ilMail.php";
2257 include_once
'./Services/User/classes/class.ilObjUser.php';
2261 SELECT thr_subject FROM frm_threads 2264 array($post_data[
'pos_thr_fk']));
2266 while($record = $ilDB->fetchAssoc(
$result))
2268 $post_data[
'thr_subject'] = $record[
'thr_subject'];
2273 $obj_id = self::_lookupObjIdForForumId($post_data[
'pos_top_fk']);
2276 if($post_data[
'pos_display_user_id'])
2280 else if(strlen($post_data[
'pos_usr_alias']))
2282 $post_data[
'pos_usr_name'] = $post_data[
'pos_usr_alias'].
' ('.$lng->txt(
'frm_pseudonym').
')';
2285 if($post_data[
'pos_usr_name'] ==
'')
2287 $post_data[
'pos_usr_name'] = $this->lng->txt(
'forums_anonymous');
2291 $res = $ilDB->queryf(
' 2292 SELECT frm_notification.user_id FROM frm_notification, frm_data 2293 WHERE frm_data.top_pk = %s 2294 AND frm_notification.frm_id = frm_data.top_frm_fk 2295 AND frm_notification.user_id <> %s 2296 GROUP BY frm_notification.user_id',
2297 array(
'integer',
'integer'),
2298 array($post_data[
'pos_top_fk'], $ilUser->getId()));
2305 $userLanguage =
$lng;
2309 $filesOfPost = $fileDataForum->getFilesOfPost();
2310 $attachments = array();
2311 foreach($filesOfPost as $attachment)
2313 $attachments[] = $attachment[
'name'];
2316 $mail_obj =
new ilMail(ANONYMOUS_USER_ID);
2317 while(
$row = $ilDB->fetchAssoc(
$res))
2321 foreach((array)$frm_references as
$ref_id)
2323 if($ilAccess->checkAccessOfUser(
$row[
'user_id'],
'read',
'',
$ref_id))
2332 $this->
setLanguage(self::_getLanguageInstanceByUsrId(
$row[
'user_id']));
2333 $mail_obj->sendMail(
2337 array(), array(
"system")
2353 $user_lang = self::_getLanguageInstanceByUsrId($user_id);
2358 $message .= $this->lng->txt(
'forums_post_activation_mail').
"\n\n";
2360 $message .= $this->lng->txt(
"forum").
": ".$post_data[
"top_name"].
"\n\n";
2361 $message .= $this->lng->txt(
"thread").
": ".$post_data[
"thr_subject"].
"\n\n";
2362 $message .= $this->lng->txt(
"new_post").
":\n------------------------------------------------------------\n";
2363 $message .= $this->lng->txt(
"author").
": ".$post_data[
"pos_usr_name"].
"\n";
2364 $message .= $this->lng->txt(
"date").
": ".$post_data[
"pos_date"].
"\n";
2365 $message .= $this->lng->txt(
"subject").
": ".$post_data[
"pos_subject"].
"\n\n";
2366 if ($post_data[
"pos_cens"] == 1)
2368 $message .= $post_data[
"pos_cens_com"].
"\n";
2372 $pos_message = $post_data[
'pos_message'];
2373 if(strip_tags($pos_message) != $pos_message)
2375 $pos_message = preg_replace(
"/\n/i",
"", $pos_message);
2376 $pos_message = preg_replace(
"/<br(\s*)(\/?)>/i",
"\n", $pos_message);
2377 $pos_message = preg_replace(
"/<p([^>]*)>/i",
"\n\n", $pos_message);
2378 $pos_message = preg_replace(
"/<\/p([^>]*)>/i",
'', $pos_message);
2380 $message .= strip_tags($pos_message).
"\n";
2382 $message .=
"------------------------------------------------------------\n";
2384 $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";
2385 $message .= sprintf($this->lng->txt(
'forums_notification_intro'),
2386 $this->
ilias->ini->readVariable(
'client',
'name'),
2387 ILIAS_HTTP_PATH.
'/?client_id='.CLIENT_ID).
"\n\n";
2400 SELECT thr_subject FROM frm_threads 2403 array($post_data[
'pos_thr_fk']));
2405 while($record = $ilDB->fetchAssoc(
$result))
2407 $post_data[
'thr_subject'] = $record[
'thr_subject'];
2412 if($post_data[
'pos_display_user_id'])
2416 else if(strlen($post_data[
'pos_usr_alias']))
2418 $post_data[
'pos_usr_name'] = $post_data[
'pos_usr_alias'].
' ('.$lng->txt(
'frm_pseudonym').
')';
2421 if($post_data[
'pos_usr_name'] ==
'')
2423 $post_data[
'pos_usr_name'] = $this->lng->txt(
'forums_anonymous');
2428 $userLanguage =
$lng;
2430 $mail_obj =
new ilMail(ANONYMOUS_USER_ID);
2431 foreach($moderators as $moderator)
2434 $this->
setLanguage(self::_getLanguageInstanceByUsrId($moderator));
2437 $mail_obj->sendMail(
2441 array(), array(
"system")
2456 return $this->lng->txt(
"forums_notification_subject").
' '.$post_data[
'top_name'];
2470 $user_lang = self::_getLanguageInstanceByUsrId($user_id);
2476 $message .= $this->lng->txt(
"forums_notification_subject").
" ".$post_data[
'top_name'].
"\n\n";
2478 $message .= $this->lng->txt(
"forum").
": ".$post_data[
"top_name"].
"\n\n";
2479 $message .= $this->lng->txt(
"thread").
": ".$post_data[
"thr_subject"].
"\n\n";
2480 $message .= $this->lng->txt(
"new_post").
":\n------------------------------------------------------------\n";
2481 $message .= $this->lng->txt(
"author").
": ".$post_data[
"pos_usr_name"].
"\n";
2482 $message .= $this->lng->txt(
"date").
": ".$post_data[
"pos_date"].
"\n";
2483 $message .= $this->lng->txt(
"subject").
": ".$post_data[
"pos_subject"].
"\n\n";
2485 if ($post_data[
"pos_cens"] == 1)
2487 $message .= $post_data[
"pos_cens_com"].
"\n";
2491 $pos_message = $post_data[
'pos_message'];
2492 if(strip_tags($pos_message) != $pos_message)
2494 $pos_message = preg_replace(
"/\n/i",
"", $pos_message);
2495 $pos_message = preg_replace(
"/<br(\s*)(\/?)>/i",
"\n", $pos_message);
2496 $pos_message = preg_replace(
"/<p([^>]*)>/i",
"\n\n", $pos_message);
2497 $pos_message = preg_replace(
"/<\/p([^>]*)>/i",
'', $pos_message);
2499 $message .= strip_tags($pos_message).
"\n";
2501 $message .=
"------------------------------------------------------------\n";
2503 if(count($attachments) > 0)
2505 foreach($attachments as $attachment)
2507 $message .= $this->lng->txt(
'attachment').
": ".$attachment.
"\n";
2509 $message .=
"\n------------------------------------------------------------\n";
2514 $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";
2518 $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";
2523 $message .= sprintf($this->lng->txt(
"forums_notification_intro"),
2524 $this->
ilias->ini->readVariable(
"client",
"name"),
2525 $ilIliasIniFile->readVariable(
"server",
"http_path").
'/?client_id='.CLIENT_ID).
"\n\n";
2529 $message .= sprintf($this->lng->txt(
"forums_notification_intro"),
2530 $this->
ilias->ini->readVariable(
"client",
"name"),
2531 ILIAS_HTTP_PATH.
'/?client_id='.CLIENT_ID).
"\n\n";
2546 public static function _getThreads($a_obj_id,$a_sort_mode = self::SORT_DATE)
2550 switch($a_sort_mode)
2552 case self::SORT_DATE:
2556 case self::SORT_TITLE:
2558 $sort =
'thr_subject';
2562 $res = $ilDB->queryf(
' 2563 SELECT * FROM frm_threads 2564 JOIN frm_data ON top_pk = thr_top_fk 2565 WHERE top_frm_fk = %s 2567 array(
'integer',
'text'), array($a_obj_id, $sort));
2569 while(
$row = $ilDB->fetchObject(
$res))
2571 $threads[
$row->thr_pk] =
$row->thr_subject;
2573 return $threads ? $threads : array();
2580 $res = $ilDB->queryf(
' 2581 SELECT top_frm_fk FROM frm_data 2583 array(
'integer'), array($a_for_id));
2585 if ($fdata = $ilDB->fetchAssoc(
$res))
2587 return $fdata[
"top_frm_fk"];
2597 $res2 = $ilDB->queryf(
' 2598 SELECT pos_top_fk, pos_thr_fk, pos_pk FROM frm_posts, frm_data 2599 WHERE pos_top_fk = top_pk 2601 ORDER BY pos_date DESC',
2602 array(
'integer'), array($a_obj_id));
2604 if ($res2->numRows() == 0)
2612 while ($selData = $ilDB->fetchAssoc($res2))
2619 $lastPost_top = $selData[
"pos_top_fk"].
"#".$selData[
"pos_thr_fk"].
"#".$selData[
"pos_pk"];
2624 $ilDB->update(
'frm_data',
2625 array(
'top_last_post' => array(
'text', $lastPost_top)),
2626 array(
'top_frm_fk' => array(
'integer', $a_obj_id))
2640 $source_thread_obj =
new ilForumTopic((
int)$source_id);
2643 if($source_thread_obj->getForumId() != $target_thread_obj->getForumId())
2645 throw new ilException(
'not_allowed_to_merge_into_another_forum');
2648 if($source_thread_obj->getCreateDate() > $target_thread_obj->getCreateDate())
2650 $merge_thread_source = $source_thread_obj;
2651 $merge_thread_target = $target_thread_obj;
2655 $merge_thread_source = $target_thread_obj;
2656 $merge_thread_target = $source_thread_obj;
2659 $thread_subject = $target_thread_obj->getSubject();
2662 $targed_was_closed = $merge_thread_target->isClosed();
2664 $merge_thread_source->close();
2666 if($targed_was_closed ==
false)
2668 $merge_thread_target->close();
2671 $source_all_posts = $merge_thread_source->getAllPosts();
2672 $source_root_node = $merge_thread_source->getFirstPostNode();
2673 $target_root_node = $merge_thread_target->getFirstPostNode();
2675 $add_difference = $target_root_node->getRgt();
2678 include_once
'Modules/Forum/classes/class.ilForumPostsTree.php';
2680 $new_target_rgt = ($target_root_node->getRgt() + $source_root_node->getRgt());
2683 $new_target_root = $target_root_node->getId();
2686 foreach($source_all_posts as $post)
2691 $posts_tree_obj->setPosFk($post->pos_pk);
2693 if($post_obj->getParentId() == 0)
2695 $posts_tree_obj->setParentPos($new_target_root);
2698 $posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference) - 1);
2699 $posts_tree_obj->setLft($target_root_node->getRgt());
2701 $posts_tree_obj->setDepth(($post_obj->getDepth() + 1));
2702 $posts_tree_obj->setSourceThreadId($merge_thread_source->getId());
2704 $posts_tree_obj->setTargetThreadId($merge_thread_target->getId());
2706 $posts_tree_obj->mergeParentPos();
2710 $posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference) - 1);
2711 $posts_tree_obj->setLft(($post_obj->getLft() + $add_difference) - 1);
2713 $posts_tree_obj->setDepth(($post_obj->getDepth() + 1));
2714 $posts_tree_obj->setSourceThreadId($merge_thread_source->getId());
2716 $posts_tree_obj->setParentPos($post_obj->getParentId());
2717 $posts_tree_obj->setTargetThreadId($merge_thread_target->getId());
2719 $posts_tree_obj->merge();
2724 include_once
'Modules/Forum/classes/class.ilForumPost.php';
2728 include_once
'Modules/Forum/classes/class.ilForumNotification.php';
2732 include_once
'./Modules/Forum/classes/class.ilObjForum.php';
2733 ilObjForum::_deleteAccessEntries($merge_thread_source->getId());
2739 $post_date_source = $merge_thread_source->getLastPost()->getCreateDate();
2740 $post_date_target = $merge_thread_target->getLastPost()->getCreateDate();
2742 $target_last_post = $merge_thread_target->getLastPostString();
2743 $exp = explode(
'#', $target_last_post);
2745 if($post_date_source > $post_date_target)
2747 $exp[2] = $merge_thread_source->getLastPost()->getId();
2751 $exp[2] = $merge_thread_target->getLastPost()->getId();
2753 $new_thr_last_post = implode(
'#', $exp);
2755 $num_posts_source = (int)$merge_thread_source->getNumPosts();
2756 $num_visits_source = (int)$merge_thread_source->getVisits();
2757 $num_posts_target = (int)$merge_thread_target->getNumPosts();
2758 $num_visits_target = (int)$merge_thread_source->getVisits();
2761 $frm_topic_obj->setNumPosts(($num_posts_source + $num_posts_target));
2762 $frm_topic_obj->setVisits(($num_visits_source + $num_visits_target));
2763 $frm_topic_obj->setLastPostString($new_thr_last_post);
2764 $frm_topic_obj->setSubject($thread_subject);
2765 $frm_topic_obj->setId($merge_thread_target->getId());
2767 $frm_topic_obj->updateMergedThread();
2773 if(!$targed_was_closed)
2775 $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
generateThread($forum_id, $author_id, $display_user_id, $subject, $message, $notify, $notify_posts, $alias='', $date='', $status=1)
generate new dataset in frm_threads
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
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
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
sendPostActivationNotification($post_data)
__deletePostFiles($a_ids)
static getInstance($a_obj_id=0)
generatePost($forum_id, $thread_id, $author_id, $display_user_id, $message, $parent_pos, $notify, $subject='', $alias='', $date='', $status=1, $send_activation_mail=0)
generate new dataset in frm_posts
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)
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 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.
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.
getPostNode($post_id)
get data of given node from frm_posts_tree and frm_posts public