Fifth pass at adding key files
This commit is contained in:
		
							
								
								
									
										406
									
								
								site/roadshow/rating/classes/database.class.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										406
									
								
								site/roadshow/rating/classes/database.class.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,406 @@
 | 
			
		||||
<?php
 | 
			
		||||
  //////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
  // Database Class 
 | 
			
		||||
  //============================================================================
 | 
			
		||||
  // Dependencies:
 | 
			
		||||
  //----------------------------------------------------------------------------
 | 
			
		||||
  // None
 | 
			
		||||
  //============================================================================
 | 
			
		||||
  // Modification History:
 | 
			
		||||
  //----------------------------------------------------------------------------
 | 
			
		||||
  // 2006-11-04: Created
 | 
			
		||||
  //////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
  class Database extends Error
 | 
			
		||||
  {
 | 
			
		||||
    ## CONSTANT VARIABLES
 | 
			
		||||
      const DB_TYPES = 'mysql,mysqli'; // NO SPACES!
 | 
			
		||||
    ## END CONSTANT VARIABLES
 | 
			
		||||
    
 | 
			
		||||
    ## PUBLIC VARIABLES
 | 
			
		||||
    ## END PUBLIC VARIABLES
 | 
			
		||||
    
 | 
			
		||||
    ## PRIVATE VARIABLES
 | 
			
		||||
      private static $host;
 | 
			
		||||
      private static $port;
 | 
			
		||||
      private static $database;
 | 
			
		||||
      private static $username;
 | 
			
		||||
      private static $password;
 | 
			
		||||
      private static $type;
 | 
			
		||||
      private static $connection;
 | 
			
		||||
      private static $savedQueries;
 | 
			
		||||
      private static $savedResults;
 | 
			
		||||
    ## END PRIVATE VARIABLES
 | 
			
		||||
    
 | 
			
		||||
    ## CONSTRUCTOR
 | 
			
		||||
    ## END CONSTRUCTOR
 | 
			
		||||
    
 | 
			
		||||
    ## DECONSTRUCTOR
 | 
			
		||||
    ## END DECONSTRUCTOR
 | 
			
		||||
    
 | 
			
		||||
    ## PUBLIC METHODS
 | 
			
		||||
      // Initialize the Variables
 | 
			
		||||
      // Does not return anything, but acts like a constructor for Static classes
 | 
			
		||||
      public static function Initialize($varType, $varHost, $varPort, $varDatabase, $varUsername, $varPassword)
 | 
			
		||||
      {
 | 
			
		||||
        Error::Initialize();
 | 
			
		||||
        
 | 
			
		||||
        if (!self::ValidDatabaseTypes($varType))
 | 
			
		||||
        {
 | 
			
		||||
          Error::LogError("Database Type Invalid", "Database Type must be one of: " . self::DB_TYPES);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        self::$host         = $varHost;
 | 
			
		||||
        self::$port         = $varPort;
 | 
			
		||||
        self::$type         = strtolower($varType);
 | 
			
		||||
        self::$database     = $varDatabase;
 | 
			
		||||
        self::$password     = $varPassword;
 | 
			
		||||
        self::$username     = $varUsername;
 | 
			
		||||
        self::$savedQueries = array();
 | 
			
		||||
        self::$savedResults = array();
 | 
			
		||||
        self::$connection   = self::ConnectToDatabase();
 | 
			
		||||
        
 | 
			
		||||
        self::SelectTheDatabase();
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // DeInitialize the Variables
 | 
			
		||||
      // Does not return anything, but acts like a destructor for Static classes
 | 
			
		||||
      public static function DeInitialize()
 | 
			
		||||
      {
 | 
			
		||||
        // Remove Saved Queries
 | 
			
		||||
        for ($saved = 0; $saved < sizeof(self::$savedQueries); $saved++)
 | 
			
		||||
        {
 | 
			
		||||
          unset(self::$savedQueries[$saved]);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Remove Saved Results
 | 
			
		||||
        for ($saved = 0; $saved < sizeof(self::$savedResults); $saved++)
 | 
			
		||||
        {
 | 
			
		||||
          unset(self::$savedResults[$saved]);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Close the Database Connection
 | 
			
		||||
        switch (self::$type)
 | 
			
		||||
        {
 | 
			
		||||
          case "mysql":
 | 
			
		||||
            @mysql_close(self::$connection) or Error::LogError("MySQL Failed to Close", mysql_error(self::$connection));
 | 
			
		||||
            break;
 | 
			
		||||
          case "mysqli":
 | 
			
		||||
            @mysqli_close(self::$connection) or Error::LogError("MySQL Failed to Close", mysqli_error(self::$connection));
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Destroy Variables
 | 
			
		||||
        self::$host         = null;
 | 
			
		||||
        self::$port         = null;
 | 
			
		||||
        self::$type         = null;
 | 
			
		||||
        self::$database     = null;
 | 
			
		||||
        self::$password     = null;
 | 
			
		||||
        self::$username     = null;
 | 
			
		||||
        self::$connection   = null;
 | 
			
		||||
        self::$savedQueries = null;
 | 
			
		||||
        self::$savedResults = null;
 | 
			
		||||
        Error::DeInitialize();
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Database Types
 | 
			
		||||
      // Returns an array of database types
 | 
			
		||||
      public static function DatabaseTypes()
 | 
			
		||||
      {
 | 
			
		||||
        return split(",", self::DB_TYPES);
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Build Order By
 | 
			
		||||
      // Returns the SQL Syntax for ORDER BY
 | 
			
		||||
      public static function BuildOrderBy($varColumnName, $varDirection)
 | 
			
		||||
      {
 | 
			
		||||
        $orderby = "";
 | 
			
		||||
        if (self::$connection)
 | 
			
		||||
        {
 | 
			
		||||
          switch (self::$type)
 | 
			
		||||
          {
 | 
			
		||||
            case "mysql":
 | 
			
		||||
            case "mysqli":
 | 
			
		||||
              $orderby = "ORDER BY `{$varColumnName}` {$varDirection}";
 | 
			
		||||
              break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return $orderby;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Build Limit
 | 
			
		||||
      // Returns the SQL Syntax for LIMIT
 | 
			
		||||
      public static function BuildLimit($varStartingRow, $varNumberOfRows)
 | 
			
		||||
      {
 | 
			
		||||
        $limit = "";
 | 
			
		||||
        if (self::$connection)
 | 
			
		||||
        {
 | 
			
		||||
          switch (self::$type)
 | 
			
		||||
          {
 | 
			
		||||
            case "mysql":
 | 
			
		||||
            case "mysqli":
 | 
			
		||||
              $limit = "LIMIT {$varStartingRow}, {$varNumberOfRows}";
 | 
			
		||||
              break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return $limit;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Execute SQL Query
 | 
			
		||||
      // Returns the result of the query, which is typically a resource id
 | 
			
		||||
      public static function ExecuteQuery($sql, $name)
 | 
			
		||||
      {
 | 
			
		||||
        if (self::$connection)
 | 
			
		||||
        {
 | 
			
		||||
          if (strlen(trim($name)) != 0)
 | 
			
		||||
          {
 | 
			
		||||
            switch (self::$type)
 | 
			
		||||
            {
 | 
			
		||||
              case "mysql":
 | 
			
		||||
                if (!array_key_exists($name, self::$savedQueries))
 | 
			
		||||
                {
 | 
			
		||||
                  self::$savedQueries[$name] = @mysql_query($sql, self::$connection) or Error::LogError("Query Failed", mysql_error(self::$connection));
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
              case "mysqli":
 | 
			
		||||
                if (!array_key_exists($name, self::$savedQueries))
 | 
			
		||||
                {
 | 
			
		||||
                  self::$savedQueries[$name] = @mysqli_query(self::$connection, $sql) or Error::LogError("Query Failed", mysqli_error(self::$connection));
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            return self::$savedQueries[$name];
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            Error::LogError("Execute Query Name Missing", "The name parameter was empty, please provide a name for the query.");
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return null;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Fetch Results
 | 
			
		||||
      // Returns an array of the query results
 | 
			
		||||
      public static function FetchResults($name)
 | 
			
		||||
      {
 | 
			
		||||
        $results = array();
 | 
			
		||||
        if (self::$connection)
 | 
			
		||||
        {
 | 
			
		||||
          if (strlen(trim($name)) != 0 && (array_key_exists($name, self::$savedQueries) || array_key_exists($name, self::$savedResults)))
 | 
			
		||||
          {
 | 
			
		||||
            if (array_key_exists($name, self::$savedQueries))
 | 
			
		||||
            {
 | 
			
		||||
              switch (self::$type)
 | 
			
		||||
              {
 | 
			
		||||
                case "mysql":
 | 
			
		||||
                  $row = 0;
 | 
			
		||||
                  while ($currentResult = @mysql_fetch_assoc(self::$savedQueries[$name]))
 | 
			
		||||
                  {
 | 
			
		||||
                    $col = 0;
 | 
			
		||||
                    foreach ($currentResult as $key => $value)
 | 
			
		||||
                    {
 | 
			
		||||
                      $results[$row][$col] = $value;
 | 
			
		||||
                      $results[$row][$key] = $value;
 | 
			
		||||
                      $col++;
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    $row++;
 | 
			
		||||
                  }
 | 
			
		||||
                  break;
 | 
			
		||||
                case "mysqli":
 | 
			
		||||
                  $row = 0;
 | 
			
		||||
                  while ($currentResult = @mysqli_fetch_assoc(self::$savedQueries[$name]))
 | 
			
		||||
                  {
 | 
			
		||||
                    $col = 0;
 | 
			
		||||
                    foreach ($currentResult as $key => $value)
 | 
			
		||||
                    {
 | 
			
		||||
                      $results[$row][$col] = $value;
 | 
			
		||||
                      $results[$row][$key] = $value;
 | 
			
		||||
                      $col++;
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    $row++;
 | 
			
		||||
                  }
 | 
			
		||||
                  break;
 | 
			
		||||
              }
 | 
			
		||||
            
 | 
			
		||||
              self::$savedResults[$name] = $results;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              $results = self::$savedResults[$name];
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            if (strlen(trim($name)) == 0)
 | 
			
		||||
            {
 | 
			
		||||
              Error::LogError("Fetch Results Name Missing", "The name parameter was empty, the name is required so it knows which results to return.");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              Error::LogError("Fetch Results Name ('{$name}') Not Found", "The name provided did not have any query results associated with it.");
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return $results;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Free SQL Query Results
 | 
			
		||||
      // Returns nothing
 | 
			
		||||
      public static function FreeResults($name)
 | 
			
		||||
      {
 | 
			
		||||
        if (self::$connection)
 | 
			
		||||
        {
 | 
			
		||||
          if (strlen(trim($name)) != 0 && array_key_exists($name, self::$savedQueries))
 | 
			
		||||
          {
 | 
			
		||||
            switch (self::$type)
 | 
			
		||||
            {
 | 
			
		||||
              case "mysql":
 | 
			
		||||
                @mysql_free_result(self::$savedQueries[$name]) or Error::LogError("Free Results Error", mysql_error(self::$connection));
 | 
			
		||||
                unset(self::$savedQueries[$name]);
 | 
			
		||||
                break;
 | 
			
		||||
              case "mysqli":
 | 
			
		||||
                @mysqli_free_result(self::$savedQueries[$name]) or Error::LogError("Free Results Error", mysqli_error(self::$connection));
 | 
			
		||||
                unset(self::$savedQueries[$name]);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            if (strlen(trim($name)) == 0)
 | 
			
		||||
            {
 | 
			
		||||
              Error::LogError("Free Results Name Missing", "The name parameter was empty, the name is required so it knows which results to free up from memory.");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              Error::LogWarning("Free Results Name ('{$name}') Not Found", "The name provided did not have any query results associated with it.");
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Remove Saved Results
 | 
			
		||||
      // Returns nothing
 | 
			
		||||
      public static function RemoveSavedResults($name)
 | 
			
		||||
      {
 | 
			
		||||
        if (strlen(trim($name)) != 0 && array_key_exists($name, self::$savedResults))
 | 
			
		||||
        {
 | 
			
		||||
          unset(self::$savedResults[$name]);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          if (strlen(trim($name)) == 0)
 | 
			
		||||
          {
 | 
			
		||||
            Error::LogError("Remove Saved Result Name Missing", "The name parameter was empty, the name is required so it knows which query to remove.");
 | 
			
		||||
          }
 | 
			
		||||
          else
 | 
			
		||||
          {
 | 
			
		||||
            Error::LogWarning("Remove Saved Result Name ('{$name}') Not Found", "The name provided was not a saved query.");
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Attempt Connect To Database
 | 
			
		||||
      // Returns true or false depending on if the connection failed or succeeded
 | 
			
		||||
      public static function AttemptConnectToDatabase($varType, $varHost, $varPort, $varDatabase, $varUsername, $varPassword)
 | 
			
		||||
      {
 | 
			
		||||
        self::$type       = $varType;
 | 
			
		||||
        self::$host       = $varHost;
 | 
			
		||||
        self::$port       = $varPort;
 | 
			
		||||
        self::$database   = $varDatabase;
 | 
			
		||||
        self::$username   = $varUsername;
 | 
			
		||||
        self::$password   = $varPassword;
 | 
			
		||||
        
 | 
			
		||||
        Error::ClearErrors();
 | 
			
		||||
        self::$connection = self::ConnectToDatabase();
 | 
			
		||||
        
 | 
			
		||||
        if (!Error::HasErrors())
 | 
			
		||||
        {
 | 
			
		||||
          return true;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // MySQL Version
 | 
			
		||||
      // Returns the mysql version number
 | 
			
		||||
      public static function MysqlVersion()
 | 
			
		||||
      {
 | 
			
		||||
        $version = "";
 | 
			
		||||
        if (self::$connection)
 | 
			
		||||
        {
 | 
			
		||||
          switch (self::$type)
 | 
			
		||||
          {
 | 
			
		||||
            case "mysql":
 | 
			
		||||
              $version = mysql_get_server_info(self::$connection);
 | 
			
		||||
              break;
 | 
			
		||||
            case "mysqli":
 | 
			
		||||
              $version = mysqli_get_server_info(self::$connection);
 | 
			
		||||
              break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return $version;
 | 
			
		||||
      }
 | 
			
		||||
    ## END PUBLIC METHODS
 | 
			
		||||
    
 | 
			
		||||
    ## PRIVATE METHODS
 | 
			
		||||
      // Connect to Database
 | 
			
		||||
      // Returns the database connection resource
 | 
			
		||||
      private static function ConnectToDatabase()
 | 
			
		||||
      {
 | 
			
		||||
        $link = null;
 | 
			
		||||
        
 | 
			
		||||
        switch (self::$type)
 | 
			
		||||
        {
 | 
			
		||||
          case "mysql":
 | 
			
		||||
            if (strlen(trim(self::$port)) != 0)
 | 
			
		||||
            {
 | 
			
		||||
              $link = mysql_connect(self::$host . ":" . self::$port, self::$username, self::$password) or Error::LogError("Database Error", mysql_error());
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
              $link = mysql_connect(self::$host, self::$username, self::$password) or Error::LogError("Database Error", mysql_error());
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          case "mysqli":
 | 
			
		||||
            $link = mysqli_connect(self::$host, self::$username, self::$password, self::$database, self::$port) or Error::LogError("Database Error", mysqli_connect_error());
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return $link;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Select the Database
 | 
			
		||||
      // Returns nothing
 | 
			
		||||
      private static function SelectTheDatabase()
 | 
			
		||||
      {
 | 
			
		||||
        switch (self::$type)
 | 
			
		||||
        {
 | 
			
		||||
          case "mysql":
 | 
			
		||||
            @mysql_select_db(self::$database, self::$connection) or Error::LogError("Database Selection", mysql_error(self::$connection));
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      // Valid Database Types
 | 
			
		||||
      // Returns true or false depending on if the database type is valid
 | 
			
		||||
      private static function ValidDatabaseTypes($varType)
 | 
			
		||||
      {
 | 
			
		||||
        $types = split(',', str_replace(" ", "", self::DB_TYPES));
 | 
			
		||||
        
 | 
			
		||||
        return in_array($varType, $types);
 | 
			
		||||
      }
 | 
			
		||||
    ## END PRIVATE METHODS
 | 
			
		||||
    
 | 
			
		||||
    ## PROTECTED METHODS
 | 
			
		||||
    ## END PROTECTED METHODS
 | 
			
		||||
  }
 | 
			
		||||
?>
 | 
			
		||||
		Reference in New Issue
	
	Block a user