Update version.php to 3.3.0
[isso.git] / Functions.php
index 18e19e8efd5ac4e91d4f22684b75003b4ce63bad..fcd14f9ac8360e60ce7bfd3e01087e9878ccadbd 100644 (file)
@@ -2,7 +2,7 @@
 /*=====================================================================*\
 || ###################################################################
 || # Blue Static ISSO Framework
-|| # Copyright (c)2005-2008 Blue Static
+|| # Copyright (c)2005-2009 Blue Static
 || #
 || # This program is free software; you can redistribute it and/or modify
 || # it under the terms of the GNU General Public License as published by
 \*=====================================================================*/
 
 /**
-* Static functions (Functions.php)
-*
-* @package     ISSO
-*/
+ * Static functions (Functions.php)
+ *
+ * @package    ISSO
+ */
 
 /**
-* Functions
-*
-* This is a bunch of static functions. This class is singleton so it
-* can store data while remaining static.
-*
-* @author              Blue Static
-* @copyright   Copyright (c)2005 - 2008, Blue Static
-* @package             ISSO
-* 
-*/
+ * Functions
+ *
+ * This is a bunch of static functions wrapped in a class for modularity and
+ * namespace collisions.
+ *
+ * @author             Blue Static
+ * @copyright  Copyright (c)2005 - 2009, Blue Static
+ * @package            ISSO
+ 
+ */
 class BSFunctions
 {
        /**
-       * Singleton instance
-       * @var  object
-       */
-       private static $instance;
+        * Make class static
+        */
+       private function __construct()
+       {}
        
        /**
-       * Cookie path
-       * @var  string
-       */
-       private $cookiePath = '/';
+        * Sets a cookie in the user's computer/browing session
+        *
+        * @param       string  Name of the cookie
+        * @param       string  Value of the cookie
+        * @param       integer Timeout in seconds for non-sticky cookies. Can also be ::COOKIE_EXPIRE or ::COOKIE_STICKY
+        * @param       string  Cookie path
+        * @param       string  Domain
+        */
+       const COOKIE_EXPIRE = -1;
+       const COOKIE_STICKY = -2;
        
-       /**
-       * Cookie domain setting
-       * @var  string
-       */
-       private $cookieDomain = '';
-       
-       /**
-       * Cookie expiration time
-       * @var  integer
-       */
-       private $cookieTimeout = 900;
-       
-       /**
-       * Current swapped CSS class
-       * @var  string
-       */
-       public static $cssClass = '';
-       
-       // ###################################################################
-       /**
-       * Constructor
-       */
-       private function __construct() {}
-       
-       // ###################################################################
-       /**
-       * Returns the shared instance for singleton
-       *
-       * @return       object  Shared instance
-       */
-       private function _instance()
-       {
-               if (!self::$instance)
-               {
-                       self::$instance = new BSFunctions();
-               }               
-               return self::$instance;
-       }
-       
-       // ###################################################################
-       /**
-       * Sets the cookie path
-       *
-       * @param        string  New path
-       */
-       public static function set_cookie_path($path)
-       {
-               self::_instance()->cookiePath = $path;
-       }
-       
-       // ###################################################################
-       /**
-       * Sets the cookie domain setting
-       *
-       * @param        string  Cookie domain
-       */
-       public static function set_cookie_domain($domain)
-       {
-               self::_instance()->cookieDomain = $domain;
-       }
-       
-       // ###################################################################
-       /**
-       * Sets the cookie timeout
-       *
-       * @param        integer Cookie timeout
-       */
-       public static function set_cookie_timeout($timeout)
-       {
-               self::_instance()->cookieTimeout = intval($timeout);
-       }
-       
-       // ###################################################################
-       /**
-       * Sets a cookie in the user's computer/browing session
-       *
-       * @param        string  Name of the cookie
-       * @param        string  Value of the cookie, FALSE to clear
-       * @param        bool    Is the cookie permanent?
-       */
-       public static function cookie($name, $value, $sticky = true)
+       public static function cookie($name, $value, $timeout = 900, $path = '/', $domain = '')
        {
                // expire the cookie
-               if ($value === false)
+               if ($timeout == self::COOKIE_EXPIRE)
                {
-                       setcookie($name, $value, time() - (2 * self::_instance()->cookieTimeout), self::_instance()->cookiePath, self::_instance()->cookieDomain);
+                       setcookie($name, $value, time() - 1800, $path, $domain);
                }
                // set the cookie
                else
                {
-                       if ($sticky)
+                       // it's sticky so keep it around for a while
+                       if ($timeout == self::COOKIE_STICKY)
                        {
                                $expire = time() + 60 * 60 * 24 * 365;
                        }
                        else
                        {
-                               $expire = time() + self::_instance()->cookieTimeout;
+                               $expire = time() + $timeout;
                        }
                        
-                       setcookie($name, $value, $expire, self::_instance()->cookiePath, self::_instance()->cookieDomain);
+                       setcookie($name, $value, $expire, $path, $domain);
                }
        }
        
-       // ###################################################################
        /**
-       * Alternate between two CSS classes
-       *
-       * @param        string  First CSS class name
-       * @param        string  Second CSS class name
-       */
+        * Alternate between two CSS classes
+        *
+        * @param       string  First CSS class name
+        * @param       string  Second CSS class name
+        */
        public static function swap_css_classes($class1 = 'alt1', $class2 = 'alt2')
        {
                static $count;
-               
-               self::$cssClass = ($count % 2) ? $class1 : $class2;
-               $count++;
+               return ($count++ % 2) ? $class1 : $class2;
        }
        
-       // ###################################################################
        /**
-       * Returns the 'source path' version of a file path. It adds a
-       * directory separator to the end of a string if it does not already
-       * exist.
-       *
-       * @param        string  Path
-       *
-       * @return       string  Path with directory separator ending
-       */
+        * Returns the 'source path' version of a file path. It adds a
+        * directory separator to the end of a string if it does not already
+        * exist.
+        *
+        * @param       string  Path
+        *
+        * @return      string  Path with directory separator ending
+        */
        public static function fetch_source_path($source)
        {
                if (substr($source, strlen($source) - 1) != DIRECTORY_SEPARATOR)
@@ -187,14 +110,13 @@ class BSFunctions
                return $source;
        }
        
-       // ###################################################################
        /**
-       * Force-download a file by sending application/octetstream
-       *
-       * @param        string  The text of the file to be streamed
-       * @param        string  File name of the new file
-       * @param        bool    Whether or not to die after stringeaming the file
-       */
+        * Force-download a file by sending application/octetstream
+        *
+        * @param       string  The text of the file to be streamed
+        * @param       string  File name of the new file
+        * @param       bool    Whether or not to die after stringeaming the file
+        */
        public static function download_file($file, $name, $exit = true)
        {
                header("Content-Type: application/octetstream");
@@ -213,35 +135,26 @@ class BSFunctions
                }
        }
        
-       // ###################################################################
        /**
-       * Verify that an email address is valid via regex
-       *
-       * @param        string  An email address
-       *
-       * @return       bool    Validity of the email address
-       */
+        * Verify that an email address is valid via regex
+        *
+        * @param       string  An email address
+        *
+        * @return      bool    Validity of the email address
+        */
        public static function is_valid_email($email)
        {
-               if (preg_match('#^[a-z0-9\.\-\+_]+?@(.*?\.)*?[a-z0-9\-_]+?\.[a-z]{2,4}$#i', $email))
-               {
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
+               return (preg_match('#^[a-z0-9\.\-\+_]+?@(.*?\.)*?[a-z0-9\-_]+?\.[a-z]{2,4}$#i', $email));
        }
        
-       // ###################################################################
        /**
-       * Generates a random string of random length (unless otherwise
-       * specified)
-       *
-       * @param        integer Optional length
-       *
-       * @return       string  A random string
-       */
+        * Generates a random string of random length (unless otherwise
+        * specified)
+        *
+        * @param       integer Optional length
+        *
+        * @return      string  A random string
+        */
        public static function random($length = 0)
        {
                // length wasn't provided, so create our own
@@ -271,16 +184,15 @@ class BSFunctions
                return $string;
        }
        
-       // ###################################################################
        /**
-       * Sets the current array position to be the specified key. This
-       * function should be avoided on large arrays.
-       *
-       * @param        array   The array whose counter is to be updated
-       * @param        mixed   The key of the element of the array that the counter is to be set to
-       *
-       * @return       mixed   Return the elelment of the array that we just put the counter to
-       */
+        * Sets the current array position to be the specified key. This
+        * function should be avoided on large arrays.
+        *
+        * @param       array   The array whose counter is to be updated
+        * @param       mixed   The key of the element of the array that the counter is to be set to
+        *
+        * @return      mixed   Return the elelment of the array that we just put the counter to
+        */
        public static function array_set_current(&$array, $key)
        {
                reset($array);
@@ -295,15 +207,14 @@ class BSFunctions
                return current($array);
        }
        
-       // ###################################################################
        /**
-       * Calculates the microtime difference by taking a given microtime and
-       * subtracting it from the current one
-       *
-       * @param        string  The start microtime
-       *
-       * @return       float   Microtime difference
-       */
+        * Calculates the microtime difference by taking a given microtime and
+        * subtracting it from the current one
+        *
+        * @param       string  The start microtime
+        *
+        * @return      float   Microtime difference
+        */
        public static function fetch_microtime_diff($mtstart)
        {
                $mtend = microtime();
@@ -312,15 +223,14 @@ class BSFunctions
                return ($endMicro + $endSec) - ($startMicro + $startSec);
        }
        
-       // ###################################################################
        /**
-       * Fetches the extension of a file by extracting everything after the
-       * last period
-       *
-       * @param        string  Filename
-       *
-       * @return       string  The extension for the specifid file name
-       */
+        * Fetches the extension of a file by extracting everything after the
+        * last period
+        *
+        * @param       string  Filename
+        *
+        * @return      string  The extension for the specifid file name
+        */
        public static function fetch_extension($filename)
        {
                $array = explode('.', $filename);
@@ -333,14 +243,13 @@ class BSFunctions
                return strval(end($array));
        }
        
-       // ###################################################################
        /**
-       * Gets the maximum file size for attachment uploading, as specified by
-       * PHP. If no value is present, 10 MB (represented in bytes) is
-       * returned.
-       *
-       * @return       integer The maximum file upload size in bytes
-       */
+        * Gets the maximum file size for attachment uploading, as specified by
+        * PHP. If no value is present, 10 MB (represented in bytes) is
+        * returned.
+        *
+        * @return      integer The maximum file upload size in bytes
+        */
        public static function fetch_max_php_file_size()
        {
                if ($size = @ini_get('upload_max_filesize'))
@@ -360,34 +269,32 @@ class BSFunctions
                }
        }
        
-       // ###################################################################
        /**
-       * Scans a specified directory path and returns an array of all the
-       * items in that directory. Directories found by this are end in a "/"
-       *
-       * @param        string  Path to scan
-       * @param        bool    Whether or not to recursively scan the directories encountered
-       * @param        bool    Ignore files beginning with a dot
-       *
-       * @return       array   A list of all the files in the specified path
-       */
+        * Scans a specified directory path and returns an array of all the
+        * items in that directory. Directories found by this are end in a "/"
+        *
+        * @param       string  Path to scan
+        * @param       bool    Whether or not to recursively scan the directories encountered
+        * @param       bool    Ignore files beginning with a dot
+        *
+        * @return      array   A list of all the files in the specified path
+        */
        public static function scan_directory($path, $recurse = true, $ignoreDot = true)
        {
                return self::_help_scan_directory($path, $recurse, $ignoreDot, '');
        }
        
-       // ###################################################################
        /**
-       * Scans a specified directory path and returns an array of all the
-       * items in that directory. Directories found by this are end in a "/"
-       *
-       * @param        string  Path to scan
-       * @param        bool    Whether or not to recursively scan the directories encountered
-       * @param        bool    Ignore files beginning with a dot
-       * @param        string  Add to the beginning of the path
-       *
-       * @return       array   A list of all the files in the specified path
-       */
+        * Scans a specified directory path and returns an array of all the
+        * items in that directory. Directories found by this are end in a "/"
+        *
+        * @param       string  Path to scan
+        * @param       bool    Whether or not to recursively scan the directories encountered
+        * @param       bool    Ignore files beginning with a dot
+        * @param       string  Add to the beginning of the path
+        *
+        * @return      array   A list of all the files in the specified path
+        */
        private static function _help_scan_directory($path, $recurse = true, $ignoreDot = true, $pathAdd = '')
        {
                $filelist = array();
@@ -414,15 +321,14 @@ class BSFunctions
                return $filelist;
        }
        
-       // ###################################################################
        /**
-       * Changes line breaks into one format
-       *
-       * @param        string  Text
-       * @param        string  New line break (default is UNIX \n format)
-       *
-       * @return       string  Text with one type of line break
-       */
+        * Changes line breaks into one format
+        *
+        * @param       string  Text
+        * @param       string  New line break (default is UNIX \n format)
+        *
+        * @return      string  Text with one type of line break
+        */
        public static function convert_line_breaks($text, $convert_to = "\n")
        {
                $text = trim($text);
@@ -431,15 +337,14 @@ class BSFunctions
                return $text;
        }
        
-       // ###################################################################
        /**
-       * Removes all empty() [by PHP's standards] elements in an array. This
-       * can be used in place of using PREG_SPLIT_NO_EMPTY.
-       *
-       * @param        array   An array to strip empties from
-       *
-       * @return       array   Full-valued array
-       */
+        * Removes all empty() [by PHP's standards] elements in an array. This
+        * can be used in place of using PREG_SPLIT_NO_EMPTY.
+        *
+        * @param       array   An array to strip empties from
+        *
+        * @return      array   Full-valued array
+        */
        public static function array_strip_empty($array)
        {
                foreach ($array as $key => $value)
@@ -456,19 +361,18 @@ class BSFunctions
                return $array;
        }
        
-       // ###################################################################
        /**
-       * A backtrace formatter.
-       *
-       * This is very slightly modified from PEAR/PHP_Compat (PHP license)
-       *
-       * @author       Laurent Laville <pear@laurent-laville.org>
-       * @author       Aidan Lister <aidan@php.net>
-       *
-       * @param        array   The backtrace from debug_backtrace() to format
-       *
-       * @return       string  Formatted output
-       */
+        * A backtrace formatter.
+        *
+        * This is very slightly modified from PEAR/PHP_Compat (PHP license)
+        *
+        * @author      Laurent Laville <pear@laurent-laville.org>
+        * @author      Aidan Lister <aidan@php.net>
+        *
+        * @param       array   The backtrace from debug_backtrace() to format
+        *
+        * @return      string  Formatted output
+        */
        public static function format_backtrace($backtrace)
        {
                // Unset call to debug_print_backtrace
@@ -521,22 +425,32 @@ class BSFunctions
                return implode("\n", $calls);
        }
        
-       // ###################################################################
        /**
-       * A variation of PHP's substr() method that takes in the start
-       * and end position of a string, rather than a start and length. This
-       * mimics Java's String.substring() method.
-       *
-       * @param        string  The string
-       * @param        integer Start position
-       * @param        integer End position
-       *
-       * @return       string  Part of a string
-       */
+        * A variation of PHP's substr() method that takes in the start
+        * and end position of a string, rather than a start and length. This
+        * mimics Java's String.substring() method.
+        *
+        * @param       string  The string
+        * @param       integer Start position
+        * @param       integer End position
+        *
+        * @return      string  Part of a string
+        */
        public static function substring($string, $start, $end)
        {
                return substr($string, $start, $end - $start);
        }
+       
+       /**
+        * Converts a boolean value into the string 'Yes' or 'No'
+        *
+        * @param       boolean
+        * @return      string
+        */
+       public static function bool_to_string($bool)
+       {
+               return ($bool ? _('Yes') : _('No'));
+       }
 }
 
 ?>
\ No newline at end of file