Forum.php
Go to the documentation of this file.
00001 <?PHP 00002 # 00003 # FILE: SPT--Forum.php 00004 # 00005 # FUNCTIONS PROVIDED: 00006 # Forum->Forum($ForumId) 00007 # - constructor 00008 # Forum->ForumId() 00009 # Forum->ForumName() 00010 # Forum->ForumDescription() 00011 # Forum->TopicCount() 00012 # Forum->MessageCount() 00013 # Forum->ModeratorId() 00014 # - methods to retrieve resource attributes 00015 # 00016 # Part of the Scout Portal Toolkit 00017 # Copyright 2002 Internet Scout Project 00018 # http://scout.cs.wisc.edu 00019 # 00020 00026 class Forum { 00027 00028 # ---- PUBLIC INTERFACE -------------------------------------------------- 00029 00030 # Error codes for the forum object 00031 const OK = 0; 00032 const NONEXISTENT = 1; 00033 00036 00043 function Forum($ForumId = NULL) 00044 { 00045 $this->ErrorStatus = Forum::OK; 00046 # locate class in database 00047 $this->DB = new SPTDatabase(); 00048 $DB =& $this->DB; 00049 # if ID supplied 00050 if ($ForumId !== NULL) 00051 { 00052 $this->ForumId = intval($ForumId); 00053 $DB->Query("SELECT * FROM Forums WHERE ForumId = " 00054 .$this->ForumId); 00055 00056 # if row was loaded 00057 if ($DB->NumRowsSelected() > 0) 00058 { 00059 # set attributes to values returned by database 00060 $this->DBFields = $DB->FetchRow(); 00061 } 00062 else 00063 { 00064 $this->ErrorStatus = Forum::NONEXISTENT; 00065 } 00066 } 00067 elseif (func_num_args()==0) 00068 { 00069 # add record to database with that ID 00070 $DB->Query("INSERT INTO Forums (ForumId) VALUES (NULL)"); 00071 $this->ForumId = $DB->Query("SELECT LAST_INSERT_ID() AS ForumId" 00072 ." FROM Forums", "ForumId"); 00073 } 00074 else 00075 { 00076 $this->ErrorStatus = Forum::NONEXISTENT; 00077 } 00078 00079 } 00080 00084 function Delete() 00085 { 00086 if ($this->ErrorStatus == Forum::OK) 00087 { 00088 $this->DB->Query("Select * from Topics where ForumId = ". 00089 $this->ForumId." ORDER BY DateCreated Desc"); 00090 00091 # get list of topics for this forum 00092 while ($Entry = $this->DB->FetchRow()) 00093 { 00094 $Topic = new Topic($Entry["TopicId"]); 00095 $Topic->Delete(); 00096 } 00097 # delete record from database 00098 $this->DB->Query("DELETE FROM Forums WHERE ForumId = ".$this->ForumId); 00099 } 00100 } 00105 00110 function ForumId() { return $this->ForumId; } 00111 00116 function LastMessageDate() 00117 { 00118 $Message = GetLastMessage($this->ForumId()); 00119 if (isset($Message)) 00120 return $Message->DatePosted()." by "; 00121 else 00122 return "None"; 00123 } 00124 00129 function LastMessagePoster() 00130 { 00131 $Message = GetLastMessage($this->ForumId()); 00132 if (isset($Message)) 00133 return $Message->PosterName(); 00134 } 00135 00140 function LastMessagePosterEmail() 00141 { 00142 $Message = GetLastMessage($this->ForumId()); 00143 if (isset($Message)) 00144 return $Message->PosterEmail(); 00145 } 00146 00151 function ModeratorName() 00152 { 00153 $ModeratorName = new User($this->DB, (int)$this->ModeratorId()); 00154 return $ModeratorName->Get("UserName"); 00155 } 00156 00161 function ModeratorEmail() 00162 { 00163 $ModeratorName = new User($this->DB, (int)$this->ModeratorId()); 00164 return $ModeratorName->Get("EMail"); 00165 } 00166 00171 function GetTopicList() 00172 { 00173 $Topics = array(); 00174 00175 $this->DB->Query("Select * from Topics where ForumId = ". 00176 $this->ForumId." ORDER BY DateCreated Desc"); 00177 00178 # get list of topics for this forum 00179 while ($Entry = $this->DB->FetchRow()) 00180 { 00181 $Topics[$Entry["TopicId"]] = new Topic($Entry["TopicId"]); 00182 } 00183 return $Topics; 00184 } 00185 00191 function ForumName($NewValue = DB_NOVALUE) { return $this->UpdateValue("ForumName", $NewValue); } 00192 00198 function ForumDescription($NewValue = DB_NOVALUE) { return $this->UpdateValue("ForumDescription", $NewValue); } 00199 00205 function TopicCount($NewValue = DB_NOVALUE) { return $this->UpdateValue("TopicCount", $NewValue); } 00206 00212 function MessageCount($NewValue = DB_NOVALUE) { return $this->UpdateValue("MessageCount", $NewValue); } 00213 00219 function ModeratorId($NewValue = DB_NOVALUE) { return $this->UpdateValue("ModeratorId", $NewValue); } 00220 00225 function GetErrorStatus() { return $this->ErrorStatus; } 00226 00229 # ---- PRIVATE INTERFACE ------------------------------------------------- 00230 00231 private $ForumId; 00232 private $DB; 00233 private $DBFields; 00234 private $ErrorStatus; 00235 00236 # convenience function to supply parameters to Database->UpdateValue() 00237 private function UpdateValue($FieldName, $NewValue) 00238 { 00239 if ($this->ErrorStatus==Forum::OK) 00240 { 00241 return $this->DB->UpdateValue("Forums", $FieldName, $NewValue, 00242 "ForumId = '".$this->ForumId."'", $this->DBFields, TRUE); 00243 } 00244 else 00245 { 00246 return NULL; 00247 } 00248 } 00249 } 00250 00251 function GetLastMessage($ForumId) 00252 { 00253 $DB = new SPTDatabase(); 00254 $Query = "SELECT * FROM Topics WHERE ForumId = ".intval($ForumId); 00255 $DB->Query($Query); 00256 $LastMessage = NULL; 00257 00258 $MostRecent = "0001/01/01 00:00:00"; 00259 while ($Entry = $DB->FetchRow()) 00260 { 00261 $DB1 = new SPTDatabase(); 00262 $Query = "SELECT * from Messages where ParentId = ". 00263 intval($Entry["TopicId"]). 00264 " AND ParentType = 1 ORDER BY DatePosted DESC Limit 1"; 00265 $DB1->Query($Query); 00266 if ($DB1->NumRowsSelected() > 0) 00267 { 00268 $Record = $DB1->FetchRow(); 00269 $Message = new Message($Record["MessageId"]); 00270 if ($Message->DatePosted() > $MostRecent) 00271 { 00272 $LastMessage = $Message; 00273 $MostRecent = $Message->DatePosted(); 00274 } 00275 } 00276 } 00277 return $LastMessage; 00278 } 00279 00280 ?>