cs-webapplibs-commits Mailing List for CS Web Application Libraries (Page 4)
Status: Beta
                
                Brought to you by:
                
                    crazedsanity
                    
                
            You can subscribe to this list here.
| 2009 | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug (47) | Sep (8) | Oct (1) | Nov (3) | Dec | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2010 | Jan | Feb | Mar (1) | Apr | May (3) | Jun (14) | Jul (5) | Aug | Sep (5) | Oct (2) | Nov | Dec | 
| 2011 | Jan (15) | Feb (7) | Mar (1) | Apr (1) | May (1) | Jun | Jul (1) | Aug | Sep | Oct (2) | Nov (3) | Dec (1) | 
| 2012 | Jan (1) | Feb | Mar (1) | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | 
| 
      
      
      From: <cra...@us...> - 2009-09-08 14:24:25
      
     | 
| Revision: 147
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=147&view=rev
Author:   crazedsanity
Date:     2009-09-08 14:24:15 +0000 (Tue, 08 Sep 2009)
Log Message:
-----------
Fix some rather silly wording in an error.
/db_types/cs_phpDB__pgsql.class.php:
	* set_db_info():
		-- change wording about number of required fields to be more useful.
Modified Paths:
--------------
    trunk/0.3/db_types/cs_phpDB__pgsql.class.php
Modified: trunk/0.3/db_types/cs_phpDB__pgsql.class.php
===================================================================
--- trunk/0.3/db_types/cs_phpDB__pgsql.class.php	2009-08-31 14:52:28 UTC (rev 146)
+++ trunk/0.3/db_types/cs_phpDB__pgsql.class.php	2009-09-08 14:24:15 UTC (rev 147)
@@ -127,8 +127,8 @@
 			$this->paramsAreSet = TRUE;
 		}
 		else {
-			throw new exception(__METHOD__ .": required count (". $requiredCount 
-				.") does not match required number of fields (". count($required) .")");
+			throw new exception(__METHOD__ .": given number of fields (". $requiredCount 
+				.") does not match required number of fields (". count($required) .")::: ". $this->gfObj->debug_print($params,0));
 		}
 	}//end set_db_info()
 	//=========================================================================
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-31 14:52:37
      
     | 
| Revision: 146
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=146&view=rev
Author:   crazedsanity
Date:     2009-08-31 14:52:28 +0000 (Mon, 31 Aug 2009)
Log Message:
-----------
Fix visibility of $gfObj to match parent class.
Modified Paths:
--------------
    trunk/0.3/cs_tabs.class.php
Modified: trunk/0.3/cs_tabs.class.php
===================================================================
--- trunk/0.3/cs_tabs.class.php	2009-08-28 20:30:54 UTC (rev 145)
+++ trunk/0.3/cs_tabs.class.php	2009-08-31 14:52:28 UTC (rev 146)
@@ -10,7 +10,7 @@
 	private $selectedTab;
 	
 	private $templateVar;
-	private $gfObj;
+	protected $gfObj;
 	
 	/** This is the default suffix to use when none is given during the add_tab() call. */
 	private $defaultSuffix='tab';
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-28 20:31:01
      
     | 
| Revision: 145
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=145&view=rev
Author:   crazedsanity
Date:     2009-08-28 20:30:54 +0000 (Fri, 28 Aug 2009)
Log Message:
-----------
No more include/requires: include before or use __autoload().
NOTE::: this was tested using the current (trunk/1.0) version of cs-content's
__autoload.php script.
REMOVED require_once() STATEMENTS:::
	* /cs_authToken.class.php
	* /cs_bbCodeParser.class.php
	* /cs_phpDB.class.php
	* /cs_sessionDB.class.php
	* /cs_siteConfig.class.php
	* /cs_tabs.class.php
	* /cs_webdblogger.class.php
	* /cs_webdbupgrade.class.php
	* /abstract/cs_webapplibs.abstract.class.php
	* /tests/testOfCSPHPDB.php
	* /tests/testOfCSWebAppLibs.php
Modified Paths:
--------------
    trunk/0.3/abstract/cs_webapplibs.abstract.class.php
    trunk/0.3/cs_authToken.class.php
    trunk/0.3/cs_bbCodeParser.class.php
    trunk/0.3/cs_phpDB.class.php
    trunk/0.3/cs_sessionDB.class.php
    trunk/0.3/cs_siteConfig.class.php
    trunk/0.3/cs_tabs.class.php
    trunk/0.3/cs_webdblogger.class.php
    trunk/0.3/cs_webdbupgrade.class.php
    trunk/0.3/tests/testOfCSPHPDB.php
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/abstract/cs_webapplibs.abstract.class.php
===================================================================
--- trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -10,7 +10,6 @@
  * Last Updated:::::::: $Date$
  */
 
-require_once(dirname(__FILE__) .'/../../cs-content/abstract/cs_version.abstract.class.php');
 abstract class cs_webapplibsAbstract extends cs_versionAbstract {
 	
 	protected $gfObj;
@@ -24,7 +23,6 @@
 		if($makeGfObj === true) {
 			//make a cs_globalFunctions{} object.
 			//TODO::: find a way to avoid h
-			require_once(dirname(__FILE__) ."/../../cs-content/cs_globalFunctions.class.php");
 			$this->gfObj = new cs_globalFunctions();
 		}
     }//end __construct()
Modified: trunk/0.3/cs_authToken.class.php
===================================================================
--- trunk/0.3/cs_authToken.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_authToken.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -11,7 +11,6 @@
  */
 
 
-require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
 
 class cs_authToken extends cs_webapplibsAbstract {
 	
Modified: trunk/0.3/cs_bbCodeParser.class.php
===================================================================
--- trunk/0.3/cs_bbCodeParser.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_bbCodeParser.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -18,7 +18,6 @@
  * been converted.
  */
 
-require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
 
 class cs_bbCodeParser extends cs_webapplibsAbstract {
 	
Modified: trunk/0.3/cs_phpDB.class.php
===================================================================
--- trunk/0.3/cs_phpDB.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_phpDB.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -24,9 +24,6 @@
 //
 ///////////////////////
 
-require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
-require_once(dirname(__FILE__) ."/abstract/cs_phpDB.abstract.class.php");
-
 class cs_phpDB extends cs_webapplibsAbstract {
 	
 	private $dbLayerObj;
Modified: trunk/0.3/cs_sessionDB.class.php
===================================================================
--- trunk/0.3/cs_sessionDB.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_sessionDB.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -8,10 +8,6 @@
  * $LastChangedRevision$
  */
 
-require_once(constant('LIBDIR') .'/cs-content/cs_session.class.php');
-require_once(dirname(__FILE__) .'/cs_phpDB.class.php');
-require_once(constant('LIBDIR') .'/cs-phpxml/cs_arrayToPath.class.php');
-require_once(constant('LIBDIR') .'/cs-webapplibs/cs_webdblogger.class.php');
 
 class cs_sessionDB extends cs_session {
 
Modified: trunk/0.3/cs_siteConfig.class.php
===================================================================
--- trunk/0.3/cs_siteConfig.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_siteConfig.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -15,10 +15,6 @@
  * 
  */
 
-require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
-require_once(dirname(__FILE__) .'/../cs-content/cs_fileSystem.class.php');
-require_once(dirname(__FILE__). '/../cs-phpxml/cs_phpxmlParser.class.php');
-require_once(dirname(__FILE__) .'/../cs-phpxml/cs_phpxmlBuilder.class.php');
 
 class cs_siteConfig extends cs_webapplibsAbstract {
 	
Modified: trunk/0.3/cs_tabs.class.php
===================================================================
--- trunk/0.3/cs_tabs.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_tabs.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -4,9 +4,7 @@
  * 
  */
 
-require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
 
-
 class cs_tabs extends cs_webapplibsAbstract {
 	private $tabsArr=array();
 	private $selectedTab;
Modified: trunk/0.3/cs_webdblogger.class.php
===================================================================
--- trunk/0.3/cs_webdblogger.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_webdblogger.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -27,8 +27,6 @@
 
 //NOTE::: this class **REQUIRES** cs-content for its "cs_phpDB" class.
 
-require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
-require_once(dirname(__FILE__) .'/cs_webdbupgrade.class.php');
 
 class cs_webdblogger extends cs_webapplibsAbstract {
 	/** Database handle */
Modified: trunk/0.3/cs_webdbupgrade.class.php
===================================================================
--- trunk/0.3/cs_webdbupgrade.class.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/cs_webdbupgrade.class.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -12,9 +12,6 @@
  * 
  */
 
-require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
-require_once(dirname(__FILE__) .'/cs_webdblogger.class.php');
-require_once(dirname(__FILE__) .'/cs_phpDB.class.php');
 
 class cs_webdbupgrade extends cs_webapplibsAbstract {
 	
@@ -87,11 +84,6 @@
 			throw new exception(__METHOD__ .": required constant 'SITE_ROOT' not set");
 		}
 		
-		require_once(constant('LIBDIR') .'/cs-content/cs_globalFunctions.class.php');
-		require_once(constant('LIBDIR') .'/cs-content/cs_fileSystem.class.php');
-		require_once(constant('LIBDIR') .'/cs-phpxml/cs_phpxmlParser.class.php');
-		require_once(constant('LIBDIR') .'/cs-phpxml/cs_phpxmlCreator.class.php');
-		require_once(constant('LIBDIR') .'/cs-phpxml/cs_arrayToPath.class.php');
 		
 		$this->fsObj =  new cs_fileSystem(constant('SITE_ROOT'));
 		parent::__construct(true);
Modified: trunk/0.3/tests/testOfCSPHPDB.php
===================================================================
--- trunk/0.3/tests/testOfCSPHPDB.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/tests/testOfCSPHPDB.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -4,8 +4,6 @@
  */
 
 
-require_once(dirname(__FILE__) .'/../cs_phpDB.class.php');
-
 class TestOfCSPHPDB extends UnitTestCase {
 	
 	private $dbParams=array();
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-27 16:44:16 UTC (rev 144)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-28 20:30:54 UTC (rev 145)
@@ -11,7 +11,6 @@
  * $LastChangedRevision$
  */
 
-require_once(dirname(__FILE__) .'/../cs_authToken.class.php');
 
 class testOfCSWebAppLibs extends UnitTestCase {
 	
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-27 16:44:24
      
     | 
| Revision: 144
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=144&view=rev
Author:   crazedsanity
Date:     2009-08-27 16:44:16 +0000 (Thu, 27 Aug 2009)
Log Message:
-----------
Fix missing requirement (overwrote in last batch of commits, due to conflicts).
Modified Paths:
--------------
    trunk/0.3/abstract/cs_webapplibs.abstract.class.php
Modified: trunk/0.3/abstract/cs_webapplibs.abstract.class.php
===================================================================
--- trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-27 16:43:00 UTC (rev 143)
+++ trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-27 16:44:16 UTC (rev 144)
@@ -10,6 +10,7 @@
  * Last Updated:::::::: $Date$
  */
 
+require_once(dirname(__FILE__) .'/../../cs-content/abstract/cs_version.abstract.class.php');
 abstract class cs_webapplibsAbstract extends cs_versionAbstract {
 	
 	protected $gfObj;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-27 16:43:06
      
     | 
| Revision: 143
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=143&view=rev
Author:   crazedsanity
Date:     2009-08-27 16:43:00 +0000 (Thu, 27 Aug 2009)
Log Message:
-----------
Update main abstract class to handle cs_globalFunctions & cs_versionParse stuff.
/cs_authToken.class.php:
	* MAIN:::
		-- set gfObj as protected (not private)
	* __construct():
		-- call parent::__construct() (creates gfObj).
/cs_bbCodeParser.class.php:
	* MAIN:::
		-- extends cs_webapplibsAbstract instead of cs_contentAbstract.
/cs_phpDB.class.php:
	* MAIN:::
		-- extends cs_webapplibsAbstract instead of cs_contentAbstract.
	* __construct():
		-- call parent::__construct() (creates gfObj).
/cs_siteConfig.class.php:
	* MAIN:::
		-- require cs_webapplibsAbstract class file.
		-- extend cs_webapplibsAbstract instead of cs_contentAbstract
/cs_tabs.class.php:
	* __construct():
		-- call parent::__construct().
/cs_webdblogger.class.php:
	* __construct():
		-- call parent::__construct()
		-- don't create cs_globalFunctions object (parent does that)
/cs_webdbupgrade.class.php:
	* __construct():
		-- call parent::__construct()
		-- don't create cs_globalFunctions object (parent does that)
/abstract/cs_webapplibs.abstract.class.php:
	* MAIN:::
		-- don't require cs_contentAbstract
		-- new var, protected $gfObj
	* __construct() [NEW]:
		-- do all the stuff required to use cs_versionAbstract
		-- create gfObj (according to constructor arg #1)
Modified Paths:
--------------
    trunk/0.3/abstract/cs_webapplibs.abstract.class.php
    trunk/0.3/cs_authToken.class.php
    trunk/0.3/cs_bbCodeParser.class.php
    trunk/0.3/cs_phpDB.class.php
    trunk/0.3/cs_siteConfig.class.php
    trunk/0.3/cs_tabs.class.php
    trunk/0.3/cs_webdblogger.class.php
    trunk/0.3/cs_webdbupgrade.class.php
Modified: trunk/0.3/abstract/cs_webapplibs.abstract.class.php
===================================================================
--- trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -10,11 +10,24 @@
  * Last Updated:::::::: $Date$
  */
 
-require_once(dirname(__FILE__) .'/../../cs-content/abstract/cs_content.abstract.class.php');
-
-
-abstract class cs_webapplibsAbstract extends cs_contentAbstract {
+abstract class cs_webapplibsAbstract extends cs_versionAbstract {
 	
+	protected $gfObj;
+	
+	//-------------------------------------------------------------------------
+    function __construct($makeGfObj=true) {
+		$this->set_version_file_location(dirname(__FILE__) . '/../VERSION');
+		$this->get_version();
+		$this->get_project();
+		
+		if($makeGfObj === true) {
+			//make a cs_globalFunctions{} object.
+			//TODO::: find a way to avoid h
+			require_once(dirname(__FILE__) ."/../../cs-content/cs_globalFunctions.class.php");
+			$this->gfObj = new cs_globalFunctions();
+		}
+    }//end __construct()
+	//-------------------------------------------------------------------------
 }
 
 ?>
Modified: trunk/0.3/cs_authToken.class.php
===================================================================
--- trunk/0.3/cs_authToken.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_authToken.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -19,7 +19,7 @@
 	private $db;
 	
 	/** Object that helps deal with strings. */
-	private $gfObj;
+	protected $gfObj;
 	
 	/** Name of the table */
 	private $table = 'cswal_auth_token_table';
@@ -39,7 +39,7 @@
 		else {
 			throw new exception(__METHOD__ .": database object not connected");
 		}
-		$this->gfObj = new cs_globalFunctions();
+		parent::__construct(true);
 		
 		$upg = new cs_webdbupgrade(dirname(__FILE__) .'/VERSION', dirname(__FILE__) .'/upgrades/upgrade.xml');
 		$upg->check_versions(true);
Modified: trunk/0.3/cs_bbCodeParser.class.php
===================================================================
--- trunk/0.3/cs_bbCodeParser.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_bbCodeParser.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -20,7 +20,7 @@
 
 require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
 
-class cs_bbCodeParser extends cs_webAppLibsAbstract {
+class cs_bbCodeParser extends cs_webapplibsAbstract {
 	
 	/** Array containing all the codes & how to parse them. */
 	private $bbCodeData = NULL;
Modified: trunk/0.3/cs_phpDB.class.php
===================================================================
--- trunk/0.3/cs_phpDB.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_phpDB.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -27,11 +27,12 @@
 require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
 require_once(dirname(__FILE__) ."/abstract/cs_phpDB.abstract.class.php");
 
-class cs_phpDB extends cs_webAppLibsAbstract {
+class cs_phpDB extends cs_webapplibsAbstract {
 	
 	private $dbLayerObj;
 	private $dbType;
 	public $connectParams = array();
+	protected $gfObj;
 	
 	//=========================================================================
 	public function __construct($type='pgsql') {
@@ -43,7 +44,7 @@
 			$this->dbLayerObj = new $className;
 			$this->dbType = $type;
 			
-			parent::__construct();
+			parent::__construct(true);
 			
 			$this->isInitialized = TRUE;
 		}
Modified: trunk/0.3/cs_siteConfig.class.php
===================================================================
--- trunk/0.3/cs_siteConfig.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_siteConfig.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -20,7 +20,7 @@
 require_once(dirname(__FILE__). '/../cs-phpxml/cs_phpxmlParser.class.php');
 require_once(dirname(__FILE__) .'/../cs-phpxml/cs_phpxmlBuilder.class.php');
 
-class cs_siteConfig extends cs_webAppLibsAbstract {
+class cs_siteConfig extends cs_webapplibsAbstract {
 	
 	/** XMLParser{} object, for reading XML config file. */
 	private $xmlReader;
Modified: trunk/0.3/cs_tabs.class.php
===================================================================
--- trunk/0.3/cs_tabs.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_tabs.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -38,6 +38,7 @@
 			//set the internal var.
 			$this->templateVar = $templateVar;
 		}
+		parent::__construct();
 		
 		$this->gfObj = new cs_globalFunctions;
 	}//end __construct()
Modified: trunk/0.3/cs_webdblogger.class.php
===================================================================
--- trunk/0.3/cs_webdblogger.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_webdblogger.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -99,7 +99,7 @@
 			throw new exception(__METHOD__ .": requires cs_phpDB of higher than v". $mustBeHigherThan,1);
 		}
 		
-		$this->gfObj = new cs_globalFunctions;
+		parent::__construct(true);
 		
 		//see if there's an upgrade to perform...
 		if($checkForUpgrades === true) {
Modified: trunk/0.3/cs_webdbupgrade.class.php
===================================================================
--- trunk/0.3/cs_webdbupgrade.class.php	2009-08-26 17:50:33 UTC (rev 142)
+++ trunk/0.3/cs_webdbupgrade.class.php	2009-08-27 16:43:00 UTC (rev 143)
@@ -94,7 +94,7 @@
 		require_once(constant('LIBDIR') .'/cs-phpxml/cs_arrayToPath.class.php');
 		
 		$this->fsObj =  new cs_fileSystem(constant('SITE_ROOT'));
-		$this->gfObj = new cs_globalFunctions;
+		parent::__construct(true);
 		if(defined('DEBUGPRINTOPT')) {
 			$this->gfObj->debugPrintOpt = constant('DEBUGPRINTOPT');
 		}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-26 17:50:42
      
     | 
| Revision: 142
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=142&view=rev
Author:   crazedsanity
Date:     2009-08-26 17:50:33 +0000 (Wed, 26 Aug 2009)
Log Message:
-----------
Updated schema with relationship comments & a required foreign key.
Modified Paths:
--------------
    trunk/0.3/setup/schema.mysql.sql
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-26 16:12:12 UTC (rev 141)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-26 17:50:33 UTC (rev 142)
@@ -2,7 +2,7 @@
 -- version 2.10.3
 -- http://www.phpmyadmin.net
 -- 
--- Generation Time: Aug 24, 2009 at 11:31 AM
+-- Generation Time: Aug 26, 2009 at 12:54 PM
 -- Server version: 5.0.22
 -- PHP Version: 5.1.6
 
@@ -79,8 +79,16 @@
   PRIMARY KEY  (`event_id`),
   KEY `cswal_event_table_class_id_fkey` (`class_id`),
   KEY `cswal_event_table_category_id_fkey` (`category_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
+-- 
+-- RELATIONS FOR TABLE `cswal_event_table`:
+--   `class_id`
+--       `cswal_class_table` -> `class_id`
+--   `category_id`
+--       `cswal_category_table` -> `category_id`
+-- 
+
 -- --------------------------------------------------------
 
 -- 
@@ -95,8 +103,16 @@
   PRIMARY KEY  (`log_attribute_id`),
   KEY `cswal_log_attribute_table_log_id_fkey` (`log_id`),
   KEY `cswal_log_attribute_table_attribute_id_fkey` (`attribute_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
+-- 
+-- RELATIONS FOR TABLE `cswal_log_attribute_table`:
+--   `attribute_id`
+--       `cswal_attribute_table` -> `attribute_id`
+--   `log_id`
+--       `cswal_log_table` -> `log_id`
+-- 
+
 -- --------------------------------------------------------
 
 -- 
@@ -112,8 +128,14 @@
   `details` text NOT NULL,
   PRIMARY KEY  (`log_id`),
   KEY `cswal_log_table_event_id_fkey` (`event_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
+-- 
+-- RELATIONS FOR TABLE `cswal_log_table`:
+--   `event_id`
+--       `cswal_event_table` -> `event_id`
+-- 
+
 -- --------------------------------------------------------
 
 -- 
@@ -159,6 +181,7 @@
 -- Constraints for table `cswal_log_attribute_table`
 -- 
 ALTER TABLE `cswal_log_attribute_table`
+  ADD CONSTRAINT `cswal_log_attribute_table_attribute_id_fkey` FOREIGN KEY (`attribute_id`) REFERENCES `cswal_attribute_table` (`attribute_id`),
   ADD CONSTRAINT `cswal_log_attribute_table_log_id_fkey` FOREIGN KEY (`log_id`) REFERENCES `cswal_log_table` (`log_id`);
 
 -- 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-26 16:12:21
      
     | 
| Revision: 141
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=141&view=rev
Author:   crazedsanity
Date:     2009-08-26 16:12:12 +0000 (Wed, 26 Aug 2009)
Log Message:
-----------
Minor fixes...
/cs_siteConfig.class.php:
	* MAIN::: require cs-webapplibsAbstract.
/abstract/cs_webapplibs.abstract.class.php:
	* MAIN:::
		-- require cs_contentAbstract{}
		-- extend cs_contentAbstract{}
Modified Paths:
--------------
    trunk/0.3/abstract/cs_webapplibs.abstract.class.php
    trunk/0.3/cs_siteConfig.class.php
Modified: trunk/0.3/abstract/cs_webapplibs.abstract.class.php
===================================================================
--- trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-26 16:01:41 UTC (rev 140)
+++ trunk/0.3/abstract/cs_webapplibs.abstract.class.php	2009-08-26 16:12:12 UTC (rev 141)
@@ -10,10 +10,10 @@
  * Last Updated:::::::: $Date$
  */
 
-require_once(constant('LIBDIR') .'/cs-content/abstract/cs_version.abstract.class.php');
+require_once(dirname(__FILE__) .'/../../cs-content/abstract/cs_content.abstract.class.php');
 
 
-abstract class cs_webapplibsAbstract extends cs_versionAbstract {
+abstract class cs_webapplibsAbstract extends cs_contentAbstract {
 	
 }
 
Modified: trunk/0.3/cs_siteConfig.class.php
===================================================================
--- trunk/0.3/cs_siteConfig.class.php	2009-08-26 16:01:41 UTC (rev 140)
+++ trunk/0.3/cs_siteConfig.class.php	2009-08-26 16:12:12 UTC (rev 141)
@@ -15,7 +15,7 @@
  * 
  */
 
-require_once(dirname(__FILE__) .'/../cs-content/abstract/cs_content.abstract.class.php');
+require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
 require_once(dirname(__FILE__) .'/../cs-content/cs_fileSystem.class.php');
 require_once(dirname(__FILE__). '/../cs-phpxml/cs_phpxmlParser.class.php');
 require_once(dirname(__FILE__) .'/../cs-phpxml/cs_phpxmlBuilder.class.php');
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-26 16:01:48
      
     | 
| Revision: 140
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=140&view=rev
Author:   crazedsanity
Date:     2009-08-26 16:01:41 +0000 (Wed, 26 Aug 2009)
Log Message:
-----------
Fix class "extends" settings.
/cs_bbCodeParser.class.php:
	* MAIN:::
		-- extend cs_webAppLibsAbstract{}, not cs_contentAbstract{}.
/cs_phpDB.class.php:
	* MAIN:::
		-- extend cs_webAppLibsAbstract{}, not cs_contentAbstract{}.
/cs_siteconfig.class.php:
	* MAIN:::
		-- extend cs_webAppLibsAbstract{}, not cs_contentAbstract{}.
Modified Paths:
--------------
    trunk/0.3/cs_bbCodeParser.class.php
    trunk/0.3/cs_phpDB.class.php
    trunk/0.3/cs_siteConfig.class.php
Modified: trunk/0.3/cs_bbCodeParser.class.php
===================================================================
--- trunk/0.3/cs_bbCodeParser.class.php	2009-08-24 16:56:14 UTC (rev 139)
+++ trunk/0.3/cs_bbCodeParser.class.php	2009-08-26 16:01:41 UTC (rev 140)
@@ -20,7 +20,7 @@
 
 require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
 
-class cs_bbCodeParser extends cs_contentAbstract {
+class cs_bbCodeParser extends cs_webAppLibsAbstract {
 	
 	/** Array containing all the codes & how to parse them. */
 	private $bbCodeData = NULL;
Modified: trunk/0.3/cs_phpDB.class.php
===================================================================
--- trunk/0.3/cs_phpDB.class.php	2009-08-24 16:56:14 UTC (rev 139)
+++ trunk/0.3/cs_phpDB.class.php	2009-08-26 16:01:41 UTC (rev 140)
@@ -27,7 +27,7 @@
 require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
 require_once(dirname(__FILE__) ."/abstract/cs_phpDB.abstract.class.php");
 
-class cs_phpDB extends cs_contentAbstract {
+class cs_phpDB extends cs_webAppLibsAbstract {
 	
 	private $dbLayerObj;
 	private $dbType;
Modified: trunk/0.3/cs_siteConfig.class.php
===================================================================
--- trunk/0.3/cs_siteConfig.class.php	2009-08-24 16:56:14 UTC (rev 139)
+++ trunk/0.3/cs_siteConfig.class.php	2009-08-26 16:01:41 UTC (rev 140)
@@ -20,7 +20,7 @@
 require_once(dirname(__FILE__). '/../cs-phpxml/cs_phpxmlParser.class.php');
 require_once(dirname(__FILE__) .'/../cs-phpxml/cs_phpxmlBuilder.class.php');
 
-class cs_siteConfig extends cs_contentAbstract {
+class cs_siteConfig extends cs_webAppLibsAbstract {
 	
 	/** XMLParser{} object, for reading XML config file. */
 	private $xmlReader;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-24 16:56:21
      
     | 
| Revision: 139
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=139&view=rev
Author:   crazedsanity
Date:     2009-08-24 16:56:14 +0000 (Mon, 24 Aug 2009)
Log Message:
-----------
Fix cs_tabs so it works in its new location.
/cs_tabs.class.php:
	* MAIN::: 
		-- require the standard cs_webapplibsAbstract class.
	* __construct():
		-- don't call parent classes' __construct() (it is an abstract
		function and will cause a fatal error).
Modified Paths:
--------------
    trunk/0.3/cs_tabs.class.php
Modified: trunk/0.3/cs_tabs.class.php
===================================================================
--- trunk/0.3/cs_tabs.class.php	2009-08-24 16:25:59 UTC (rev 138)
+++ trunk/0.3/cs_tabs.class.php	2009-08-24 16:56:14 UTC (rev 139)
@@ -4,10 +4,10 @@
  * 
  */
 
-require_once(dirname(__FILE__) .'/abstract/cs_content.abstract.class.php');
+require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
 
 
-class cs_tabs extends cs_contentAbstract {
+class cs_tabs extends cs_webapplibsAbstract {
 	private $tabsArr=array();
 	private $selectedTab;
 	
@@ -25,7 +25,6 @@
 	 * @param $templateVar	(str,optional) What template var to find the tab blockrows in.
 	 */
 	public function __construct($templateVar="tabs") {
-		parent::__construct(false);
 		
 		if(is_object($templateVar)) {
 			//trying to pass cs_genericPage{}... tell 'em we don't like that anymore.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-24 16:26:05
      
     | 
| Revision: 138
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=138&view=rev
Author:   crazedsanity
Date:     2009-08-24 16:25:59 +0000 (Mon, 24 Aug 2009)
Log Message:
-----------
Added cswal_attribute_table definition.
Modified Paths:
--------------
    trunk/0.3/setup/schema.mysql.sql
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-24 16:05:54 UTC (rev 137)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-24 16:25:59 UTC (rev 138)
@@ -1,18 +1,8 @@
---
--- SVN INFORMATION:::
--- ---------------
---	SVN Signature::::::: $Id$
---	Last Author::::::::: $Author$
---	Current Revision:::: $Revision$
---	Repository Location: $HeadURL$
---	Last Updated:::::::: $Date$
---
-
 -- phpMyAdmin SQL Dump
 -- version 2.10.3
 -- http://www.phpmyadmin.net
 -- 
--- Generation Time: Aug 24, 2009 at 10:55 AM
+-- Generation Time: Aug 24, 2009 at 11:31 AM
 -- Server version: 5.0.22
 -- PHP Version: 5.1.6
 
@@ -22,6 +12,18 @@
 -- --------------------------------------------------------
 
 -- 
+-- Table structure for table `cswal_attribute_table`
+-- 
+
+CREATE TABLE `cswal_attribute_table` (
+  `attribute_id` int(11) NOT NULL auto_increment,
+  `attribute_name` text NOT NULL,
+  PRIMARY KEY  (`attribute_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+-- --------------------------------------------------------
+
+-- 
 -- Table structure for table `cswal_auth_token_table`
 -- 
 
@@ -37,7 +39,7 @@
   `expiration` timestamp NOT NULL default '0000-00-00 00:00:00',
   PRIMARY KEY  (`auth_token_id`),
   UNIQUE KEY `auth_token_id` (`auth_token_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -49,7 +51,7 @@
   `category_id` int(11) NOT NULL auto_increment,
   `category_name` text NOT NULL,
   PRIMARY KEY  (`category_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -61,7 +63,7 @@
   `class_id` int(11) NOT NULL auto_increment,
   `class_name` text NOT NULL,
   PRIMARY KEY  (`class_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -77,7 +79,7 @@
   PRIMARY KEY  (`event_id`),
   KEY `cswal_event_table_class_id_fkey` (`class_id`),
   KEY `cswal_event_table_category_id_fkey` (`category_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -93,7 +95,7 @@
   PRIMARY KEY  (`log_attribute_id`),
   KEY `cswal_log_attribute_table_log_id_fkey` (`log_id`),
   KEY `cswal_log_attribute_table_attribute_id_fkey` (`attribute_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -110,7 +112,7 @@
   `details` text NOT NULL,
   PRIMARY KEY  (`log_id`),
   KEY `cswal_log_table_event_id_fkey` (`event_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -126,7 +128,7 @@
   `last_updated` datetime NOT NULL,
   `session_data` longtext NOT NULL,
   PRIMARY KEY  (`session_store_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
@@ -140,7 +142,7 @@
   `version_string` varchar(50) NOT NULL,
   PRIMARY KEY  (`version_id`),
   UNIQUE KEY `project_name` (`project_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- 
 -- Constraints for dumped tables
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-24 16:06:10
      
     | 
| Revision: 137
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=137&view=rev
Author:   crazedsanity
Date:     2009-08-24 16:05:54 +0000 (Mon, 24 Aug 2009)
Log Message:
-----------
Set the cswal_version_table's pkey to auto increment.
Modified Paths:
--------------
    trunk/0.3/setup/schema.mysql.sql
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-24 15:55:55 UTC (rev 136)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-24 16:05:54 UTC (rev 137)
@@ -135,7 +135,7 @@
 -- 
 
 CREATE TABLE `cswal_version_table` (
-  `version_id` int(11) NOT NULL,
+  `version_id` int(11) NOT NULL auto_increment,
   `project_name` varchar(30) NOT NULL,
   `version_string` varchar(50) NOT NULL,
   PRIMARY KEY  (`version_id`),
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-24 15:56:01
      
     | 
| Revision: 136
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=136&view=rev
Author:   crazedsanity
Date:     2009-08-24 15:55:55 +0000 (Mon, 24 Aug 2009)
Log Message:
-----------
Updated schema via an SQL dump (via PHPMyAdmin) after successfully loading schema.
Modified Paths:
--------------
    trunk/0.3/setup/schema.mysql.sql
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-24 15:53:15 UTC (rev 135)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-24 15:55:55 UTC (rev 136)
@@ -12,7 +12,7 @@
 -- version 2.10.3
 -- http://www.phpmyadmin.net
 -- 
--- Generation Time: Aug 10, 2009 at 11:01 AM
+-- Generation Time: Aug 24, 2009 at 10:55 AM
 -- Server version: 5.0.22
 -- PHP Version: 5.1.6
 
@@ -22,6 +22,26 @@
 -- --------------------------------------------------------
 
 -- 
+-- Table structure for table `cswal_auth_token_table`
+-- 
+
+CREATE TABLE `cswal_auth_token_table` (
+  `auth_token_id` bigint(20) unsigned NOT NULL auto_increment,
+  `uid` int(11) NOT NULL default '0',
+  `checksum` text NOT NULL,
+  `token` text NOT NULL,
+  `max_uses` int(11) default NULL,
+  `total_uses` int(11) NOT NULL default '0',
+  `creation` timestamp NOT NULL default CURRENT_TIMESTAMP,
+  `last_updated` timestamp NOT NULL default '0000-00-00 00:00:00',
+  `expiration` timestamp NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY  (`auth_token_id`),
+  UNIQUE KEY `auth_token_id` (`auth_token_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- --------------------------------------------------------
+
+-- 
 -- Table structure for table `cswal_category_table`
 -- 
 
@@ -29,7 +49,7 @@
   `category_id` int(11) NOT NULL auto_increment,
   `category_name` text NOT NULL,
   PRIMARY KEY  (`category_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
 -- --------------------------------------------------------
 
@@ -41,7 +61,7 @@
   `class_id` int(11) NOT NULL auto_increment,
   `class_name` text NOT NULL,
   PRIMARY KEY  (`class_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
 -- --------------------------------------------------------
 
@@ -57,11 +77,27 @@
   PRIMARY KEY  (`event_id`),
   KEY `cswal_event_table_class_id_fkey` (`class_id`),
   KEY `cswal_event_table_category_id_fkey` (`category_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
 -- --------------------------------------------------------
 
 -- 
+-- Table structure for table `cswal_log_attribute_table`
+-- 
+
+CREATE TABLE `cswal_log_attribute_table` (
+  `log_attribute_id` int(11) NOT NULL auto_increment,
+  `log_id` int(11) NOT NULL,
+  `attribute_id` int(11) NOT NULL,
+  `value_text` text NOT NULL,
+  PRIMARY KEY  (`log_attribute_id`),
+  KEY `cswal_log_attribute_table_log_id_fkey` (`log_id`),
+  KEY `cswal_log_attribute_table_attribute_id_fkey` (`attribute_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- --------------------------------------------------------
+
+-- 
 -- Table structure for table `cswal_log_table`
 -- 
 
@@ -74,89 +110,57 @@
   `details` text NOT NULL,
   PRIMARY KEY  (`log_id`),
   KEY `cswal_log_table_event_id_fkey` (`event_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
+-- --------------------------------------------------------
+
 -- 
--- Constraints for dumped tables
+-- Table structure for table `cswal_session_store_table`
 -- 
 
+CREATE TABLE `cswal_session_store_table` (
+  `session_store_id` int(11) NOT NULL auto_increment,
+  `session_id` varchar(32) NOT NULL,
+  `user_id` varchar(16) NOT NULL,
+  `date_created` datetime NOT NULL,
+  `last_updated` datetime NOT NULL,
+  `session_data` longtext NOT NULL,
+  PRIMARY KEY  (`session_store_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- --------------------------------------------------------
+
 -- 
--- Constraints for table `cswal_event_table`
+-- Table structure for table `cswal_version_table`
 -- 
-ALTER TABLE `cswal_event_table`
-  ADD CONSTRAINT `cswal_event_table_class_id_fkey` FOREIGN KEY (`class_id`) REFERENCES `cswal_class_table` (`class_id`),
-  ADD CONSTRAINT `cswal_event_table_category_id_fkey` FOREIGN KEY (`category_id`) REFERENCES `cswal_category_table` (`category_id`);
 
+CREATE TABLE `cswal_version_table` (
+  `version_id` int(11) NOT NULL,
+  `project_name` varchar(30) NOT NULL,
+  `version_string` varchar(50) NOT NULL,
+  PRIMARY KEY  (`version_id`),
+  UNIQUE KEY `project_name` (`project_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
 -- 
--- Constraints for table `cswal_log_table`
+-- Constraints for dumped tables
 -- 
-ALTER TABLE `cswal_log_table`
-  ADD CONSTRAINT `cswal_log_table_event_id_fkey` FOREIGN KEY (`event_id`) REFERENCES `cswal_event_table` (`event_id`);
 
-
-
 -- 
--- Table structure for table `cswal_log_attribute_table`
+-- Constraints for table `cswal_event_table`
 -- 
+ALTER TABLE `cswal_event_table`
+  ADD CONSTRAINT `cswal_event_table_class_id_fkey` FOREIGN KEY (`class_id`) REFERENCES `cswal_class_table` (`class_id`),
+  ADD CONSTRAINT `cswal_event_table_category_id_fkey` FOREIGN KEY (`category_id`) REFERENCES `cswal_category_table` (`category_id`);
 
-CREATE TABLE `cswal_log_attribute_table` (
-  `log_attribute_id` int(11) NOT NULL auto_increment,
-  `log_id` int(11) NOT NULL,
-  `attribute_id` int(11) NOT NULL,
-  `value_text` text NOT NULL,
-  PRIMARY KEY  (`log_attribute_id`),
-  KEY `cswal_log_attribute_table_log_id_fkey` (`log_id`),
-  KEY `cswal_log_attribute_table_attribute_id_fkey` (`attribute_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-
--- --------------------------------------------------------
-
-
-
 -- 
 -- Constraints for table `cswal_log_attribute_table`
 -- 
 ALTER TABLE `cswal_log_attribute_table`
   ADD CONSTRAINT `cswal_log_attribute_table_log_id_fkey` FOREIGN KEY (`log_id`) REFERENCES `cswal_log_table` (`log_id`);
 
-
-  
-  
--- This table create statement MUST work in PostgreSQL v8.2.x+ AND MySQL v5.0.x+: 
--- otherwise separate schema files have to be created and the code will have to 
--- do extra checking...
 -- 
-CREATE TABLE cswal_version_table (
-	version_id int NOT NULL PRIMARY KEY,
-	project_name varchar(30) NOT NULL UNIQUE,
-	version_string varchar(50) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-
-CREATE TABLE cswal_auth_token_table (
-	auth_token_id serial NOT NULL PRIMARY KEY,
-	uid integer NOT NULL DEFAULT 0,
-	checksum text NOT NULL,
-	token text NOT NULL,
-	max_uses integer DEFAULT NULL,
-	total_uses integer NOT NULL DEFAULT 0,
-	creation timestamp NOT NULL DEFAULT NOW(),
-	last_updated timestamp,
-	expiration timestamp NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
-
-
-
---
--- Store session data in here.
--- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
---
-
-CREATE TABLE `cswal_session_store_table` (
-  `session_store_id` int  NOT NULL AUTO_INCREMENT,
-  `session_id` varchar(32)  NOT NULL,
-  `user_id` varchar(16)  NOT NULL,
-  `date_created` datetime  NOT NULL,
-  `last_updated` datetime  NOT NULL,
-  `session_data` LONGTEXT  NOT NULL,
-  PRIMARY KEY (`session_store_id`)
-) ENGINE = InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
\ No newline at end of file
+-- Constraints for table `cswal_log_table`
+-- 
+ALTER TABLE `cswal_log_table`
+  ADD CONSTRAINT `cswal_log_table_event_id_fkey` FOREIGN KEY (`event_id`) REFERENCES `cswal_event_table` (`event_id`);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-24 15:53:21
      
     | 
| Revision: 135
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=135&view=rev
Author:   crazedsanity
Date:     2009-08-24 15:53:15 +0000 (Mon, 24 Aug 2009)
Log Message:
-----------
Updated to have the proper syntax & to avoid duplication of key & table creation.
Modified Paths:
--------------
    trunk/0.3/setup/schema.mysql.sql
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-24 15:34:54 UTC (rev 134)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-24 15:53:15 UTC (rev 135)
@@ -111,28 +111,12 @@
 
 -- --------------------------------------------------------
 
--- 
--- Table structure for table `cswal_log_table`
--- 
 
-CREATE TABLE `cswal_log_table` (
-  `log_id` int(11) NOT NULL auto_increment,
-  `creation` timestamp NOT NULL default CURRENT_TIMESTAMP,
-  `event_id` int(11) NOT NULL,
-  `uid` int(11) NOT NULL,
-  `affected_uid` int(11) NOT NULL,
-  `details` text NOT NULL,
-  PRIMARY KEY  (`log_id`),
-  KEY `cswal_log_table_event_id_fkey` (`event_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
-
-
 -- 
 -- Constraints for table `cswal_log_attribute_table`
 -- 
 ALTER TABLE `cswal_log_attribute_table`
-  ADD CONSTRAINT `cswal_log_attribute_table_attribute_id_fkey` FOREIGN KEY (`attribute_id`) REFERENCES `cswal_attribute_table` (`attribute_id`),
   ADD CONSTRAINT `cswal_log_attribute_table_log_id_fkey` FOREIGN KEY (`log_id`) REFERENCES `cswal_log_table` (`log_id`);
 
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-24 15:35:04
      
     | 
| Revision: 134
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=134&view=rev
Author:   crazedsanity
Date:     2009-08-24 15:34:54 +0000 (Mon, 24 Aug 2009)
Log Message:
-----------
Stop throwing exceptions if a connection parameter isn't required & isn't set internally (just ignore it).
Modified Paths:
--------------
    trunk/0.3/db_types/cs_phpDB__mysql.class.php
    trunk/0.3/db_types/cs_phpDB__pgsql.class.php
    trunk/0.3/db_types/cs_phpDB__sqlite.class.php
Modified: trunk/0.3/db_types/cs_phpDB__mysql.class.php
===================================================================
--- trunk/0.3/db_types/cs_phpDB__mysql.class.php	2009-08-21 16:45:10 UTC (rev 133)
+++ trunk/0.3/db_types/cs_phpDB__mysql.class.php	2009-08-24 15:34:54 UTC (rev 134)
@@ -103,10 +103,6 @@
 				$this->$index = $value;
 				$requiredCount++;
 			}
-			else {
-				throw new exception(__METHOD__. ": property (". $index .") does " .
-					"not exist or isn't allowed");
-			}
 		}
 		
 		if($requiredCount == count($required)) {
Modified: trunk/0.3/db_types/cs_phpDB__pgsql.class.php
===================================================================
--- trunk/0.3/db_types/cs_phpDB__pgsql.class.php	2009-08-21 16:45:10 UTC (rev 133)
+++ trunk/0.3/db_types/cs_phpDB__pgsql.class.php	2009-08-24 15:34:54 UTC (rev 134)
@@ -121,10 +121,6 @@
 				$this->$index = $params[$index];
 				$requiredCount++;
 			}
-			else {
-				$this->gfObj->debug_print($params,1);
-				throw new exception(__METHOD__. ": property (". $index .") missing");
-			}
 		}
 		
 		if($requiredCount == count($required)) {
Modified: trunk/0.3/db_types/cs_phpDB__sqlite.class.php
===================================================================
--- trunk/0.3/db_types/cs_phpDB__sqlite.class.php	2009-08-21 16:45:10 UTC (rev 133)
+++ trunk/0.3/db_types/cs_phpDB__sqlite.class.php	2009-08-24 15:34:54 UTC (rev 134)
@@ -91,10 +91,6 @@
 				$this->$index = $value;
 				$requiredCount++;
 			}
-			else {
-				throw new exception(__METHOD__. ": property (". $index .") does " .
-					"not exist or isn't allowed");
-			}
 		}
 		
 		if($requiredCount == count($required)) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-21 16:45:17
      
     | 
| Revision: 133
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=133&view=rev
Author:   crazedsanity
Date:     2009-08-21 16:45:10 +0000 (Fri, 21 Aug 2009)
Log Message:
-----------
Modified Paths:
--------------
    trunk/0.3/cs_authToken.class.php
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/cs_authToken.class.php
===================================================================
--- trunk/0.3/cs_authToken.class.php	2009-08-21 16:34:42 UTC (rev 132)
+++ trunk/0.3/cs_authToken.class.php	2009-08-21 16:45:10 UTC (rev 133)
@@ -298,19 +298,22 @@
 	public function remove_expired_tokens() {
 		$sql = "SELECT * FROM ". $this->table ." WHERE NOW() > expiration";
 		
+		$destroyedTokens = 0;
 		try {
 			$data = $this->db->run_query($sql, 'auth_token_id');
 			
 			if(is_array($data)) {
 				foreach($data as $tokenId => $tokenData) {
 					//TODO: add logging here?
-					$this->destroy_token($tokenId);
+					$destroyedTokens += $this->destroy_token($tokenId);
 				}
 			}
 		}
 		catch(exception $e) {
 			throw new exception(__METHOD__ .": error encountered while expiring tokens::: ". $e->getMessage());
 		}
+		
+		return($destroyedTokens);
 	}//end remove_expired_tokens()
 	//=========================================================================
 	
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-21 16:34:42 UTC (rev 132)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-21 16:45:10 UTC (rev 133)
@@ -178,6 +178,22 @@
 			$this->assertNotEqual($tokenData['hash'], $tok->doHash($tokenData['id'], $uid, $checksum, $hashThis), 
 					"hash is guessable");
 		}
+		
+		//test expiring tokens...
+		{
+			//create a token that is immediately expired.
+			$tokenData = $tok->create_token(22, 'token expiration test', 'Lorem ipsum dolor sit amet, consectetur.', '-5 days');
+			$this->do_tokenTest($tokenData, 22, 'token expiration test');
+			
+			$this->assertFalse(is_array($tok->tokenData($tokenData['id'], true)));
+			$this->assertTrue(is_array($tok->tokenData($tokenData['id'], false)));
+			$this->assertTrue(count($tok->tokenData($tokenData['id'],false)) == 9);
+			
+			//REMEMBER: we've created other tokens that will now expire...
+			$removedTokens = $tok->remove_expired_tokens();
+			$this->assertEqual(2, $removedTokens);
+		}
+		
 	}//end test_token_basics()
 	//--------------------------------------------------------------------------
 	
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-21 16:34:48
      
     | 
| Revision: 132
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=132&view=rev
Author:   crazedsanity
Date:     2009-08-21 16:34:42 +0000 (Fri, 21 Aug 2009)
Log Message:
-----------
Change basic_token_tests() to do_tokenTest(), as the previous was too close to "test_token_basics()".
Modified Paths:
--------------
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-21 16:30:05 UTC (rev 131)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-21 16:34:42 UTC (rev 132)
@@ -73,7 +73,7 @@
 		//Generic test to ensure we get the appropriate data back.
 		{
 			$tokenData = $tok->create_token(1, 'test', 'abc123');
-			$this->basic_token_tests($tokenData, 1, 'test');
+			$this->do_tokenTest($tokenData, 1, 'test');
 			
 			$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
 			$this->assertFalse($tok->authenticate_token($tokenData['id'], 'testx', $tokenData['hash']));
@@ -91,7 +91,7 @@
 		{
 			//Generic test to ensure we get the appropriate data back.
 			$tokenData = $tok->create_token(1, 'test', 'abc123', null, 1);
-			$this->basic_token_tests($tokenData, 1, 'test');
+			$this->do_tokenTest($tokenData, 1, 'test');
 			
 			$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
 			$this->assertTrue(($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']) === null), 
@@ -105,7 +105,7 @@
 		{
 			//Generic test to ensure we get the appropriate data back.
 			$tokenData = $tok->create_token(1, 'test', 'abc123', '2 years');
-			$this->basic_token_tests($tokenData, 1, 'test');
+			$this->do_tokenTest($tokenData, 1, 'test');
 			
 			$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
 			$checkAttempts = 100;
@@ -122,7 +122,7 @@
 		//try to create a token with max_uses of 0.
 		{
 			$tokenData = $tok->create_token(2, 'test', 'xxxxyyyyyxxxx', null, 0);
-			$this->basic_token_tests($tokenData, 2, 'test');
+			$this->do_tokenTest($tokenData, 2, 'test');
 			$checkData = $tok->tokenData($tokenData['id']);
 			
 			$this->assertTrue(is_array($checkData));
@@ -134,7 +134,7 @@
 		{
 			$tokenData = $tok->create_token(88, 'test', 'This is a big old TEST', '-3 days');
 			if($this->assertTrue(is_array($tokenData))) {
-				$this->basic_token_tests($tokenData, 88, 'test');
+				$this->do_tokenTest($tokenData, 88, 'test');
 				$this->assertFalse($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']));
 			}
 		}
@@ -173,7 +173,7 @@
 			$hashThis = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ut.";
 			
 			$tokenData = $tok->create_token($uid, $checksum, $hashThis);
-			$this->basic_token_tests($tokenData, $uid, $checksum);
+			$this->do_tokenTest($tokenData, $uid, $checksum);
 			
 			$this->assertNotEqual($tokenData['hash'], $tok->doHash($tokenData['id'], $uid, $checksum, $hashThis), 
 					"hash is guessable");
@@ -184,7 +184,7 @@
 	
 	
 	//--------------------------------------------------------------------------
-	private function basic_token_tests(array $tokenData, $uid, $checksum) {
+	private function do_tokenTest(array $tokenData, $uid, $checksum) {
 		
 		if($this->assertTrue(is_array($tokenData)) && $this->assertTrue(is_numeric($uid)) && $this->assertTrue(strlen($checksum))) {
 			
@@ -196,7 +196,7 @@
 			$this->assertTrue((strlen($tokenData['hash']) == 40));
 		}
 		
-	}//end basic_token_tests()
+	}//end do_tokenTest()
 	//--------------------------------------------------------------------------
 }
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-21 16:30:25
      
     | 
| Revision: 131
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=131&view=rev
Author:   crazedsanity
Date:     2009-08-21 16:30:05 +0000 (Fri, 21 Aug 2009)
Log Message:
-----------
Table prefix changes, optionally create new connection when reconnecting db.
/cs_phpDB.class.php:
	* ARG CHANGE: NEW ARG: #1 ($forceNewConnection=TRUE)
	* optionally create a new connection (default is true)
/cs_webdblogger.class.php:
	* fix table prefix from cswdbl to cswal.
/cs_webdbupgrade.class.php:
	* load_table():
		-- remove unnecessary str_replace() calls.
/tests/testOfCSWebAppLibs.php:
	* remove_tables():
		-- fix table prefixes
		-- add cswal_session_store_table as one that is dropped, since that
		is now in the main schema file.
Modified Paths:
--------------
    trunk/0.3/cs_phpDB.class.php
    trunk/0.3/cs_webdblogger.class.php
    trunk/0.3/cs_webdbupgrade.class.php
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/cs_phpDB.class.php
===================================================================
--- trunk/0.3/cs_phpDB.class.php	2009-08-21 16:16:22 UTC (rev 130)
+++ trunk/0.3/cs_phpDB.class.php	2009-08-21 16:30:05 UTC (rev 131)
@@ -182,9 +182,9 @@
 	
 	
 	//=========================================================================
-	public function reconnect() {
+	public function reconnect($forceNewConnection=TRUE) {
 		if(is_array($this->connectParams) && count($this->connectParams)) {
-			$this->dbLayerObj->connect($this->connectParams, true);
+			$this->dbLayerObj->connect($this->connectParams, $forceNewConnection);
 		}
 		else {
 			throw new exception(__METHOD__ .": no connection parameters stored");
Modified: trunk/0.3/cs_webdblogger.class.php
===================================================================
--- trunk/0.3/cs_webdblogger.class.php	2009-08-21 16:16:22 UTC (rev 130)
+++ trunk/0.3/cs_webdblogger.class.php	2009-08-21 16:30:05 UTC (rev 131)
@@ -22,7 +22,7 @@
  * 
  * QUERY TO GET LAST COUPLE OF LOGS::::
  SELECT l.log_id as id, l.creation, l.event_id as lid, le.description AS event, l.details 
- FROM cswdbl_log_table AS l INNER JOIN cswdbl_event_table AS le USING (event_id) ORDER BY log_id DESC LIMIT 25;
+ FROM cswal_log_table AS l INNER JOIN cswal_event_table AS le USING (event_id) ORDER BY log_id DESC LIMIT 25;
  */
 
 //NOTE::: this class **REQUIRES** cs-content for its "cs_phpDB" class.
@@ -64,22 +64,22 @@
 	
 	/** List of tables keyed off an internal reference name. */
 	protected $tables = array(
-		'category'	=> 'cswdbl_category_table',
-		'class'		=> 'cswdbl_class_table',
-		'event'		=> 'cswdbl_event_table',
-		'log'		=> 'cswdbl_log_table',
-		'attrib'	=> 'cswdbl_attribute_table',
-		'logAttrib'	=> 'cswdbl_log_attribute_table'
+		'category'	=> 'cswal_category_table',
+		'class'		=> 'cswal_class_table',
+		'event'		=> 'cswal_event_table',
+		'log'		=> 'cswal_log_table',
+		'attrib'	=> 'cswal_attribute_table',
+		'logAttrib'	=> 'cswal_log_attribute_table'
 	);
 	
 	/** List of sequences keyed off an internal reference name (MUST match references above) */
 	protected $seqs = array(
-		'category'		=> "cswdbl_category_table_category_id_seq",
-		'class'			=> "cswdbl_class_table_class_id_seq",
-		'event'			=> "cswdbl_event_table_event_id_seq",
-		'log'			=> "cswdbl_log_table_log_id_seq",
-		'attrib'		=> "cswdbl_attribute_table_attribute_id_seq",
-		'logAttrib'		=> "cswdbl_log_attribute_table_log_attribute_id_seq"
+		'category'		=> "cswal_category_table_category_id_seq",
+		'class'			=> "cswal_class_table_class_id_seq",
+		'event'			=> "cswal_event_table_event_id_seq",
+		'log'			=> "cswal_log_table_log_id_seq",
+		'attrib'		=> "cswal_attribute_table_attribute_id_seq",
+		'logAttrib'		=> "cswal_log_attribute_table_log_attribute_id_seq"
 	);
 	
 	//=========================================================================
Modified: trunk/0.3/cs_webdbupgrade.class.php
===================================================================
--- trunk/0.3/cs_webdbupgrade.class.php	2009-08-21 16:16:22 UTC (rev 130)
+++ trunk/0.3/cs_webdbupgrade.class.php	2009-08-21 16:30:05 UTC (rev 131)
@@ -905,8 +905,6 @@
 	public function load_table() {
 		$schemaFileLocation = dirname(__FILE__) .'/setup/schema.'. $this->db->get_dbtype() .'.sql';
 		$schema = file_get_contents($schemaFileLocation);
-		$schema = str_replace('{tableName}', $this->config['DB_TABLE'], $schema);
-		$schema = str_replace('{primaryKey}', $this->config['DB_PRIMARYKEY'], $schema);
 		$this->db->exec($schema);
 		
 		$loadTableResult = $this->db->errorMsg();
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-21 16:16:22 UTC (rev 130)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-21 16:30:05 UTC (rev 131)
@@ -44,9 +44,9 @@
 	//--------------------------------------------------------------------------
 	private function remove_tables() {
 		$tableList = array(
-			'cswal_auth_token_table', 'cswal_version_table', 'cswdbl_attribute_table', 
-			'cswdbl_category_table', 'cswdbl_class_table', 'cswdbl_event_table', 
-			'cswdbl_log_attribute_table', 'cswdbl_log_table', 
+			'cswal_auth_token_table', 'cswal_version_table', 'cswal_attribute_table', 
+			'cswal_category_table', 'cswal_class_table', 'cswal_event_table', 
+			'cswal_log_attribute_table', 'cswal_log_table', 'cswal_session_store_table'
 		);
 		
 		$db = $this->create_dbconn();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-21 16:16:31
      
     | 
| Revision: 130
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=130&view=rev
Author:   crazedsanity
Date:     2009-08-21 16:16:22 +0000 (Fri, 21 Aug 2009)
Log Message:
-----------
Fix/consolidate schema, logging.
/setup/db_session_schema.*.sql:
	* consolidated with main schema files.
/schema.mysql.sql:
	* changed all tables to run on InnoDB.
	* add cswal_session_store_table (for cs_sessionDB)
/schema.pgsql.sql:
	* add cswal_session_store_table (for cs_sessionDB)
/cs_sessionDB.class.php:
	* __construct():
		-- fix table name & sequence to use "cswal" prefix.
		-- create instance of cs_webdblogger (which will automatically cause
		any upgrades to cs-webapplibs to run).
		-- remove note about session_id()
		-- remove the "audit_logging" setting.
	* do_log():
		-- clone internal db handle & call reconnect() to establish a new
		connection to the database.
Modified Paths:
--------------
    trunk/0.3/cs_sessionDB.class.php
    trunk/0.3/setup/schema.mysql.sql
    trunk/0.3/setup/schema.pgsql.sql
Removed Paths:
-------------
    trunk/0.3/setup/db_session_schema.mysql.sql
    trunk/0.3/setup/db_session_schema.pgsql.sql
Modified: trunk/0.3/cs_sessionDB.class.php
===================================================================
--- trunk/0.3/cs_sessionDB.class.php	2009-08-21 14:47:11 UTC (rev 129)
+++ trunk/0.3/cs_sessionDB.class.php	2009-08-21 16:16:22 UTC (rev 130)
@@ -47,13 +47,12 @@
 		$this->db = new cs_phpDB(constant('DBTYPE'));
 		$this->db->connect($dbParams);
 		
-		$this->tableName = 'cs_session_store_table';
+		$this->tableName = 'cswal_session_store_table';
 		$this->tablePKey = 'session_store_id';
-		$this->sequenceName = 'cs_session_store_table_session_store_id_seq';
+		$this->sequenceName = 'cswal_session_store_table_session_store_id_seq';
 		
-		if(!$this->sessdb_table_exists()) {
-			$this->load_table();
-		}
+		//create a logger (this will automatically cause any upgrades to happen).
+		$this->logger = new cs_webdblogger($this->db, 'Session DB', true);
 		
 		//now tell PHP to use this class's methods for saving the session.
 		session_set_save_handler(
@@ -65,17 +64,9 @@
 			array(&$this, 'sessdb_gc')
 		);
 		
-		//NOTE::: calling session_id() here, prior to parent's construct, can set a specific session_id; if
-		//			something like cs_authToken (part of cs-webapplibs project) were used, just call 
-		//			cs_authToken::create_token() here... 
 		
 		parent::__construct(true);
 		
-		//Stop things from going into an audit log... see 
-		//http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711/page3.html
-		//	NOTE::: not sure if this is valid or not...
-		$this->audit_logging = false;
-		
 	}//end __construct()
 	//-------------------------------------------------------------------------
 	
@@ -338,8 +329,8 @@
 		
 		//check if the logger object has been created.
 		if(!is_object($this->logger)) {
-			$newDB = new cs_phpDB(constant('DBTYPE'));
-			$newDB->connect($this->db->connectParams, true);
+			$newDB = clone $this->db;
+			$newDB->reconnect(true);
 			$this->logger = new cs_webdblogger($newDB, $this->logCategory);
 		}
 		
Deleted: trunk/0.3/setup/db_session_schema.mysql.sql
===================================================================
--- trunk/0.3/setup/db_session_schema.mysql.sql	2009-08-21 14:47:11 UTC (rev 129)
+++ trunk/0.3/setup/db_session_schema.mysql.sql	2009-08-21 16:16:22 UTC (rev 130)
@@ -1,17 +0,0 @@
-
-
---
--- Store session data in here.
--- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
---
-
-CREATE TABLE `cswal_session_store_table` (
-  `session_store_id` int  NOT NULL AUTO_INCREMENT,
-  `session_id` varchar(32)  NOT NULL,
-  `user_id` varchar(16)  NOT NULL,
-  `date_created` datetime  NOT NULL,
-  `last_updated` datetime  NOT NULL,
-  `session_data` LONGTEXT  NOT NULL,
-  PRIMARY KEY (`session_store_id`)
-)
-ENGINE = InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
\ No newline at end of file
Deleted: trunk/0.3/setup/db_session_schema.pgsql.sql
===================================================================
--- trunk/0.3/setup/db_session_schema.pgsql.sql	2009-08-21 14:47:11 UTC (rev 129)
+++ trunk/0.3/setup/db_session_schema.pgsql.sql	2009-08-21 16:16:22 UTC (rev 130)
@@ -1,16 +0,0 @@
-
-
---
--- Store session data in here.
--- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
---
-
-CREATE TABLE cswal_session_store_table (
-	session_store_id serial NOT NULL PRIMARY KEY,
-	session_id varchar(32) NOT NULL DEFAULT '' UNIQUE,
-	user_id varchar(16),
-	date_created timestamp NOT NULL DEFAULT NOW(),
-	last_updated timestamp NOT NULL DEFAULT NOW(),
-	session_data text
-);
-
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-21 14:47:11 UTC (rev 129)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-21 16:16:22 UTC (rev 130)
@@ -146,7 +146,7 @@
 	version_id int NOT NULL PRIMARY KEY,
 	project_name varchar(30) NOT NULL UNIQUE,
 	version_string varchar(50) NOT NULL
-);
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 CREATE TABLE cswal_auth_token_table (
 	auth_token_id serial NOT NULL PRIMARY KEY,
@@ -158,4 +158,21 @@
 	creation timestamp NOT NULL DEFAULT NOW(),
 	last_updated timestamp,
 	expiration timestamp NOT NULL
-);
\ No newline at end of file
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
+
+
+
+--
+-- Store session data in here.
+-- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
+--
+
+CREATE TABLE `cswal_session_store_table` (
+  `session_store_id` int  NOT NULL AUTO_INCREMENT,
+  `session_id` varchar(32)  NOT NULL,
+  `user_id` varchar(16)  NOT NULL,
+  `date_created` datetime  NOT NULL,
+  `last_updated` datetime  NOT NULL,
+  `session_data` LONGTEXT  NOT NULL,
+  PRIMARY KEY (`session_store_id`)
+) ENGINE = InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
\ No newline at end of file
Modified: trunk/0.3/setup/schema.pgsql.sql
===================================================================
--- trunk/0.3/setup/schema.pgsql.sql	2009-08-21 14:47:11 UTC (rev 129)
+++ trunk/0.3/setup/schema.pgsql.sql	2009-08-21 16:16:22 UTC (rev 130)
@@ -104,3 +104,19 @@
 	expiration timestamp NOT NULL
 );
 
+
+--
+-- Store session data in here.
+-- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
+--
+
+CREATE TABLE cswal_session_store_table (
+	session_store_id serial NOT NULL PRIMARY KEY,
+	session_id varchar(32) NOT NULL DEFAULT '' UNIQUE,
+	user_id varchar(16),
+	date_created timestamp NOT NULL DEFAULT NOW(),
+	last_updated timestamp NOT NULL DEFAULT NOW(),
+	session_data text
+);
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-21 14:47:18
      
     | 
| Revision: 129
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=129&view=rev
Author:   crazedsanity
Date:     2009-08-21 14:47:11 +0000 (Fri, 21 Aug 2009)
Log Message:
-----------
Update schema so all table prefixes are "cswal"...
/setup/db_session_schema.mysql.sql:
	* remove all backticks.
	* change name from (invalid) "test.sess_tmp" to
	"cswal_session_store_table"
/setup/db_session_schema.pgsql.sql:
	* update table prefix from "cs" to "cswal".
/setup/schema.mysql.sql:
	* changed table prefixes from "cswdbl" to "cswal"
/setup/schema.pgsql.sql:
	* changed table prefixes from "cswdbl" to "cswal"
Modified Paths:
--------------
    trunk/0.3/setup/db_session_schema.mysql.sql
    trunk/0.3/setup/db_session_schema.pgsql.sql
    trunk/0.3/setup/schema.mysql.sql
    trunk/0.3/setup/schema.pgsql.sql
Modified: trunk/0.3/setup/db_session_schema.mysql.sql
===================================================================
--- trunk/0.3/setup/db_session_schema.mysql.sql	2009-08-20 21:09:10 UTC (rev 128)
+++ trunk/0.3/setup/db_session_schema.mysql.sql	2009-08-21 14:47:11 UTC (rev 129)
@@ -5,7 +5,7 @@
 -- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
 --
 
-CREATE TABLE `test`.`sess_tmp` (
+CREATE TABLE `cswal_session_store_table` (
   `session_store_id` int  NOT NULL AUTO_INCREMENT,
   `session_id` varchar(32)  NOT NULL,
   `user_id` varchar(16)  NOT NULL,
Modified: trunk/0.3/setup/db_session_schema.pgsql.sql
===================================================================
--- trunk/0.3/setup/db_session_schema.pgsql.sql	2009-08-20 21:09:10 UTC (rev 128)
+++ trunk/0.3/setup/db_session_schema.pgsql.sql	2009-08-21 14:47:11 UTC (rev 129)
@@ -5,7 +5,7 @@
 -- Idea originally from: http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711
 --
 
-CREATE TABLE cs_session_store_table (
+CREATE TABLE cswal_session_store_table (
 	session_store_id serial NOT NULL PRIMARY KEY,
 	session_id varchar(32) NOT NULL DEFAULT '' UNIQUE,
 	user_id varchar(16),
Modified: trunk/0.3/setup/schema.mysql.sql
===================================================================
--- trunk/0.3/setup/schema.mysql.sql	2009-08-20 21:09:10 UTC (rev 128)
+++ trunk/0.3/setup/schema.mysql.sql	2009-08-21 14:47:11 UTC (rev 129)
@@ -22,10 +22,10 @@
 -- --------------------------------------------------------
 
 -- 
--- Table structure for table `cswdbl_category_table`
+-- Table structure for table `cswal_category_table`
 -- 
 
-CREATE TABLE `cswdbl_category_table` (
+CREATE TABLE `cswal_category_table` (
   `category_id` int(11) NOT NULL auto_increment,
   `category_name` text NOT NULL,
   PRIMARY KEY  (`category_id`)
@@ -34,10 +34,10 @@
 -- --------------------------------------------------------
 
 -- 
--- Table structure for table `cswdbl_class_table`
+-- Table structure for table `cswal_class_table`
 -- 
 
-CREATE TABLE `cswdbl_class_table` (
+CREATE TABLE `cswal_class_table` (
   `class_id` int(11) NOT NULL auto_increment,
   `class_name` text NOT NULL,
   PRIMARY KEY  (`class_id`)
@@ -46,26 +46,26 @@
 -- --------------------------------------------------------
 
 -- 
--- Table structure for table `cswdbl_event_table`
+-- Table structure for table `cswal_event_table`
 -- 
 
-CREATE TABLE `cswdbl_event_table` (
+CREATE TABLE `cswal_event_table` (
   `event_id` int(11) NOT NULL auto_increment,
   `class_id` int(11) NOT NULL,
   `category_id` int(11) NOT NULL,
   `description` text NOT NULL,
   PRIMARY KEY  (`event_id`),
-  KEY `cswdbl_event_table_class_id_fkey` (`class_id`),
-  KEY `cswdbl_event_table_category_id_fkey` (`category_id`)
+  KEY `cswal_event_table_class_id_fkey` (`class_id`),
+  KEY `cswal_event_table_category_id_fkey` (`category_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
 -- 
--- Table structure for table `cswdbl_log_table`
+-- Table structure for table `cswal_log_table`
 -- 
 
-CREATE TABLE `cswdbl_log_table` (
+CREATE TABLE `cswal_log_table` (
   `log_id` int(11) NOT NULL auto_increment,
   `creation` timestamp NOT NULL default CURRENT_TIMESTAMP,
   `event_id` int(11) NOT NULL,
@@ -73,7 +73,7 @@
   `affected_uid` int(11) NOT NULL,
   `details` text NOT NULL,
   PRIMARY KEY  (`log_id`),
-  KEY `cswdbl_log_table_event_id_fkey` (`event_id`)
+  KEY `cswal_log_table_event_id_fkey` (`event_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- 
@@ -81,41 +81,41 @@
 -- 
 
 -- 
--- Constraints for table `cswdbl_event_table`
+-- Constraints for table `cswal_event_table`
 -- 
-ALTER TABLE `cswdbl_event_table`
-  ADD CONSTRAINT `cswdbl_event_table_class_id_fkey` FOREIGN KEY (`class_id`) REFERENCES `cswdbl_class_table` (`class_id`),
-  ADD CONSTRAINT `cswdbl_event_table_category_id_fkey` FOREIGN KEY (`category_id`) REFERENCES `cswdbl_category_table` (`category_id`);
+ALTER TABLE `cswal_event_table`
+  ADD CONSTRAINT `cswal_event_table_class_id_fkey` FOREIGN KEY (`class_id`) REFERENCES `cswal_class_table` (`class_id`),
+  ADD CONSTRAINT `cswal_event_table_category_id_fkey` FOREIGN KEY (`category_id`) REFERENCES `cswal_category_table` (`category_id`);
 
 -- 
--- Constraints for table `cswdbl_log_table`
+-- Constraints for table `cswal_log_table`
 -- 
-ALTER TABLE `cswdbl_log_table`
-  ADD CONSTRAINT `cswdbl_log_table_event_id_fkey` FOREIGN KEY (`event_id`) REFERENCES `cswdbl_event_table` (`event_id`);
+ALTER TABLE `cswal_log_table`
+  ADD CONSTRAINT `cswal_log_table_event_id_fkey` FOREIGN KEY (`event_id`) REFERENCES `cswal_event_table` (`event_id`);
 
 
 
 -- 
--- Table structure for table `cswdbl_log_attribute_table`
+-- Table structure for table `cswal_log_attribute_table`
 -- 
 
-CREATE TABLE `cswdbl_log_attribute_table` (
+CREATE TABLE `cswal_log_attribute_table` (
   `log_attribute_id` int(11) NOT NULL auto_increment,
   `log_id` int(11) NOT NULL,
   `attribute_id` int(11) NOT NULL,
   `value_text` text NOT NULL,
   PRIMARY KEY  (`log_attribute_id`),
-  KEY `cswdbl_log_attribute_table_log_id_fkey` (`log_id`),
-  KEY `cswdbl_log_attribute_table_attribute_id_fkey` (`attribute_id`)
+  KEY `cswal_log_attribute_table_log_id_fkey` (`log_id`),
+  KEY `cswal_log_attribute_table_attribute_id_fkey` (`attribute_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 -- --------------------------------------------------------
 
 -- 
--- Table structure for table `cswdbl_log_table`
+-- Table structure for table `cswal_log_table`
 -- 
 
-CREATE TABLE `cswdbl_log_table` (
+CREATE TABLE `cswal_log_table` (
   `log_id` int(11) NOT NULL auto_increment,
   `creation` timestamp NOT NULL default CURRENT_TIMESTAMP,
   `event_id` int(11) NOT NULL,
@@ -123,17 +123,17 @@
   `affected_uid` int(11) NOT NULL,
   `details` text NOT NULL,
   PRIMARY KEY  (`log_id`),
-  KEY `cswdbl_log_table_event_id_fkey` (`event_id`)
+  KEY `cswal_log_table_event_id_fkey` (`event_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
 
 
 -- 
--- Constraints for table `cswdbl_log_attribute_table`
+-- Constraints for table `cswal_log_attribute_table`
 -- 
-ALTER TABLE `cswdbl_log_attribute_table`
-  ADD CONSTRAINT `cswdbl_log_attribute_table_attribute_id_fkey` FOREIGN KEY (`attribute_id`) REFERENCES `cswdbl_attribute_table` (`attribute_id`),
-  ADD CONSTRAINT `cswdbl_log_attribute_table_log_id_fkey` FOREIGN KEY (`log_id`) REFERENCES `cswdbl_log_table` (`log_id`);
+ALTER TABLE `cswal_log_attribute_table`
+  ADD CONSTRAINT `cswal_log_attribute_table_attribute_id_fkey` FOREIGN KEY (`attribute_id`) REFERENCES `cswal_attribute_table` (`attribute_id`),
+  ADD CONSTRAINT `cswal_log_attribute_table_log_id_fkey` FOREIGN KEY (`log_id`) REFERENCES `cswal_log_table` (`log_id`);
 
 
   
Modified: trunk/0.3/setup/schema.pgsql.sql
===================================================================
--- trunk/0.3/setup/schema.pgsql.sql	2009-08-20 21:09:10 UTC (rev 128)
+++ trunk/0.3/setup/schema.pgsql.sql	2009-08-21 14:47:11 UTC (rev 129)
@@ -14,7 +14,7 @@
 --	a project management system with projects and issues, then there would 
 --	be a category for "project" and for "issue".
 --
-CREATE TABLE cswdbl_category_table (
+CREATE TABLE cswal_category_table (
 	category_id serial NOT NULL PRIMARY KEY,
 	category_name text NOT NULL
 );
@@ -25,7 +25,7 @@
 --	that was created, "project" would be the category (see above) and the 
 --	class would then be "create".
 --
-CREATE TABLE cswdbl_class_table (
+CREATE TABLE cswal_class_table (
 	class_id serial NOT NULL PRIMARY KEY,
 	class_name text NOT NULL
 );
@@ -38,10 +38,10 @@
 --	and make the description for that event more useful, especially if the 
 --	logs are going to be displayed in any sort of useful manner.
 --
-CREATE TABLE cswdbl_event_table (
+CREATE TABLE cswal_event_table (
 	event_id serial NOT NULL PRIMARY KEY,
-	class_id integer NOT NULL REFERENCES cswdbl_class_table(class_id),
-	category_id integer NOT NULL REFERENCES cswdbl_category_table(category_id),
+	class_id integer NOT NULL REFERENCES cswal_class_table(class_id),
+	category_id integer NOT NULL REFERENCES cswal_category_table(category_id),
 	description text NOT NULL
 );
 
@@ -54,10 +54,10 @@
 --	(zero) for logging non-authenticated things, and a 1 (one) for activities 
 --	performed by the system itself.
 --
-CREATE TABLE cswdbl_log_table (
+CREATE TABLE cswal_log_table (
 	log_id serial NOT NULL PRIMARY KEY,
 	creation timestamp NOT NULL DEFAULT NOW(),
-	event_id integer NOT NULL REFERENCES cswdbl_event_table(event_id),
+	event_id integer NOT NULL REFERENCES cswal_event_table(event_id),
 	uid integer NOT NULL,
 	affected_uid integer NOT NULL,
 	details text NOT NULL
@@ -67,7 +67,7 @@
 --
 -- List of distinct attribute names.
 --
-CREATE TABLE cswdbl_attribute_table (
+CREATE TABLE cswal_attribute_table (
 	attribute_id serial NOT NULL PRIMARY KEY,
 	attribute_name text NOT NULL UNIQUE
 );
@@ -75,10 +75,10 @@
 --
 -- Linkage for attributes to logs.
 --
-CREATE TABLE cswdbl_log_attribute_table (
+CREATE TABLE cswal_log_attribute_table (
 	log_attribute_id serial NOT NULL PRIMARY KEY,
-	log_id int NOT NULL REFERENCES cswdbl_log_table(log_id),
-	attribute_id int NOT NULL REFERENCES cswdbl_attribute_table(attribute_id),
+	log_id int NOT NULL REFERENCES cswal_log_table(log_id),
+	attribute_id int NOT NULL REFERENCES cswal_attribute_table(attribute_id),
 	value_text text
 );
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-20 21:09:18
      
     | 
| Revision: 128
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=128&view=rev
Author:   crazedsanity
Date:     2009-08-20 21:09:10 +0000 (Thu, 20 Aug 2009)
Log Message:
-----------
Make sure all tables are using InnoDB as the engine (for transaction support).
Modified Paths:
--------------
    trunk/0.3/setup/db_session_schema.mysql.sql
Modified: trunk/0.3/setup/db_session_schema.mysql.sql
===================================================================
--- trunk/0.3/setup/db_session_schema.mysql.sql	2009-08-20 20:39:35 UTC (rev 127)
+++ trunk/0.3/setup/db_session_schema.mysql.sql	2009-08-20 21:09:10 UTC (rev 128)
@@ -14,4 +14,4 @@
   `session_data` LONGTEXT  NOT NULL,
   PRIMARY KEY (`session_store_id`)
 )
-ENGINE = MyISAM;
\ No newline at end of file
+ENGINE = InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-20 20:39:44
      
     | 
| Revision: 127
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=127&view=rev
Author:   crazedsanity
Date:     2009-08-20 20:39:35 +0000 (Thu, 20 Aug 2009)
Log Message:
-----------
All webapp-related items moved here from cs-content...
NOTE::: nearly all files now have the "svn:keywords" property set.
NOTE2:: this is done to facilitate much faster changes to cs-content.  While
it may slow development of cs-webapplibs, there is also a lot of work being
done to build unit tests there: this should hopefully avoid unexpected
breakage in code during upgrades.  This also makes upgrading of the
database-reliant stuff (like cs_phpDB) to be more easily upgraded.
CODE MOVED FROM cs-content:::
	* /cs_bbCodeParser.class.php
	* /cs_phpDB.class.php (including db_types & abstract)
	* /cs_sessionDB.class.php (including schema files)
	* /cs_siteConfig.class.php
	* /cs_tabs.class.php
	* /abstract/cs_phpDB.abstract.class.php
	* /tests/testOfCSPHPDB.php
CHANGED REQUIRE_ONCE PATHS:::
	* /contentSystem.class.php (cs_sessionDB)
MISC:::
	* /contentSystem.class.php:
		-- MAIN::: don't require cs_tabs
		-- initialize_locals(): drop cs_tabs stuff (unneeded)
Modified Paths:
--------------
    trunk/0.3/cs_webdbupgrade.class.php
Added Paths:
-----------
    trunk/0.3/abstract/cs_phpDB.abstract.class.php
    trunk/0.3/cs_bbCodeParser.class.php
    trunk/0.3/cs_phpDB.class.php
    trunk/0.3/cs_sessionDB.class.php
    trunk/0.3/cs_siteConfig.class.php
    trunk/0.3/cs_tabs.class.php
    trunk/0.3/db_types/
    trunk/0.3/db_types/cs_phpDB__mysql.class.php
    trunk/0.3/db_types/cs_phpDB__pgsql.class.php
    trunk/0.3/db_types/cs_phpDB__sqlite.class.php
    trunk/0.3/setup/db_session_schema.mysql.sql
    trunk/0.3/setup/db_session_schema.pgsql.sql
    trunk/0.3/tests/testOfCSPHPDB.php
Property Changed:
----------------
    trunk/0.3/docs/CREDITS
    trunk/0.3/docs/LICENSE
    trunk/0.3/docs/README.txt
    trunk/0.3/docs/SETUP.txt
    trunk/0.3/tests/example_test.php
    trunk/0.3/tests/testOfCSWebAppLibs.php
Added: trunk/0.3/abstract/cs_phpDB.abstract.class.php
===================================================================
--- trunk/0.3/abstract/cs_phpDB.abstract.class.php	                        (rev 0)
+++ trunk/0.3/abstract/cs_phpDB.abstract.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,166 @@
+<?php
+/*
+ * Created on Jan 29, 2009
+ * 
+ * FILE INFORMATION:
+ * 
+ * $HeadURL$
+ * $Id$
+ * $LastChangedDate$
+ * $LastChangedBy$
+ * $LastChangedRevision$
+ */
+
+abstract class cs_phpDBAbstract {
+
+	/** Internal result set pointer. */
+	protected $result = NULL;
+	
+	/** Internal error code. */
+	protected $errorCode = 0;
+	
+	/** Status of the current transaction. */
+	protected $transStatus = NULL;
+	
+	/** Whether there is a transaction in progress or not. */
+	protected $inTrans = FALSE;
+	
+	/** Holds the last query performed. */
+	protected $lastQuery = NULL;
+	
+	/** List of queries that have been run */
+	protected $queryList=array();
+	
+	/** How many seconds to wait for a query before cancelling it. */
+	protected $timeOutSeconds = NULL;
+	
+	/** Internal check to determine if a connection has been established. */
+	protected $isConnected=FALSE;
+	
+	/** Internal check to determine if the parameters have been set. */
+	protected $paramsAreSet=FALSE;
+	
+	/** Resource handle. */
+	protected $connectionID = -1;
+	
+	/** Hostname or IP to connect to */
+	protected $host;
+	
+	/** Port to connect to (default for Postgres is 5432) */
+	protected $port;
+	
+	/** Name of the database */
+	protected $dbname;
+	
+	/** Username to connect to the database */
+	protected $user;
+	
+	/** password to connect to the database */
+	protected $password;
+	
+	/** Row counter for looping through records */
+	protected $row = -1;
+	
+	/** cs_globalFunctions object, for string stuff. */
+	protected $gfObj;
+	
+	/** Internal check to ensure the object has been properly created. */
+	protected $isInitialized=FALSE;
+	
+	/** List of prepared statements, indexed off the name, with the sub-array being fieldname=>dataType. */
+	protected $preparedStatements = array();
+	
+	/** Set to TRUE to save all queries into an array. */
+	protected $useQueryList=FALSE;
+	
+	/** array that essentially remembers how many times beginTrans() was called. */
+	protected $transactionTree = NULL;
+	
+	
+	
+	//Define some abstract methods so they MUST be provided in order for things to work.
+	abstract public function set_db_info(array $params);
+	abstract public function close();
+	abstract public function connect(array $dbParams=NULL, $forceNewConnection=FALSE);
+	abstract public function exec($query);
+	abstract public function errorMsg($setMessage=null, $logError=null);
+	abstract public function fobject();
+	abstract public function farray();
+	abstract public function farray_fieldnames($index=null, $numbered=null,$unsetIndex=1);
+	abstract public function farray_nvp($name, $value);
+	abstract public function farray_numbered();
+	abstract public function numAffected();
+	abstract public function numRows();
+	abstract public function is_connected();
+	
+	
+	//=========================================================================
+    public function __construct() {
+    	$this->gfObj = new cs_globalFunctions;
+    	$this->isInitialized = true;
+    }//end __construct()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Make sure the object is sane.
+	 */
+	final protected function sanity_check() {
+		if($this->isInitialized !== TRUE) {
+			throw new exception(__METHOD__ .": not properly initialized");
+		}
+	}//end sanity_check()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Disconnect from the database (calls internal "close()" method).
+	 */
+	public function disconnect() {
+		return($this->close());
+	}//end disconnect()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	public function affectedRows() {
+		return($this->numAffected());
+	}//end affectedRows()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	public function currRow() {
+		return($this->row);
+	}//end currRow()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	public function querySafe($string) {
+		return($this->gfObj->cleanString($string,"query"));
+	}//end querySafe()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Make it SQL safe.
+	 */
+	public function sqlSafe($string) {
+		return($this->gfObj->cleanString($string,"sql"));
+	}//end sqlSafe()
+	//=========================================================================
+	
+	
+	
+}
+?>
\ No newline at end of file
Property changes on: trunk/0.3/abstract/cs_phpDB.abstract.class.php
___________________________________________________________________
Added: svn:keywords
   + Id
Author
Revision
HeadURL
Date
Added: trunk/0.3/cs_bbCodeParser.class.php
===================================================================
--- trunk/0.3/cs_bbCodeParser.class.php	                        (rev 0)
+++ trunk/0.3/cs_bbCodeParser.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,165 @@
+<?php
+/**
+ * Created on 2007-09-26
+ * 
+ *  
+ * SVN INFORMATION:::
+ * ------------------
+ * SVN Signature::::::: $Id$
+ * Last Author::::::::: $Author$ 
+ * Current Revision:::: $Revision$ 
+ * Repository Location: $HeadURL$ 
+ * Last Updated:::::::: $Date$
+ * 
+ * 
+ * Originally from a snippet (just the function) on PHPFreaks.com: http://www.phpfreaks.com/quickcode/BBCode/712.php
+ * The original code had parse errors, so it had to be fixed... While it was posted as just a basic function, 
+ * the code within (such as the reference to "$this->bbCodeData" indicated it was from a class... so it has 
+ * been converted.
+ */
+
+require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
+
+class cs_bbCodeParser extends cs_contentAbstract {
+	
+	/** Array containing all the codes & how to parse them. */
+	private $bbCodeData = NULL;
+	
+	//=========================================================================
+	/**
+	 * Setup internal structures.
+	 */
+	function __construct() {
+		parent::__construct(false);
+		# Which BBCode is accepted here
+		$this->bbCodeData = array(
+			'bold' => array(
+				'start'	=> array('[b]', '\[b\](.*)', '<b>\\1'),
+				'end'	=> array('[/b]', '\[\/b\]', '</b>'),
+			),
+			
+			'underline' => array(
+				'start'	=> array('[u]', '\[u\](.*)', '<u>\\1'),
+				'end'	=> array('[/u]', '\[\/u\]', '</u>'),
+			),
+			
+			'italic' => array(
+				'start'	=> array('[i]', '\[i\](.*)', '<i>\\1'),
+				'end'	=> array('[/i]', '\[\/i\]', '</i>'),
+			),
+			
+			'image' => array(
+				'start'	=> array('[img]', '\[img\](http:\/\/|https:\/\/|ftp:\/\/|\/)(.*)(.jpg|.jpeg|.bmp|.gif|.png)', '<img src=\'\\1\\2\\3\' />'),
+				'end'	=> array('[/img]', '\[\/img\]', ''), 
+			),
+			
+			#  [url]http://x.com[/url]
+			'url1' => array(
+				'start'	=> array('[url]', '\[url\](http:\/\/|https:\/\/|ftp:\/\/)(.*)', '<a target="_blank" href=\'\\1\\2\'>\\1\\2'),
+				'end'	=> array('[/url]', '\[\/url\]', '</a>'),
+			),
+			
+			# [url=http://x.com]stuff[/url]
+			'url2' => array(
+				'start'	=> array('[url]', '\[url=(http:\/\/|https:\/\/|ftp:\/\/)(.*)\](.*)', '<a target="_blank" href=\'\\1\\2\'>\\3'), 
+				'end'	=> array('[/url]', '\[\/url\]', '</a>'),
+			),
+			
+			'code' => array(
+				'start'	=> array('[code]', '\[code\](.*)', '<br /><br /><b>CODE</b>:<div class="code">\\1'),
+				'end'	=> array('[/code]', '\[\/code\]', '</div><br />'),
+			),
+		);
+	}//end __construct()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Ensure the object is initialized properly, throw exception if not.
+	 */
+	private function isInitialized() {
+		if(!is_array($this->bbCodeData) || !count($this->bbCodeData)) {
+			throw new exception(__METHOD__ .": BBCode array not initialized");
+		}
+	}//end isInitialized()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Parse BBCode from the given string & return it with formatting.
+	 */
+	function parseString($data, $newlines2BR=FALSE) {
+		if(is_string($data) && strlen($data) > 10) {
+			$this->isInitialized();
+			$data = str_replace("\n", '||newline||', $data); 
+			
+			foreach( $this->bbCodeData as $k => $v ) {
+				if(isset($this->bbCodeData[$k]['special'])) {
+					$myMatches = array();
+					$regex = '/'. $this->bbCodeData[$k]['start'][1] . $this->bbCodeData[$k]['end'][1] .'/';
+					$x = preg_match_all($regex .'U', $data, $myMatches);
+					
+					if(count($myMatches[1])) {
+						$funcName = $v['special'];
+						$myArgs = $myMatches[1];
+						$myArgs = array_unique($myArgs);
+						
+						foreach($myArgs as $index=>$value) {
+							$showThis = $this->$funcName($value);
+							$replaceThis = str_replace(array('[', ']'), array('\\[', '\\]'), $myMatches[0][$index]);
+							$data = preg_replace('/'. $replaceThis .'/U', $showThis, $data);
+						}
+					}
+				}
+				else {
+					$data = preg_replace("/".$this->bbCodeData[$k]['start'][1].$this->bbCodeData[$k]['end'][1]."/U", $this->bbCodeData[$k]['start'][2].$this->bbCodeData[$k]['end'][2], $data);
+				}
+			}
+			
+			$replaceNewlineStr = "\n";
+			if($newlines2BR) {
+				$replaceNewlineStr = "<br />\n";
+			}
+			$data = str_replace('||newline||', $replaceNewlineStr, $data); 
+			
+		}
+		return $data;
+	}//end parseString()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Enables extending classes to register a bbCode with special parsing.
+	 * 
+	 * NOTE: right now, this will only handle syntax like "[{bbCodeString}={arg}]".
+	 */
+	protected function register_code_with_callback($bbCodeString, $method) {
+		
+		if(method_exists($this, $method)) {
+			$this->bbCodeData[$bbCodeString] = array(
+				'special'	=> $method,
+				'start'		=> array(
+					'['. $bbCodeString .']',
+					'\['. $bbCodeString .'=(.*)'
+				),
+				'end'		=> array(
+					'',
+					'\]'
+				)
+			);
+		}
+		else {
+			throw new exception(__METHOD__ .": method (". $method .") doesn't exist");
+		}
+		
+	}//end register_code_with_callback()
+	//=========================================================================
+	
+}
+?>
Property changes on: trunk/0.3/cs_bbCodeParser.class.php
___________________________________________________________________
Added: svn:keywords
   + Id
Author
Revision
HeadURL
Date
Added: trunk/0.3/cs_phpDB.class.php
===================================================================
--- trunk/0.3/cs_phpDB.class.php	                        (rev 0)
+++ trunk/0.3/cs_phpDB.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,197 @@
+<?php
+
+/*
+ * A class for generic PostgreSQL database access.
+ * 
+ * SVN INFORMATION:::
+ * SVN Signature:::::::: $Id$
+ * Last Committted Date: $Date$
+ * Last Committed Path:: $HeadURL$
+ * 
+ */
+
+///////////////////////
+// ORIGINATION INFO:
+// 		Author: Trevin Chow (with contributions from Lee Pang, wle...@ho...)
+// 		Email: t1...@ma...
+// 		Date: February 21, 2000
+// 		Last Updated: August 14, 2001
+//
+// 		Description:
+//  		Abstracts both the php function calls and the server information to POSTGRES
+//  		databases.  Utilizes class variables to maintain connection information such
+//  		as number of rows, result id of last operation, etc.
+//
+///////////////////////
+
+require_once(dirname(__FILE__) ."/abstract/cs_webapplibs.abstract.class.php");
+require_once(dirname(__FILE__) ."/abstract/cs_phpDB.abstract.class.php");
+
+class cs_phpDB extends cs_contentAbstract {
+	
+	private $dbLayerObj;
+	private $dbType;
+	public $connectParams = array();
+	
+	//=========================================================================
+	public function __construct($type='pgsql') {
+		
+		if(strlen($type)) {
+			
+			require_once(dirname(__FILE__) .'/db_types/'. __CLASS__ .'__'. $type .'.class.php');
+			$className = __CLASS__ .'__'. $type;
+			$this->dbLayerObj = new $className;
+			$this->dbType = $type;
+			
+			parent::__construct();
+			
+			$this->isInitialized = TRUE;
+		}
+		else {
+			throw new exception(__METHOD__ .": failed to give a type (". $type .")");
+		}
+	}//end __construct()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Magic method to call methods within the database abstraction layer ($this->dbLayerObj).
+	 */
+	public function __call($methodName, $args) {
+		if(method_exists($this->dbLayerObj, $methodName)) {
+			if($methodName == 'connect' && is_array($args[0])) {
+				//capture the connection parameters.
+				$this->connectParams = $args[0];
+			}
+			$retval = call_user_func_array(array($this->dbLayerObj, $methodName), $args);
+		}
+		else {
+			throw new exception(__METHOD__ .': unsupported method ('. $methodName .') for database of type ('. $this->dbType .')');
+		}
+		return($retval);
+	}//end __call()	
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	public function get_dbtype() {
+		return($this->dbType);
+	}//end get_dbtype()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Performs queries which require results.  Passing $indexField returns a 
+	 * complex array indexed from that field; passing $valueField will change 
+	 * it to a name=>value formatted array.
+	 * 
+	 * NOTE:: when using an index field, be sure it is guaranteed to be unique, 
+	 * 	i.e. it is a primary key!  If duplicates are found, the database class 
+	 * 	will throw an exception!
+	 */
+	public function run_query($sql, $indexField=null, $valueField=null) {
+		
+		$retval = array();
+		
+		//length must be 19 as that's about the shortest valid SQL:  "select * from table"
+		if(strlen($sql) >= 19) {
+			$this->exec($sql);
+			
+			$numRows = $this->numRows();
+			$dbError = $this->errorMsg();
+			if($numRows > 0 && !strlen($dbError)) {
+				if(strlen($indexField) && (is_null($valueField) || !strlen($valueField))) {
+					//return a complex array based on a given field.
+					$retval = $this->farray_fieldnames($indexField, null, 0);
+				}
+				elseif(strlen($indexField) && strlen($valueField)) {
+					//return an array as name=>value pairs.
+					$retval = $this->farray_nvp($indexField, $valueField);
+				}
+				else {
+					$retval = $this->farray_fieldnames();
+				}
+			}
+			elseif($numRows == 0 && !strlen($dbError)) {
+				$retval = false;
+			}
+			else {
+				throw new exception(__METHOD__ .": no rows (". $numRows .") or dbError::: ". $dbError ."<BR>\nSQL::: ". $sql);
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": invalid length SQL (". $sql .")");
+		}
+		
+		return($retval);
+	}//end run_query()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Handles performing the insert statement & returning the last inserted ID.
+	 */
+	public function run_insert($sql, $sequence='null') {
+		
+		$this->exec($sql);
+		
+		if($this->numAffected() == 1 && !strlen($this->errorMsg())) {
+			//retrieve the ID just created.
+			$retval = $this->lastID($sequence);
+		}
+		else {
+			//something broke...
+			throw new exception(__METHOD__ .": failed to insert, rows=(". $this->numRows .")... "
+				."ERROR::: ". $this->errorMsg() ."\n -- SQL:::: ". $sql);
+		}
+		
+		return($retval);
+	}//end run_insert()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Performs the update & returns how many rows were affected.
+	 */
+	public function run_update($sql, $zeroIsOk=false) {
+		$this->exec($sql);
+		
+		$dberror = $this->errorMsg();
+		$numAffected = $this->numAffected();
+		
+		if(strlen($dberror)) {
+			throw new exception(__METHOD__ .": error while running update::: ". $dberror ." -- SQL::: ". $sql);
+		}
+		elseif($numAffected==0 && $zeroIsOk == false) {
+			throw new exception(__METHOD__ .": no rows updated (". $numAffected ."), SQL::: ". $sql);
+		}
+		
+		return($numAffected);
+	}//end run_update()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	public function reconnect() {
+		if(is_array($this->connectParams) && count($this->connectParams)) {
+			$this->dbLayerObj->connect($this->connectParams, true);
+		}
+		else {
+			throw new exception(__METHOD__ .": no connection parameters stored");
+		}
+	}//end reconnect()
+	//=========================================================================
+	
+} // end class phpDB
+
+?>
Property changes on: trunk/0.3/cs_phpDB.class.php
___________________________________________________________________
Added: svn:keywords
   + Id
Author
Revision
HeadURL
Date
Added: trunk/0.3/cs_sessionDB.class.php
===================================================================
--- trunk/0.3/cs_sessionDB.class.php	                        (rev 0)
+++ trunk/0.3/cs_sessionDB.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,366 @@
+<?php
+/*
+ * FILE INFORMATION:
+ * $HeadURL$
+ * $Id$
+ * $LastChangedDate$
+ * $LastChangedBy$
+ * $LastChangedRevision$
+ */
+
+require_once(constant('LIBDIR') .'/cs-content/cs_session.class.php');
+require_once(dirname(__FILE__) .'/cs_phpDB.class.php');
+require_once(constant('LIBDIR') .'/cs-phpxml/cs_arrayToPath.class.php');
+require_once(constant('LIBDIR') .'/cs-webapplibs/cs_webdblogger.class.php');
+
+class cs_sessionDB extends cs_session {
+
+	protected $db;
+	
+	protected $logger = null;
+	
+	protected $logCategory = "DB Sessions";
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * The constructor.
+	 * 
+	 * @param $createSession	(mixed,optional) determines if a session will be started or not; if
+	 * 								this parameter is non-null and non-numeric, the value will be 
+	 * 								used as the session name.
+	 */
+	function __construct() {
+		
+		
+		//map some constants to connection parameters.
+		//NOTE::: all constants should be prefixed...
+		$constantPrefix = 'SESSION_DB_';
+		$params = array('host', 'port', 'dbname', 'user', 'password');
+		foreach($params as $name) {
+			$value = null;
+			$constantName = $constantPrefix . strtoupper($name);
+			if(defined($constantName)) {
+				$value = constant($constantName);
+			}
+			$dbParams[$name] = $value;
+		}
+		$this->db = new cs_phpDB(constant('DBTYPE'));
+		$this->db->connect($dbParams);
+		
+		$this->tableName = 'cs_session_store_table';
+		$this->tablePKey = 'session_store_id';
+		$this->sequenceName = 'cs_session_store_table_session_store_id_seq';
+		
+		if(!$this->sessdb_table_exists()) {
+			$this->load_table();
+		}
+		
+		//now tell PHP to use this class's methods for saving the session.
+		session_set_save_handler(
+			array(&$this, 'sessdb_open'),
+			array(&$this, 'sessdb_close'),
+			array(&$this, 'sessdb_read'),
+			array(&$this, 'sessdb_write'),
+			array(&$this, 'sessdb_destroy'),
+			array(&$this, 'sessdb_gc')
+		);
+		
+		//NOTE::: calling session_id() here, prior to parent's construct, can set a specific session_id; if
+		//			something like cs_authToken (part of cs-webapplibs project) were used, just call 
+		//			cs_authToken::create_token() here... 
+		
+		parent::__construct(true);
+		
+		//Stop things from going into an audit log... see 
+		//http://www.developertutorials.com/tutorials/php/saving-php-session-data-database-050711/page3.html
+		//	NOTE::: not sure if this is valid or not...
+		$this->audit_logging = false;
+		
+	}//end __construct()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Determines if the appropriate table exists in the database.
+	 */
+	public function sessdb_table_exists() {
+		try {
+			$test = $this->db->run_query("SELECT * FROM ". $this->tableName .
+					" ORDER BY ". $this->tablePKey ." LIMIT 1");
+			$exists = true;
+		}
+		catch(exception $e) {
+			$this->exception_handler(__METHOD__ .": exception while trying to detect table::: ". $e->getMessage());
+			$exists = false;
+		}
+		
+		return($exists);
+	}//end sessdb_table_exists()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	private function load_table() {
+		$filename = dirname(__FILE__) .'/schema/db_session_schema.'. $this->db->get_dbtype() .'.sql';
+		if(file_exists($filename)) {
+			try {
+				$this->db->run_update(file_get_contents($filename),true);
+			}
+			catch(exception $e) {
+				$this->exception_handler(__METHOD__ .": failed to load required table " .
+						"into your database automatically::: ". $e->getMessage(), true);
+			}
+		}
+		else {
+			$this->exception_handler(__METHOD__ .": while attempting to load required " .
+					"table into your database, discovered you have a missing schema " .
+					"file (". $filename .")", true);
+		}
+	}//end load_table()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	protected function is_valid_sid($sid) {
+		$isValid = false;
+		if(strlen($sid) == 32) {
+			try {
+				$sql = "SELECT * FROM ". $this->tableName ." WHERE session_id='". 
+						$sid ."'";
+				$this->db->run_query($sql);
+				$numrows = $this->db->numRows();
+				if($numrows == 1) {
+					$isValid = true;
+				}
+				elseif($numrows > 0 || $numrows < 0) {
+					$this->exception_handler(__METHOD__ .": invalid numrows returned (". $numrows .")",true);
+				}
+			}
+			catch(exception $e) {
+				//well... do nothing I guess.
+			}
+		}
+		
+		return($isValid);
+	}//end is_valid_sid()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Open the session (doesn't really do anything)
+	 */
+	public function sessdb_open($savePath, $sessionName) {
+		return(true);
+	}//end sessdb_open()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Close the session (call the "gc" method)
+	 */
+	public function sessdb_close() {
+		return($this->sessdb_gc(0));
+	}//end sessdb_close()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Read information about the session.  If there is no data, it MUST return 
+	 * an empty string instead of NULL.
+	 */
+	public function sessdb_read($sid) {
+		$retval = '';
+		try {
+			$sql = "SELECT * FROM ". $this->tableName ." WHERE session_id='". 
+				$sid ."'";
+			$data = $this->db->run_query($sql);
+			
+			if($this->db->numRows() == 1) {
+				$retval = $data['session_data'];
+			}
+		}
+		catch(exception $e) {
+			//no throwing exceptions...
+			$this->exception_handler(__METHOD__ .": failed to read::: ". $e->getMessage());
+		}
+		return($retval);
+	}//end sessdb_read()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	public function sessdb_write($sid, $data) {
+		$data = array(
+			'session_data'	=> $data,
+			'user_id'		=> null
+		);
+		$cleanString = array(
+			'session_data'		=> 'sql',
+			'user_id'			=> 'numeric'
+		);
+		
+		
+		
+		//pull the uid out of the session...
+		if(defined('SESSION_DBSAVE_UIDPATH')) {
+			$a2p = new cs_arrayToPath($_SESSION);
+			$uidVal = $a2p->get_data(constant('SESSION_DBSAVE_UIDPATH'));
+			
+			if(is_string($uidVal) || is_numeric($uidVal)) {
+				$data['user_id'] = $uidVal;
+			}
+		}
+		
+		$afterSql = "";
+		if($this->is_valid_sid($sid)) {
+			$type = 'update';
+			$sql = "UPDATE ". $this->tableName ." SET ";
+			$afterSql = "WHERE session_id='". $sid ."'";
+			$data['last_updated'] = 'NOW()';
+			$secondArg = false;
+		}
+		else {
+			$type = 'insert';
+			$sql = "INSERT INTO ". $this->tableName ." ";
+			$data['session_id'] = $sid;
+			$secondArg = $this->sequenceName;
+		}
+		
+		$sql .= $this->gfObj->string_from_array($data, $type, null, $cleanString) .' '. $afterSql;
+		try {
+			$funcName = 'run_'. $type;
+			$res = $this->db->$funcName($sql, $secondArg);
+		}
+		catch(exception $e) {
+			//umm... yeah.
+			$this->exception_handler(__METHOD__ .": failed to perform action (". $type .")::: ". $e->getMessage());
+		}
+		
+		return(true);
+	}//end sessdb_write()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	public function sessdb_destroy($sid) {
+		try {
+			$sql = "DELETE FROM ". $this->tableName ." WHERE session_id='". $sid ."'";
+			$numDeleted = $this->db->run_update($sql, true);
+			
+			if($numDeleted > 0) {
+				$this->do_log("Destroyed session_id (". $sid .")", 'deleted');
+			}
+		}
+		catch(exception $e) {
+			//do... nothing?
+		}
+		return(true);
+	}//end sessdb_destroy()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Define maximum lifetime (in seconds) to store sessions in the database. 
+	 * Anything that is older than that time will be purged (gc='garbage collector').
+	 */
+	public function sessdb_gc($maxLifetime=null) {
+		
+		$dateFormat = 'Y-m-d H:i:s';
+		$strftimeFormat = '%Y-%m-%d %H:%M:%S';
+		$nowTime = date($dateFormat);
+		$excludeCurrent = true;
+		if(defined('SESSION_MAX_TIME') || defined('SESSION_MAX_IDLE')) {
+			$maxFreshness = null;
+			if(defined('SESSION_MAX_TIME')) {
+				$date = strtotime('- '. constant('SESSION_MAX_TIME'));
+				$maxFreshness = "date_created < '". strftime($strftimeFormat, $date) ."'";
+				$excludeCurrent=false;
+			}
+			if(defined('SESSION_MAX_IDLE')) {
+				
+				$date = strtotime('- '. constant('SESSION_MAX_IDLE'));
+				$addThis = "last_updated < '". strftime($strftimeFormat, $date) ."'";
+				$maxFreshness = $this->gfObj->create_list($maxFreshness, $addThis, ' OR ');
+			}
+		}
+		elseif(is_null($maxLifetime) || !is_numeric($maxLifetime) || $maxLifetime <= 0) {
+			//pull it from PHP's ini settings.
+			$maxLifetime = ini_get("session.gc_maxlifetime");
+			$interval = $maxLifetime .' seconds';
+			
+			$dt1 = strtotime($nowTime .' - '. $interval);
+			$maxFreshness = "last_updated < '". date($dateFormat, $dt1) ."'";
+		}
+		
+		
+		
+		try {
+			//destroy old sessions, but don't complain if nothing is deleted.
+			$sql = "DELETE FROM ". $this->tableName ." WHERE ". $maxFreshness;
+			if(strlen($this->sid) && $excludeCurrent === false) {
+				$sql .= " AND session_id != '". $this->sid ."'";
+			}
+			$numCleaned = $this->db->run_update($sql, true);
+			
+			if($numCleaned > 0) {
+				$this->do_log("cleaned (". $numCleaned .") old sessions, " .
+						"excludeCurrent=(". $this->gfObj->interpret_bool($excludeCurrent) .")" .
+						", maxFreshness=(". $maxFreshness .")", "debug");
+			}
+		}
+		catch(exception $e) {
+			$this->exception_handler(__METHOD__ .": exception while cleaning: ". $e->getMessage());
+		}
+		
+		return(true);
+		
+	}//end sessdb_gc()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	protected function do_log($message, $type) {
+		
+		//check if the logger object has been created.
+		if(!is_object($this->logger)) {
+			$newDB = new cs_phpDB(constant('DBTYPE'));
+			$newDB->connect($this->db->connectParams, true);
+			$this->logger = new cs_webdblogger($newDB, $this->logCategory);
+		}
+		
+		return($this->logger->log_by_class("SID=(". $this->sid .") -- ". $message,$type));
+		
+	}//end do_log()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	protected function exception_handler($message, $throwException=false) {
+		$logId = $this->do_log($message, 'exception in code');
+		if($throwException === true) {
+			//in this class, it is mostly useless to throw exceptions, so by default they're not thrown.
+			throw new exception($message);
+		}
+		return($logId);
+	}//end exception_handler()
+	//-------------------------------------------------------------------------
+
+
+}//end cs_session{}
+?>
\ No newline at end of file
Property changes on: trunk/0.3/cs_sessionDB.class.php
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:keywords
   + Id
Author
Revision
HeadURL
Date
Added: trunk/0.3/cs_siteConfig.class.php
===================================================================
--- trunk/0.3/cs_siteConfig.class.php	                        (rev 0)
+++ trunk/0.3/cs_siteConfig.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,404 @@
+<?php
+
+/*
+ * A class for handling configuration of database-driven web applications.
+ * 
+ * NOTICE::: this class requires that cs-phpxml and cs-arraytopath are both available
+ * at the same directory level as cs-content; all projects are SourceForge.net projects,
+ * using their unix names ("cs-phpxml" and "cs-arrayToPath").  The cs-phpxml project 
+ * requires cs-arrayToPath for parsing XML paths.
+ * 
+ * SVN INFORMATION:::
+ * SVN Signature:::::::: $Id$
+ * Last Committted Date: $Date$
+ * Last Committed Path:: $HeadURL$
+ * 
+ */
+
+require_once(dirname(__FILE__) .'/../cs-content/abstract/cs_content.abstract.class.php');
+require_once(dirname(__FILE__) .'/../cs-content/cs_fileSystem.class.php');
+require_once(dirname(__FILE__). '/../cs-phpxml/cs_phpxmlParser.class.php');
+require_once(dirname(__FILE__) .'/../cs-phpxml/cs_phpxmlBuilder.class.php');
+
+class cs_siteConfig extends cs_contentAbstract {
+	
+	/** XMLParser{} object, for reading XML config file. */
+	private $xmlReader;
+	
+	/** cs_fileSystem{} object, for writing/updating XML config file 
+	 * (only available if file is writable)
+	 */
+	private $xmlWriter;
+	
+	/** XMLBuilder{} object, for updating XML. */
+	private $xmlBuilder;
+	
+	/** cs_fileSystem{} object, for handling generic file operations (i.e. reading) */
+	private $fs;
+	
+	/** boolean flag indicating if the given config file is readOnly (false=read/write) */
+	private $readOnly;
+	
+	/** Directory for the config file. */
+	private $configDirname;
+	
+	/** Location of the configuration file itself. */
+	private $configFile;
+	
+	/** Active section of the full site configuration. */
+	private $activeSection;
+	
+	/** The FULL configuration file, instead of just the active section. */
+	private $fullConfig=array();
+	
+	/** cs_arrayToPath{} object. */
+	private $a2p;
+	
+	/** Prefix to add to every index in GLOBALS and CONSTANTS. */
+	private $setVarPrefix;
+	
+	/** Sections available within the config */
+	private $configSections=array();
+	
+	/** Boolean flag to determine if the object has been properly initialized or not. */
+	private $isInitialized=false;
+	
+	/** Store a list of items that need to be pushed into $GLOBALS on a given path. */
+	private $setGlobalArrays=array();
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Constructor.
+	 * 
+	 * @param $configFileLocation	(str) URI for config file.
+	 * @param $section				(str,optional) set active section (default=MAIN)
+	 * @param $setVarPrefix			(str,optional) prefix to add to all global & constant names.
+	 * 
+	 * @return NULL					(PASS) object successfully created
+	 * @return exception			(FAIL) failed to create object (see exception message)
+	 */
+	public function __construct($configFileLocation, $section='MAIN', $setVarPrefix=null) {
+		
+		$section = strtoupper($section);
+		$this->setVarPrefix=$setVarPrefix;
+		
+		parent::__construct();
+		
+		if(strlen($configFileLocation) && file_exists($configFileLocation)) {
+			
+			$this->configDirname = dirname($configFileLocation);
+			$this->configFile = $configFileLocation;
+			$this->fs = new cs_fileSystem($this->configDirname);
+			
+			$this->xmlReader = new cs_phpxmlParser($this->fs->read($configFileLocation));
+			
+			if($this->fs->is_writable($configFileLocation)) {
+				$this->readOnly = false;
+				$this->xmlWriter = new cs_fileSystem($this->configDirname);
+				
+			}
+			else {
+				$this->readOnly = true;
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": invalid configuration file (". $configFileLocation .")");
+		}
+		
+		if(strlen($section)) {
+			try {
+				$this->parse_config();
+				$this->set_active_section($section);
+				$this->config = $this->get_section($section);
+			}
+			catch(exception $e) {
+				throw new exception(__METHOD__ .": invalid section (". $section ."), DETAILS::: ". $e->getMessage());
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": no section given (". $section .")");
+		}
+		
+	}//end __construct()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/** 
+	 * Sets the active section.
+	 * 
+	 * @param $section		(str) section to be set as active.
+	 * 
+	 * @return VOID			(PASS) section was set successfully.
+	 * @return exception	(FAIL) problem encountred setting section. 
+	 */
+	public function set_active_section($section) {
+		if($this->isInitialized === true) {
+			$section = strtoupper($section);
+			if(in_array($section, $this->configSections)) {
+				$this->activeSection = $section;
+			}
+			else {
+				throw new exception(__METHOD__ .": invalid section (". $section .")");
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": not initialized");
+		}
+	}//end set_active_section($section)
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Parse the configuration file.  Handles replacing {VARIABLES} in values, 
+	 * sets items as global or as constants, and creates array indicating the 
+	 * available sections from the config file.
+	 * 
+	 * @param VOID			(void) no arguments accepted.
+	 * 
+	 * @return NULL			(PASS) successfully parsed configuration
+	 * @return exception	(FAIL) exception indicates problem encountered.
+	 */
+	private function parse_config() {
+		if(is_object($this->xmlReader)) {
+			$data = $this->xmlReader->get_path($this->xmlReader->get_root_element());
+			$specialVars = $this->build_special_vars();
+			$parseThis = array();
+			
+			
+			$this->configSections = array();
+			
+			foreach($data as $section=>$secData) {
+				//only handle UPPERCASE index names; lowercase indexes are special entries (i.e. "type" or "attributes"
+				if($section == strtoupper($section)) {
+					$this->configSections[] = $section;
+					
+					unset($secData['type']);
+					
+					if(isset($secData['attributes']) && is_array($secData['attributes'])) {
+						$sectionAttribs = $secData['attributes'];
+						unset($secData['attributes']);
+						
+						//put stuff into the globals scope...
+						if(isset($sectionAttribs['SETGLOBAL'])) {
+							$path = $section;
+							
+							$setPath = $path;
+							if(strlen($sectionAttribs['GLOBALARRAYLOCATION'])) {
+								$setPath = $sectionAttribs['GLOBALARRAYLOCATION'];
+							}
+							$this->setGlobalArrays[$path] = $setPath;
+						}
+					}
+					
+					foreach($secData as $itemName=>$itemValue) {
+						$attribs = array();
+						if(isset($itemValue['attributes']) && is_array($itemValue['attributes'])) {
+							$attribs = $itemValue['attributes'];
+						}
+						if(isset($itemValue['value'])) {
+							$itemValue = $itemValue['value'];
+						}
+						else {
+							$itemValue = null;
+						}
+						if(preg_match("/{/", $itemValue)) {
+							$origVal = $itemValue;
+							
+							//remove double-slashes (//)
+							$itemValue = preg_replace('/[\/]{2,}/', '\/', $itemValue);
+							
+							//remove leading slash for string replaces (i.e. "{/MAIN/SITE_ROOT}" becomes "{MAIN/SITE_ROOT}")
+							$itemValue = preg_replace('/{\//', '{', $itemValue);
+							
+							//replace special vars.
+							$itemValue = $this->gfObj->mini_parser($itemValue, $specialVars, '{', '}');
+							
+							//replace internal vars.
+							$itemValue = $this->gfObj->mini_parser($itemValue, $parseThis, '{', '}');
+						}
+						
+						if(isset($attribs['CLEANPATH'])) {
+							$itemValue = $this->fs->resolve_path_with_dots($itemValue);
+						}
+						
+						$parseThis[$itemName] = $itemValue;
+						$parseThis[$section ."/". $itemName] = $itemValue;
+						$data[$section][$itemName]['value'] = $itemValue;
+						
+						$setVarIndex = $this->setVarPrefix . $itemName;
+						if(isset($attribs['SETGLOBAL'])) {
+							$GLOBALS[$setVarIndex] = $itemValue;
+						}
+						if(isset($attribs['SETCONSTANT'])) {
+							if(isset($attribs['SETCONSTANTPREFIX'])) {
+								//did they give a specific prefix, or just a number/true?
+								if(strlen($attribs['SETCONSTANTPREFIX']) == 1) {
+									$setVarIndex = $section ."-". $setVarIndex;
+								}
+								else {
+									//use the prefix they gave.
+									$setVarIndex = $attribs['SETCONSTANTPREFIX'] ."-". $setVarIndex;
+								}
+							}
+							if(!defined($setVarIndex)) {
+								define($setVarIndex, $itemValue);
+							}
+						}
+					}
+				}
+			}
+			
+			$this->a2p = new cs_arrayToPath($data);
+			$this->isInitialized=true;
+			
+			if(count($this->setGlobalArrays)) {
+				$globA2p = new cs_arrayToPath(&$GLOBALS);
+				foreach($this->setGlobalArrays as $configPath=>$globalsPath) {
+					if($this->a2p->get_data($configPath)) {
+						$setMe = array();
+						foreach($this->a2p->get_data($configPath) as $i=>$v) {
+							$setMe[$i] = $v['value'];
+						}
+						$globA2p->set_data($globalsPath, $setMe);
+					}
+					else {
+						throw new exception(__METHOD__ .": attempted to set global array from non-existent path (". $configPath .")");
+					}
+				}
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": xmlReader not created, object probably not initialized");
+		}
+	}//end parse_config()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Retrieve all data about the given section.
+	 * 
+	 * @param $section		(str) section to retrieve.
+	 * 
+	 * @return array		(PASS) array contains section data.
+	 * @return exception	(FAIL) exception indicates problem.
+	 */
+	public function get_section($section) {
+		if($this->isInitialized === true) {
+			$section = strtoupper($section);
+			$data = $this->a2p->get_data($section);
+			
+			if(is_array($data) && count($data) && $data['type'] == 'open') {
+				unset($data['type']);
+				$retval = $data;
+			}
+			else {
+				throw new exception(__METHOD__ .": invalid section (". $section .") or no data (". $data['type'] .")");
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": not initialized");
+		}
+		
+		return($retval);
+	}//end get_section()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Retrieves value from the active section, or from another (other sections 
+	 * specified like "SECTION/INDEX").
+	 * 
+	 * @param $index		(str) index name of value to retrieve.
+	 * 
+	 * @return mixed		(PASS) returns value of given index.
+	 * 
+	 * NOTE::: this will return NULL if the given index or section/index does
+	 * not exist.
+	 */
+	public function get_value($index) {
+		if($this->isInitialized === true) {
+			if(preg_match("/\//", $index)) {
+				//section NOT given, assume they're looking for something in the active section.
+				$index = $this->activeSection ."/". $index;
+			}
+			$retval = $this->a2p->get_data($index .'/value');
+		}
+		else {
+			throw new exception(__METHOD__ .": not initialized");
+		}
+		return($retval);
+	}//end get_value()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	/**
+	 * Retrieves list of valid configuration sections, as defined by 
+	 * parse_config().
+	 * 
+	 * @param VOID			(void) no parameters accepted.
+	 * 
+	 * @return array		(PASS) array holds list of valid sections.
+	 * @return exception	(FAIL) exception gives error.
+	 */
+	public function get_valid_sections() {
+		if($this->isInitialized === true) {
+			if(is_array($this->configSections) && count($this->configSections)) {
+				$retval = $this->configSections;
+			}
+			else {
+				throw new exception(__METHOD__ .": no sections defined, probably invalid configuration");
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": not initialized");
+		}
+		
+		return($retval);
+	}//end get_valid_sections()
+	//-------------------------------------------------------------------------
+	
+	
+	
+	//-------------------------------------------------------------------------
+	private function build_special_vars() {
+		//determine the current "APPURL" (current URL minus hostname and current filename)
+		{
+			$appUrl = $_SERVER['SCRIPT_NAME'];
+			$bits = explode('/', $appUrl);
+			if(!strlen($bits[0])) {
+				array_shift($bits);
+			}
+			if(count($bits)) {
+				array_pop($bits);
+			}
+			if(!count($bits)) {
+				$appUrl = '/';
+			}
+			else {
+				$appUrl = '/'. $this->gfObj->string_from_array($bits, null, '/');
+			}
+		}
+		
+		$specialVars = array(
+			'_DIRNAMEOFFILE_'	=> $this->configDirname,
+			'_CONFIGFILE_'		=> $this->configFile,
+			'_THISFILE_'		=> $this->configFile,
+			'_APPURL_'			=> $appUrl
+		);
+		return($specialVars);	
+	}//end build_special_vars()
+	//-------------------------------------------------------------------------
+	
+}//end cs_siteConfig
+
+?>
Property changes on: trunk/0.3/cs_siteConfig.class.php
___________________________________________________________________
Added: svn:keywords
   + Id
Author
Revision
HeadURL
Date
Added: trunk/0.3/cs_tabs.class.php
===================================================================
--- trunk/0.3/cs_tabs.class.php	                        (rev 0)
+++ trunk/0.3/cs_tabs.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,175 @@
+<?php
+/*
+ * Created on Jan 9, 2007
+ * 
+ */
+
+require_once(dirname(__FILE__) .'/abstract/cs_content.abstract.class.php');
+
+
+class cs_tabs extends cs_contentAbstract {
+	private $tabsArr=array();
+	private $selectedTab;
+	
+	private $templateVar;
+	private $gfObj;
+	
+	/** This is the default suffix to use when none is given during the add_tab() call. */
+	private $defaultSuffix='tab';
+	
+	//---------------------------------------------------------------------------------------------
+	/**
+	 * Build the object, and parses the given template.  Tabs must be added & selected manually.
+	 * 
+	 * @param $csPageObj	(object) Instance of the class "cs_genericPage".
+	 * @param $templateVar	(str,optional) What template var to find the tab blockrows in.
+	 */
+	public function __construct($templateVar="tabs") {
+		parent::__construct(false);
+		
+		if(is_object($templateVar)) {
+			//trying to pass cs_genericPage{}... tell 'em we don't like that anymore.
+			throw new exception(__METHOD__ .": got an object (". get_class($templateVar) .") instead of template var name");
+		}
+		elseif(is_string($templateVar) && is_null($templateVar) || strlen($templateVar) < 3) {
+			//no template name?  AHH!!!
+			throw new exception("cs_tabs::__construct(): failed to specify proper template file");
+		}
+		else {
+			//set the internal var.
+			$this->templateVar = $templateVar;
+		}
+		
+		$this->gfObj = new cs_globalFunctions;
+	}//end __construct()
+	//---------------------------------------------------------------------------------------------
+	
+	
+	
+	//---------------------------------------------------------------------------------------------
+	public function add_tab_array(array $tabs, $useSuffix=null) {
+		$retval = 0;
+		foreach($tabs as $name=>$url) {
+			//call an internal method to do it.
+			$retval += $this->add_tab($name, $url, $useSuffix);
+		}
+		
+		return($retval);
+	}//end add_tab_array()
+	//---------------------------------------------------------------------------------------------
+	
+	
+	
+	//---------------------------------------------------------------------------------------------
+	/**
+	 * Sets the given tab as selected, provided it exists.
+	 * 
+	 * @param $tabName		(str) Sets this tab as selected.
+	 * @return (void)
+	 */
+	public function select_tab($tabName) {
+		$this->selectedTab = $tabName;
+	}//end select_tab()
+	//---------------------------------------------------------------------------------------------
+	
+	
+	
+	//---------------------------------------------------------------------------------------------
+	public function add_tab($tabName, $url, $useSuffix=null) {
+		
+		//set the default suffix.
+		if(is_null($useSuffix)) {
+			$useSuffix = $this->defaultSuffix;
+		}
+		
+		//add it to an array.
+		$this->tabsArr[$tabName] = array(
+			'url'		=> $url,
+			'suffix'	=> $useSuffix
+		);
+	}//end add_tab()
+	//---------------------------------------------------------------------------------------------
+	
+	
+	
+	//---------------------------------------------------------------------------------------------
+	/**
+	 * Call this to add the parsed tabs into the page.
+	 */
+	public function display_tabs(array $blockRows) {
+		
+		if(!strlen($this->selectedTab)) {
+			$keys = array_keys($this->tabsArr);
+			$this->select_tab($keys[0]);
+		}
+		
+		if(is_array($this->tabsArr) && count($this->tabsArr)) {
+			$finalString = "";
+			//loop through the array.
+			foreach($this->tabsArr as $tabName=>$tabData) {
+				
+				$url = $tabData['url'];
+				$suffix = $tabData['suffix'];
+				
+				$blockRowName = 'unselected_'. $suffix;
+				if(strtolower($tabName) == strtolower($this->selectedTab)) {
+					$blockRowName = 'selected_'. $suffix;
+				}
+				
+				if(isset($blockRows[$blockRowName])) {
+					$useTabContent = $blockRows[$blockRowName];
+				}
+				else {
+					throw new exception(__METHOD__ ."(): failed to load block row " .
+							"(". $blockRowName .") for tab (". $tabName .")". 
+							$this->gfObj->debug_print($blockRows,0));
+				}
+				
+				$parseThis = array(
+					'title'			=> $tabName,
+					'url'			=> $url,
+					'cleanTitle'	=> preg_replace('/[^a-zA-Z0-9]/', '_', $tabName)
+				);
+				$finalString .= $this->gfObj->mini_parser($useTabContent, $parseThis, '%%', '%%');
+			}
+		}
+		else {
+			//something bombed.
+			throw new exception(__METHOD__ ."(): no tabs to add");
+		}
+		
+		return($finalString);
+	}//end display_tabs()
+	//---------------------------------------------------------------------------------------------
+	
+	
+	//---------------------------------------------------------------------------------------------
+	/**
+	 * Determine if the given named tab exists (returns boolean true/false)
+	 */
+	public function tab_exists($tabName) {
+		$retval = false;
+		if(isset($this->tabsArr[$tabName])) {
+			$retval = true;
+		}
+		return($retval);
+	}//end tab_exists()
+	//---------------------------------------------------------------------------------------------
+	
+	
+	
+	//---------------------------------------------------------------------------------------------
+	public function rename_tab($tabName, $newTabName) {
+		if($this->tab_exists($tabName) && !$this->tab_exists($newTabName)) {
+			$tabContents = $this->tabsArr[$tabName];
+			unset($this->tabsArr[$tabName]);
+			$this->tabsArr[$newTabName] = $tabContents;
+		}
+		else {
+			throw new exception(__METHOD__ .": tried to rename non-existent tab (". $tabName .") to (". $newTabName .")");
+		}
+	}//end rename_tab();
+	//---------------------------------------------------------------------------------------------
+	
+}
+?>
Property changes on: trunk/0.3/cs_tabs.class.php
___________________________________________________________________
Added: svn:keywords
   + Id
Author
Revision
HeadURL
Date
Modified: trunk/0.3/cs_webdbupgrade.class.php
===================================================================
--- trunk/0.3/cs_webdbupgrade.class.php	2009-08-20 19:04:39 UTC (rev 126)
+++ trunk/0.3/cs_webdbupgrade.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -13,7 +13,8 @@
  */
 
 require_once(dirname(__FILE__) .'/abstract/cs_webapplibs.abstract.class.php');
-		require_once(dirname(__FILE__) .'/cs_webdblogger.class.php');
+require_once(dirname(__FILE__) .'/cs_webdblogger.class.php');
+require_once(dirname(__FILE__) .'/cs_phpDB.class.php');
 
 class cs_webdbupgrade extends cs_webapplibsAbstract {
 	
@@ -88,7 +89,6 @@
 		
 		require_once(constant('LIBDIR') .'/cs-content/cs_globalFunctions.class.php');
 		require_once(constant('LIBDIR') .'/cs-content/cs_fileSystem.class.php');
-		require_once(constant('LIBDIR') .'/cs-content/cs_phpDB.class.php');
 		require_once(constant('LIBDIR') .'/cs-phpxml/cs_phpxmlParser.class.php');
 		require_once(constant('LIBDIR') .'/cs-phpxml/cs_phpxmlCreator.class.php');
 		require_once(constant('LIBDIR') .'/cs-phpxml/cs_arrayToPath.class.php');
Added: trunk/0.3/db_types/cs_phpDB__mysql.class.php
===================================================================
--- trunk/0.3/db_types/cs_phpDB__mysql.class.php	                        (rev 0)
+++ trunk/0.3/db_types/cs_phpDB__mysql.class.php	2009-08-20 20:39:35 UTC (rev 127)
@@ -0,0 +1,821 @@
+<?php
+
+/*
+ * A class for generic MySQL database access.
+ * 
+ * SVN INFORMATION:::
+ * SVN Signature:::::::: $Id$
+ * Last Committted Date: $Date$
+ * Last Committed Path:: $HeadURL$
+ * 
+ */
+
+
+class cs_phpDB__mysql extends cs_phpDBAbstract {
+
+	/** Internal result set pointer. */
+	protected $result = NULL;
+	
+	/** Internal error code. */
+	protected $errorCode = 0;
+	
+	/** Status of the current transaction. */
+	protected $transStatus = NULL;
+	
+	/** Whether there is a transaction in progress or not. */
+	protected $inTrans = FALSE;
+	
+	/** Holds the last query performed. */
+	protected $lastQuery = NULL;
+	
+	/** List of queries that have been run */
+	protected $queryList=array();
+	
+	/** How many seconds to wait for a query before cancelling it. */
+	protected $timeOutSeconds = NULL;
+	
+	/** Internal check to determine if a connection has been established. */
+	protected $isConnected=FALSE;
+	
+	/** Internal check to determine if the parameters have been set. */
+	protected $paramsAreSet=FALSE;
+	
+	/** Resource handle. */
+	protected $connectionID = -1;
+	
+	/** Hostname or IP to connect to */
+	protected $host;
+	
+	/** Port to connect to (default for Postgres is 5432) */
+	protected $port;
+	
+	/** Name of the database */
+	protected $dbname;
+	
+	/** Username to connect to the database */
+	protected $user;
+	
+	/** password to connect to the database */
+	protected $password;
+	
+	/** Row counter for looping through records */
+	protected $row = -1;
+	
+	/** cs_globalFunctions object, for string stuff. */
+	protected $gfObj;
+	
+	/** Internal check to ensure the object has been properly created. */
+	protected $isInitialized=FALSE;
+	
+	/** List of prepared statements, indexed off the name, with the sub-array being fieldname=>dataType. */
+	protected $preparedStatements = array();
+	
+	/** Set to TRUE to save all queries into an array. */
+	protected $useQueryList=FALSE;
+	
+	/** array that essentially remembers how many times beginTrans() was called. */
+	protected $transactionTree = NULL;
+	
+	////////////////////////////////////////////
+	// Core primary connection/database function
+	////////////////////////////////////////////
+	
+	
+	//=========================================================================
+	public function __construct() {
+		parent::__construct();
+	}//end __construct()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Set appropriate parameters for database connection
+	 */
+	public function set_db_info(array $params){
+		$this->sanity_check();
+		$required = array('host', 'dbname', 'user', 'password');
+		
+		$requiredCount = 0;
+		foreach($params as $index=>$value) {
+			if(property_exists($this, $index) && in_array($index, $required)) {
+				$this->$index = $value;
+				$requiredCount++;
+			}
+			else {
+				throw new exception(__METHOD__. ": property (". $index .") does " .
+					"not exist or isn't allowed");
+			}
+		}
+		
+		if($requiredCount == count($required)) {
+			$this->paramsAreSet = TRUE;
+		}
+		else {
+			throw new exception(__METHOD__ .": required count (". $requiredCount 
+				.") does not match required number of fields (". count($required) .")");
+		}
+	}//end set_db_info()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Standard method to close connection.
+	 */
+	function close() {
+		$this->isConnected = FALSE;
+		$retval = null;
+		if($this->connectionID != -1) {
+			$retval = mysql_close($this->connectionID);
+			$this->transStatus = null;
+			$this->inTrans=null;
+			$this->transactionTree=null;
+		}
+		else {
+			throw new exception(__METHOD__ .": Failed to close connection: connection is invalid");
+		}
+		
+		return($retval);
+	}//end close()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Connect to the database
+	 */
+	function connect(array $dbParams=NULL, $forceNewConnection=FALSE){
+		$this->sanity_check();
+		$retval = NULL;
+		if(is_array($dbParams)) {
+			$this->set_db_info($dbParams);
+		}
+		
+		if($this->paramsAreSet === TRUE) {
+			
+			//start output buffer for displaying error.
+			ob_start();
+			$connID = mysql_connect($this->host, $this->user, $this->password, $forceNewConnection);
+			if(!$connID) {
+				$connectError = mysql_error();
+			}
+			else {
+				mysql_select_db($this->dbname);
+				$connectError = ob_get_contents();
+			}
+			ob_end_clean();
+			
+			if(is_resource($connID)) {
+				$this->errorCode=0;
+				$this->connectionID = $connID;
+				$this->isConnected = TRUE;
+				$retval = $this->connectionID;
+			}
+			else {
+				if(is_bool($connID) && !strlen($connectError)) {
+					$connectError = "generic connection failure";
+				}
+				throw new exception(__METHOD__ .": FATAL ERROR: ". $connectError);
+			}
+		}
+		else {
+			throw new exception(__METHOD__ .": paramsAreSet=(". $this->paramsAreSet ."), isConnected=(". $this->isConnected .")");
+		}
+		
+		return($retval);
+	}//end connect()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	function get_hostname() {
+		$this->sanity_check();
+		return($this->host);
+	}//end get_hostname()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/** 
+	 * Run sql queries
+	 * 
+	 * TODO: re-implement query logging (setting debug, logfilename, etc).
+	 */
+	function exec($query) {
+		$this->lastQuery = $query;
+		if($this->useQueryList) {
+			$this->queryList[] = $query;
+		}
+		$returnVal = false;
+		
+		$this->result = mysql_query($query, $this->connectionID);
+		
+		if($this->result !== false) {
+			if (eregi("^[[:space:]]*select", $query)) {
+				//If we didn't have an error and we are a select statement, move the pointer to first result
+				$numRows = $this->numRows();
+				if($numRows > 0) {
+					$this->move_first();
+				}
+				$returnVal = $numRows;
+				
+			}
+			else {
+				//We got something other than an update. Use numAffected
+				$returnVal = $this->numAffected();
+			}
+		}
+		return($returnVal);
+	}//end exec()
+	//=========================================================================
+	
+	
+	
+	//=========================================================================
+	/**
+	 * Returns any error caused by the last executed query.
+	 * 
+	 * @return NULL			OK: no error
+	 * @return (string)		FAIL: contains error returned from the query.
+	 */
+	function errorMsg($setMessage=NULL,$logError=NULL) {
+		$this->sanity_check();
+		if ($this->connectionID < 0) {
+			//TODO: implement MySQL version (error codes may vary)...
+			switch ($this->errorCode) {
+				//###############################################
+				case -1:
+				$retVal = "FATAL ERROR - CONNECTION ERROR: RESOURCE NOT FOUND";
+				break;
+				//###############################################
+	
+				//###############################################
+				case -2:
+				$retVal = "FATAL ERROR - CLASS ERROR: FUNCTION CALLED WITHOUT PARAMETERS";
+				break;
+				//###############################################
+				
+				//###############################################
+				case -3:
+				$retVal = "Query exceeded maximum timeout (". $this->timeoutSeconds ."...
 
[truncated message content] | 
| 
      
      
      From: <cra...@us...> - 2009-08-20 19:04:46
      
     | 
| Revision: 126
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=126&view=rev
Author:   crazedsanity
Date:     2009-08-20 19:04:39 +0000 (Thu, 20 Aug 2009)
Log Message:
-----------
Convert to sha-1 hashes for better security.
/cs_authToken.class.php:
	* create_hash_string():
		-- use sha1() instead of md5().
	* authenticate_token():
		-- test that the hash is 40 characters (sha-1) instead of 32 (md5)
/tests/testOfCSWebAppLibs.php:
	* basic_token_tests():
		-- test that the hash is 40 characters (sha-1) instead of 32 (md5)
Modified Paths:
--------------
    trunk/0.3/cs_authToken.class.php
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/cs_authToken.class.php
===================================================================
--- trunk/0.3/cs_authToken.class.php	2009-08-20 18:47:04 UTC (rev 125)
+++ trunk/0.3/cs_authToken.class.php	2009-08-20 19:04:39 UTC (rev 126)
@@ -61,7 +61,7 @@
 	 * 								something very unique.
 	 */
 	protected function create_hash_string($tokenId, $uid, $checksum, $stringToHash=NULL) {
-		return(md5($tokenId ."_". $uid ."_". $checksum ."_". $stringToHash));
+		return(sha1($tokenId ."_". $uid ."_". $checksum ."_". $stringToHash));
 	}//end create_hash_string()
 	//=========================================================================
 	
@@ -196,7 +196,7 @@
 		
 		$authTokenRes = null;
 		
-		if(is_numeric($tokenId) && strlen($checksum) && strlen($hash) == 32) {
+		if(is_numeric($tokenId) && strlen($checksum) && strlen($hash) == 40) {
 			try {
 				$data = $this->get_token_data($tokenId);
 				
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 18:47:04 UTC (rev 125)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 19:04:39 UTC (rev 126)
@@ -193,7 +193,7 @@
 			$this->assertTrue(isset($tokenData['id']));
 			$this->assertTrue(isset($tokenData['hash']));
 			$this->assertTrue(($tokenData['id'] > 0));
-			$this->assertTrue((strlen($tokenData['hash']) == 32));
+			$this->assertTrue((strlen($tokenData['hash']) == 40));
 		}
 		
 	}//end basic_token_tests()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-20 18:47:12
      
     | 
| Revision: 125
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=125&view=rev
Author:   crazedsanity
Date:     2009-08-20 18:47:04 +0000 (Thu, 20 Aug 2009)
Log Message:
-----------
Make hash unguessable.
NOTE::: the last commit missed cs_authToken.class.php, so this looks a bit
like a duplicate.
NOTE2:: the hash could be encrypted using SHA-1, using the function sha1(),
though this would possibly hinder using it for cs_sessionDB{}...?
/cs_authToken.class.php:
	* create_token():
		-- add microtime() and a random number to the hash string for better
		unguessability.
	* authenticate_token():
		-- check length of the array from get_token_data(), and make sure the
		checksums match (the checksum match was incomplete, must've been
		distracted or something).
	* get_token_data():
		-- remove initial index (of $tokenId) for simpler checking.
		-- add exception if the $tokenId index isn't there.
/tests/testOfCSWebAppLibs.php:
	* test_token_basics():
		-- test to ensure the token's hash isn't guessable.
	* authTokenTester::doHash() [NEW]:
		-- calls cs_authToken::create_hash_string().
Modified Paths:
--------------
    trunk/0.3/cs_authToken.class.php
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/cs_authToken.class.php
===================================================================
--- trunk/0.3/cs_authToken.class.php	2009-08-20 18:15:30 UTC (rev 124)
+++ trunk/0.3/cs_authToken.class.php	2009-08-20 18:47:04 UTC (rev 125)
@@ -103,6 +103,7 @@
 			$tokenId = $this->db->run_insert($sql, $this->seq);
 			
 			//now that we have the ID, let's create the real has string.
+			$stringToHash .= microtime(true) ."__". rand(1000, 9999999);
 			$finalHash = $this->create_hash_string($tokenId, $uid, $checksum, $stringToHash);
 			
 			$this->_generic_update($tokenId, "token='". $finalHash ."'");
@@ -199,10 +200,9 @@
 			try {
 				$data = $this->get_token_data($tokenId);
 				
-				if(count($data) == 1 && isset($data[$tokenId]) && is_array($data[$tokenId])) {
-					$data = $data[$tokenId];
+				if(count($data) == 9 && is_array($data) && isset($data['auth_token_id'])) {
 					
-					if($data['token'] == $hash && $data['checksum']) {
+					if($data['token'] == $hash && $data['checksum'] == $checksum) {
 						
 						$methodCall = 'update_token_uses';
 						if(is_numeric($data['max_uses'])) {
@@ -265,7 +265,12 @@
 			$data = $this->db->run_query($sql, 'auth_token_id');
 			
 			if(is_array($data) && count($data) == 1) {
-				$tokenData = $data;
+				if(isset($data[$tokenId])) {
+					$tokenData = $data[$tokenId];
+				}
+				else {
+					throw new exception("missing sub-array for tokenId (". $tokenId .")");
+				}
 			}
 			elseif($data === false) {
 				$tokenData = false;
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 18:15:30 UTC (rev 124)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 18:47:04 UTC (rev 125)
@@ -165,6 +165,19 @@
 				$this->assertEqual($uniq, ($numTests -1));
 			}
 		}
+		
+		//make sure the hash string isn't guessable, even if they can access our super-secret encryption algorithm. ;)
+		{
+			$uid = rand(1,99999);
+			$checksum = "my birfday";
+			$hashThis = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ut.";
+			
+			$tokenData = $tok->create_token($uid, $checksum, $hashThis);
+			$this->basic_token_tests($tokenData, $uid, $checksum);
+			
+			$this->assertNotEqual($tokenData['hash'], $tok->doHash($tokenData['id'], $uid, $checksum, $hashThis), 
+					"hash is guessable");
+		}
 	}//end test_token_basics()
 	//--------------------------------------------------------------------------
 	
@@ -194,5 +207,8 @@
 	public function tokenData($id, $onlyNonExpired=true) {
 		return($this->get_token_data($id, $onlyNonExpired));
 	}
+	public function doHash($tokenId, $uid, $checksum, $hash) {
+		return($this->create_hash_string($tokenId, $uid, $checksum, $hash));
+	}
 }
 ?>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-20 18:15:36
      
     | 
| Revision: 124
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=124&view=rev
Author:   crazedsanity
Date:     2009-08-20 18:15:30 +0000 (Thu, 20 Aug 2009)
Log Message:
-----------
Lots more tests to ensure tokens work properly.
/cs_authToken.class.php:
	* authenticate_token():
		-- update to handle new array value from get_token_data().
	* get_token_data():
		-- remove initial index (of $tokenId) for simpler checking.
		-- add exception if the $tokenId index isn't there.
/tests/testOfCSWebAppLibs.php:
	* test_token_basics():
		-- put first generic test into set of brackes with indentation, call 
		basic_token_tests().
		-- check to ensure the number of attempts is proper.
		-- make sure tokens beyond their max_uses are actually gone.
		-- authenticate token with max lifetime set 100 times to make sure it 
		stays good.
		-- update to handle new output of cs_authToken::get_token_data()
		-- uniqueness test (adds lots of extra tests, but really helps to
		ensure the hash is unique).
	* authTokenTester::tokenData():
		-- added $onlyNonExpired=true arg to match called method args.
Modified Paths:
--------------
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 17:33:51 UTC (rev 123)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 18:15:30 UTC (rev 124)
@@ -71,38 +71,52 @@
 		$tok = new authTokenTester($db);
 		
 		//Generic test to ensure we get the appropriate data back.
-		$tokenData = $tok->create_token(1, 'test', 'abc123');
-		$this->assertTrue(is_array($tokenData));
-		$this->assertTrue((count($tokenData) == 2));
-		$this->assertTrue(isset($tokenData['id']));
-		$this->assertTrue(isset($tokenData['hash']));
-		$this->assertTrue(($tokenData['id'] > 0));
-		$this->assertTrue((strlen($tokenData['hash']) == 32));
+		{
+			$tokenData = $tok->create_token(1, 'test', 'abc123');
+			$this->basic_token_tests($tokenData, 1, 'test');
+			
+			$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
+			$this->assertFalse($tok->authenticate_token($tokenData['id'], 'testx', $tokenData['hash']));
+			$this->assertFalse($tok->authenticate_token($tokenData['id'], 'test', 'abcdefg'));
+			$this->assertFalse($tok->authenticate_token($tokenData['id'], 'test', '12345678901234567890123456789012'));
+			$this->assertFalse($tok->authenticate_token(99999, 'test', '12345678901234567890123456789012'));
+			
+			//check to make sure the data within this token shows only ONE attempt.
+			$checkData = $tok->tokenData($tokenData['id']);
+			$this->assertEqual($checkData['auth_token_id'], $tokenData['id']);
+			$this->assertEqual($checkData['total_uses'], 1);
+		}
 		
-		$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
-		
 		//create a token with only 1 available use and try to authenticate it twice.
 		{
 			//Generic test to ensure we get the appropriate data back.
 			$tokenData = $tok->create_token(1, 'test', 'abc123', null, 1);
 			$this->basic_token_tests($tokenData, 1, 'test');
 			
-			if(!$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1)) {
-				$this->gfObj->debug_print($tok->tokenData($tokenData['id']),1);
-			}
-			if(!$this->assertTrue(($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']) === null), "Able to authenticate twice on a token with only 1 use")) {
-				$this->gfObj->debug_print($tok->tokenData($tokenData['id']));
-			}
+			$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
+			$this->assertTrue(($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']) === null), 
+					"Able to authenticate twice on a token with only 1 use");
+			$this->assertFalse($tok->tokenData($tokenData['id'], true));
+			$this->assertFalse($tok->tokenData($tokenData['id'], false));
 		}
 		
 		
-		//now create a token with a maximum lifetime...
+		//now create a token with a maximum lifetime (make sure we can call it a ton of times)
 		{
 			//Generic test to ensure we get the appropriate data back.
 			$tokenData = $tok->create_token(1, 'test', 'abc123', '2 years');
 			$this->basic_token_tests($tokenData, 1, 'test');
 			
 			$this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1);
+			$checkAttempts = 100;
+			$successAttempts = 0;
+			for($i=0; $i < 100; $i++) {
+				$id = $tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']);
+				if($this->assertEqual($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']), 1)) {
+					$successAttempts++;
+				}
+			}
+			$this->assertEqual($checkAttempts, $successAttempts);
 		}
 		
 		//try to create a token with max_uses of 0.
@@ -110,7 +124,6 @@
 			$tokenData = $tok->create_token(2, 'test', 'xxxxyyyyyxxxx', null, 0);
 			$this->basic_token_tests($tokenData, 2, 'test');
 			$checkData = $tok->tokenData($tokenData['id']);
-			$checkData = $checkData[$tokenData['id']];
 			
 			$this->assertTrue(is_array($checkData));
 			$this->assertEqual($tokenData['id'], $checkData['auth_token_id']);
@@ -125,6 +138,33 @@
 				$this->assertFalse($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']));
 			}
 		}
+		
+		//make sure we don't get the same hash when creating multiple tokens with the same data.
+		//NOTE: this pushes the number of tests up pretty high, but I think it is required to help ensure hash uniqueness.
+		{
+			$uid=rand(1,999999);
+			$checksum = 'multiple ToKEN check';
+			$hashThis = "Lorem ipsum dolor sit amet. ";
+			
+			$numTests = 30;
+			$numPass = 0;
+			$tokenList = array();
+			for($i=0;$i<$numTests;$i++) {
+				$tokenList[$i] = $tok->create_token($uid, $checksum, $hashThis);
+			}
+			$lastItem = ($numTests -1);
+			for($i=0;$i<$numTests;$i++) {
+				$checkHash = $tokenList[$i]['hash'];
+				$uniq=0;
+				foreach($tokenList as $k=>$a) {
+					//check against everything BUT itself.
+					if($i != $k && $this->assertNotEqual($checkHash, $a['hash'])) {
+						$uniq++;
+					}
+				}
+				$this->assertEqual($uniq, ($numTests -1));
+			}
+		}
 	}//end test_token_basics()
 	//--------------------------------------------------------------------------
 	
@@ -151,8 +191,8 @@
 class authTokenTester extends cs_authToken {
 	public $isTest=true;
 	
-	public function tokenData($id) {
-		return($this->get_token_data($id));
+	public function tokenData($id, $onlyNonExpired=true) {
+		return($this->get_token_data($id, $onlyNonExpired));
 	}
 }
 ?>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
      
      
      From: <cra...@us...> - 2009-08-20 17:34:02
      
     | 
| Revision: 123
          http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=123&view=rev
Author:   crazedsanity
Date:     2009-08-20 17:33:51 +0000 (Thu, 20 Aug 2009)
Log Message:
-----------
Fix a test to use the correct checksum value.
Modified Paths:
--------------
    trunk/0.3/tests/testOfCSWebAppLibs.php
Modified: trunk/0.3/tests/testOfCSWebAppLibs.php
===================================================================
--- trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 16:21:45 UTC (rev 122)
+++ trunk/0.3/tests/testOfCSWebAppLibs.php	2009-08-20 17:33:51 UTC (rev 123)
@@ -121,7 +121,7 @@
 		{
 			$tokenData = $tok->create_token(88, 'test', 'This is a big old TEST', '-3 days');
 			if($this->assertTrue(is_array($tokenData))) {
-				$this->basic_token_tests($tokenData, 88, 'This is a big old TEST');
+				$this->basic_token_tests($tokenData, 88, 'test');
 				$this->assertFalse($tok->authenticate_token($tokenData['id'], 'test', $tokenData['hash']));
 			}
 		}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 |