ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilForum Class Reference

Class Forum core functions for forum. More...

+ Collaboration diagram for ilForum:

Public Member Functions

 __construct ()
 Constructor public.
 setLanguage ($lng)
 setForumId ($a_obj_id)
 set object id which refers to ILIAS obj_id
 setForumRefId ($a_ref_id)
 set reference id which refers to ILIAS obj_id
 getForumId ()
 //
 getForumRefId ()
 get forum ref_id public
 getOrderField ()
 get name of orderField
 setDbTable ($dbTable)
 set database table
 getDbTable ()
 get name of database table
 setMDB2WhereCondition ($query_string, $data_type, $data_value)
 set content for additional condition
 getMDB2Query ()
 get content of additional condition
 getMDB2DataValue ()
 /* get content of additional condition
 getMDB2DataType ()
 get content of additional condition
 setPageHits ($pageHits)
 set number of max.
 getPageHits ()
 get number of max.
 getOneTopic ()
 get one topic-dataset by WhereCondition
 getOneThread ()
 get one thread-dataset by WhereCondition
 getOnePost ($post)
 get one post-dataset
 _lookupPostMessage ($a_id)
 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
 generateThread ($forum_id, $user, $subject, $message, $notify, $notify_posts, $alias= '', $date= '', $status=1)
 generate new dataset in frm_threads
 moveThreads ($thread_ids=array(), $src_ref_id=0, $dest_top_frm_fk=0)
 Moves all chosen threads and their posts to a new forum.
 postCensorship ($message, $pos_pk, $cens=0)
 update dataset in frm_posts with censorship info
 deletePost ($post)
 delete post and sub-posts
 getUserStatistic ($is_moderator=false)
 getFirstPostByThread ($a_thread_id)
 Get first post of thread.
 getModerators ()
 get all users assigned to local role il_frm_moderator_<frm_ref_id>
 _getModerators ($a_ref_id)
 get all users assigned to local role il_frm_moderator_<frm_ref_id> (static)
 countUserArticles ($a_user_id)
 get number of articles from given user-ID
 countActiveUserArticles ($a_user_id)
 convertDate ($date)
 converts the date format
 addPostTree ($a_tree_id, $a_node_id=-1, $a_date= '')
 create a new post-tree
 insertPostNode ($a_node_id, $a_parent_id, $tree_id, $a_date= '')
 insert node under parent node public
 getPostDepth ($a_node_id, $tree_id)
 Return depth of an object private.
 getFirstPostNode ($tree_id)
 get data of the first node from frm_posts_tree and frm_posts public
 getPostNode ($post_id)
 get data of given node from frm_posts_tree and frm_posts public
 fetchPostNodeData ($a_row)
 get data of parent node from frm_posts_tree and frm_posts private
 deletePostTree ($a_node)
 delete node and the whole subtree under this node public
 updateVisits ($ID)
 update page hits of given forum- or thread-ID public
 prepareText ($text, $edit=0, $quote_user= '', $type= '')
 prepares given string public
 getModeratorFromPost ($pos_pk)
 get one post-dataset
 __deletePostFiles ($a_ids)
 __sendMessage ($a_parent_pos, $post_data=array())
 getImportName ()
 setImportName ($a_import_name)
 enableForumNotification ($user_id)
 Enable a user's notification about new posts in this forum.
 disableForumNotification ($user_id)
 Disable a user's notification about new posts in this forum.
 isForumNotificationEnabled ($user_id)
 Check whether a user's notification about new posts in this forum is enabled (result > 0) or not (result == 0)
 enableThreadNotification ($user_id, $thread_id)
 Enable a user's notification about new posts in a thread.
 isThreadNotificationEnabled ($user_id, $thread_id)
 Check whether a user's notification about new posts in a thread is enabled (result > 0) or not (result == 0)
 sendThreadNotifications ($post_data)
 sendForumNotifications ($post_data)
 sendPostActivationNotification ($post_data)
 formatNotificationSubject ($post_data)
 formatNotification ($post_data, $cron=0, $attachments=array(), $user_id)

Static Public Member Functions

static _getLanguageInstanceByUsrId ($usr_id)
 Get the ilLanguage instance for the passed user id.
static _isModerator ($a_ref_id, $a_usr_id)
 checks whether a user is moderator of a given forum object
static _getThreads ($a_obj_id, $a_sort_mode=self::SORT_DATE)
 Get thread infos of object.
static _lookupObjIdForForumId ($a_for_id)
static updateLastPostByObjId ($a_obj_id)
static mergeThreads ($obj_id, $source_id, $target_id)

Data Fields

const SORT_TITLE = 1
const SORT_DATE = 2
 $ilias
 $lng

Private Member Functions

 setOrderField ($orderField)
 set database field for sorting results
 __formatMessage ($thread_data, $post_data=array(), $user_obj)
 generates the notificiation message, if a post has been answered
 formatPostActivationNotification ($post_data, $user_id)

Private Attributes

 $dbTable
 $className = "ilForum"
 $orderField
 $mdb2Query
 $mdb2DataValue
 $mdb2DataType
 $txtQuote1 = "[quote]"
 $txtQuote2 = "[/quote]"
 $replQuote1 = '<blockquote class="ilForumQuote">'
 $replQuote2 = '</blockquote>'
 $pageHits = 30
 $id

Detailed Description

Class Forum core functions for forum.

Author
Wolfgang Merkens wmerk.nosp@m.ens@.nosp@m.datab.nosp@m.ay.d.nosp@m.e
Version
Id:
class.ilForum.php 54497 2014-10-23 07:24:00Z nkrzywon

Definition at line 18 of file class.ilForum.php.

Constructor & Destructor Documentation

ilForum::__construct ( )

Constructor public.

Definition at line 73 of file class.ilForum.php.

References $ilias, and $lng.

{
global $ilias,$lng;
$this->ilias = $ilias;
$this->lng = $lng;
}

Member Function Documentation

ilForum::__deletePostFiles (   $a_ids)

Definition at line 1868 of file class.ilForum.php.

References $file, and getForumId().

Referenced by deletePost().

{
if(!is_array($a_ids))
{
return false;
}
include_once "./Modules/Forum/classes/class.ilFileDataForum.php";
$tmp_file_obj =& new ilFileDataForum($this->getForumId());
foreach($a_ids as $pos_id)
{
$tmp_file_obj->setPosId($pos_id);
$files = $tmp_file_obj->getFilesOfPost();
foreach($files as $file)
{
$tmp_file_obj->unlinkFile($file["name"]);
}
}
unset($tmp_file_obj);
return true;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::__formatMessage (   $thread_data,
  $post_data = array(),
  $user_obj 
)
private

generates the notificiation message, if a post has been answered

Parameters
array$thread_data
array$post_data
object$user_objilObjUser
Returns
string

Definition at line 1930 of file class.ilForum.php.

References ilMail\_getInstallationSignature(), _getLanguageInstanceByUsrId(), getForumRefId(), ilObjectFactory\getInstanceByRefId(), and ilMail\getSalutation().

Referenced by __sendMessage().

{
include_once "./Services/Object/classes/class.ilObjectFactory.php";
$user_lang = self::_getLanguageInstanceByUsrId($user_obj->getId());
$title = $frm_obj->getTitle();
unset($frm_obj);
$message = '';
$message .= ilMail::getSalutation($user_obj->getId(), $user_lang);
$message .= "\n\n";
$message .= $this->lng->txt("forum_post_replied");
$message .= $this->lng->txt("forum").": ".$title." -> ".$thread_data["thr_subject"]."\n\n";
$message .= "\n------------------------------------------------------------\n";
$message .= $post_data["pos_message"];
$message .= "\n------------------------------------------------------------\n";
$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";
return $message;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::__sendMessage (   $a_parent_pos,
  $post_data = array() 
)

Definition at line 1891 of file class.ilForum.php.

References $ilUser, __formatMessage(), formatNotificationSubject(), getOnePost(), getOneThread(), and setMDB2WhereCondition().

{
global $ilUser, $ilDB;
$parent_data = $this->getOnePost($a_parent_pos);
// only if the current user is not the owner of the parent post and the parent's notification flag is set...
if($parent_data["notify"] && $parent_data["pos_usr_id"] != $ilUser->getId())
{
// SEND MESSAGE
include_once "Services/Mail/classes/class.ilMail.php";
include_once './Services/User/classes/class.ilObjUser.php';
$tmp_user =& new ilObjUser($parent_data["pos_usr_id"]);
// NONSENSE
$this->setMDB2WhereCondition('thr_pk = %s ', array('integer'), array($parent_data["pos_thr_fk"]));
$thread_data = $this->getOneThread();
$tmp_mail_obj = new ilMail(ANONYMOUS_USER_ID);
$message = $tmp_mail_obj->sendMail($tmp_user->getLogin(),"","",
$this->formatNotificationSubject($post_data),
$this->__formatMessage($thread_data, $post_data, $tmp_user),
array(),array("system"));
unset($tmp_user);
unset($tmp_mail_obj);
}
}

+ Here is the call graph for this function:

static ilForum::_getLanguageInstanceByUsrId (   $usr_id)
static

Get the ilLanguage instance for the passed user id.

Parameters
integer$usr_ida user id
Returns
ilLanguage public

Definition at line 96 of file class.ilForum.php.

References $usr_id, and ilObjUser\_lookupLanguage().

Referenced by __formatMessage(), formatNotification(), formatPostActivationNotification(), and ilForumCronNotification\sendMails().

{
static $lngCache = array();
$languageShorthandle = ilObjUser::_lookupLanguage($usr_id);
// lookup in cache array
if(!isset($lngCache[$languageShorthandle]))
{
$lngCache[$languageShorthandle] = new ilLanguage($languageShorthandle);
$lngCache[$languageShorthandle]->loadLanguageModule('forum');
}
return $lngCache[$languageShorthandle];
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::_getModerators (   $a_ref_id)

get all users assigned to local role il_frm_moderator_<frm_ref_id> (static)

Parameters
int$a_ref_idreference id
Returns
array user_ids public

Definition at line 1323 of file class.ilForum.php.

References ilObject\_lookupTitle().

Referenced by _isModerator(), and getModerators().

{
global $rbacreview;
$rolf = $rbacreview->getRoleFolderOfObject($a_ref_id);
$role_arr = $rbacreview->getRolesOfRoleFolder($rolf["ref_id"]);
foreach ($role_arr as $role_id)
{
//$roleObj = $this->ilias->obj_factory->getInstanceByObjId($role_id);
$title = ilObject::_lookupTitle($role_id);
if ($title == "il_frm_moderator_".$a_ref_id)
{
#return $rbacreview->assignedUsers($roleObj->getId());
return $title = $rbacreview->assignedUsers($role_id);
}
}
return array();
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static ilForum::_getThreads (   $a_obj_id,
  $a_sort_mode = self::SORT_DATE 
)
static

Get thread infos of object.

public

Parameters
intobj_id of forum
intsort mode SORT_TITLE or SORT_DATE

Definition at line 2525 of file class.ilForum.php.

References $res, and $row.

Referenced by ilObjForumGUI\cloneWizardPageObject().

{
global $ilDB;
switch($a_sort_mode)
{
case self::SORT_DATE:
$sort = 'thr_date';
break;
case self::SORT_TITLE:
default:
$sort = 'thr_subject';
break;
}
$res = $ilDB->queryf('
SELECT * FROM frm_threads
JOIN frm_data ON top_pk = thr_top_fk
WHERE top_frm_fk = %s
ORDER BY %s',
array('integer', 'text'), array($a_obj_id, $sort));
while($row = $ilDB->fetchObject($res))
{
$threads[$row->thr_pk] = $row->thr_subject;
}
return $threads ? $threads : array();
}

+ Here is the caller graph for this function:

static ilForum::_isModerator (   $a_ref_id,
  $a_usr_id 
)
static

checks whether a user is moderator of a given forum object

Parameters
int$a_ref_idreference id
int$a_usr_iduser id
Returns
bool public

Definition at line 1352 of file class.ilForum.php.

References _getModerators().

{
return in_array($a_usr_id, ilForum::_getModerators($a_ref_id));
}

+ Here is the call graph for this function:

static ilForum::_lookupObjIdForForumId (   $a_for_id)
static

Definition at line 2555 of file class.ilForum.php.

References $res.

Referenced by ilObjMediaObject\getParentObjectIdForUsage(), ilObjForumGUI\mergeThreadsObject(), ilForumTopic\movePosts(), sendForumNotifications(), and sendThreadNotifications().

{
global $ilDB;
$res = $ilDB->queryf('
SELECT top_frm_fk FROM frm_data
WHERE top_pk = %s',
array('integer'), array($a_for_id));
if ($fdata = $ilDB->fetchAssoc($res))
{
return $fdata["top_frm_fk"];
}
return false;
}

+ Here is the caller graph for this function:

ilForum::_lookupPostMessage (   $a_id)

Definition at line 416 of file class.ilForum.php.

References $res, and $row.

{
global $ilDB;
$res = $ilDB->queryf('
SELECT * FROM frm_posts WHERE pos_pk = %s',
array('integer'), array($a_id));
while($row = $ilDB->fetchObject($res))
{
return $row->pos_message;
}
return '';
}
ilForum::addPostTree (   $a_tree_id,
  $a_node_id = -1,
  $a_date = '' 
)

create a new post-tree

Parameters
integera_tree_id: id where tree belongs to
integera_node_id: root node of tree (optional; default is tree_id itself)
Returns
boolean true on success public

Definition at line 1417 of file class.ilForum.php.

Referenced by generatePost().

{
global $ilDB;
$a_date = $a_date ? $a_date : date("Y-m-d H:i:s");
if ($a_node_id <= 0)
{
$a_node_id = $a_tree_id;
}
$nextId = $ilDB->nextId('frm_posts_tree');
$statement = $ilDB->manipulateF('
INSERT INTO frm_posts_tree
( fpt_pk,
thr_fk,
pos_fk,
parent_pos,
lft,
rgt,
depth,
fpt_date
)
VALUES(%s, %s, %s, %s, %s, %s, %s, %s )',
array('integer','integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'timestamp'),
array($nextId, $a_tree_id, $a_node_id, '0', '1', '2', '1', $a_date));
return true;
}

+ Here is the caller graph for this function:

ilForum::convertDate (   $date)

converts the date format

Parameters
string$date
Returns
string formatted datetime public

Definition at line 1405 of file class.ilForum.php.

References ilDatePresentation\formatDate(), and IL_CAL_DATETIME.

Referenced by getOnePost().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::countActiveUserArticles (   $a_user_id)

Definition at line 1379 of file class.ilForum.php.

References $ilUser, $res, and getForumId().

{
global $ilDB, $ilUser;
$res = $ilDB->queryf('
SELECT * FROM frm_data
INNER JOIN frm_posts ON pos_top_fk = top_pk
WHERE top_frm_fk = %s
AND (pos_status = %s
OR (pos_status = %s
AND pos_usr_id = %s
)
)
AND pos_usr_id = %s',
array('integer', 'integer', 'integer', 'integer', 'integer'),
array($this->getForumId(),'1', '0', $ilUser->getId(), $a_user_id));
return $res->numRows();
}

+ Here is the call graph for this function:

ilForum::countUserArticles (   $a_user_id)

get number of articles from given user-ID

Parameters
integer$user,:user-ID
Returns
integer public

Definition at line 1364 of file class.ilForum.php.

References $res, and getForumId().

{
global $ilDB;
$res = $ilDB->queryf('
SELECT * FROM frm_data
INNER JOIN frm_posts ON pos_top_fk = top_pk
WHERE top_frm_fk = %s
AND pos_usr_id = %s',
array('integer', 'integer'),
array($this->getForumId(), $a_user_id));
return $res->numRows();
}

+ Here is the call graph for this function:

ilForum::deletePost (   $post)

delete post and sub-posts

Parameters
integer$post,:ID public
Returns
integer 0 or thread-ID

Definition at line 781 of file class.ilForum.php.

References $mobs, __deletePostFiles(), ilObjMediaObject\_exists(), ilObjMediaObject\_getMobsOfObject(), ilObjMediaObject\_removeUsage(), deletePostTree(), ilNewsItem\getFirstNewsIdForContext(), and getPostNode().

{
global $ilDB;
include_once "./Modules/Forum/classes/class.ilObjForum.php";
// delete tree and get id's of all posts to delete
$p_node = $this->getPostNode($post);
$del_id = $this->deletePostTree($p_node);
// Delete User read entries
foreach($del_id as $post_id)
{
ilObjForum::_deleteReadEntries($post_id);
}
// DELETE ATTACHMENTS ASSIGNED TO POST
$this->__deletePostFiles($del_id);
$dead_pos = count($del_id);
$dead_thr = 0;
// if deletePost is thread opener ...
if ($p_node["parent"] == 0)
{
// delete thread access data
include_once './Modules/Forum/classes/class.ilObjForum.php';
ilObjForum::_deleteAccessEntries($p_node['tree']);
// delete thread
$dead_thr = $p_node["tree"];
$statement = $ilDB->manipulateF('
DELETE FROM frm_threads
WHERE thr_pk = %s',
array('integer'), array($p_node['tree']));
// update num_threads
$statement = $ilDB->manipulateF('
UPDATE frm_data
SET top_num_threads = top_num_threads - 1
WHERE top_frm_fk = %s',
array('integer'), array($this->id));
// delete all related news
$posset = $ilDB->queryf('
SELECT * FROM frm_posts
WHERE pos_thr_fk = %s',
array('integer'), array($p_node['tree']));
while ($posrec = $ilDB->fetchAssoc($posset))
{
include_once("./Services/News/classes/class.ilNewsItem.php");
"frm", $posrec["pos_pk"], "pos");
if ($news_id > 0)
{
$news_item = new ilNewsItem($news_id);
$news_item->delete();
}
try
{
include_once 'Services/MediaObjects/classes/class.ilObjMediaObject.php';
$mobs = ilObjMediaObject::_getMobsOfObject('frm:html', $posrec['pos_pk']);
foreach($mobs as $mob)
{
{
ilObjMediaObject::_removeUsage($mob, 'frm:html', $posrec['pos_pk']);
$mob_obj = new ilObjMediaObject($mob);
$mob_obj->delete();
}
}
}
catch(Exception $e)
{
}
}
// delete all posts of this thread
$statement = $ilDB->manipulateF('
DELETE FROM frm_posts
WHERE pos_thr_fk = %s',
array('integer'), array($p_node['tree']));
}
else
{
// delete this post and its sub-posts
for ($i = 0; $i < $dead_pos; $i++)
{
$statement = $ilDB->manipulateF('
DELETE FROM frm_posts
WHERE pos_pk = %s',
array('integer'), array($del_id[$i]));
// delete related news item
include_once("./Services/News/classes/class.ilNewsItem.php");
"frm", $del_id[$i], "pos");
if ($news_id > 0)
{
$news_item = new ilNewsItem($news_id);
$news_item->delete();
}
try
{
include_once 'Services/MediaObjects/classes/class.ilObjMediaObject.php';
$mobs = ilObjMediaObject::_getMobsOfObject('frm:html', $del_id[$i]);
foreach($mobs as $mob)
{
{
ilObjMediaObject::_removeUsage($mob, 'frm:html', $del_id[$i]);
$mob_obj = new ilObjMediaObject($mob);
$mob_obj->delete();
}
}
}
catch(Exception $e)
{
}
}
// update num_posts in frm_threads
$statement = $ilDB->manipulateF('
UPDATE frm_threads
SET thr_num_posts = thr_num_posts - %s
WHERE thr_pk = %s',
array('integer', 'integer'),
array($dead_pos, $p_node['tree']));
// get latest post of thread and update last_post
$res1 = $ilDB->queryf('
SELECT * FROM frm_posts
WHERE pos_thr_fk = %s
ORDER BY pos_date DESC',
array('integer'), array($p_node['tree']));
if ($res1->numRows() == 0)
{
$lastPost_thr = "";
}
else
{
$z = 0;
while ($selData = $ilDB->fetchAssoc($res1))
{
if ($z > 0)
{
break;
}
$lastPost_thr = $selData["pos_top_fk"]."#".$selData["pos_thr_fk"]."#".$selData["pos_pk"];
$z ++;
}
}
$statement = $ilDB->manipulateF('
UPDATE frm_threads
SET thr_last_post = %s
WHERE thr_pk = %s',
array('text', 'integer'), array($lastPost_thr, $p_node['tree']));
}
// update num_posts in frm_data
$statement = $ilDB->manipulateF('
UPDATE frm_data
SET top_num_posts = top_num_posts - %s
WHERE top_frm_fk = %s',
array('integer', 'integer'), array($dead_pos, $this->id));
// get latest post of forum and update last_post
$res2 = $ilDB->queryf('
SELECT * FROM frm_posts, frm_data
WHERE pos_top_fk = top_pk
AND top_frm_fk = %s
ORDER BY pos_date DESC',
array('integer'), array($this->id));
if ($res2->numRows() == 0)
{
$lastPost_top = "";
}
else
{
$z = 0;
while ($selData = $ilDB->fetchAssoc($res2))
{
if ($z > 0)
{
break;
}
$lastPost_top = $selData["pos_top_fk"]."#".$selData["pos_thr_fk"]."#".$selData["pos_pk"];
$z ++;
}
}
$statement = $ilDB->manipulateF('
UPDATE frm_data
SET top_last_post = %s
WHERE top_frm_fk = %s',
array('text', 'integer'), array($lastPost_top, $this->id));
return $dead_thr;
}

+ Here is the call graph for this function:

ilForum::deletePostTree (   $a_node)

delete node and the whole subtree under this node public

Parameters
arraynode_data of a node
Returns
array ID's of deleted posts

Definition at line 1658 of file class.ilForum.php.

References $res, $result, and $row.

Referenced by deletePost().

{
global $ilDB;
// GET LEFT AND RIGHT VALUES
$res = $ilDB->queryf('
SELECT * FROM frm_posts_tree
WHERE thr_fk = %s
AND pos_fk = %s
AND parent_pos = %s',
array('integer', 'integer', 'integer'),
array($a_node['tree'], $a_node['pos_pk'], $a_node['parent']));
while($row = $ilDB->fetchObject($res))
{
$a_node["lft"] = $row->lft;
$a_node["rgt"] = $row->rgt;
}
$diff = $a_node["rgt"] - $a_node["lft"] + 1;
// get data of posts
$result = $ilDB->queryf('
SELECT * FROM frm_posts_tree
WHERE lft BETWEEN %s AND %s
AND thr_fk = %s',
array('integer', 'integer', 'integer'),
array($a_node['lft'], $a_node['rgt'], $a_node['tree']));
$del_id = array();
while ($treeData = $ilDB->fetchAssoc($result))
{
$del_id[] = $treeData["pos_fk"];
}
// delete subtree
$statement = $ilDB->manipulateF('
DELETE FROM frm_posts_tree
WHERE lft BETWEEN %s AND %s
AND thr_fk = %s',
array('integer', 'integer', 'integer'),
array($a_node['lft'], $a_node['rgt'], $a_node['tree']));
// close gaps
$statement = $ilDB->manipulateF('
UPDATE frm_posts_tree
SET lft = CASE
WHEN lft > %s
THEN lft - %s
ELSE lft
END,
rgt = CASE
WHEN rgt > %s
THEN rgt - %s
ELSE rgt
END
WHERE thr_fk = %s',
array('integer', 'integer', 'integer', 'integer', 'integer'),
array($a_node['lft'], $diff, $a_node['lft'], $diff, $a_node['tree']));
return $del_id;
}

+ Here is the caller graph for this function:

ilForum::disableForumNotification (   $user_id)

Disable a user's notification about new posts in this forum.

Parameters
integeruser_id A user's ID
Returns
bool true private

Definition at line 2049 of file class.ilForum.php.

{
global $ilDB;
$statement = $ilDB->manipulateF('
DELETE FROM frm_notification
WHERE user_id = %s
AND frm_id = %s',
array('integer', 'integer'),
array($user_id, $this->id));
return true;
}
ilForum::enableForumNotification (   $user_id)

Enable a user's notification about new posts in this forum.

Parameters
integeruser_id A user's ID
Returns
bool true private

Definition at line 1970 of file class.ilForum.php.

References $query, $res, $row, and isForumNotificationEnabled().

{
global $ilDB;
if (!$this->isForumNotificationEnabled($user_id))
{
/* Remove all notifications of threads that belong to the forum */
$res = $ilDB->queryf('
SELECT frm_notification.thread_id FROM frm_data, frm_notification, frm_threads
WHERE frm_notification.user_id = %s
AND frm_notification.thread_id = frm_threads.thr_pk
AND frm_threads.thr_top_fk = frm_data.top_pk
AND frm_data.top_frm_fk = %s
GROUP BY frm_notification.thread_id',
array('integer', 'integer'),
array($user_id, $this->id));
if (is_object($res) && $res->numRows() > 0)
{
$thread_data = array();
$thread_data_types = array();
$query = ' DELETE FROM frm_notification
WHERE user_id = %s
AND thread_id IN (';
array_push($thread_data, $user_id);
array_push($thread_data_types, 'integer');
$counter = 1;
while($row = $ilDB->fetchAssoc($res))
{
if($counter < $res->numRows())
{
$query .= '%s, ';
array_push($thread_data, $row['thread_id']);
array_push($thread_data_types, 'integer');
}
if($counter == $res->numRows())
{
$query .= '%s)';
array_push($thread_data, $row['thread_id']);
array_push($thread_data_types, 'integer');
}
$counter++;
}
$statement = $ilDB->manipulateF($query, $thread_data_types, $thread_data);
}
/* Insert forum notification */
$nextId = $ilDB->nextId('frm_notification');
$statement = $ilDB->manipulateF('
INSERT INTO frm_notification
( notification_id,
user_id,
frm_id
)
VALUES(%s, %s, %s)',
array('integer','integer', 'integer'),
array($nextId, $user_id, $this->id));
}
return true;
}

+ Here is the call graph for this function:

ilForum::enableThreadNotification (   $user_id,
  $thread_id 
)

Enable a user's notification about new posts in a thread.

Parameters
integeruser_id A user's ID
integerthread_id ID of the thread
Returns
bool true private

Definition at line 2091 of file class.ilForum.php.

References isThreadNotificationEnabled().

{
global $ilDB;
if (!$this->isThreadNotificationEnabled($user_id, $thread_id))
{
$nextId = $ilDB->nextId('frm_notification');
$statement = $ilDB->manipulateF('
INSERT INTO frm_notification
( notification_id,
user_id,
thread_id
)
VALUES (%s, %s, %s)',
array('integer', 'integer', 'integer'), array($nextId, $user_id, $thread_id));
}
return true;
}

+ Here is the call graph for this function:

ilForum::fetchPostNodeData (   $a_row)

get data of parent node from frm_posts_tree and frm_posts private

Parameters
objectdb db result object containing node_data
Returns
array 2-dim (int/str) node_data

Definition at line 1603 of file class.ilForum.php.

References $lng, and ilObject\_exists().

Referenced by getFirstPostNode(), and getPostNode().

{
global $lng;
require_once('./Services/User/classes/class.ilObjUser.php');
if (ilObject::_exists($a_row->pos_usr_id))
{
$tmp_user = new ilObjUser($a_row->pos_usr_id);
$fullname = $tmp_user->getFullname();
$loginname = $tmp_user->getLogin();
}
$fullname = $fullname ? $fullname : ($a_row->import_name ? $a_row->import_name : $lng->txt("unknown"));
$data = array(
"pos_pk" => $a_row->pos_pk,
"child" => $a_row->pos_pk,
"author" => $a_row->pos_usr_id,
"alias" => $a_row->pos_usr_alias,
"title" => $fullname,
"loginname" => $loginname,
"type" => "post",
"message" => $a_row->pos_message,
"subject" => $a_row->pos_subject,
"pos_cens_com" => $a_row->pos_cens_com,
"pos_cens" => $a_row->pos_cens,
// "date" => $a_row->date,
"date" => $a_row->fpt_date,
"create_date" => $a_row->pos_date,
"update" => $a_row->pos_update,
"update_user" => $a_row->update_user,
"tree" => $a_row->thr_fk,
"parent" => $a_row->parent_pos,
"lft" => $a_row->lft,
"rgt" => $a_row->rgt,
"depth" => $a_row->depth,
"id" => $a_row->fpt_pk,
"notify" => $a_row->notify,
"import_name" => $a_row->import_name,
"pos_status" => $a_row->pos_status
);
// why this line? data should be stored without slashes in db
//$data["message"] = stripslashes($data["message"]);
return $data ? $data : array();
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::formatNotification (   $post_data,
  $cron = 0,
  $attachments = array(),
  $user_id 
)
Parameters
$post_data
int$cron
array$attachments
int$user_iduser_id of mail-recipient
Returns
string

Definition at line 2445 of file class.ilForum.php.

References $ilIliasIniFile, _getLanguageInstanceByUsrId(), and ilMail\getSalutation().

Referenced by sendForumNotifications(), and sendThreadNotifications().

{
$user_lang = self::_getLanguageInstanceByUsrId($user_id);
$message = "";
$message .= ilMail::getSalutation($user_id, $user_lang);
$message .= "\n\n";
$message .= $this->lng->txt("forums_notification_subject")." ".$post_data['top_name']."\n\n";
$message .= $this->lng->txt("forum").": ".$post_data["top_name"]."\n\n";
$message .= $this->lng->txt("thread").": ".$post_data["thr_subject"]."\n\n";
$message .= $this->lng->txt("new_post").":\n------------------------------------------------------------\n";
$message .= $this->lng->txt("author").": ".$post_data["pos_usr_name"]."\n";
$message .= $this->lng->txt("date").": ".$post_data["pos_date"]."\n";
$message .= $this->lng->txt("subject").": ".$post_data["pos_subject"]."\n\n";
if ($post_data["pos_cens"] == 1)
{
$message .= $post_data["pos_cens_com"]."\n";
}
else
{
$pos_message = $post_data['pos_message'];
if(strip_tags($pos_message) != $pos_message)
{
$pos_message = preg_replace("/\n/i", "", $pos_message);
$pos_message = preg_replace("/<br(\s*)(\/?)>/i", "\n", $pos_message);
$pos_message = preg_replace("/<p([^>]*)>/i", "\n\n", $pos_message);
$pos_message = preg_replace("/<\/p([^>]*)>/i", '', $pos_message);
}
$message .= strip_tags($pos_message)."\n";
}
$message .= "------------------------------------------------------------\n";
if(count($attachments) > 0)
{
foreach($attachments as $attachment)
{
$message .= $this->lng->txt('attachment').": ".$attachment."\n";
}
$message .= "\n------------------------------------------------------------\n";
}
if ($cron == 1)
{
$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";
}
else
{
$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";
}
if ($cron == 1)
{
$message .= sprintf($this->lng->txt("forums_notification_intro"),
$this->ilias->ini->readVariable("client","name"),
$ilIliasIniFile->readVariable("server","http_path").'/?client_id='.CLIENT_ID)."\n\n";
}
else
{
$message .= sprintf($this->lng->txt("forums_notification_intro"),
$this->ilias->ini->readVariable("client","name"),
ILIAS_HTTP_PATH.'/?client_id='.CLIENT_ID)."\n\n";
}
return $message;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::formatNotificationSubject (   $post_data)
Parameters
array$post_datause $post_data['top_name'] for forum-title
Returns
string

Definition at line 2433 of file class.ilForum.php.

Referenced by __sendMessage(), sendForumNotifications(), sendPostActivationNotification(), and sendThreadNotifications().

{
return $this->lng->txt("forums_notification_subject").' '.$post_data['top_name'];
}

+ Here is the caller graph for this function:

ilForum::formatPostActivationNotification (   $post_data,
  $user_id 
)
private
Parameters
$post_data
$user_id
Returns
string

Definition at line 2330 of file class.ilForum.php.

References _getLanguageInstanceByUsrId(), and ilMail\getSalutation().

Referenced by sendPostActivationNotification().

{
$user_lang = self::_getLanguageInstanceByUsrId($user_id);
$message = "";
$message .= ilMail::getSalutation($user_id, $user_lang);
$message .= "\n\n";
$message .= $this->lng->txt('forums_post_activation_mail')."\n\n";
$message .= $this->lng->txt("forum").": ".$post_data["top_name"]."\n\n";
$message .= $this->lng->txt("thread").": ".$post_data["thr_subject"]."\n\n";
$message .= $this->lng->txt("new_post").":\n------------------------------------------------------------\n";
$message .= $this->lng->txt("author").": ".$post_data["pos_usr_name"]."\n";
$message .= $this->lng->txt("date").": ".$post_data["pos_date"]."\n";
$message .= $this->lng->txt("subject").": ".$post_data["pos_subject"]."\n\n";
if ($post_data["pos_cens"] == 1)
{
$message .= $post_data["pos_cens_com"]."\n";
}
else
{
$pos_message = $post_data['pos_message'];
if(strip_tags($pos_message) != $pos_message)
{
$pos_message = preg_replace("/\n/i", "", $pos_message);
$pos_message = preg_replace("/<br(\s*)(\/?)>/i", "\n", $pos_message);
$pos_message = preg_replace("/<p([^>]*)>/i", "\n\n", $pos_message);
$pos_message = preg_replace("/<\/p([^>]*)>/i", '', $pos_message);
}
$message .= strip_tags($pos_message)."\n";
}
$message .= "------------------------------------------------------------\n";
$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";
$message .= sprintf($this->lng->txt('forums_notification_intro'),
$this->ilias->ini->readVariable('client', 'name'),
ILIAS_HTTP_PATH.'/?client_id='.CLIENT_ID)."\n\n";
return $message;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::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

Parameters
integer$topic
integer$thread
integer$user
string$message
integer$parent_pos
integer$notify
integer$anonymize
string$subject
datetime$date
Returns
integer $last: new post ID public

Definition at line 445 of file class.ilForum.php.

References $ilUser, $result, ilRTE\_replaceMediaObjectImageSrc(), addPostTree(), getForumRefId(), getImportName(), ilObjectFactory\getInstanceByRefId(), insertPostNode(), NEWS_NOTICE, NEWS_USERS, prepareText(), and sendPostActivationNotification().

Referenced by generateThread().

{
global $ilUser, $ilDB;
$objNewPost = new ilForumPost();
$objNewPost->setForumId($forum_id);
$objNewPost->setThreadId($thread_id);
$objNewPost->setSubject($subject);
$objNewPost->setMessage($message);
$objNewPost->setUserId($user);
$objNewPost->setUserAlias($alias);
if ($date == "")
{
$objNewPost->setCreateDate(date("Y-m-d H:i:s"));
}
else
{
if (strpos($date, "-") > 0) // in mysql format
{
$objNewPost->setCreateDate($date);
}
else // a timestamp
{
$objNewPost->setCreateDate(date("Y-m-d H:i:s", $date));
}
}
$objNewPost->setImportName($this->getImportName());
$objNewPost->setNotification($notify);
$objNewPost->setStatus($status);
$objNewPost->insert();
// entry in tree-table
if ($parent_pos == 0)
{
$this->addPostTree($objNewPost->getThreadId(), $objNewPost->getId(), $objNewPost->getCreateDate());
}
else
{
$this->insertPostNode($objNewPost->getId(), $parent_pos, $objNewPost->getThreadId(), $objNewPost->getCreateDate());
}
//echo "<br>->".$objNewPost->getId()."-".$parent_pos."-".$objNewPost->getThreadId()."-".
// $objNewPost->getCreateDate()."-".$forum_id."-".$message."-".$user."-";
// string last post
$lastPost = $objNewPost->getForumId()."#".$objNewPost->getThreadId()."#".$objNewPost->getId();
// update thread
$result = $ilDB->manipulateF('
UPDATE frm_threads
SET thr_num_posts = thr_num_posts + 1,
thr_last_post = %s
WHERE thr_pk = %s',
array('text', 'integer'),
array($lastPost, $objNewPost->getThreadId()));
// update forum
$result = $ilDB->manipulateF('
UPDATE frm_data
SET top_num_posts = top_num_posts + 1,
top_last_post = %s
WHERE top_pk = %s',
array('text', 'integer'),
array($lastPost, $objNewPost->getForumId()));
// MARK READ
$forum_obj->markPostRead($objNewPost->getUserId(), $objNewPost->getThreadId(), $objNewPost->getId());
$pos_data = $objNewPost->getDataAsArray();
$pos_data["ref_id"] = $this->getForumRefId();
// Send notification to moderators if they have to enable a post
if (!$status && $send_activation_mail)
{
$pos_data["top_name"] = $forum_obj->getTitle();
$this->sendPostActivationNotification($pos_data);
}
// Add Notification to news
if ($status)
{
require_once 'Services/RTE/classes/class.ilRTE.php';
include_once("./Services/News/classes/class.ilNewsItem.php");
$news_item = new ilNewsItem();
$news_item->setContext($forum_obj->getId(), 'frm', $objNewPost->getId(), 'pos');
$news_item->setPriority(NEWS_NOTICE);
$news_item->setTitle($objNewPost->getSubject());
$news_item->setContent(ilRTE::_replaceMediaObjectImageSrc($this->prepareText($objNewPost->getMessage(), 0), 1));
$news_item->setUserId($user);
$news_item->setVisibility(NEWS_USERS);
$news_item->create();
}
return $objNewPost->getId();
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::generateThread (   $forum_id,
  $user,
  $subject,
  $message,
  $notify,
  $notify_posts,
  $alias = '',
  $date = '',
  $status = 1 
)

generate new dataset in frm_threads

Parameters
integer$topic
integer$user
string$subject
string$message
integer$notify
integer$notify_posts
integer$anonymize
datetime$date
Returns
integer new post ID public

Definition at line 555 of file class.ilForum.php.

References generatePost(), and getImportName().

{
global $ilDB;
$objNewThread = new ilForumTopic();
$objNewThread->setForumId($forum_id);
$objNewThread->setUserId($user);
$objNewThread->setSubject($subject);
if ($date == "")
{
$objNewThread->setCreateDate(date("Y-m-d H:i:s"));
}
else
{
if (strpos($date, "-") > 0) // in mysql format
{
$objNewThread->setCreateDate($date);
}
else // a timestamp
{
$objNewThread->setCreateDate(date("Y-m-d H:i:s", $date));
}
}
$objNewThread->setImportName($this->getImportName());
$objNewThread->setUserAlias($alias);
$objNewThread->insert();
if ($notify_posts == 1)
{
$objNewThread->enableNotification($user);
}
// update forum
$statement = $ilDB->manipulateF('
UPDATE frm_data
SET top_num_threads = top_num_threads + 1
WHERE top_pk = %s',
array('integer'), array($forum_id));
return $this->generatePost($forum_id, $objNewThread->getId(), $user, $message, 0, $notify, $subject, $alias, $objNewThread->getCreateDate(), $status);
}

+ Here is the call graph for this function:

ilForum::getDbTable ( )

get name of database table

Returns
string name of database table
See Also
$dbTable User interface

Definition at line 219 of file class.ilForum.php.

References $dbTable.

{
}
ilForum::getFirstPostByThread (   $a_thread_id)

Get first post of thread.

public

Parameters
intthread id
Returns

Definition at line 1288 of file class.ilForum.php.

References $res, and $row.

{
global $ilDB;
$res = $ilDB->queryf('
SELECT * FROM frm_posts_tree
WHERE thr_fk = %s
AND parent_pos = %s',
array('integer', 'integer'), array($a_thread_id, '0'));
$row = $ilDB->fetchObject($res);
return $row->pos_fk ? $row->pos_fk : 0;
}
ilForum::getFirstPostNode (   $tree_id)

get data of the first node from frm_posts_tree and frm_posts public

Parameters
integertree id
Returns
object db result object

Definition at line 1558 of file class.ilForum.php.

References $res, $row, and fetchPostNodeData().

{
global $ilDB;
$res = $ilDB->queryf('
SELECT * FROM frm_posts, frm_posts_tree
WHERE pos_pk = pos_fk
AND parent_pos = %s
AND thr_fk = %s',
array('integer', 'integer'),
array('0', $tree_id));
$row = $ilDB->fetchObject($res);
return $this->fetchPostNodeData($row);
}

+ Here is the call graph for this function:

ilForum::getForumId ( )

//

Todo:
this should be renamed to getObjId() get forum id public
Returns
integer object id of forum

Definition at line 151 of file class.ilForum.php.

References $id.

Referenced by __deletePostFiles(), countActiveUserArticles(), countUserArticles(), and getUserStatistic().

{
return $this->id;
}

+ Here is the caller graph for this function:

ilForum::getForumRefId ( )

get forum ref_id public

Returns
integer reference id of forum

Definition at line 161 of file class.ilForum.php.

References $ref_id.

Referenced by __formatMessage(), generatePost(), and getModerators().

{
return $this->ref_id;
}

+ Here is the caller graph for this function:

ilForum::getImportName ( )

Definition at line 1955 of file class.ilForum.php.

Referenced by generatePost(), and generateThread().

{
return $this->import_name;
}

+ Here is the caller graph for this function:

ilForum::getMDB2DataType ( )

get content of additional condition

Returns
array

Definition at line 276 of file class.ilForum.php.

References $mdb2DataType.

Referenced by getOneThread(), getOneTopic(), and updateVisits().

{
if($this->mdb2DataType != '')
{
}
}

+ Here is the caller graph for this function:

ilForum::getMDB2DataValue ( )

/* get content of additional condition

Returns
array

Definition at line 263 of file class.ilForum.php.

References $mdb2DataValue.

Referenced by getOneThread(), getOneTopic(), and updateVisits().

{
if($this->mdb2DataValue != '')
{
}
}

+ Here is the caller graph for this function:

ilForum::getMDB2Query ( )

get content of additional condition

Returns
string

Definition at line 249 of file class.ilForum.php.

References $mdb2Query.

Referenced by getOneThread(), getOneTopic(), and updateVisits().

{
if($this->mdb2Query != '')
{
}
}

+ Here is the caller graph for this function:

ilForum::getModeratorFromPost (   $pos_pk)

get one post-dataset

Parameters
integerpost id
Returns
array result dataset of the post public

Definition at line 1852 of file class.ilForum.php.

References $res, and $row.

{
global $ilDB;
$res = $ilDB->queryf('
SELECT frm_data.* FROM frm_data, frm_posts
WHERE pos_pk = %s
AND pos_top_fk = top_pk',
array('integer'), array($pos_pk));
$row = $ilDB->fetchAssoc($res);
return $row;
}
ilForum::getModerators ( )

get all users assigned to local role il_frm_moderator_<frm_ref_id>

Returns
array user_ids public

Definition at line 1309 of file class.ilForum.php.

References _getModerators(), and getForumRefId().

Referenced by sendPostActivationNotification().

{
global $rbacreview;
return $this->_getModerators($this->getForumRefId());
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::getOnePost (   $post)

get one post-dataset

Parameters
integerpost id
Returns
array result dataset of the post public

Definition at line 397 of file class.ilForum.php.

References $res, $row, and convertDate().

Referenced by __sendMessage().

{
global $ilDB;
$res = $ilDB->queryf('
SELECT frm_posts.*, usr_data.lastname FROM frm_posts, usr_data
WHERE pos_pk = %s
AND pos_usr_id = usr_id',
array('integer'), array($post));
$row = $ilDB->fetchAssoc($res);
$row["pos_date"] = $this->convertDate($row["pos_date"]);
$row["pos_message"] = nl2br($row["pos_message"]);
return $row;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::getOneThread ( )

get one thread-dataset by WhereCondition

Returns
array $result dataset of the thread public

Definition at line 368 of file class.ilForum.php.

References $query, $result, getMDB2DataType(), getMDB2DataValue(), and getMDB2Query().

Referenced by __sendMessage().

{
global $ilDB;
$data_type = array();
$data_value = array();
$query = 'SELECT * FROM frm_threads WHERE ';
if($this->getMDB2Query() != '' && $this->getMDB2DataType() != '' && $this->getMDB2DataValue() != '')
{
$query .= $this->getMDB2Query();
$data_type = $data_type + $this->getMDB2DataType();
$data_value = $data_value + $this->getMDB2DataValue();
$sql_res = $ilDB->queryf($query, $data_type, $data_value);
$result = $ilDB->fetchAssoc($sql_res);
$result["thr_subject"] = trim($result["thr_subject"]);
}
return $result;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::getOneTopic ( )

get one topic-dataset by WhereCondition

Returns
array $result dataset of the topic public

Definition at line 321 of file class.ilForum.php.

References $query, $res, $row, getMDB2DataType(), getMDB2DataValue(), and getMDB2Query().

Referenced by moveThreads().

{
global $ilDB;
$data_type = array();
$data_value = array();
$query = 'SELECT * FROM frm_data WHERE ';
if($this->getMDB2Query() != '' && $this->getMDB2DataType() != '' && $this->getMDB2DataValue() != '')
{
$query .= ''.$this->getMDB2Query().'';
$data_type = $data_type + $this->getMDB2DataType();
$data_value = $data_value + $this->getMDB2DataValue();
$res = $ilDB->queryf($query, $data_type, $data_value);
$row = $ilDB->fetchAssoc($res);
if(is_null($row)) return NULL;
$row["top_name"] = trim($row["top_name"]);
$row["top_description"] = nl2br($row["top_description"]);
return $row;
}
else
{
$query .= '1 = 1';
$res = $ilDB->query($query);
$row = $ilDB->fetchAssoc($res);
if(!is_array($row) || !count($row)) return null;
$row['top_name'] = trim($row['top_name']);
$row['top_description'] = nl2br($row['top_description']);
return $row;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::getOrderField ( )

get name of orderField

Returns
string name of orderField
See Also
$orderField User interface

Definition at line 190 of file class.ilForum.php.

References $orderField.

{
}
ilForum::getPageHits ( )

get number of max.

visible datasets

Returns
integer $pageHits
See Also
$pageHits User interface

Definition at line 309 of file class.ilForum.php.

References $pageHits.

{
}
ilForum::getPostDepth (   $a_node_id,
  $tree_id 
)

Return depth of an object private.

Parameters
integernode_id of parent's node_id
integernode_id of parent's node parent_id
Returns
integer depth of node

Definition at line 1529 of file class.ilForum.php.

References $res.

Referenced by insertPostNode().

{
global $ilDB;
if ($tree_id)
{
$sql_res = $ilDB->queryf('
SELECT depth FROM frm_posts_tree
WHERE pos_fk = %s
AND thr_fk = %s',
array('integer', 'integer'),
array($a_node_id, $tree_id));
$res = $ilDB->fetchObject($sql_res);
return $res->depth;
}
else
{
return 0;
}
}

+ Here is the caller graph for this function:

ilForum::getPostNode (   $post_id)

get data of given node from frm_posts_tree and frm_posts public

Parameters
integerpost_id
Returns
object db result object

Definition at line 1581 of file class.ilForum.php.

References $res, $row, and fetchPostNodeData().

Referenced by deletePost().

{
global $ilDB;
$res = $ilDB->queryf('
SELECT * FROM frm_posts, frm_posts_tree
WHERE pos_pk = pos_fk
AND pos_pk = %s',
array('integer'),
array($post_id));
$row = $ilDB->fetchObject($res);
return $this->fetchPostNodeData($row);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::getUserStatistic (   $is_moderator = false)

Definition at line 1212 of file class.ilForum.php.

References $ilUser, $query, $res, $row, and getForumId().

{
global $ilDB, $ilUser;
$statistic = array();
$data_types = array();
$data = array();
$query = "SELECT COUNT(f.pos_usr_id) ranking, u.login, p.value, u.lastname, u.firstname
FROM frm_posts f
INNER JOIN frm_posts_tree t
ON f.pos_pk = t.pos_fk
INNER JOIN frm_threads th
ON t.thr_fk = th.thr_pk
INNER JOIN usr_data u
ON u.usr_id = f.pos_usr_id
INNER JOIN frm_data d
ON d.top_pk = f.pos_top_fk
LEFT JOIN usr_pref p
ON p.usr_id = u.usr_id AND p.keyword = %s
WHERE 1 = 1";
array_push($data_types, 'text');
array_push($data, 'public_profile');
if (!$is_moderator)
{
$query .= ' AND (pos_status = %s
OR (pos_status = %s
AND pos_usr_id = %s ))';
array_push($data_types,'integer', 'integer', 'integer');
array_push($data, '1', '0', $ilUser->getId());
}
$query .= ' AND d.top_frm_fk = %s
GROUP BY pos_usr_id, u.login, p.value,u.lastname, u.firstname';
array_push($data_types,'integer');
array_push($data, $this->getForumId());
$res = $ilDB->queryf($query, $data_types, $data);
$counter = 0;
while ($row = $ilDB->fetchAssoc($res))
{
$statistic[$counter][] = $row['ranking'];
$statistic[$counter][] = $row['login'];
$lastname ='';
$firstname = '';
if(!$ilUser->isAnonymous() && in_array($row['value'], array('y', 'g')) ||
$ilUser->isAnonymous() && 'g' == $row['value'])
{
$lastname = $row['lastname'];
$firstname = $row['firstname'];
}
$statistic[$counter][] = $lastname;
$statistic[$counter][] = $firstname;
++$counter;
}
return is_array($statistic) ? $statistic : array();
}

+ Here is the call graph for this function:

ilForum::insertPostNode (   $a_node_id,
  $a_parent_id,
  $tree_id,
  $a_date = '' 
)

insert node under parent node public

Parameters
integernode_id
integertree_id
integerparent_id (optional)

Definition at line 1455 of file class.ilForum.php.

References $res, and getPostDepth().

Referenced by generatePost().

{
global $ilDB;
$a_date = $a_date ? $a_date : date("Y-m-d H:i:s");
// get left value
$sql_res = $ilDB->queryf('
SELECT * FROM frm_posts_tree
WHERE pos_fk = %s
AND thr_fk = %s',
array('integer', 'integer'),
array($a_parent_id, $tree_id));
$res = $ilDB->fetchObject($sql_res);
$left = $res->lft;
$lft = $left + 1;
$rgt = $left + 2;
// spread tree
$statement = $ilDB->manipulateF('
UPDATE frm_posts_tree
SET lft = CASE
WHEN lft > %s
THEN lft + 2
ELSE lft
END,
rgt = CASE
WHEN rgt > %s
THEN rgt + 2
ELSE rgt
END
WHERE thr_fk = %s',
array('integer', 'integer', 'integer'),
array($left, $left, $tree_id));
$depth = $this->getPostDepth($a_parent_id, $tree_id) + 1;
// insert node
$nextId = $ilDB->nextId('frm_posts_tree');
$statement = $ilDB->manipulateF('
INSERT INTO frm_posts_tree
( fpt_pk,
thr_fk,
pos_fk,
parent_pos,
lft,
rgt,
depth,
fpt_date
)
VALUES(%s,%s,%s, %s, %s, %s,%s, %s)',
array('integer','integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'timestamp'),
array( $nextId,
$tree_id,
$a_node_id,
$a_parent_id,
$lft,
$rgt,
$depth,
$a_date)
);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::isForumNotificationEnabled (   $user_id)

Check whether a user's notification about new posts in this forum is enabled (result > 0) or not (result == 0)

Parameters
integeruser_id A user's ID
Returns
integer Result private

Definition at line 2069 of file class.ilForum.php.

References $result.

Referenced by enableForumNotification().

{
global $ilDB;
$result = $ilDB->queryf('SELECT COUNT(*) cnt FROM frm_notification WHERE user_id = %s AND frm_id = %s',
array('integer', 'integer'), array($user_id, $this->id));
while($record = $ilDB->fetchAssoc($result))
{
return (bool)$record['cnt'];
}
return false;
}

+ Here is the caller graph for this function:

ilForum::isThreadNotificationEnabled (   $user_id,
  $thread_id 
)

Check whether a user's notification about new posts in a thread is enabled (result > 0) or not (result == 0)

Parameters
integeruser_id A user's ID
integerthread_id ID of the thread
Returns
integer Result private

Definition at line 2119 of file class.ilForum.php.

References $result.

Referenced by enableThreadNotification().

{
global $ilDB;
$result = $ilDB->queryf('
SELECT COUNT(*) cnt FROM frm_notification
WHERE user_id = %s
AND thread_id = %s',
array('integer', 'integer'),
array($user_id, $thread_id));
while($record = $ilDB->fetchAssoc($result))
{
return (bool)$record['cnt'];
}
return false;
}

+ Here is the caller graph for this function:

static ilForum::mergeThreads (   $obj_id,
  $source_id,
  $target_id 
)
static
Parameters
$obj_id
$source_id
$target_id
Exceptions
ilException

Definition at line 2616 of file class.ilForum.php.

References $target_id, ilForumTopic\deleteByThreadId(), ilObjForum\mergeForumUserRead(), ilForumPost\mergePosts(), ilForumNotification\mergeThreadNotificiations(), updateLastPostByObjId(), and ilForumPostsTree\updateTargetRootRgt().

{
// selected source & target objects
$source_thread_obj = new ilForumTopic((int)$source_id);
$target_thread_obj = new ilForumTopic((int)$target_id);
if($source_thread_obj->getForumId() != $target_thread_obj->getForumId())
{
throw new ilException('not_allowed_to_merge_into_another_forum');
}
// use the "older" thread as target
if($source_thread_obj->getCreateDate() > $target_thread_obj->getCreateDate())
{
$merge_thread_source = $source_thread_obj;
$merge_thread_target = $target_thread_obj;
}
else
{
$merge_thread_source = $target_thread_obj;
$merge_thread_target = $source_thread_obj;
}
$thread_subject = $target_thread_obj->getSubject();
// remember if the threads are open or closed and then close both threads !
$targed_was_closed = $merge_thread_target->isClosed();
$merge_thread_source->close();
if($targed_was_closed == false)
{
$merge_thread_target->close();
}
$source_all_posts = $merge_thread_source->getAllPosts();
$source_root_node = $merge_thread_source->getFirstPostNode();
$target_root_node = $merge_thread_target->getFirstPostNode();
$add_difference = $target_root_node->getRgt();
// update target root node rgt
include_once 'Modules/Forum/classes/class.ilForumPostsTree.php';
// $new_target_rgt = ($target_root_node->getRgt() + $source_root_node->getRgt() + 1);
$new_target_rgt = ($target_root_node->getRgt() + $source_root_node->getRgt());
ilForumPostsTree::updateTargetRootRgt($target_root_node->getId(), $new_target_rgt);
$new_target_root = $target_root_node->getId();
// get source post tree and update posts tree
foreach($source_all_posts as $post)
{
$post_obj = new ilForumPost($post->pos_pk);
$posts_tree_obj = new ilForumPostsTree();
$posts_tree_obj->setPosFk($post->pos_pk);
if($post_obj->getParentId() == 0)
{
$posts_tree_obj->setParentPos($new_target_root);
//$posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference));
$posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference) - 1);
$posts_tree_obj->setLft($target_root_node->getRgt());
$posts_tree_obj->setDepth(($post_obj->getDepth() + 1));
$posts_tree_obj->setSourceThreadId($merge_thread_source->getId());
$posts_tree_obj->setTargetThreadId($merge_thread_target->getId());
$posts_tree_obj->mergeParentPos();
}
else
{
$posts_tree_obj->setRgt(($post_obj->getRgt() + $add_difference) - 1);
$posts_tree_obj->setLft(($post_obj->getLft() + $add_difference) - 1);
$posts_tree_obj->setDepth(($post_obj->getDepth() + 1));
$posts_tree_obj->setSourceThreadId($merge_thread_source->getId());
$posts_tree_obj->setParentPos($post_obj->getParentId());
$posts_tree_obj->setTargetThreadId($merge_thread_target->getId());
$posts_tree_obj->merge();
}
}
// update frm_posts pos_thr_fk = target_thr_id
include_once 'Modules/Forum/classes/class.ilForumPost.php';
ilForumPost::mergePosts($merge_thread_source->getId(), $merge_thread_target->getId());
// check notifications
include_once 'Modules/Forum/classes/class.ilForumNotification.php';
ilForumNotification::mergeThreadNotificiations($merge_thread_source->getId(), $merge_thread_target->getId());
// delete frm_thread_access entries
include_once './Modules/Forum/classes/class.ilObjForum.php';
ilObjForum::_deleteAccessEntries($merge_thread_source->getId());
// update frm_user_read
ilObjForum::mergeForumUserRead($merge_thread_source->getId(), $merge_thread_target->getId());
// update visits, thr_num_posts, last_post, subject
$post_date_source = $merge_thread_source->getLastPost()->getCreateDate();
$post_date_target = $merge_thread_target->getLastPost()->getCreateDate();
$target_last_post = $merge_thread_target->getLastPostString();
$exp = explode('#', $target_last_post);
if($post_date_source > $post_date_target)
{
$exp[2] = $merge_thread_source->getLastPost()->getId();
}
else
{
$exp[2] = $merge_thread_target->getLastPost()->getId();
}
$new_thr_last_post = implode('#', $exp);
$num_posts_source = (int)$merge_thread_source->getNumPosts();
$num_visits_source = (int)$merge_thread_source->getVisits();
$num_posts_target = (int)$merge_thread_target->getNumPosts();
$num_visits_target = (int)$merge_thread_source->getVisits();
$frm_topic_obj = new ilForumTopic(0, false, true);
$frm_topic_obj->setNumPosts(($num_posts_source + $num_posts_target));
$frm_topic_obj->setVisits(($num_visits_source + $num_visits_target));
$frm_topic_obj->setLastPostString($new_thr_last_post);
$frm_topic_obj->setSubject($thread_subject);
$frm_topic_obj->setId($merge_thread_target->getId());
$frm_topic_obj->updateMergedThread();
// update frm_data: top_last_post , top_num_threads
// reopen target if was not "closed" before merging
if(!$targed_was_closed)
{
$merge_thread_target->reopen();
}
// delete source thread
ilForumTopic::deleteByThreadId($merge_thread_source->getId());
}

+ Here is the call graph for this function:

ilForum::moveThreads (   $thread_ids = array(),
  $src_ref_id = 0,
  $dest_top_frm_fk = 0 
)

Moves all chosen threads and their posts to a new forum.

Parameters
arraychosen thread pks
integerobject id of src forum
integerobject id of dest forum public

Definition at line 605 of file class.ilForum.php.

References $id, $res, $row, ilObject\_lookupObjectId(), getOneTopic(), and setMDB2WhereCondition().

{
global $ilDB;
$src_top_frm_fk = ilObject::_lookupObjectId($src_ref_id);
if (is_numeric($src_top_frm_fk) && $src_top_frm_fk > 0 && is_numeric($dest_top_frm_fk) && $dest_top_frm_fk > 0)
{
$this->setMDB2WhereCondition('top_frm_fk = %s ', array('integer'), array($src_top_frm_fk));
$oldFrmData = $this->getOneTopic();
$this->setMDB2WhereCondition('top_frm_fk = %s ', array('integer'), array($dest_top_frm_fk));
$newFrmData = $this->getOneTopic();
if ($oldFrmData['top_pk'] && $newFrmData['top_pk'])
{
$moved_posts = 0;
$moved_threads = 0;
$visits = 0;
foreach ($thread_ids as $id)
{
$objTmpThread = new ilForumTopic($id);
$numPosts = $objTmpThread->movePosts($src_top_frm_fk, $oldFrmData['top_pk'], $dest_top_frm_fk, $newFrmData['top_pk']);
if (($last_post_string = $objTmpThread->getLastPostString()) != '')
{
$last_post_string = explode('#', $last_post_string);
$last_post_string[0] = $newFrmData['top_pk'];
$last_post_string = implode('#', $last_post_string);
$objTmpThread->setLastPostString($last_post_string);
}
$visits += $objTmpThread->getVisits();
$moved_posts += $numPosts;
++$moved_threads;
$objTmpThread->setForumId($newFrmData['top_pk']);
$objTmpThread->update();
unset($objTmpThread);
}
// update frm_data source forum
$ilDB->setLimit(1);
$res = $ilDB->queryf('
SELECT pos_thr_fk, pos_pk
FROM frm_posts
WHERE pos_top_fk = %s
ORDER BY pos_date DESC',
array('integer'), array($oldFrmData['top_pk']));
$row = $ilDB->fetchObject($res);
$last_post_src = $oldFrmData['top_pk'] . '#' . $row->pos_thr_fk . '#' . $row->pos_pk;
$statement = $ilDB->manipulateF('
UPDATE frm_data
SET top_num_posts = top_num_posts - %s,
top_num_threads = top_num_threads - %s,
visits = visits - %s,
top_last_post = %s
WHERE top_pk = %s',
array('integer', 'integer', 'integer', 'text', 'integer'),
array( $moved_posts,
$moved_threads,
$visits,
$last_post_src,
$oldFrmData['top_pk']));
// update frm_data destination forum
$ilDB->setLimit(1);
$res = $ilDB->queryf('
SELECT pos_thr_fk, pos_pk
FROM frm_posts
WHERE pos_top_fk = %s
ORDER BY pos_date DESC',
array('integer'), array($newFrmData['top_kp']));
$row = $ilDB->fetchObject($res);
$last_post_dest = $newFrmData['top_pk'] . '#' . $row->pos_thr_fk . '#' . $row->pos_pk;
$statement = $ilDB->manipulateF('
UPDATE frm_data
SET top_num_posts = top_num_posts + %s,
top_num_threads = top_num_threads + %s,
visits = visits + %s,
top_last_post = %s
WHERE top_pk = %s',
array('integer', 'integer', 'integer', 'text', 'integer'),
array($moved_posts, $moved_threads, $visits, $last_post_dest, $newFrmData['top_pk']));
/*
// update news items
include_once("./Services/News/classes/class.ilNewsItem.php");
$objNewsItem = new ilNewsItem();
$news_items = $objNewsItem->getNewsForRefId($src_ref_id);
foreach ($news_items as $news_item)
{
$tmpObjNewsItem = new ilNewsItem($news_item['id']);
if ($tmpObjNewsItem->getContextObjId() == $src_top_frm_fk)
{
$tmpObjNewsItem->setContextObjId($dest_top_frm_fk);
$tmpObjNewsItem->update();
}
unset($tmpObjNewsItem);
}
*/
}
}
}

+ Here is the call graph for this function:

ilForum::postCensorship (   $message,
  $pos_pk,
  $cens = 0 
)

update dataset in frm_posts with censorship info

Parameters
stringmessage
integerpos_pk
Returns
boolean public

Definition at line 728 of file class.ilForum.php.

References $_SESSION, $res, ilNewsItem\getFirstNewsIdForContext(), and prepareText().

{
global $ilDB;
$statement = $ilDB->manipulateF('
UPDATE frm_posts
SET pos_cens_com = %s,
pos_update = %s,
pos_cens = %s,
update_user = %s
WHERE pos_pk = %s',
array('text', 'timestamp', 'integer', 'integer', 'integer'),
array($message, date("Y-m-d H:i:s"), $cens, $_SESSION['AccountId'], $pos_pk));
// Change news item accordingly
include_once("./Services/News/classes/class.ilNewsItem.php");
"frm", $pos_pk, "pos");
if ($news_id > 0)
{
if ($cens > 0) // censor
{
$news_item = new ilNewsItem($news_id);
//$news_item->setTitle($subject);
$news_item->setContent(nl2br($this->prepareText($message, 0)));
$news_item->update();
}
else // revoke censorship
{
// get original message
$res = $ilDB->queryf('
SELECT * FROM frm_posts
WHERE pos_pk = %s',
array('integer'), array($pos_pk));
$rec = $ilDB->fetchAssoc($res);
$news_item = new ilNewsItem($news_id);
//$news_item->setTitle($subject);
$news_item->setContent(nl2br($this->prepareText($rec["pos_message"], 0)));
$news_item->update();
}
}
return true;
}

+ Here is the call graph for this function:

ilForum::prepareText (   $text,
  $edit = 0,
  $quote_user = '',
  $type = '' 
)

prepares given string public

Parameters
string
integer
Returns
string

Definition at line 1763 of file class.ilForum.php.

References $lng, $txtQuote2, and ilUtil\insertLatexImages().

Referenced by generatePost(), and postCensorship().

{
global $lng;
if($type == 'export')
{
$this->replQuote1 = "<blockquote class=\"quote\"><hr size=\"1\" color=\"#000000\">";
$this->replQuote2 = "<hr size=\"1\" color=\"#000000\"/></blockquote>";
}
if($edit == 1)
{
// add login name of quoted users
$lname = ($quote_user != "")
? '="'.$quote_user.'"'
: "";
$text = "[quote$lname]".$text."[/quote]";
}
else
{
// check for quotation
$startZ = substr_count ($text, "[quote"); // also count [quote="..."]
$endZ = substr_count ($text, "[/quote]");
if ($startZ > 0 || $endZ > 0)
{
// add missing opening and closing tags
if ($startZ > $endZ)
{
$diff = $startZ - $endZ;
for ($i = 0; $i < $diff; $i++)
{
if ($type == 'export') $text .= $this->txtQuote2;
else $text .= "[/quote]";
}
}
elseif ($startZ < $endZ)
{
$diff = $endZ - $startZ;
for ($i = 0; $i < $diff; $i++)
{
if ($type == 'export') $text = $this->txtQuote1.$text;
else $text = "[quote]".$text;
}
}
if($edit == 0)
{
$ws= "[ \t\r\f\v\n]*";
$text = eregi_replace("\[(quote$ws=$ws\"([^\"]*)\"$ws)\]",
$this->replQuote1.'<div class="ilForumQuoteHead">'.$lng->txt("quote")." (\\2)".'</div>', $text);
$text = str_replace("[quote]",
$this->replQuote1.'<div class="ilForumQuoteHead">'.$lng->txt("quote").'</div>', $text);
$text = str_replace("[/quote]", $this->replQuote2, $text);
}
}
}
if($type != 'export')
{
if($edit == 0)
{
$text = ilUtil::insertLatexImages($text, "<span class\=\"latex\">", "<\/span>");
$text = ilUtil::insertLatexImages($text, "\[tex\]", "\[\/tex\]");
}
// workaround for preventing template engine
// from hiding text that is enclosed
// in curly brackets (e.g. "{a}")
$text = str_replace("{", "&#123;", $text);
$text = str_replace("}", "&#125;", $text);
}
return $text;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::sendForumNotifications (   $post_data)

Definition at line 2231 of file class.ilForum.php.

References $ilUser, $lng, $ref_id, $res, $result, $row, ilObject\_getAllReferences(), ilObjUser\_lookupLogin(), _lookupObjIdForForumId(), formatNotification(), formatNotificationSubject(), and setLanguage().

{
global $ilDB, $ilAccess, $lng, $ilUser;
include_once "Services/Mail/classes/class.ilMail.php";
include_once './Services/User/classes/class.ilObjUser.php';
// GET THREAD DATA
$result = $ilDB->queryf('
SELECT thr_subject FROM frm_threads
WHERE thr_pk = %s',
array('integer'),
array($post_data['pos_thr_fk']));
while($record = $ilDB->fetchAssoc($result))
{
$post_data['thr_subject'] = $record['thr_subject'];
break;
}
// determine obj_id of the forum
$obj_id = self::_lookupObjIdForForumId($post_data['pos_top_fk']);
// GET AUTHOR OF NEW POST
if($post_data['pos_usr_id'])
{
$post_data['pos_usr_name'] = ilObjUser::_lookupLogin($post_data['pos_usr_id']);
}
else if(strlen($post_data['pos_usr_alias']))
{
$post_data['pos_usr_name'] = $post_data['pos_usr_alias'].' ('.$lng->txt('frm_pseudonym').')';
}
if($post_data['pos_usr_name'] == '')
{
$post_data['pos_usr_name'] = $this->lng->txt('forums_anonymous');
}
// GET USERS WHO WANT TO BE INFORMED ABOUT NEW POSTS
$res = $ilDB->queryf('
SELECT frm_notification.user_id FROM frm_notification, frm_data
WHERE frm_data.top_pk = %s
AND frm_notification.frm_id = frm_data.top_frm_fk
AND frm_notification.user_id <> %s
GROUP BY frm_notification.user_id',
array('integer', 'integer'),
array($post_data['pos_top_fk'], $ilUser->getId()));
// get all references of obj_id
$frm_references = ilObject::_getAllReferences($obj_id);
// save language of the current user
global $lng;
$userLanguage = $lng;
// get attachments data
$fileDataForum = new ilFileDataForum($obj_id, $post_data['pos_pk']);
$filesOfPost = $fileDataForum->getFilesOfPost();
$attachments = array();
foreach($filesOfPost as $attachment)
{
$attachments[] = $attachment['name'];
}
$mail_obj = new ilMail(ANONYMOUS_USER_ID);
while($row = $ilDB->fetchAssoc($res))
{
// do rbac check before sending notification
$send_mail = false;
foreach((array)$frm_references as $ref_id)
{
if($ilAccess->checkAccessOfUser($row['user_id'], 'read', '', $ref_id))
{
$send_mail = true;
break;
}
}
if($send_mail)
{
$this->setLanguage(self::_getLanguageInstanceByUsrId($row['user_id']));
$mail_obj->sendMail(
ilObjUser::_lookupLogin($row["user_id"]), "", "",
$this->formatNotificationSubject($post_data),
$this->formatNotification($post_data, 0, $attachments, $row['user_id']),
array(), array("system")
);
}
}
// reset language
$this->setLanguage($userLanguage);
}

+ Here is the call graph for this function:

ilForum::sendPostActivationNotification (   $post_data)

Definition at line 2371 of file class.ilForum.php.

References $ilUser, $lng, $result, ilObjUser\_lookupLogin(), formatNotificationSubject(), formatPostActivationNotification(), getModerators(), and setLanguage().

Referenced by generatePost().

{
global $ilDB, $ilUser, $lng;
if (is_array($moderators = $this->getModerators()))
{
// GET THREAD DATA
$result = $ilDB->queryf('
SELECT thr_subject FROM frm_threads
WHERE thr_pk = %s',
array('integer'),
array($post_data['pos_thr_fk']));
while($record = $ilDB->fetchAssoc($result))
{
$post_data['thr_subject'] = $record['thr_subject'];
break;
}
// GET AUTHOR OF NEW POST
if($post_data['pos_usr_id'])
{
$post_data['pos_usr_name'] = ilObjUser::_lookupLogin($post_data['pos_usr_id']);
}
else if(strlen($post_data['pos_usr_alias']))
{
$post_data['pos_usr_name'] = $post_data['pos_usr_alias'].' ('.$lng->txt('frm_pseudonym').')';
}
if($post_data['pos_usr_name'] == '')
{
$post_data['pos_usr_name'] = $this->lng->txt('forums_anonymous');
}
// save language of the current user
global $lng;
$userLanguage = $lng;
$mail_obj = new ilMail(ANONYMOUS_USER_ID);
foreach($moderators as $moderator)
{
// set forum language instance for earch user
$this->setLanguage(self::_getLanguageInstanceByUsrId($moderator));
$subject = $this->formatNotificationSubject($post_data);
$message = $this->formatPostActivationNotification($post_data, $moderator);
$mail_obj->sendMail(
ilObjUser::_lookupLogin($moderator), '', '',
$subject,
$message,
array(), array("system")
);
}
// reset language
$this->setLanguage($userLanguage);
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilForum::sendThreadNotifications (   $post_data)

Definition at line 2139 of file class.ilForum.php.

References $_SESSION, $lng, $ref_id, $res, $result, $row, ilObject\_getAllReferences(), ilObjUser\_lookupLogin(), _lookupObjIdForForumId(), formatNotification(), formatNotificationSubject(), and setLanguage().

{
global $ilDB, $ilAccess, $lng;
include_once "Services/Mail/classes/class.ilMail.php";
include_once './Services/User/classes/class.ilObjUser.php';
// GET THREAD DATA
$result = $ilDB->queryf('
SELECT thr_subject FROM frm_threads
WHERE thr_pk = %s',
array('integer'), array($post_data['pos_thr_fk']));
while($record = $ilDB->fetchAssoc($result))
{
$post_data['thr_subject'] = $record['thr_subject'];
break;
}
// determine obj_id of the forum
$obj_id = self::_lookupObjIdForForumId($post_data['pos_top_fk']);
// GET AUTHOR OF NEW POST
if($post_data['pos_usr_id'])
{
$post_data['pos_usr_name'] = ilObjUser::_lookupLogin($post_data['pos_usr_id']);
}
else if(strlen($post_data['pos_usr_alias']))
{
$post_data['pos_usr_name'] = $post_data['pos_usr_alias'].' ('.$lng->txt('frm_pseudonym').')';
}
if($post_data['pos_usr_name'] == '')
{
$post_data['pos_usr_name'] = $this->lng->txt('forums_anonymous');
}
// GET USERS WHO WANT TO BE INFORMED ABOUT NEW POSTS
$res = $ilDB->queryf('
SELECT user_id FROM frm_notification
WHERE thread_id = %s
AND user_id <> %s',
array('integer', 'integer'),
array($post_data['pos_thr_fk'], $_SESSION['AccountId']));
// get all references of obj_id
$frm_references = ilObject::_getAllReferences($obj_id);
// save language of the current user
global $lng;
$userLanguage = $lng;
// get attachments data
$fileDataForum = new ilFileDataForum($obj_id, $post_data['pos_pk']);
$filesOfPost = $fileDataForum->getFilesOfPost();
$attachments = array();
foreach($filesOfPost as $attachment)
{
$attachments[] = $attachment['name'];
}
$mail_obj = new ilMail(ANONYMOUS_USER_ID);
while($row = $ilDB->fetchAssoc($res))
{
// do rbac check before sending notification
$send_mail = false;
foreach((array)$frm_references as $ref_id)
{
if($ilAccess->checkAccessOfUser($row['user_id'], 'read', '', $ref_id))
{
$send_mail = true;
break;
}
}
if($send_mail)
{
$this->setLanguage(self::_getLanguageInstanceByUsrId($row['user_id']));
$mail_obj->sendMail(
ilObjUser::_lookupLogin($row["user_id"]), "", "",
$this->formatNotificationSubject($post_data),
$this->formatNotification($post_data, 0, $attachments, $row['user_id']),
array(), array("system")
);
}
}
// reset language
$this->setLanguage($userLanguage);
}

+ Here is the call graph for this function:

ilForum::setDbTable (   $dbTable)

set database table

Parameters
string$dbTabledatabase table
See Also
$dbTable User interface

Definition at line 201 of file class.ilForum.php.

References $dbTable.

{
if ($dbTable == "")
{
die($this->className . "::setDbTable(): No database table given.");
}
else
{
$this->dbTable = $dbTable;
}
}
ilForum::setForumId (   $a_obj_id)

set object id which refers to ILIAS obj_id

Parameters
integerobject id public

Definition at line 117 of file class.ilForum.php.

{
if (!isset($a_obj_id))
{
$message = get_class($this)."::setForumId(): No obj_id given!";
$this->ilias->raiseError($message,$this->ilias->error_obj->WARNING);
}
$this->id = $a_obj_id;
}
ilForum::setForumRefId (   $a_ref_id)

set reference id which refers to ILIAS obj_id

Parameters
integerobject id public

Definition at line 134 of file class.ilForum.php.

{
if (!isset($a_ref_id))
{
$message = get_class($this)."::setForumRefId(): No ref_id given!";
$this->ilias->raiseError($message,$this->ilias->error_obj->WARNING);
}
$this->ref_id = $a_ref_id;
}
ilForum::setImportName (   $a_import_name)

Definition at line 1959 of file class.ilForum.php.

{
$this->import_name = $a_import_name;
}
ilForum::setLanguage (   $lng)

Definition at line 81 of file class.ilForum.php.

References $lng.

Referenced by sendForumNotifications(), sendPostActivationNotification(), and sendThreadNotifications().

{
$this->lng = $lng;
}

+ Here is the caller graph for this function:

ilForum::setMDB2WhereCondition (   $query_string,
  $data_type,
  $data_value 
)

set content for additional condition

Parameters
string$query_string
array$data_type
array$data_value

Definition at line 234 of file class.ilForum.php.

Referenced by __sendMessage(), and moveThreads().

{
$this->mdb2Query = $query_string;
$this->mdb2DataValue = $data_value;
$this->mdb2DataType = $data_type;
return true;
}

+ Here is the caller graph for this function:

ilForum::setOrderField (   $orderField)
private

set database field for sorting results

Parameters
string$orderFielddatabase field for sorting
See Also
$orderField private

Definition at line 172 of file class.ilForum.php.

References $orderField.

{
if ($orderField == "")
{
die($this->className . "::setOrderField(): No orderField given.");
}
else
{
$this->orderField = $orderField;
}
}
ilForum::setPageHits (   $pageHits)

set number of max.

visible datasets

Parameters
integer$pageHits
See Also
$pageHits User interface

Definition at line 290 of file class.ilForum.php.

References $pageHits.

{
if ($pageHits < 1)
{
die($this->className . "::setPageHits(): No int pageHits given.");
}
else
{
$this->pageHits = $pageHits;
return true;
}
}
static ilForum::updateLastPostByObjId (   $a_obj_id)
static

Definition at line 2571 of file class.ilForum.php.

Referenced by mergeThreads().

{
global $ilDB;
// get latest post of forum and update last_post
$ilDB->setLimit(1);
$res2 = $ilDB->queryf('
SELECT pos_top_fk, pos_thr_fk, pos_pk FROM frm_posts, frm_data
WHERE pos_top_fk = top_pk
AND top_frm_fk = %s
ORDER BY pos_date DESC',
array('integer'), array($a_obj_id));
if ($res2->numRows() == 0)
{
$lastPost_top = "";
}
else
{
$z = 0;
while ($selData = $ilDB->fetchAssoc($res2))
{
if ($z > 0)
{
break;
}
$lastPost_top = $selData["pos_top_fk"]."#".$selData["pos_thr_fk"]."#".$selData["pos_pk"];
$z ++;
}
}
$ilDB->update('frm_data',
array('top_last_post' => array('text', $lastPost_top)),
array('top_frm_fk' => array('integer', $a_obj_id))
);
}

+ Here is the caller graph for this function:

ilForum::updateVisits (   $ID)

update page hits of given forum- or thread-ID public

Parameters
integer

Definition at line 1729 of file class.ilForum.php.

References $_SESSION, $query, $res, getMDB2DataType(), getMDB2DataValue(), and getMDB2Query().

{
global $ilDB;
$checkTime = time() - (60*60);
if ($_SESSION["frm_visit_".$this->dbTable."_".$ID] < $checkTime)
{
$_SESSION["frm_visit_".$this->dbTable."_".$ID] = time();
$query = 'UPDATE '.$this->dbTable.' SET visits = visits + 1 WHERE ';
$data_type = array();
$data_value = array();
if($this->getMDB2Query() != '' && $this->getMDB2DataType() != '' && $this->getMDB2DataValue() != '')
{
$query .= $this->getMDB2Query();
$data_type = $data_type + $this->getMDB2DataType();
$data_value = $data_value + $this->getMDB2DataValue();
$res = $ilDB->queryf($query, $data_type, $data_value);
}
}
}

+ Here is the call graph for this function:

Field Documentation

ilForum::$className = "ilForum"
private

Definition at line 44 of file class.ilForum.php.

ilForum::$dbTable
private

Definition at line 37 of file class.ilForum.php.

Referenced by getDbTable(), and setDbTable().

ilForum::$id
private

Definition at line 67 of file class.ilForum.php.

Referenced by getForumId(), and moveThreads().

ilForum::$ilias

Definition at line 28 of file class.ilForum.php.

Referenced by __construct().

ilForum::$mdb2DataType
private

Definition at line 56 of file class.ilForum.php.

Referenced by getMDB2DataType().

ilForum::$mdb2DataValue
private

Definition at line 55 of file class.ilForum.php.

Referenced by getMDB2DataValue().

ilForum::$mdb2Query
private

Definition at line 54 of file class.ilForum.php.

Referenced by getMDB2Query().

ilForum::$orderField
private

Definition at line 52 of file class.ilForum.php.

Referenced by getOrderField(), and setOrderField().

ilForum::$pageHits = 30
private

Definition at line 64 of file class.ilForum.php.

Referenced by getPageHits(), and setPageHits().

ilForum::$replQuote1 = '<blockquote class="ilForumQuote">'
private

Definition at line 60 of file class.ilForum.php.

ilForum::$replQuote2 = '</blockquote>'
private

Definition at line 61 of file class.ilForum.php.

ilForum::$txtQuote1 = "[quote]"
private

Definition at line 58 of file class.ilForum.php.

ilForum::$txtQuote2 = "[/quote]"
private

Definition at line 59 of file class.ilForum.php.

Referenced by prepareText().

const ilForum::SORT_DATE = 2

Definition at line 21 of file class.ilForum.php.

const ilForum::SORT_TITLE = 1

Definition at line 20 of file class.ilForum.php.

Referenced by ilObjForumGUI\cloneWizardPageObject().


The documentation for this class was generated from the following file: