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 = $this->GetLastMessage();
00119         if (isset($Message))
00120             return $Message->DatePosted()." by ";
00121         else
00122             return "None";
00123     }
00124 
00129     function LastMessagePoster()
00130     {
00131         $Message = $this->GetLastMessage();
00132         if (isset($Message))
00133             return $Message->PosterName();
00134     }
00135 
00140     function LastMessagePosterEmail()
00141     {
00142         $Message = $this->GetLastMessage();
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 
00190     function GetLastMessage()
00191     {
00192         $Message = NULL;
00193 
00194         $this->DB->Query("
00195             SELECT M.* FROM Messages M
00196             LEFT JOIN Topics T
00197             ON M.ParentId = T.TopicId
00198             WHERE M.ParentType = ".addslashes(Message::PARENTTYPE_TOPIC)."
00199             AND T.ForumId = '".addslashes($this->ForumId)."'
00200             ORDER BY DatePosted DESC
00201             LIMIT 1");
00202 
00203         if ($this->DB->NumRowsSelected())
00204         {
00205             $Row = $this->DB->FetchRow();
00206             $Message = new Message($Row["MessageId"]);
00207         }
00208 
00209         return $Message;
00210     }
00211 
00217    function ForumName($NewValue = DB_NOVALUE) {  return $this->UpdateValue("ForumName", $NewValue);  }
00218 
00224    function ForumDescription($NewValue = DB_NOVALUE) {  return $this->UpdateValue("ForumDescription", $NewValue);  }
00225 
00231    function TopicCount($NewValue = DB_NOVALUE) {  return $this->UpdateValue("TopicCount", $NewValue);  }
00232 
00238    function MessageCount($NewValue = DB_NOVALUE) {  return $this->UpdateValue("MessageCount", $NewValue);  }
00239 
00245    function ModeratorId($NewValue = DB_NOVALUE) {  return $this->UpdateValue("ModeratorId", $NewValue);  }
00246 
00251    function GetErrorStatus() { return $this->ErrorStatus; }
00252 
00255     # ---- PRIVATE INTERFACE -------------------------------------------------
00256 
00257    private $ForumId;
00258    private $DB;
00259    private $DBFields;
00260    private $ErrorStatus;
00261 
00262    # convenience function to supply parameters to Database->UpdateValue()
00263    private function UpdateValue($FieldName, $NewValue)
00264    {
00265        if ($this->ErrorStatus==Forum::OK)
00266        {
00267            return $this->DB->UpdateValue("Forums", $FieldName, $NewValue,
00268                                          "ForumId = '".$this->ForumId."'", $this->DBFields, TRUE);
00269        }
00270        else
00271        {
00272            return NULL;
00273        }
00274    }
00275 }