[Cs-content-commits] SF.net SVN: cs-content:[453] trunk/1.0
PHP Templating & Includes System
Brought to you by:
crazedsanity
From: <cra...@us...> - 2009-08-20 20:35:17
|
Revision: 453 http://cs-content.svn.sourceforge.net/cs-content/?rev=453&view=rev Author: crazedsanity Date: 2009-08-20 20:34:59 +0000 (Thu, 20 Aug 2009) Log Message: ----------- Moving all webapp-related libs to cs-webapplibs project. NOTE::: 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 TO cs-webapplibs::: * /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 * /tests/testOfCSPHPDB.php REMOVED::: * /sample_files/bin/convertSessionFilesToDB.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/1.0/contentSystem.class.php trunk/1.0/tests/testOfCSContent.php trunk/1.0/tests/testOfCSGlobalFunctions.php Removed Paths: ------------- trunk/1.0/abstract/cs_phpDB.abstract.class.php trunk/1.0/cs_bbCodeParser.class.php trunk/1.0/cs_phpDB.class.php trunk/1.0/cs_sessionDB.class.php trunk/1.0/cs_siteConfig.class.php trunk/1.0/cs_tabs.class.php trunk/1.0/db_types/ trunk/1.0/sample_files/bin/ trunk/1.0/schema/ trunk/1.0/tests/testOfCSPHPDB.php Deleted: trunk/1.0/abstract/cs_phpDB.abstract.class.php =================================================================== --- trunk/1.0/abstract/cs_phpDB.abstract.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/abstract/cs_phpDB.abstract.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,166 +0,0 @@ -<?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 Modified: trunk/1.0/contentSystem.class.php =================================================================== --- trunk/1.0/contentSystem.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/contentSystem.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -67,7 +67,6 @@ require_once(dirname(__FILE__) ."/cs_fileSystem.class.php"); require_once(dirname(__FILE__) ."/cs_session.class.php"); require_once(dirname(__FILE__) ."/cs_genericPage.class.php"); -require_once(dirname(__FILE__) ."/cs_tabs.class.php"); class contentSystem extends cs_contentAbstract { @@ -131,7 +130,7 @@ //create a session that gets stored in a database if they so desire... if(defined('SESSION_DBSAVE')) { - require_once(dirname(__FILE__) .'/cs_sessionDB.class.php'); + require_once(constant('LIBDIR') .'/cs-webapplibs/cs_sessionDB.class.php'); $obj = new cs_sessionDB(); $this->handle_session($obj); } @@ -188,10 +187,6 @@ $this->incFs = new cs_fileSystem($incBaseDir); - //create a tabs object, in case they want to load tabs on the page. - //TODO: make the tabs object usable to included code! - $this->tabs = new cs_tabs(); - //check versions, make sure they're all the same. $myVersion = $this->get_version(); if($this->templateObj->get_version() !== $myVersion) { @@ -203,9 +198,6 @@ if($this->gfObj->get_version() !== $myVersion) { throw new exception(__METHOD__ .": ". get_class($this->gfObj) ." has mismatched version (". $this->gfObj->get_version() ." does not equal ". $myVersion .")"); } - if($this->tabs->get_version() !== $myVersion) { - throw new exception(__METHOD__ .": ". get_class($this->tabs) ." has mismatched version (". $this->tabs->get_version() ." does not equal ". $myVersion .")"); - } //split apart the section so we can do stuff with it later. $this->parse_section(); Deleted: trunk/1.0/cs_bbCodeParser.class.php =================================================================== --- trunk/1.0/cs_bbCodeParser.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/cs_bbCodeParser.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,165 +0,0 @@ -<?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_content.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() - //========================================================================= - -} -?> Deleted: trunk/1.0/cs_phpDB.class.php =================================================================== --- trunk/1.0/cs_phpDB.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/cs_phpDB.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,197 +0,0 @@ -<?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_content.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 - -?> Deleted: trunk/1.0/cs_sessionDB.class.php =================================================================== --- trunk/1.0/cs_sessionDB.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/cs_sessionDB.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,362 +0,0 @@ -<?php -/* - * FILE INFORMATION: - * $HeadURL$ - * $Id$ - * $LastChangedDate$ - * $LastChangedBy$ - * $LastChangedRevision$ - */ - -require_once(dirname(__FILE__) .'/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') - ); - - 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 Deleted: trunk/1.0/cs_siteConfig.class.php =================================================================== --- trunk/1.0/cs_siteConfig.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/cs_siteConfig.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,404 +0,0 @@ -<?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__) .'/abstract/cs_content.abstract.class.php'); -require_once(dirname(__FILE__) .'/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 - -?> Deleted: trunk/1.0/cs_tabs.class.php =================================================================== --- trunk/1.0/cs_tabs.class.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/cs_tabs.class.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,175 +0,0 @@ -<?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(); - //--------------------------------------------------------------------------------------------- - -} -?> Modified: trunk/1.0/tests/testOfCSContent.php =================================================================== --- trunk/1.0/tests/testOfCSContent.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/tests/testOfCSContent.php 2009-08-20 20:34:59 UTC (rev 453) @@ -20,7 +20,7 @@ //------------------------------------------------------------------------- function __construct() { require_once(dirname(__FILE__) .'/../cs_globalFunctions.class.php'); - require_once(dirname(__FILE__) .'/../cs_siteConfig.class.php'); + require_once(constant('LIBDIR') .'/cs-webapplibs/cs_siteConfig.class.php'); $this->gfObj = new cs_globalFunctions; $this->gfObj->debugPrintOpt=1; Modified: trunk/1.0/tests/testOfCSGlobalFunctions.php =================================================================== --- trunk/1.0/tests/testOfCSGlobalFunctions.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/tests/testOfCSGlobalFunctions.php 2009-08-20 20:34:59 UTC (rev 453) @@ -20,7 +20,6 @@ //------------------------------------------------------------------------- function __construct() { require_once(dirname(__FILE__) .'/../cs_globalFunctions.class.php'); - require_once(dirname(__FILE__) .'/../cs_siteConfig.class.php'); $this->gfObj = new cs_globalFunctions; $this->gfObj->debugPrintOpt=1; Deleted: trunk/1.0/tests/testOfCSPHPDB.php =================================================================== --- trunk/1.0/tests/testOfCSPHPDB.php 2009-08-20 16:32:56 UTC (rev 452) +++ trunk/1.0/tests/testOfCSPHPDB.php 2009-08-20 20:34:59 UTC (rev 453) @@ -1,158 +0,0 @@ -<?php -/* - * Created on Jun 12, 2009 - */ - - -require_once(dirname(__FILE__) .'/../cs_phpDB.class.php'); - -class TestOfCSPHPDB extends UnitTestCase { - - private $dbParams=array(); - private $dbObjs = array(); - - - //------------------------------------------------------------------------- - public function __construct() { - $this->gfObj = new cs_globalFunctions; - - }//end __construct() - //------------------------------------------------------------------------- - - - - //------------------------------------------------------------------------- - public function setUp() { - $this->skipUnless($this->check_requirements(), "Skipping database tests, not configured"); - } - //------------------------------------------------------------------------- - - - - //------------------------------------------------------------------------- - private function check_requirements() { - $retval=false; - - $globalPrefix = 'UNITTEST__'; - - $requirements = array( - 'host' => 'DB_HOST', - 'user' => 'DB_USER', - 'password' => 'DB_PASS', - 'dbname' => 'DB_NAME' - ); - - $dbTypes = array( - 'mysql' => "MY_", - 'pgsql' => "PG_"); - - foreach($dbTypes as $type=>$prefix) { - foreach($requirements as $index => $name) { - $myIndex = $globalPrefix . $prefix . $name; - $this->dbParams[$type][$index] = constant($myIndex); - } - } - - - - $validDbs = 0; - foreach($this->dbParams as $dbType=>$data) { - if(count($data) >= 4) { - $validDbs++; - } - else { - $this->gfObj->debug_print(__METHOD__ .": dropping ". $dbType .": not enough params (". count($data) .")"); - unset($this->dbParams[$dbType]); - } - } - - if($dbTypes >= 1) { - $retval = true; - } - - return($retval); - }//end check_requirements() - //------------------------------------------------------------------------- - - - - //------------------------------------------------------------------------- - private function internal_connect_db($connect=true) { - $this->dbObjs['pgsql'] = new cs_phpDB('pgsql'); - $this->dbObjs['mysql'] = new cs_phpDB('mysql'); - - if($connect) { - $this->dbObjs['pgsql']->connect($this->dbParams['pgsql']); - $this->dbObjs['mysql']->connect($this->dbParams['mysql']); - } - - }//end internal_connect_db() - //------------------------------------------------------------------------- - - - - //------------------------------------------------------------------------- - private function handle_sql($dbType, $sql) { - if(strlen($dbType) && isset($this->dbObjs[$dbType])) { - $this->dbObjs[$dbType]->exec($sql); - - - $numrows = $this->dbObjs[$dbType]->numRows(); - if(!$numrows) { - $numrows = $this->dbObjs[$dbType]->numAffected(); - } - $dberror = $this->dbObjs[$dbType]->errorMsg(); - - if(strlen($dberror) || !is_numeric($numrows) || $numrows < 0) { - $retval = false; - } - else { - $retval = $numrows; - } - } - else { - $this->gfObj->debug_print($this); - throw new exception(__METHOD__ .": invalid dbType (". $dbType .")"); - } - - return($retval); - - }//end handle_sql(); - //------------------------------------------------------------------------- - - - - //------------------------------------------------------------------------- - public function test_transactions() { - $this->assertTrue(true); - $this->skipUnless($this->check_requirements(), "Skipping transaction tests (not configured: ". $this->check_requirements() .")"); - - $this->internal_connect_db(); - // - $beginTransRes = $this->dbObjs['pgsql']->beginTrans(); - $transactionStatus = $this->dbObjs['pgsql']->get_transaction_status(); - $beginTransRes = true; - if($this->assertTrue($beginTransRes, "Start of transaction failed (". $beginTransRes .")")) { - - $createRes = $this->handle_sql('pgsql', 'CREATE TABLE test (id serial not null, data text not null);'); - $this->assertTrue($createRes, "failed to create table (". $createRes .") -- affected: (". $this->dbObjs['pgsql']->numAffected() .")"); - - $data = array( - 'test1', 'test2' - ); - $i=1; - foreach($data as $val) { - #$this->assertTrue($this->handle_sql('pgsql', "INSERT INTO test (data) VALUES ('". $val ."')")); - #$this->assertEqual($i, $this->dbObjs['pgsql']->lastID()); - } - - $this->assertTrue($this->handle_sql('pgsql', 'ROLLBACK')); - } - else { - } - }//end test_transactions() - //------------------------------------------------------------------------- - - -} -?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |