Search:

CWIS Developers Documentation

  • Main Page
  • Classes
  • Files
  • File List
  • File Members

EventLog.php

Go to the documentation of this file.
00001 <?PHP
00002 
00003 #
00004 #   FILE:  Scout--EventLog.php
00005 #
00006 #   METHODS PROVIDED:
00007 #       EventLog()
00008 #           - constructor
00009 #       SomeMethod($SomeParameter, $AnotherParameter)
00010 #           - short description of method
00011 #
00012 #   AUTHOR:  Edward Almasy
00013 #
00014 #   Copyright 2007 Internet Scout
00015 #   http://scout.wisc.edu
00016 #
00017 
00018 
00022 class EventLog {
00023 
00024     # ---- PUBLIC INTERFACE --------------------------------------------------
00025 
00033     function EventLog($DB, $UserId = -1, $LoggingEnabled = TRUE)
00034     {
00035         $this->DB = $DB;
00036         $this->Enabled = $LoggingEnabled;
00037         $this->UserId = intval($UserId);
00038     }
00039 
00046     function Log($Type, $DataOne = "", $DataTwo = "")
00047     {
00048         # if logging is turned on
00049         if ($this->Enabled)
00050         {
00051             # write event out to log
00052             $this->DB->Query("INSERT INTO EventLog"
00053                     ." (EventType, EventDate, UserId, DataOne, DataTwo) VALUES"
00054                     ." (".intval($Type).", NOW(), ".$this->UserId.","
00055                         ." '".addslashes($DataOne)."',"
00056                         ." '".addslashes($DataTwo)."')");
00057         }
00058     }
00059 
00072     function FindEvents(
00073             $StartDate = NULL, $EndDate = NULL, $EventCount = 999999999, $EventType)
00074     {
00075         # retrieve arguments (if supplied)
00076         $StartDate = NULL;
00077         $EndDate = NULL;
00078         $StartIndex = 0;
00079         $EventCount = 100;
00080         $Types = array();
00081         $Args = func_get_args();
00082         if (count($Args)) {  $StartDate = array_shift($Args);  }
00083         if (count($Args)) {  $EndDate = array_shift($Args);  }
00084         if (count($Args)) {  $StartIndex = array_shift($Args);  }
00085         if (count($Args)) {  $EventCount = array_shift($Args);  }
00086         while (count($Args))
00087         {
00088             $Types[] = array_shift($Args);
00089         }
00090 
00091         # add start and/or end date to query condition (if supplied)
00092         $Conditions = "";
00093         if ($StartDate)
00094         {  
00095             $Conditions .= " EventDate >= '".addslashes($StartDate)."'";
00096         }
00097         if ($EndDate) 
00098         {  
00099             $Conditions .= (strlen($Conditions) ? " AND" : "")
00100                     ." EventDate <= '".addslashes($EndDate)."'";
00101         }
00102 
00103         # add event types to query condition (if supplied)
00104         $SubCondition = "";
00105         foreach ($Types as $Type)
00106         {
00107             $SubCondition .= (strlen($SubCondition) ? " OR" : "")
00108                     ." EventType = ".intval($Type);
00109         }
00110         if (strlen($SubCondition))
00111         {
00112             $Conditions .= (strlen($Conditions) ? " AND" : "")
00113                     ." (".$SubCondition.")";
00114         }
00115 
00116         # if user privilege exclusions have been specified
00117         if (isset($this->ExcludedPrivilegesForFind))
00118         {
00119             # add beginning of exclusion conditions and subquery
00120             $Conditions .= (strlen($Conditions) ? " AND" : "")
00121                     ." UserId NOT IN (SELECT UserId FROM APUserPrivileges WHERE ";
00122 
00123             # add subquery condition for each exclusion
00124             $Connector = "";
00125             foreach ($this->ExcludedPrivilegesForFind as $Exclusion)
00126             {
00127                 $Conditions .= $Connector."Privilege "
00128                         .$Exclusion["Operator"]." ".$Exclusion["Value"];
00129                 $Connector = " OR ";
00130             }
00131 
00132             # close out subquery condition
00133             $Conditions .= ")";
00134         }
00135 
00136         # if SQL query conditions have been specified
00137         if (isset($this->ConditionsForFind))
00138         {
00139             # add conditions to condition string
00140             foreach ($this->ConditionsForFind as $Condition)
00141             {
00142                 $Conditions .= (strlen($Conditions) ? " AND " : " ").$Condition;
00143             }
00144         }
00145 
00146         # build event query
00147         $Query = "SELECT * FROM EventLog"
00148                 .(strlen($Conditions) ? " WHERE ".$Conditions : "")
00149                 ." ORDER BY EventDate DESC LIMIT ".$StartIndex.", ".$EventCount;
00150 
00151         # run query and retrieve event information
00152         $this->DB->Query($Query);
00153         $Events = array();
00154         while ($EventInfo = $this->DB->FetchRow()) {  $Events[] = $EventInfo;  }
00155 
00156         # return event information to caller
00157         return $Events;
00158     }
00159 
00169     function ExcludeUsersWithPrivilegesForFind($Operator, $Value)
00170     {
00171         # if caller requested clear
00172         if (($Operator === NULL) && ($Value === NULL))
00173         {
00174             # clear exclusions
00175             unset($this->ExcludedPrivilegesForFind);
00176         }
00177         else
00178         {
00179             # add specified exclusion
00180             $Exclusion["Operator"] = $Operator;
00181             $Exclusion["Value"] = $Value;
00182             $this->ExcludedPrivilegesForFind[] = $Exclusion;
00183         }
00184     }
00185 
00192     function AddSqlConditionForFind($Conditions)
00193     {
00194         # if caller requested clear
00195         if ($Conditions === NULL)
00196         {
00197             # clear all conditions
00198             unset($this->ConditionsForFind);
00199         }
00200         else
00201         {
00202             # convert condition to array if only one specified
00203             if (!is_array($Conditions)) {  $Conditions = array($Conditions);  }
00204 
00205             # add conditions to list
00206             $this->ConditionsForFind = isset($this->ConditionsForFind)
00207                     ? array_merge($this->ConditionsForFind, $Conditions)
00208                     : $Conditions;
00209         }
00210     }
00211 
00217     function LimitFindToUser($UserId = NULL)
00218     {
00219         if ($UserId === NULL)
00220         {
00221             $UserId = $this->UserId;
00222         }
00223         $this->AddSqlConditionForFind("UserId = ".intval($UserId));
00224     }
00225     
00236     function ModifyEvents($EventType, $EventDate, $UserId, 
00237             $DataOne = NULL, $DataTwo = NULL, $Condition = NULL)
00238     {
00239         if ($DataOne || $DataTwo)
00240         {
00241             $this->DB->Query("UPDATE EventLog SET"
00242                     .($DataOne ? " DataOne = '".addslashes($DataOne)."'" : "")
00243                     .(($DataOne && $DataTwo) ? ", " : "")
00244                     .($DataTwo ? " DataTwo = '".addslashes($DataTwo)."'" : "")
00245                     ." WHERE EventType = '".addslashes($EventType)."'"
00246                         ." AND EventDate = '".addslashes($EventDate)."'"
00247                         ." AND UserId = '".addslashes($UserId)."'");
00248         }
00249     }
00250 
00251 
00252     # ---- PRIVATE INTERFACE -------------------------------------------------
00253 
00254     private $DB;
00255     private $Enabled;
00256     private $UserId;
00257     private $ExcludedPrivilegesForFind;
00258     private $ConditionsForFind;
00259 
00260 }
00261 
00262 
00263 ?>
CWIS logo doxygen
Copyright 2009 Internet Scout