<?php
class CB_Forum {
function CB_Forum($userID) {
$this->__construct($userID);
}
function __construct($userID) {
$this->userID = $userID;
}
function setOption($key, &$value) {
if(!empty($key)) {
$this->$key = $value;
}
}
/**
* CB_Forum::addMessage()
*
* @param array $fieldValues
* @param mixed $parentID
* @return mixed
**/
function addMessage($fieldValues, $parentID = false) {
/* aktuelle Zeit ermitteln */
$messageAddTime = date("Y-m-d H:i:s");
/* Message abfangen, rudimentär absichern */
$originalMessage = mysql_escape_string($fieldValues['message']);
$fieldValues = $this->_checkFieldValues($fieldValues);
/* zusätzliche Informationen ins Array einfügen */
$fieldValues['userID'] = $this->userID;
$fieldValues['insertDate'] = $messageAddTime;
$fieldValues['editDate'] = $messageAddTime;
$fieldValues['original'] = $originalMessage;
/*
* wenn ParentID gesetzt, dann Check. Falls Check negativ,
* Fehler und nichts wird eingefügt.
* Ansonsten wird ein Thread eröffnet.
*/
$result = false;
if($parentID != false) {
/* Antwort einfügen */
$parentCheck = $this->nestedSet_message->getNode($parentID, true);
if($parentCheck != false) {
$messageID = $this->nestedSet_message->createSubNode($parentID, $fieldValues);
$modifyUpdate = mysql_query("UPDATE ".TABLE."_forum_thread SET lastModified = '$messageAddTime', lastModifiedBy = '".$this->userID."' WHERE rootID = '".$parentCheck[root]."'");
$result = $messageID;
}
} else {
/* Thread starten */
$messageID = $this->nestedSet_message->createRootNode($fieldValues);
$result = $messageID;
}
return $result;
}
/**
* CB_Forum::addMessage()
*
* @param array $fieldValues
* @param mixed $parentID
* @return mixed
**/
function addThread($messageID, $categoryID = false) {
/* aktuelle Zeit ermitteln */
$threadAddTime = date("Y-m-d H:i:s");
$categoryQuery = $this->nestedSet_category->getNode($categoryID, true);
if(($categoryQuery == false)) {
/* Forum wurde nicht gefunden */
if($this->forumOption->getSingleOption("allow_top_level_posting") != 1) {
$errorType[] = 1;
}
} else {
if(!(FORUM_CATEGORY_WRITEABLE & $categoryQuery[options])) {
/* Forum ist nicht freigegeben zum schreiben */
$errorType[] = 2;
}
}
$result = 0;
if(count($errorType) == 0) {
$result = mysql_query("INSERT INTO ".TABLE."_forum_thread (rootID, categoryID, lastModified, , lastModifiedBy) VALUES ('$messageID', '$categoryID', '$threadAddTime', '".$this->userID."')");
}
return $result;
}
/**
* CB_Forum::updateMessage()
* Erneuert die Felder eines Beitrages
*
* @param int $messageID ID der zu ändernden Nachricht
* @param array $fieldValues Array mit Feldnamen und Werten
**/
function updateMessage($messageID, $fieldValues) {
/* aktuelle Zeit ermitteln */
$messageEditTime = date("Y-m-d H:i:s");
$originalMessage = mysql_escape_string($fieldValues['message']);
$fieldValues = $this->_checkFieldValues($fieldValues);
/* zusätzliche Informationen ins Array einfügen */
$fieldValues['editDate'] = $messageEditTime;
$fieldValues['original'] = $originalMessage;
/*
* wenn ParentID gesetzt, dann Check. Falls Check negativ,
* Fehler und nichts wird eingefügt.
* Ansonsten wird ein Thread eröffnet.
*/
if($messageID != "") {
/* Antwort einfügen */
$messageCheck = $this->nestedSet_message->getNode($messageID, true);
if($messageCheck != false) {
$result = mysql_query("UPDATE ".TABLE."_forum_thread SET lastModified = '$messageEditTime' WHERE rootID = '".$messageCheck[root]."'");
$this->nestedSet_message->updateNode($messageID, $fieldValues);
}
}
}
function getEditableContent($content) {
// unescape ' und "
$content = stripslashes($content);
// br2nl
$content = preg_replace( '!<br.*>!iU', "", $content );
return $content;
}
/**
* CB_Forum::getForumPath()
* liefert den Pfad vom aktuellen Forum zur Wurzel und sendet die
* Daten auch ans Template
*
* @param mixed $forumID ID des aktuellen Forums
* @param mixed $additionalSQL
* @return mixed $result Entweder Array mit Pfad Werten oder false
**/
function getForumPath($forumID = false, $additionalSQL = false) {
// Wurzel Eintrag definieren
$categoryPath['name'][] = "Top Level";
$categoryPath['id'][] = "noID";
if($forumID != false) {
// Pfad abrufen
$categoryPathQuery = $this->nestedSet_category->getPath($forumID, true, $additionalSQL);
// Pfad Result Set durchwandern
if($categoryPathQuery != false) {
foreach($categoryPathQuery as $v) {
$categoryPath['name'][] = $v[name];
$categoryPath['id'][] = $v[id];
}
}
}
return $categoryPath;
}
/**
* CB_Forum::_checkFieldValues()
* Sichert die Eingaben von Usern ab
* @param array $values Werte die abgesichert werden sollen
* @return array $values
**/
function _checkFieldValues($values) {
/*
* UserEingaben überprüfen
*/
foreach($values as $k => $v) {
/* HTML entfernen wenn es nicht erlaubt ist */
if($this->allowHTML != 1) {
$v = htmlspecialchars($v);
}
$v = nl2br($v);
/* wenn BB Code erlaubt ist, dann parsen */
if($this->allowBBCode) {
$this->bbCodeParser->setText($v);
$this->bbCodeParser->parse();
$v = $this->bbCodeParser->getParsed();
}
/* sichert die Eingabe für die Verarbeitung in MySQL */
$v = mysql_escape_string($v);
$values[$k] = $v;
}
return $values;
}
}
?>