Location: PHPKode > projects > Content*Builder > contentbuilder/lib/CB_Forum.class.php
<?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;
	}
}

?>
Return current item: Content*Builder