cs-webapplibs-commits Mailing List for CS Web Application Libraries
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...> - 2012-03-01 04:09:47
|
Revision: 222 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=222&view=rev Author: crazedsanity Date: 2012-03-01 04:09:41 +0000 (Thu, 01 Mar 2012) Log Message: ----------- Added a sample configuration. Added Paths: ----------- trunk/current/sample_files/ trunk/current/sample_files/siteConfig.xml Added: trunk/current/sample_files/siteConfig.xml =================================================================== --- trunk/current/sample_files/siteConfig.xml (rev 0) +++ trunk/current/sample_files/siteConfig.xml 2012-03-01 04:09:41 UTC (rev 222) @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<main created="2008-12-18 10:21:00" updated=""> + <website fix="sanitizeDirs"> + <SITE_ROOT setglobal="1" setconstant="1" cleanpath="1">{_DIRNAMEOFFILE_}/..</SITE_ROOT> + <SITEROOT setglobal="1" setconstant="1">{SITE_ROOT}</SITEROOT> + <CS_RWDIR setglobal="1" setconstant="1">{SITE_ROOT}/rw</CS_RWDIR> + <RWDIR setglobal="1" setconstant="1">{CS_RWDIR}</RWDIR> + <DBTYPE setconstant="1">pgsql</DBTYPE> + <DB_PG_HOST setglobal="1" setconstant="1">127.0.0.1</DB_PG_HOST> + <DB_PG_DBNAME setglobal="1" setconstant="1">cs__test</DB_PG_DBNAME> + <DB_PG_PORT setglobal="1" setconstant="1">5432</DB_PG_PORT> + <DB_PG_DBUSER setglobal="1" setconstant="1">postgres</DB_PG_DBUSER> + <DB_PG_DBPASS setglobal="1" setconstant="1" /> + <SESSION_MAX_IDLE setconstant="1" setglobal="1">12 days</SESSION_MAX_IDLE> + <SESSION_MAX_TIME setconstant="1">360 days</SESSION_MAX_TIME> + <LIBDIR setglobal="1" setconstant="1" parse="1">{SITE_ROOT}/lib</LIBDIR> + </website> + <cs-content> + <DEBUGPRINTOPT setglobal="1" setconstant="1">0</DEBUGPRINTOPT> + <WORKINGONIT setglobal="1" setconstant="1">0</WORKINGONIT> + <TMPLDIR setglobal="1" setconstant="1" parse="1">{/WEBSITE/SITE_ROOT}/templates</TMPLDIR> + <DEFAULT_SECTION setconstant='1'>/content</DEFAULT_SECTION> + <ALLOWUNITTESTDBCREATE setconstant='1'>1</ALLOWUNITTESTDBCREATE> + <SESSION_NAME setconstant="1">CS_SESSID</SESSION_NAME> + <SESSION_DBSAVE setconstant="1" note="Value indicates name of cookie">{/CS-CONTENT/SESSION_NAME}</SESSION_DBSAVE> + <session_dbsave_uidpath setconstant="1">/auth/userInfo/uid</session_dbsave_uidpath> + <session_db_host setconstant="1">{WEBSITE/DB_PG_HOST}</session_db_host> + <session_db_port setconstant="1">{WEBSITE/DB_PG_PORT}</session_db_port> + <session_db_dbname setconstant="1">{WEBSITE/DB_PG_DBNAME}</session_db_dbname> + <session_db_user setconstant="1">{WEBSITE/DB_PG_DBUSER}</session_db_user> + <session_db_password setconstant="1">{WEBSITE/DB_PG_DBPASS}</session_db_password> + <autoload_hints setconstant="1">{/WEBSITE/LIBDIR}/class.hints</autoload_hints> + </cs-content> + <cs-webupgradedb> + <db_table setconstant="1" setconstantprefix="cs_webapplibs">cs_version_table</db_table> + <db_primarykey setconstant="1" setconstantprefix="cs_webapplibs">project_id</db_primarykey> + <db_sequence setconstant="1" setconstantprefix="cs_webapplibs">{DB_TABLE}_{DB_PRIMARYKEY}_seq</db_sequence> + <db_connect_host setconstant="1" setconstantprefix="cs_webapplibs">{/WEBSITE/DB_PG_HOST}</db_connect_host> + <db_connect_port setconstant="1" setconstantprefix="cs_webapplibs">{/WEBSITE/DB_PG_PORT}</db_connect_port> + <db_connect_dbname setconstant="1" setconstantprefix="cs_webapplibs">{WEBSITE/DB_PG_DBNAME}</db_connect_dbname> + <db_connect_user setconstant="1" setconstantprefix="cs_webapplibs">{WEBSITE/DB_PG_DBUSER}</db_connect_user> + <db_connect_password setconstant="1" setconstantprefix="cs_webapplibs">{WEBSITE/DB_PG_DBPASS}</db_connect_password> + <CONFIG_FILE_LOCATION setconstant="1" setconstantprefix="cs_webapplibs">{_CONFIGFILE_}</CONFIG_FILE_LOCATION> + <UPGRADE_CONFIG_FILE setconstant="1" setconstantprefix="cs_webapplibs">{SITE_ROOT}/upgrade/upgrade.xml</UPGRADE_CONFIG_FILE> + <RWDIR setconstant="1" setconstantprefix="cs_webdbupgrade">{WEBSITE/RWDIR}</RWDIR> + </cs-webupgradedb> + <cs-project note="This is just a SAMPLE of what else could be here."> + <api_authtoken>9dx6f9275dg5972c65e5a5f2366662b7</api_authtoken> + </cs-project> + <cs-blogger> + <cs_blogrwdir setconstant="1">{WEBSITE/CS_RWDIR}/blogger</cs_blogrwdir> + <cs_blogimgurl setconstant="1">/images/blog/</cs_blogimgurl> + <cs_blogimgdir setconstant="1">{WEBSITE/SITE_ROOT}/public_html/{CS_BLOGIMGURL}</cs_blogimgdir> + <cs_authdbname setconstant="1">main.db</cs_authdbname> + <cs_blogdbname setconstant="1">main.db</cs_blogdbname> + <csblog_db_host setconstant="1">{WEBSITE/DB_PG_HOST}</csblog_db_host> + <csblog_db_port setconstant="1">{WEBSITE/DB_PG_PORT}</csblog_db_port> + <csblog_db_dbname setconstant="1">{WEBSITE/DB_PG_DBNAME}</csblog_db_dbname> + <csblog_db_user setconstant="1">{WEBSITE/DB_PG_DBUSER}</csblog_db_user> + <csblog_db_password setconstant="1">{WEBSITE/DB_PG_DBPASS}</csblog_db_password> + </cs-blogger> + <cs-rssdb> + <RSS_FILES_DIR setconstant="1">{WEBSITE/CS_RWDIR}/rss_feeds</RSS_FILES_DIR> + <CSRSS_DB_HOST setconstant="1">{WEBSITE/DB_PG_HOST}</CSRSS_DB_HOST> + <CSRSS_DB_PORT setconstant="1">{WEBSITE/DB_PG_PORT}</CSRSS_DB_PORT> + <CSRSS_DB_DBNAME setconstant="1">{WEBSITE/DB_PG_DBNAME}</CSRSS_DB_DBNAME> + <CSRSS_DB_USER setconstant="1">{WEBSITE/DB_PG_DBUSER}</CSRSS_DB_USER> + <CSRSS_DB_PASSWORD setconstant="1">{WEBSITE/DB_PG_DBPASS}</CSRSS_DB_PASSWORD> + </cs-rssdb> + <cs-clilogger> + <CLI_DBTYPE setconstant="1">pgsql</CLI_DBTYPE> + <CLI_DB_HOST setconstant="1">{WEBSITE/DB_PG_HOST}</CLI_DB_HOST> + <CLI_DB_PORT setconstant="1">{WEBSITE/DB_PG_PORT}</CLI_DB_PORT> + <CLI_DB_DBNAME setconstant="1">{WEBSITE/DB_PG_DBNAME}</CLI_DB_DBNAME> + <CLI_DB_USER setconstant="1">{WEBSITE/DB_PG_DBUSER}</CLI_DB_USER> + <CLI_DB_PASSWORD setconstant="1">{WEBSITE/DB_PG_DBPASS}</CLI_DB_PASSWORD> + </cs-clilogger> +</main> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2012-01-10 22:53:47
|
Revision: 221 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=221&view=rev Author: crazedsanity Date: 2012-01-10 22:53:41 +0000 (Tue, 10 Jan 2012) Log Message: ----------- Minor changes for testing COMET applications... Modified Paths: -------------- trunk/current/cs_webdblogger.class.php Modified: trunk/current/cs_webdblogger.class.php =================================================================== --- trunk/current/cs_webdblogger.class.php 2011-12-14 05:57:13 UTC (rev 220) +++ trunk/current/cs_webdblogger.class.php 2012-01-10 22:53:41 UTC (rev 221) @@ -79,6 +79,8 @@ 'logAttrib' => "cswal_log_attribute_table_log_attribute_id_seq" ); + public $cometDebug = "NONE"; + //========================================================================= /** * The constructor. @@ -439,7 +441,8 @@ /** * Retrieves logs with the given criteria. */ - public function get_logs(array $criteria, array $orderBy=NULL, $limit=20) { + public function get_logs(array $criteria, array $orderBy=NULL, $limit=20, $greaterThanLogId=null) { + $originalCrit = $criteria; //set a default for the limit. if(!is_numeric($limit) || $limit < 1) { //set it again. @@ -471,6 +474,9 @@ $myFieldData = $allowedCritFields[$field]; $cleanStringArg = $myFieldData[1]; + //set the prefixed column name. + $prefixedName = $myFieldData[0] .'.'. $field; + //clean the data. if($field == 'creation' && is_numeric($value)) { $value = $this->gfObj->cleanString($value, 'numeric'); @@ -480,9 +486,6 @@ $cleanedData = $this->gfObj->cleanString($value, $cleanStringArg); } - //set the prefixed column name. - $prefixedName = $myFieldData[0] .'.'. $field; - //now add it to our array. $sqlArr[$prefixedName] = $cleanedData; } @@ -490,7 +493,10 @@ //build the criteria. - $sqlArr['ca.category_id'] = '>0'; + if(!isset($sqlArr['ca.category_id'])) { + $sqlArr['ca.category_id'] = '>0'; + $cleanStringArr['ca.category_id'] = "select"; + } $critString = $this->gfObj->string_from_array($sqlArr, 'select'); //check if "timeperiod" is in there (it's special) @@ -500,6 +506,9 @@ $addThis = "(l.creation >= '". $myTime['start'] ."'::date AND l.creation <= '". $myTime['end'] ."'::date + interval '1 day')"; $critString = create_list($critString, $addThis, ' AND '); } + if(!is_null($greaterThanLogId) && is_numeric($greaterThanLogId)) { + $critString = $this->gfObj->create_list($critString, "log_id > ". $greaterThanLogId, ' AND '); + } $orderString = $this->gfObj->string_from_array($orderBy, 'limit'); $sql = "select " . @@ -521,6 +530,10 @@ try { //run it. + $this->cometDebug = array( + 'criteria' => $criteria, + 'sql' => $sql + ); $data = $this->db->run_query($sql, 'log_id'); $retval = array(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-12-14 05:57:21
|
Revision: 220 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=220&view=rev Author: crazedsanity Date: 2011-12-14 05:57:13 +0000 (Wed, 14 Dec 2011) Log Message: ----------- *** RELEASE 0.4.1 *** Summary of changes: * remove unused (empty) classes (e.g. cs_idPath) * drop support for MySQL (not supported by most modules) * provides FULL authentication system including necessary authentication information tables * permission system uses regular paths (instead of obscure ID-based paths) * updated unit tests (not complete, but better; problematic if database isn't localhost with default settings) * session DB no longer attempts to populate user ID ("uid" or "user_id") for simplicity * upgrade scripts for 0.4.0 to 0.4.1 (handles schema changes) * better examples for upgrades * minor changes to DB abstraction layer (cs_phpDB) for better errors & file-based logging) NOTES::: MySQL support was dropped due to lack of time to test changes. All it actually takes to support it is just to translate the "setup/schema.pgsql.sql" file into "setup/schema.mysql.sql" again with proper MySQL syntax. I simply don't have time to test those changes, and newer modules didn't support it at all anyway. IF YOU'D LIKE MySQL SUPPORT: please consider donating to the project, or directing talented developers to the project that can handle creating & updating the MySQL schema. Modified Paths: -------------- trunk/current/VERSION trunk/current/cs_genericPermission.class.php trunk/current/cs_phpDB.class.php trunk/current/cs_sessionDB.class.php trunk/current/cs_webdblogger.class.php trunk/current/setup/genericPermissions.pgsql.sql trunk/current/setup/schema.pgsql.sql trunk/current/tests/testOfCSGenericPermissions.php trunk/current/upgrades/upgrade.xml Added Paths: ----------- trunk/current/upgrades/exampleUpgradeScript.php trunk/current/upgrades/schemaChangesFor_0.4.1.sql trunk/current/upgrades/upgradeTo0.4.1.php Removed Paths: ------------- trunk/current/cs_idPath.class.php trunk/current/setup/schema.mysql.sql Property Changed: ---------------- trunk/current/cs_sessionDB.class.php Modified: trunk/current/VERSION =================================================================== --- trunk/current/VERSION 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/VERSION 2011-12-14 05:57:13 UTC (rev 220) @@ -1,7 +1,7 @@ ## Stores the current version of the cs-versionparse system, and it's source. ## Please do NOT modify this file. -VERSION: 0.4.0 +VERSION: 0.4.1 PROJECT: cs-webapplibs $HeadURL$ Modified: trunk/current/cs_genericPermission.class.php =================================================================== --- trunk/current/cs_genericPermission.class.php 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/cs_genericPermission.class.php 2011-12-14 05:57:13 UTC (rev 220) @@ -11,7 +11,7 @@ * $LastChangedRevision$ */ -class cs_genericPermission extends cs_genericObjectAbstract { +class cs_genericPermission extends cs_genericUserGroupAbstract { /** Database object. */ public $db; @@ -28,9 +28,6 @@ /** List of valid keys... */ protected $keys = array(); - /** Determine object path pieces based on this... */ - protected $objectDelimiter="/"; - /** How to clean the path (if at all); boolean true = use cs_globalFunctions::clean_url(); boolean false will cause it to not be cleaned at all; a string will use cs_globalFunctions::cleanString({string})*/ protected $pathCleaner=true; @@ -42,7 +39,7 @@ /** * Generic permission system based on *nix filesystem permissions. */ - public function __construct(cs_phpDB $db, $objectDelimiter=NULL, $useUrlCleaner=true) { + public function __construct(cs_phpDB $db, $useUrlCleaner=true) { $this->db = $db; parent::__construct($db); $this->gfObj = new cs_globalFunctions; @@ -57,15 +54,12 @@ 7 => 'o_w', 8 => 'o_x' ); - if(!is_null($objectDelimiter) && is_string($objectDelimiter) && strlen($objectDelimiter)) { - $this->objectDelimiter=$objectDelimiter; - } if(is_bool($useUrlCleaner) || (is_string($useUrlCleaner) && strlen($useUrlCleaner))) { $this->pathCleaner = $useUrlCleaner; } $cleanString = array( 'system_name' => 'integer', - 'object_path' => 'email_plus', + 'path' => 'email_plus', 'user_id' => 'integer', 'group_id' => 'integer', 'inherit' => 'bool', @@ -130,6 +124,7 @@ * Create permission string based on an array (the opposite of parse_permission_string()) */ protected function build_permission_string(array $perms) { +cs_debug_backtrace(1); $this->_sanityCheck(); //NOTE:: the incoming $perms must have more (or equal) items vs. $this->keys so that it can accept arrays with extra @@ -174,7 +169,7 @@ if(is_string($name) && strlen($name) && is_numeric($userId) && $userId >= 0 && is_numeric($groupId) && $groupId >= 0) { try{ $insertArr = $this->parse_permission_string($permString); - $insertArr['id_path'] = $this->create_id_path($name); + $insertArr['path'] = $name; $insertArr['user_id'] = $userId; $insertArr['group_id'] = $groupId; @@ -200,13 +195,10 @@ */ public function get_permission($name) { try { - if(!$this->is_id_path($name)) { - $name = $this->create_id_path($name); - } - $retval = $this->dbTableHandler->get_single_record(array('id_path'=>$name)); + $retval = $this->dbTableHandler->get_single_record(array('path'=>$name)); +$this->gfObj->debug_var_dump($retval,1); //now translate the object_path... - $retval['object_path'] = $this->translate_id_path($retval['id_path']); $retval['perm_string'] = $this->build_permission_string($retval); } catch(Exception $e) { @@ -246,10 +238,7 @@ /** * Check available permissions... */ - public function check_permission($objectName, $userId) { - if(!$this->is_id_path($objectName)) { - $objectName = $this->create_id_path($objectName,false); - } + public function check_permission($path, $userId) { $availablePerms = array( 'r' => false, 'w' => false, @@ -258,7 +247,7 @@ try { //get the object. - $permission = $this->get_permission($objectName); + $permission = $this->get_permission($path); //now figure out what permissions they have. if($permission['user_id'] == $userId) { @@ -399,41 +388,6 @@ //============================================================================ - public function explode_path($path) { - if(is_string($path) && strlen($path)) { - $path = preg_replace('/^'. addcslashes($this->objectDelimiter, '/') .'/', '', $path); - $path = preg_replace('/'. addcslashes($this->objectDelimiter, '/') .'{2,}/', $this->objectDelimiter, $path); - $bits = explode($this->objectDelimiter, $path); -#$this->gfObj->debug_print(__METHOD__ .": path=(". $path ."), bits::: ". $this->gfObj->debug_print($bits,0,1)); - } - else { - throw new exception(__METHOD__ .": invalid path (". $path .")"); - } - return($bits); - }//end explode_path() - //============================================================================ - - - - //============================================================================ - public function create_id_path($path) { - //Get the list of objects from the path. - $bits = $this->explode_path($path); - - //now create the path. - $newPath = $this->create_id_path_from_objects($bits); -#$this->gfObj->debug_print(__METHOD__ .": newPath=(". $newPath ."), bits::: ". $this->gfObj->debug_print($bits,0,1)); - if(!$this->is_id_path($newPath)) { - throw new exception(__METHOD__ .": failed to create ID path from (". $path .")"); - } - - return($newPath); - }//end create_id_path() - //============================================================================ - - - - //============================================================================ public function update_permission() { }//end update_permission() //============================================================================ Deleted: trunk/current/cs_idPath.class.php =================================================================== --- trunk/current/cs_idPath.class.php 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/cs_idPath.class.php 2011-12-14 05:57:13 UTC (rev 220) @@ -1,26 +0,0 @@ -<?php -/* - * Created on January 26, 2011 - * - * FILE INFORMATION: - * - * $HeadURL$ - * $Id$ - * $LastChangedDate$ - * $LastChangedBy$ - * $LastChangedRevision$ - */ - -class cs_idPath extends cs_webapplibsAbstract { - - /** cs_globalFunctions object, for cleaning strings & such. */ - public $gfObj; - - //============================================================================ - /** - */ - public function __construct() { - }//end __construct() - //============================================================================ - -} Modified: trunk/current/cs_phpDB.class.php =================================================================== --- trunk/current/cs_phpDB.class.php 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/cs_phpDB.class.php 2011-12-14 05:57:13 UTC (rev 220) @@ -46,7 +46,7 @@ */ public function __construct($type='pgsql', $writeCommandsToFile=null) { - if(is_null($type) || !strlen($type)) { + if(is_null($type) || !strlen($type) || !is_string($type)) { $type = 'pgsql'; } @@ -69,7 +69,7 @@ $this->fsObj = new cs_fileSystem(constant('RWDIR')); $lsData = $this->fsObj->ls(); if(!isset($lsData[$this->logFile])) { - $this->fsObj->create_file($this->logFile); + $this->fsObj->create_file($this->logFile, true); } $this->fsObj->openFile($this->logFile, 'a'); } @@ -103,7 +103,7 @@ $retval = call_user_func_array(array($this->dbLayerObj, $methodName), $args); } else { - throw new exception(__METHOD__ .': unsupported method ('. $methodName .') for database of type ('. $this->dbType .')'); + throw new exception(__METHOD__ .': uninitialized ('. $this->isInitialized .'), no database layer ('. is_object($this->dbLayerObj) .'), or unsupported method ('. $methodName .') for database of type ('. $this->dbType .')'); } return($retval); }//end __call() Modified: trunk/current/cs_sessionDB.class.php =================================================================== --- trunk/current/cs_sessionDB.class.php 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/cs_sessionDB.class.php 2011-12-14 05:57:13 UTC (rev 220) @@ -190,26 +190,13 @@ public function sessdb_write($sid, $data) { if(is_string($sid) && strlen($sid) >= 20) { $data = array( - 'session_data' => $data, - 'user_id' => null + 'session_data' => $data ); $cleanString = array( 'session_data' => 'sql', - 'user_id' => 'numeric' + 'uid' => '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'; @@ -231,7 +218,6 @@ $res = $this->db->$funcName($sql, $secondArg); } catch(exception $e) { - //umm... yeah. $this->exception_handler(__METHOD__ .": failed to perform action (". $type ."), sid=(". $sid ."), sid length=(". strlen($sid) ."), validSid=(". $this->is_valid_sid($sid) .")::: ". $e->getMessage()); } } Property changes on: trunk/current/cs_sessionDB.class.php ___________________________________________________________________ Deleted: svn:executable - * Modified: trunk/current/cs_webdblogger.class.php =================================================================== --- trunk/current/cs_webdblogger.class.php 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/cs_webdblogger.class.php 2011-12-14 05:57:13 UTC (rev 220) @@ -21,8 +21,7 @@ * too many id's that might need to be changed later. Yay, dynamic code! * * 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 cswal_log_table AS l INNER JOIN cswal_event_table AS le USING (event_id) ORDER BY log_id DESC LIMIT 25; + SELECT l.log_id as id, l.creation, l.event_id as lid, le.description AS event, l.details 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. Modified: trunk/current/setup/genericPermissions.pgsql.sql =================================================================== --- trunk/current/setup/genericPermissions.pgsql.sql 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/setup/genericPermissions.pgsql.sql 2011-12-14 05:57:13 UTC (rev 220) @@ -37,33 +37,20 @@ ); --- --- Object table --- Unique set of names which should be chained together to create an object path; for a URL of "/member/blog/edit", the pieces would be created --- with ID's, such as "member"=1, "blog"=2, "edit"=3; the object path would then be ":1::2::3:". -- -CREATE TABLE cswal_object_table ( - object_id serial NOT NULL PRIMARY KEY, - object_name text NOT NULL UNIQUE, - created TIMESTAMPTZ NOT NULL DEFAULT NOW() -); - - --- -- Permission table --- Contains unique list of object paths along with the owner, default group, & user/group/other permissions (like *nix filesystem permissions) --- The permissions for user/group/other could be converted to octal (i.e. "rwxrwxrwx" == "777"), but it isn't as straightforward to read. +-- Contains paths along with the owner, default group, & user/group/other +-- permissions (like *nix filesystem permissions) The permissions for +-- user/group/other could be converted to octal (i.e. "rwxrwxrwx" == "777"), +-- but it isn't as straightforward to read. -- NOTE::: the "user_id" table should be updated to match your database schema. --- NOTE2:: the "inherit" column isn't used by the base permissions system. --- NOTE3:: the "object_path" is a chain of object_id's. -- CREATE TABLE cswal_permission_table ( permission_id serial NOT NULL PRIMARY KEY, system_name integer NOT NULL DEFAULT 0 REFERENCES cswal_system_table(system_id), - id_path text NOT NULL, + path text NOT NULL, user_id integer NOT NULL REFERENCES cs_authentication_table(uid), group_id integer NOT NULL REFERENCES cswal_group_table(group_id), - inherit boolean NOT NULL DEFAULT FALSE, u_r boolean NOT NULL DEFAULT TRUE, u_w boolean NOT NULL DEFAULT TRUE, u_x boolean NOT NULL DEFAULT FALSE, @@ -79,5 +66,5 @@ INSERT INTO cswal_system_table (system_id, system_name) VALUES (0, 'DEFAULT'); ALTER TABLE ONLY cswal_permission_table - ADD CONSTRAINT cswal_permission_table_system_path_key UNIQUE (system_name, id_path); + ADD CONSTRAINT cswal_permission_table_system_path_key UNIQUE (system_name, path); Deleted: trunk/current/setup/schema.mysql.sql =================================================================== --- trunk/current/setup/schema.mysql.sql 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/setup/schema.mysql.sql 2011-12-14 05:57:13 UTC (rev 220) @@ -1,192 +0,0 @@ --- phpMyAdmin SQL Dump --- version 2.10.3 --- http://www.phpmyadmin.net --- --- Generation Time: Aug 26, 2009 at 12:54 PM --- Server version: 5.0.22 --- PHP Version: 5.1.6 - -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; - - --- -------------------------------------------------------- - --- --- 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` --- - -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 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `cswal_category_table` --- - -CREATE TABLE `cswal_category_table` ( - `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 ; - --- -------------------------------------------------------- - --- --- Table structure for table `cswal_class_table` --- - -CREATE TABLE `cswal_class_table` ( - `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 ; - --- -------------------------------------------------------- - --- --- Table structure for table `cswal_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 `cswal_event_table_class_id_fkey` (`class_id`), - KEY `cswal_event_table_category_id_fkey` (`category_id`) -) 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` --- - --- -------------------------------------------------------- - --- --- 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; - --- --- RELATIONS FOR TABLE `cswal_log_attribute_table`: --- `attribute_id` --- `cswal_attribute_table` -> `attribute_id` --- `log_id` --- `cswal_log_table` -> `log_id` --- - --- -------------------------------------------------------- - --- --- 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; - --- --- RELATIONS FOR TABLE `cswal_log_table`: --- `event_id` --- `cswal_event_table` -> `event_id` --- - --- -------------------------------------------------------- - --- --- 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 AUTO_INCREMENT=1 ; - --- -------------------------------------------------------- - --- --- Table structure for table `cswal_version_table` --- - -CREATE TABLE `cswal_version_table` ( - `version_id` int(11) NOT NULL auto_increment, - `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 AUTO_INCREMENT=1 ; - - --- --- Constraints for dumped tables --- - --- --- 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`); - --- --- 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`); - --- --- 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`); Modified: trunk/current/setup/schema.pgsql.sql =================================================================== --- trunk/current/setup/schema.pgsql.sql 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/setup/schema.pgsql.sql 2011-12-14 05:57:13 UTC (rev 220) @@ -8,7 +8,26 @@ -- Last Updated:::::::: $Date$ -- +-- +-- The user status table is a list of statuses indicating what state a user's +-- account is in. +-- +CREATE TABLE cs_user_status_table ( + user_status_id serial NOT NULL PRIMARY KEY, + description text NOT NULL, + is_active boolean DEFAULT true NOT NULL +); +CREATE TABLE cs_authentication_table ( + uid serial NOT NULL PRIMARY KEY, + username text NOT NULL, + passwd character varying(32), + is_active boolean DEFAULT true NOT NULL, + date_created date DEFAULT now() NOT NULL, + last_login timestamp with time zone, + email text, + user_status_id integer REFERENCES cs_user_status_table(user_status_id) +); -- -- The category is the high-level view of the affected system. If this were -- a project management system with projects and issues, then there would @@ -58,7 +77,7 @@ log_id serial NOT NULL PRIMARY KEY, creation timestamp NOT NULL DEFAULT NOW(), event_id integer NOT NULL REFERENCES cswal_event_table(event_id), - uid integer NOT NULL, + uid integer NOT NULL REFERENCES cs_authentication_table(uid), affected_uid integer NOT NULL, details text NOT NULL ); @@ -94,7 +113,7 @@ CREATE TABLE cswal_auth_token_table ( auth_token_id serial NOT NULL PRIMARY KEY, - uid integer NOT NULL DEFAULT 0, + uid integer NOT NULL REFERENCES cs_authentication_table(uid), checksum text NOT NULL, token text NOT NULL, max_uses integer DEFAULT NULL, @@ -113,7 +132,7 @@ 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), + uid integer REFERENCES cs_authentication_table(uid), date_created timestamp NOT NULL DEFAULT NOW(), last_updated timestamp NOT NULL DEFAULT NOW(), session_data text Modified: trunk/current/tests/testOfCSGenericPermissions.php =================================================================== --- trunk/current/tests/testOfCSGenericPermissions.php 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/tests/testOfCSGenericPermissions.php 2011-12-14 05:57:13 UTC (rev 220) @@ -25,7 +25,13 @@ function setUp() { $this->gfObj = new cs_globalFunctions; $this->gfObj->debugPrintOpt=1; - parent::__construct('postgres','', 'localhost', '5432'); + parent::__construct( + //'postgres','', 'localhost', '5432'); + constant('cs_webapplibs-DB_CONNECT_USER'), + constant('cs_webapplibs-DB_CONNECT_PASSWORD'), + constant('cs_webapplibs-DB_CONNECT_HOST'), + constant('cs_webapplibs-DB_CONNECT_PORT') + ); $this->permObj = new _gpTester($this->db); $this->permObj->do_schema(); $this->get_valid_users(); @@ -53,15 +59,6 @@ } } - //create some objects... - { - $requiredItems = array('{APPURL}', 'member'); - foreach($requiredItems as $name) { - $newId = $this->permObj->create_object($name); - $this->assertTrue(is_numeric($newId)); - } - } - }//end setUp() //-------------------------------------------------------------------------- @@ -138,71 +135,6 @@ //-------------------------------------------------------------------------- - public function test_object_paths() { - //basic functionality test for ID Path creation. - { - $expectThis = ':5::30::2::18::5:'; - - //make the expected string into something that be broken into an array of numbers. - $chunktify = preg_replace('/^:(.*):$/', '$1', $expectThis); - $chunktify = preg_replace('/:{2,}/', ':', $chunktify); - $bits = explode(':', $chunktify); - - $this->assertEqual($bits, $this->permObj->explode_id_path($expectThis)); - - $this->assertEqual(count($bits), 5, 'could not break string into id bits'); - - $derivedIdPath = ""; - foreach($bits as $id) { - $derivedIdPath .= $this->permObj->create_id_path_part($id); - } - $this->assertEqual($derivedIdPath, $expectThis, 'Invalid idPath, expected=('. $expectThis .'), actual=('. $derivedIdPath .')'); - - $idPathList = array(':9:', ':9::5:', ':0::0::0:', ':-1:', ':-1::-1:', ':-400::1::3:', ':51041::600000::8109223::999999999999999999999999999999999:'); - foreach($idPathList as $tPath) { - $this->assertTrue($this->permObj->is_id_path($tPath), "valid path (". $tPath .") not recognized as such"); - } - - $invalidIdPathList = array('', ':--1:', '1::3::4:', ':1::3::4', ':1:3:4:'); - foreach($invalidIdPathList as $tPath) { - $this->assertFalse($this->permObj->is_id_path($tPath), "invalid path (". $tPath .") evaluated as valid"); - } - } - - //Search for existing items (should have been created from setUp()) - { - $requiredItems = array('{APPURL}', 'member'); - $existingItems = $this->permObj->get_object_ids($requiredItems, false); - $this->assertEqual(count($existingItems), 2, 'Required items not present... '. $this->gfObj->debug_print($existingItems,0,1)); - - //in the event the required items aren't there, create them. - $testExistingItems = $this->permObj->get_object_ids($requiredItems, true); - $this->assertEqual(count($requiredItems), count($testExistingItems), 'failed to create some existing items'); - $this->assertEqual(count($testExistingItems), count($existingItems), 'WARNING: some required items were not found'); - } - - //Build new ID paths... - { - $newObjects = array('admin', 'logs', 'view'); - $idPath = $this->permObj->create_id_path('/admin/logs/view'); - $this->assertTrue(preg_match('/^:[0-9]{1,}::[0-9]{1,}::[0-9]{1,}:/', $idPath), 'path appears syntactically incorrect ('. $idPath .')'); - - //make sure the manually-created ID Path matches what was actually created. - $idList = $this->permObj->get_object_ids($newObjects, false); - $this->assertEqual(count($idList), count($newObjects), "there must be missing objects, counts don't match"); - - $expectedIdPath = ""; - foreach($idList as $id=>$n) { - $expectedIdPath .= $this->permObj->create_id_path_part($id); - } - $this->assertEqual($expectedIdPath, $idPath, "Manually created path (". $expectedIdPath .") does not match idPath (". $idPath .")"); - } - }//end test_object_paths() - //-------------------------------------------------------------------------- - - - - //-------------------------------------------------------------------------- public function test_permissions() { #$GLOBALS['keepDb'] = true; @@ -442,10 +374,6 @@ //retrieve the permission & check some things out... $permData = $this->permObj->get_permission($tPath); $this->assertEqual($permData['permission_id'], $newPermId); - if(!$this->assertEqual($permData['object_path'], $this->permObj->clean_object_path($tPath))) { - #$this->permObj->translate_id_path($permData['id_path'], 1); - $this->gfObj->debug_print($permData); - } $this->assertEqual($permData['perm_string'], $tPermString); if(!$this->assertEqual($this->permObj->parse_perm_string($tPermString), $this->permObj->parse_perm_string($permData['perm_string']))) { $this->gfObj->debug_print($this->permObj->parse_perm_string($tPermString)); Added: trunk/current/upgrades/exampleUpgradeScript.php =================================================================== --- trunk/current/upgrades/exampleUpgradeScript.php (rev 0) +++ trunk/current/upgrades/exampleUpgradeScript.php 2011-12-14 05:57:13 UTC (rev 220) @@ -0,0 +1,46 @@ +<?php + +// upgrade_to_0_4_1 +class upgrade_to_0_4_1 { + + private $logsObj; + + //========================================================================= + public function __construct(cs_phpDB &$db) { + if(!$db->is_connected()) { + throw new exception(__METHOD__ .": database is not connected"); + } + $this->db = $db; + + + $this->gfObj = new cs_globalFunctions; + $this->gfObj->debugPrintOpt = 1; + }//end __construct() + //========================================================================= + + + + //========================================================================= + public function run_upgrade() { + + // Check if there's an existing auth table... + $doSecondarySql = false; + $this->db->beginTrans(__METHOD__); + + + $this->gfObj->debug_print(__METHOD__ .": running SQL file..."); + $this->db->run_sql_file(dirname(__FILE__) .'/schemaChangesFor_0.4.1.sql'); + + if($doSecondarySql) { + $this->gfObj->debug_print(__METHOD__ .": running SQL file..."); + $this->db->run_sql_file(dirname(__FILE__) .'/schemaChangesFor_0.4.1__existingAuthTable.sql'); + } + + $this->db->commitTrans(__METHOD__); + + return(true); + }//end run_upgrade() + //========================================================================= +} + +?> Added: trunk/current/upgrades/schemaChangesFor_0.4.1.sql =================================================================== --- trunk/current/upgrades/schemaChangesFor_0.4.1.sql (rev 0) +++ trunk/current/upgrades/schemaChangesFor_0.4.1.sql 2011-12-14 05:57:13 UTC (rev 220) @@ -0,0 +1,4 @@ +insert into cs_authentication_table (uid, username, passwd, is_active, user_status_id) VALUES (0, 'anonymous', '__DISABLED__', false, 0); +ALTER TABLE ONLY cswal_log_table ADD CONSTRAINT cswal_log_table_uid_fkey FOREIGN KEY (uid) REFERENCES cs_authentication_table(uid); +ALTER TABLE ONLY cswal_session_store_table DROP COLUMN user_id; +ALTER TABLE ONLY cswal_session_store_table ADD COLUMN uid integer; Modified: trunk/current/upgrades/upgrade.xml =================================================================== --- trunk/current/upgrades/upgrade.xml 2011-11-27 23:06:06 UTC (rev 219) +++ trunk/current/upgrades/upgrade.xml 2011-12-14 05:57:13 UTC (rev 220) @@ -19,19 +19,14 @@ to get skipped, or an exception to be thrown, potentially leaving the system in an unstable state. Unstable is bad, m'kay?</system_note> - <examples> - <v1.2.0-ALPHA3> - <target_version>1.2.0-ALPHA4</target_version> - <script_name>upgradeTo1.2.0-ALPHA4.php</script_name> - <class_name>upgrade_to_1_2_0_ALPHA4</class_name> - <call_method>run_upgrade</call_method> - </v1.2.0-ALPHA3> - <v1.2.0-ALPHA6> - <target_version>1.2.0-ALPHA7</target_version> - <script_name>upgradeTo1.2.0-ALPHA7.php</script_name> - <class_name>upgrade_to_1_2_0_ALPHA7</class_name> - <call_method>run_upgrade</call_method> - </v1.2.0-ALPHA6> - </examples> <example_initialversion>0.1.0-BETA1</example_initialversion> + <matching> + <v0.4.0> + <target_version>0.4.1</target_version> + <script_name>upgradeTo0.4.1.php</script_name> + <class_name>upgrade_to_0_4_1</class_name> + <call_method>run_upgrade</call_method> + </v0.4.0> + </matching> </upgrade> + Added: trunk/current/upgrades/upgradeTo0.4.1.php =================================================================== --- trunk/current/upgrades/upgradeTo0.4.1.php (rev 0) +++ trunk/current/upgrades/upgradeTo0.4.1.php 2011-12-14 05:57:13 UTC (rev 220) @@ -0,0 +1,46 @@ +<?php + +// upgrade_to_0_4_1 +class upgrade_to_0_4_1 { + + private $logsObj; + + //========================================================================= + public function __construct(cs_phpDB &$db) { + if(!$db->is_connected()) { + throw new exception(__METHOD__ .": database is not connected"); + } + $this->db = $db; + + + $this->gfObj = new cs_globalFunctions; + $this->gfObj->debugPrintOpt = 1; + }//end __construct() + //========================================================================= + + + + //========================================================================= + public function run_upgrade() { + + // Check if there's an existing auth table... + $doSecondarySql = false; + $this->db->beginTrans(__METHOD__); + + + $this->gfObj->debug_print(__METHOD__ .": running SQL file..."); + $this->db->run_sql_file(dirname(__FILE__) .'/schemaChangesFor_0.4.1.sql'); + + if($doSecondarySql) { + $this->gfObj->debug_print(__METHOD__ .": running SQL file..."); + $this->db->run_sql_file(dirname(__FILE__) .'/schemaChangesFor_0.4.1__existingAuthTable.sql'); + } + + $this->db->commitTrans(__METHOD__); + + return(true); + }//end run_upgrade() + //========================================================================= +} + +?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-11-27 23:06:12
|
Revision: 219 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=219&view=rev Author: crazedsanity Date: 2011-11-27 23:06:06 +0000 (Sun, 27 Nov 2011) Log Message: ----------- Minor wording change + newline on VERSION file. Modified Paths: -------------- trunk/current/VERSION trunk/current/setup/genericPermissions.pgsql.sql Modified: trunk/current/VERSION =================================================================== --- trunk/current/VERSION 2011-11-24 02:06:22 UTC (rev 218) +++ trunk/current/VERSION 2011-11-27 23:06:06 UTC (rev 219) @@ -4,3 +4,4 @@ VERSION: 0.4.0 PROJECT: cs-webapplibs $HeadURL$ + Modified: trunk/current/setup/genericPermissions.pgsql.sql =================================================================== --- trunk/current/setup/genericPermissions.pgsql.sql 2011-11-24 02:06:22 UTC (rev 218) +++ trunk/current/setup/genericPermissions.pgsql.sql 2011-11-27 23:06:06 UTC (rev 219) @@ -1,7 +1,7 @@ -- -- Group table --- Enumerates a list of permissions for a specific group: i.e. for "blog", this could list "create", "edit", and "delete" (among others). +-- Enumerates a list of permissions for a specific group: e.g. for "blog", this could list "create", "edit", and "delete" (among others). -- CREATE TABLE cswal_group_table ( group_id serial NOT NULL PRIMARY KEY, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-11-24 02:06:28
|
Revision: 218 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=218&view=rev Author: crazedsanity Date: 2011-11-24 02:06:22 +0000 (Thu, 24 Nov 2011) Log Message: ----------- *** RELEASE 0.4.0 *** Summary of changes: * added generic chat libraries * various fixes * ID obfuscation library * better exception information. Modified Paths: -------------- trunk/current/VERSION Modified: trunk/current/VERSION =================================================================== --- trunk/current/VERSION 2011-11-22 03:06:03 UTC (rev 217) +++ trunk/current/VERSION 2011-11-24 02:06:22 UTC (rev 218) @@ -1,6 +1,6 @@ ## Stores the current version of the cs-versionparse system, and it's source. ## Please do NOT modify this file. -VERSION: 0.4-ALPHA1 +VERSION: 0.4.0 PROJECT: cs-webapplibs $HeadURL$ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-11-22 03:06:09
|
Revision: 217 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=217&view=rev Author: crazedsanity Date: 2011-11-22 03:06:03 +0000 (Tue, 22 Nov 2011) Log Message: ----------- Slightly better exception (includes connection string). Modified Paths: -------------- trunk/current/db_types/cs_phpDB__pgsql.class.php Modified: trunk/current/db_types/cs_phpDB__pgsql.class.php =================================================================== --- trunk/current/db_types/cs_phpDB__pgsql.class.php 2011-10-24 16:09:50 UTC (rev 216) +++ trunk/current/db_types/cs_phpDB__pgsql.class.php 2011-11-22 03:06:03 UTC (rev 217) @@ -197,7 +197,7 @@ $retval = $this->connectionID; } else { - throw new exception(__METHOD__ .": FATAL ERROR: ". $connectError); + throw new exception(__METHOD__ .": FATAL ERROR: ". $connectError . "\n CONNSTR: ". $connStr); } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-10-24 16:10:01
|
Revision: 216 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=216&view=rev Author: crazedsanity Date: 2011-10-24 16:09:50 +0000 (Mon, 24 Oct 2011) Log Message: ----------- Creating a "current" folder for the most current "bleeding-edge" development. For all cs-* projects, the "current" folder should be compatible. For instance, these should always be compatible (the FULL URL is probably https://{projectName}.svn.sourceforge.net/svnroot/{projectName}): -- cs-webapplibs/trunk/current -- cs-content/trunk/current -- cs-phpxml/trunk/current This should help avoid conflicts for older checkouts that are still trying to be bleeding edge; it is pretty easy for one project (e.g. cs-webapplibs) to get too far behind or too far ahead of other projects without even realizing it, due to how the URLs are setup in the svn:externals property... Added Paths: ----------- trunk/current/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-10-20 02:18:47
|
Revision: 215 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=215&view=rev Author: crazedsanity Date: 2011-10-20 02:18:41 +0000 (Thu, 20 Oct 2011) Log Message: ----------- A bit more information when there's a fatal version mismatch. Modified Paths: -------------- trunk/0.4/cs_webdbupgrade.class.php Modified: trunk/0.4/cs_webdbupgrade.class.php =================================================================== --- trunk/0.4/cs_webdbupgrade.class.php 2011-07-20 00:49:56 UTC (rev 214) +++ trunk/0.4/cs_webdbupgrade.class.php 2011-10-20 02:18:41 UTC (rev 215) @@ -527,7 +527,8 @@ $retval = "minor"; } else { - $this->error_handler(__METHOD__ .": downgrading minor versions is unsupported"); + $this->error_handler(__METHOD__ .": downgrading minor versions is unsupported, project_name=(". $this->get_project() ."), ". + "file version=(". $versionFileData['version_string'] ."), dbVersion=(". $dbVersion['version_string'] .""); } } elseif($versionFileData['version_major'] > $dbVersion['version_major']) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-07-20 00:50:06
|
Revision: 214 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=214&view=rev Author: crazedsanity Date: 2011-07-20 00:49:56 +0000 (Wed, 20 Jul 2011) Log Message: ----------- Class for masking ID's in the URL to avoid snooping (i.e. "ooh, what happens if I add 1 to thad ID?") Added Paths: ----------- trunk/0.4/cs_idObfuscator.class.php Copied: trunk/0.4/cs_idObfuscator.class.php (from rev 213, trunk/0.4/cs_idPath.class.php) =================================================================== --- trunk/0.4/cs_idObfuscator.class.php (rev 0) +++ trunk/0.4/cs_idObfuscator.class.php 2011-07-20 00:49:56 UTC (rev 214) @@ -0,0 +1,58 @@ +<?php +/* + * Created on May 16th, 2011 + * + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + * + * Originally pulled from http://raymorgan.net/web-development/how-to-obfuscate-integer-ids/ + */ + +class cs_IdObfuscator { + + public static function encode($id) { + if (!is_numeric($id) or $id < 1) {return FALSE;} + $id = (int)$id; + if ($id > pow(2,31)) {return FALSE;} + $segment1 = self::getHash($id,16); + $segment2 = self::getHash($segment1,8); + $dec = (int)base_convert($segment2,16,10); + $dec = ($dec>$id)?$dec-$id:$dec+$id; + $segment2 = base_convert($dec,10,16); + $segment2 = str_pad($segment2,8,'0',STR_PAD_LEFT); + $segment3 = self::getHash($segment1.$segment2,8); + $hex = $segment1.$segment2.$segment3; + $bin = pack('H*',$hex); + $oid = base64_encode($bin); + $oid = str_replace(array('+','/','='),array('$',':',''),$oid); + return $oid; + } + + public static function decode($oid) { + if (!preg_match('/^[A-Z0-9\:\$]{21,23}$/i',$oid)) {return 0;} + $oid = str_replace(array('$',':'),array('+','/'),$oid); + $bin = base64_decode($oid); + $hex = unpack('H*',$bin); $hex = $hex[1]; + if (!preg_match('/^[0-9a-f]{32}$/',$hex)) {return 0;} + $segment1 = substr($hex,0,16); + $segment2 = substr($hex,16,8); + $segment3 = substr($hex,24,8); + $exp2 = self::getHash($segment1,8); + $exp3 = self::getHash($segment1.$segment2,8); + if ($segment3 != $exp3) {return 0;} + $v1 = (int)base_convert($segment2,16,10); + $v2 = (int)base_convert($exp2,16,10); + $id = abs($v1-$v2); + return $id; + } + + private static function getHash($str,$len) { + return substr(sha1($str.CRYPT_SALT),0,$len); + } +} +?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-05-10 23:57:36
|
Revision: 213 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=213&view=rev Author: crazedsanity Date: 2011-05-10 23:57:30 +0000 (Tue, 10 May 2011) Log Message: ----------- Fix a couple of bugs (typos), optional argument for retrieving records. /abstract/cs_singleTableHandler.abstract.class.php: * get_records_using_custom_filter(): -- fix typo with $orderByStr (one reference was $orderBYStr) -- remove invalid $ (was "$is_string(...") -- fix query so $filter doesn't have to contain " WHERE " * update_record(): -- ARG CHANGE: NEW ARG: #4 ($appendToUpdateString=null) -- optionally add an extra bit of text to the query. Modified Paths: -------------- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php Modified: trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-04-03 18:17:47 UTC (rev 212) +++ trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-05-10 23:57:30 UTC (rev 213) @@ -236,12 +236,12 @@ } } - $orderBYStr = ' ORDER BY '. $this->pkeyField; - if($is_string($orderBy) && strlen($orderBy)) { + $orderByStr = ' ORDER BY '. $this->pkeyField; + if(is_string($orderBy) && strlen($orderBy)) { $orderByStr = ' ORDER BY '. $orderBy; } - $sql = 'SELECT * FROM '. $this->tableName . $filter . $orderByStr . $limitOffsetStr; + $sql = 'SELECT * FROM '. $this->tableName ." WHERE ". $filter . $orderByStr . $limitOffsetStr; try { $data = $this->dbObj->run_query($sql, $this->pkeyField); } @@ -268,7 +268,7 @@ * @RETURN (int) SUCCESS: (int) is the number of records updated (should always be 1) * @EXCEPTION FAIL: exception indicates the error. */ - public function update_record($recId, array $updates, $removeEmptyVals=true) { + public function update_record($recId, array $updates, $removeEmptyVals=true, $appendToUpdateString=null) { if(is_numeric($recId) && $recId >= 0 && is_array($updates) && count($updates) > 0) { $updateString = $this->gfObj->string_from_array($updates, 'update', null, $this->cleanStringArr, $removeEmptyVals); if(is_null($updateString) || !strlen($updateString) || strlen($updateString) < 3) { @@ -276,7 +276,7 @@ } else { $sql = 'UPDATE '. $this->tableName .' SET ' - . $updateString + . $updateString . $appendToUpdateString .' WHERE '. $this->pkeyField .'='. $recId; try { $retval = $this->dbObj->run_update($sql, true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-04-03 18:17:54
|
Revision: 212 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=212&view=rev Author: crazedsanity Date: 2011-04-03 18:17:47 +0000 (Sun, 03 Apr 2011) Log Message: ----------- Fixes for table handling and some permissions stuff. Modified Paths: -------------- trunk/0.4/abstract/cs_genericObject.abstract.class.php trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php trunk/0.4/cs_genericPermission.class.php trunk/0.4/setup/genericPermissions.pgsql.sql trunk/0.4/tests/example_test.php trunk/0.4/tests/testOfCSGenericPermissions.php Modified: trunk/0.4/abstract/cs_genericObject.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-03-26 00:57:34 UTC (rev 211) +++ trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-04-03 18:17:47 UTC (rev 212) @@ -98,8 +98,9 @@ . "object_name IN "; $myFilter = ""; - foreach($objectNames as $n) { - $tString = "'". $this->clean_object_name($n) ."'"; + foreach($objectNames as $i=>$n) { + $tCleanName = $this->clean_object_name($n); + $tString = "'". $tCleanName ."'"; $myFilter = $this->gfObj->create_list($myFilter, $tString); } $sql .= '('. $myFilter .')'; @@ -165,13 +166,11 @@ $idPath = ""; if(is_array($myIds) && count($myIds)) { - foreach($myIds as $id=>$name) { - try { - $idPath = $this->gfObj->create_list($idPath, $this->create_id_path_part($id), ''); - } - catch(Exception $e) { - throw new exception($e->getMessage()); - } + $nameToId = array_flip($myIds); + foreach($objects as $i=>$name) { + $cleanName = $this->clean_object_name($name); + $tId = $nameToId[$cleanName]; + $idPath = $this->gfObj->create_list($idPath, $this->create_id_path_part($tId), ''); } } else { @@ -181,6 +180,7 @@ catch(Exception $e) { throw new exception(__METHOD__ .": failed to create id path, DETAILS::: ". $e->getMessage()); } +#$this->gfObj->debug_print(__METHOD__ .": returning=(". $idPath ."), objects::: ". $this->gfObj->debug_print($objects,0,1) ."\n<BR> myIds::: ". $this->gfObj->debug_print($myIds,0,1)); return($idPath); }//end create_id_path_from_objects() //============================================================================ @@ -188,7 +188,7 @@ //============================================================================ - protected function clean_object_name($n) { + public function clean_object_name($n) { //pulled from cs-content, cs_globalFunctions::cleanString(), style="query"; modified to allow the brackets. $evilChars = array("\$", ":", "%", "~", "*",">", "<", "-", "[", "]", ")", "(", "&", "#", "?", ".", "\,","\/","\\","\"","\|","!","^","+","`","\n","\r"); $n = preg_replace("/\|/","",$n); @@ -229,10 +229,19 @@ //============================================================================ - public function translate_id_path($idPath) { + public function translate_id_path($idPath, $debug=0) { if($this->is_id_path($idPath)) { $bits = $this->explode_id_path($idPath); - $translatedPath = $this->get_object_names($this->explode_id_path($idPath)); + $translatedBits = $this->get_object_names($this->explode_id_path($idPath)); + + $translatedPath = ""; + foreach($bits as $id) { + $translatedPath = $this->gfObj->create_list($translatedPath, $translatedBits[$id], '/'); + } + #foreach($translatedBits as $id=>$name) { + # $translatedPath = $this->gfObj->create_list($translatedPath, $name, '/'); + #} + $translatedPath = '/'. $translatedPath; } else { throw new exception(__METHOD__ .": invalid path (". $idPath .")"); @@ -269,5 +278,18 @@ }//end get_object_names() //============================================================================ + + + //============================================================================ + public function clean_object_path($path) { + $bits = $this->explode_id_path($path); + $newPath = ""; + foreach($bits as $k=>$v) { + $newPath = $this->gfObj->create_list($newPath, $this->clean_object_name($v), '/'); + } + return($newPath); + }//end clean_object_path() + //============================================================================ + } ?> Modified: trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-03-26 00:57:34 UTC (rev 211) +++ trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-04-03 18:17:47 UTC (rev 212) @@ -224,6 +224,41 @@ //------------------------------------------------------------------------- + public function get_records_using_custom_filter($filter, $orderBy=null, $limit=null, $offset=null) { + if(is_string($filter) && strlen($filter)) { + $limitOffsetStr = ''; + if(is_numeric($limit) && $limit > 0) { + $limitOffsetStr = ' LIMIT '. $limit; + + //using an offset without a limit seems silly... + if(is_numeric($limitOffsetStr) && $offset > 0) { + $limitOffsetStr .= ' OFFSET '. $offset; + } + } + + $orderBYStr = ' ORDER BY '. $this->pkeyField; + if($is_string($orderBy) && strlen($orderBy)) { + $orderByStr = ' ORDER BY '. $orderBy; + } + + $sql = 'SELECT * FROM '. $this->tableName . $filter . $orderByStr . $limitOffsetStr; + try { + $data = $this->dbObj->run_query($sql, $this->pkeyField); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to retrieve records, DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .": invalid filter (". $filter .")"); + } + return($data); + }//end get_records_using_custom_filter() + //------------------------------------------------------------------------- + + + + //------------------------------------------------------------------------- /** * Update a single record with the given changes. * Modified: trunk/0.4/cs_genericPermission.class.php =================================================================== --- trunk/0.4/cs_genericPermission.class.php 2011-03-26 00:57:34 UTC (rev 211) +++ trunk/0.4/cs_genericPermission.class.php 2011-04-03 18:17:47 UTC (rev 212) @@ -174,11 +174,11 @@ if(is_string($name) && strlen($name) && is_numeric($userId) && $userId >= 0 && is_numeric($groupId) && $groupId >= 0) { try{ $insertArr = $this->parse_permission_string($permString); - $insertArr['object_path'] = $this->create_id_path($name); + $insertArr['id_path'] = $this->create_id_path($name); $insertArr['user_id'] = $userId; $insertArr['group_id'] = $groupId; - $newId = $this->dbTableHandler->create_record($insertArr); + $newId = $this->dbTableHandler->create_record($insertArr,false); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to create new record, name=(". $name ."), permString=(". $permString .") DETAILS::: ". $e->getMessage()); @@ -203,11 +203,11 @@ if(!$this->is_id_path($name)) { $name = $this->create_id_path($name); } - $retval = $this->dbTableHandler->get_single_record(array('object_path'=>$name)); + $retval = $this->dbTableHandler->get_single_record(array('id_path'=>$name)); //now translate the object_path... - // TODO: this could be a resource hog if called in rapid succession; consider creating an object cache or whatnot - $retval['translated_path'] = $this->translate_id_path($retval['object_path']); + $retval['object_path'] = $this->translate_id_path($retval['id_path']); + $retval['perm_string'] = $this->build_permission_string($retval); } catch(Exception $e) { throw new exception(__METHOD__ .":: error while locating permission '". $name ."', DETAILS::: ". $e->getMessage()); @@ -404,6 +404,7 @@ $path = preg_replace('/^'. addcslashes($this->objectDelimiter, '/') .'/', '', $path); $path = preg_replace('/'. addcslashes($this->objectDelimiter, '/') .'{2,}/', $this->objectDelimiter, $path); $bits = explode($this->objectDelimiter, $path); +#$this->gfObj->debug_print(__METHOD__ .": path=(". $path ."), bits::: ". $this->gfObj->debug_print($bits,0,1)); } else { throw new exception(__METHOD__ .": invalid path (". $path .")"); @@ -421,6 +422,7 @@ //now create the path. $newPath = $this->create_id_path_from_objects($bits); +#$this->gfObj->debug_print(__METHOD__ .": newPath=(". $newPath ."), bits::: ". $this->gfObj->debug_print($bits,0,1)); if(!$this->is_id_path($newPath)) { throw new exception(__METHOD__ .": failed to create ID path from (". $path .")"); } @@ -428,5 +430,12 @@ return($newPath); }//end create_id_path() //============================================================================ + + + + //============================================================================ + public function update_permission() { + }//end update_permission() + //============================================================================ } ?> Modified: trunk/0.4/setup/genericPermissions.pgsql.sql =================================================================== --- trunk/0.4/setup/genericPermissions.pgsql.sql 2011-03-26 00:57:34 UTC (rev 211) +++ trunk/0.4/setup/genericPermissions.pgsql.sql 2011-04-03 18:17:47 UTC (rev 212) @@ -60,7 +60,7 @@ CREATE TABLE cswal_permission_table ( permission_id serial NOT NULL PRIMARY KEY, system_name integer NOT NULL DEFAULT 0 REFERENCES cswal_system_table(system_id), - object_path text NOT NULL, + id_path text NOT NULL, user_id integer NOT NULL REFERENCES cs_authentication_table(uid), group_id integer NOT NULL REFERENCES cswal_group_table(group_id), inherit boolean NOT NULL DEFAULT FALSE, @@ -79,5 +79,5 @@ INSERT INTO cswal_system_table (system_id, system_name) VALUES (0, 'DEFAULT'); ALTER TABLE ONLY cswal_permission_table - ADD CONSTRAINT cswal_permission_table_system_path_key UNIQUE (system_name, object_path); + ADD CONSTRAINT cswal_permission_table_system_path_key UNIQUE (system_name, id_path); Modified: trunk/0.4/tests/example_test.php =================================================================== --- trunk/0.4/tests/example_test.php 2011-03-26 00:57:34 UTC (rev 211) +++ trunk/0.4/tests/example_test.php 2011-04-03 18:17:47 UTC (rev 212) @@ -12,8 +12,22 @@ */ -require_once(dirname(__FILE__) .'/testOfCSVersionParse.php'); +require_once(dirname(__FILE__) .'/tests/testOfCSGenericChat.php'); +require_once(dirname(__FILE__) .'/tests/testOfCSGenericPermissions.php'); +require_once(dirname(__FILE__) .'/tests/testOfCSPHPDB.php'); +require_once(dirname(__FILE__) .'/tests/testOfCSWebAppLibs.php'); +/* +tests/testOfCSGenericChat.php:class testOfCSGenericChat extends testDbAbstract { +tests/testOfCSGenericPermissions.php:class testOfCSGenericPermissions extends testDbAbstract { +tests/testOfCSGenericPermissions.php:class _gpTester extends cs_genericPermission { +tests/testOfCSPHPDB.php:class TestOfCSPHPDB extends UnitTestCase { +tests/testOfCSWebAppLibs.php:class testOfCSWebAppLibs extends testDbAbstract { +tests/testOfCSWebAppLibs.php:class authTokenTester extends cs_authToken { +*/ -$test = &new TestOfA2P(); -$test->run(new HtmlReporter()) +$test = new TestSuite('Tests for CS-WebAppLibs'); +$test->addTestCase(new TestOfCSPHPDB()); +$test->addTestCase(new testOfCSWebAppLibs()); +$test->addTestCase(new testOfCSGenericChat()); +$test->addTestCase(new testOfCSGenericPermissions()); ?> Modified: trunk/0.4/tests/testOfCSGenericPermissions.php =================================================================== --- trunk/0.4/tests/testOfCSGenericPermissions.php 2011-03-26 00:57:34 UTC (rev 211) +++ trunk/0.4/tests/testOfCSGenericPermissions.php 2011-04-03 18:17:47 UTC (rev 212) @@ -250,6 +250,126 @@ $this->assertEqual($this->permObj->get_perm_list($myPermArr,'o'), $permByType['o']); } + //test ALL (or at least close to all) variations of permission strings... + { + $allVariations = array( + 'rwxrwxrwx' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => true, + 'g_w' => true, + 'g_x' => true, + 'o_r' => true, + 'o_w' => true, + 'o_x' => true + ), + 'rwxrwxrw-' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => true, + 'g_w' => true, + 'g_x' => true, + 'o_r' => true, + 'o_w' => true, + 'o_x' => false + ), + 'rwxrwxr--' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => true, + 'g_w' => true, + 'g_x' => true, + 'o_r' => true, + 'o_w' => false, + 'o_x' => false + ), + 'rwxrwx---' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => true, + 'g_w' => true, + 'g_x' => true, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + 'rwxrw----' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => true, + 'g_w' => true, + 'g_x' => false, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + 'rwxr-----' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => true, + 'g_w' => false, + 'g_x' => false, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + 'rwx------' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => true, + 'g_r' => false, + 'g_w' => false, + 'g_x' => false, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + 'rw-------' => array( + 'u_r' => true, + 'u_w' => true, + 'u_x' => false, + 'g_r' => false, + 'g_w' => false, + 'g_x' => false, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + 'r--------' => array( + 'u_r' => true, + 'u_w' => false, + 'u_x' => false, + 'g_r' => false, + 'g_w' => false, + 'g_x' => false, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + '---------' => array( + 'u_r' => false, + 'u_w' => false, + 'u_x' => false, + 'g_r' => false, + 'g_w' => false, + 'g_x' => false, + 'o_r' => false, + 'o_w' => false, + 'o_x' => false + ), + ); + foreach($allVariations as $permString=>$testPermArray) { + $parsedPerms = $this->permObj->parse_perm_string($permString); + $this->assertEqual($parsedPerms, $testPermArray); + } + } + //create some permissions. { $userKeys = array_keys($this->validUsers); @@ -310,27 +430,27 @@ '/content/dev', '/content/dev/corner', '/content/dev/coner/cs', - - //The following items fail for no apparent reason (that I can find)... '/admin', '/cntenx', - '/content/dev/corner/cs/content', //fails due to duplicate objects in path ("content" is in there twice). + '/content/dev/corner/cs/content', ); - $testPerms = array( - 'rwxrwxrwx', - 'rwxrwx---', - 'rwx---rwx', - '---rwxrwx', - 'rwx------', - '---------', - 'r--r--r--', - '-w--w--w-', - '--x--x--x' - ); foreach($testPaths as $tPath) { - $tPermString = 'rwxrwx---'; + $tPermString = '-w--w----'; $newPermId = $this->permObj->create_permission($tPath, $this->chosenOneUid, $this->defaultGroupId, $tPermString); $this->assertTrue(is_numeric($newPermId)); + + //retrieve the permission & check some things out... + $permData = $this->permObj->get_permission($tPath); + $this->assertEqual($permData['permission_id'], $newPermId); + if(!$this->assertEqual($permData['object_path'], $this->permObj->clean_object_path($tPath))) { + #$this->permObj->translate_id_path($permData['id_path'], 1); + $this->gfObj->debug_print($permData); + } + $this->assertEqual($permData['perm_string'], $tPermString); + if(!$this->assertEqual($this->permObj->parse_perm_string($tPermString), $this->permObj->parse_perm_string($permData['perm_string']))) { + $this->gfObj->debug_print($this->permObj->parse_perm_string($tPermString)); + $this->gfObj->debug_print($this->permObj->parse_perm_string($permData['perm_string'])); + } } }///*/ }//end test_permissions This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-03-26 00:57:40
|
Revision: 211 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=211&view=rev Author: crazedsanity Date: 2011-03-26 00:57:34 +0000 (Sat, 26 Mar 2011) Log Message: ----------- Generic chat libraries. Added Paths: ----------- trunk/0.4/abstract/cs_genericChatCategory.abstract.class.php trunk/0.4/abstract/cs_genericChatMessage.abstract.class.php trunk/0.4/abstract/cs_genericChatRoom.abstract.class.php trunk/0.4/setup/genericChat.pgsql.sql trunk/0.4/tests/testOfCSGenericChat.php Copied: trunk/0.4/abstract/cs_genericChatCategory.abstract.class.php (from rev 208, trunk/0.4/abstract/cs_genericGroup.abstract.class.php) =================================================================== --- trunk/0.4/abstract/cs_genericChatCategory.abstract.class.php (rev 0) +++ trunk/0.4/abstract/cs_genericChatCategory.abstract.class.php 2011-03-26 00:57:34 UTC (rev 211) @@ -0,0 +1,109 @@ +<?php +/* + * Created on February 25, 2011 + * + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + */ + +abstract class cs_genericChatCategoryAbstract extends cs_webapplibsAbstract { + + /** Database object. */ + public $db; + + /** cs_globalFunctions object, for cleaning strings & such. */ + public $gfObj; + + /** Table name used to store categories. */ + protected $myTable = "cswal_chat_category_table"; + + /** Sequence for chat category table. */ + protected $mySeq = "cswal_chat_category_table_change_category_id_seq"; + + /** Table handler object for simple SQL handling */ + private $dbTableHandler; + + /** Internal categoryId to use... */ + private $categoryId=0; + + //============================================================================ + public function __construct(cs_phpDB $db) { + $this->db = $db; + $this->gfObj = new cs_globalFunctions; + + //setup table handler. + $cleanString = array( + 'category_name' => "text" + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->myTable, $this->mySeq, 'chat_category_id', $cleanString); + }//end __construct() + //============================================================================ + + + + //============================================================================ + public function set_category_id($categoryId) { + if(is_numeric($categoryId)) { + $this->categoryId=$categoryId; + } + else{ + throw new exception(__METHOD__ .": invalid categoryId (". $categoryId .")"); + } + return($this->categoryId); + }//end set_category_id() + //============================================================================ + + + + //============================================================================ + /** + * Build the schema for the generic chat system. + */ + protected function build_schema() { + try { + $result = $this->db->run_sql_file(dirname(__FILE__) .'/../setup/genericChat.pgsql.sql'); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to create schema, DETAILS::: ". $e->getMessage()); + } + if($result !== true) { + throw new exception(__METHOD__ .":: failed to create schema (no details)"); + } + }//end build_schema() + //============================================================================ + + + + //============================================================================ + public function create_category($name) { + try { + $result = $this->dbTableHandler->create_record(array('category_name' => $name)); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to create record, DETAILS::: ". $e->getMessage()); + } + return($result); + }//end create_category() + //============================================================================ + + + + //============================================================================ + public function update_category($id, $name) { + try { + $result = $this->update_record($id, array('category_name' => $name)); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to update record, DETAILS::: ". $e->getMessage()); + } + return($result); + }//end update_category() + //============================================================================ + +} + Property changes on: trunk/0.4/abstract/cs_genericChatCategory.abstract.class.php ___________________________________________________________________ Added: svn:keywords + Id Author Revision HeadURL Date Added: svn:mergeinfo + Copied: trunk/0.4/abstract/cs_genericChatMessage.abstract.class.php (from rev 208, trunk/0.4/abstract/cs_genericGroup.abstract.class.php) =================================================================== --- trunk/0.4/abstract/cs_genericChatMessage.abstract.class.php (rev 0) +++ trunk/0.4/abstract/cs_genericChatMessage.abstract.class.php 2011-03-26 00:57:34 UTC (rev 211) @@ -0,0 +1,123 @@ +<?php +/* + * Created on March 8, 2011 + * + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + */ + +abstract class cs_genericChatMessageAbstract extends cs_genericChatRoomAbstract { + + /** Database object. */ + public $db; + + /** cs_globalFunctions object, for cleaning strings & such. */ + public $gfObj; + + /** Table name used to store list of chat messages. */ + protected $myTable = "cswal_chat_message_table"; + + /** Sequence for chat message table. */ + protected $mySeq = "cswal_chat_message_table_change_message_id_seq"; + + /** Table handler object for simple SQL handling */ + private $dbTableHandler; + + /** */ + private $categoryId=null; + + /** */ + protected $uid; + + /** */ + protected $chatRoomId; + + //============================================================================ + public function __construct(cs_phpDB $db, $uid, $chatRoomId) { + $this->db = $db; + $this->gfObj = new cs_globalFunctions; + + //setup table handler. + $cleanString = array( + 'uid' => 'int', + 'chat_room_id' => 'int', + 'private_message_uid' => 'int', + 'message' => 'int' + ); + + if(is_numeric($uid)) { + $this->uid = $uid; + } + else { + throw new exception(__METHOD__ .": invalid UID (". $uid .")"); + } + if(is_numeric($chatRoomId)) { + $this->chatRoomId = $chatRoomId; + } + else { + throw new exception(__METHOD__ .": invalid room ID (". $chatRoomId .")"); + } + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->myTable, $this->mySeq, 'chat_message_id', $cleanString); + }//end __construct() + //============================================================================ + + + + //============================================================================ + public function create_message($messageText, $privateMessageUid=NULL) { + if(is_string($messageName) && strlen($message)) { + try { + $sqlArr = array( + 'uid' => $this->uid, + 'chat_room_id' => $this->chatRoomId, + + //TODO: should messageText be encoded? + 'message' => $messageText + ); + if(!is_null($privateMessageUid) && is_numeric($privateMessageUid)) { + $sqlArr['private_message_uid'] = $privateMessageUid; + } + $messageId = $this->dbTableHandler->create_record($sqlArr); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": failed to create record, DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .": (". $messageName .")"); + } + + return($messageId); + }//end create() + //============================================================================ + + + + //============================================================================ + public function get_messages($lastMessageId=NULL, $limit=NULL) { + $messages = array(); + try { + //get_records(array $filter=null, $orderBy=null, $limit=null, $offset=null) + $filterArr = array(); + if(!is_null($lastMessageId) && $lastMessageId > 0) { + $filterArr['message_id'] => '> '. $lastMessageId; + } + $messages = $this->dbTableHandler->get_records_using_custom_filter($filter, NULL, $limit); + if(!is_array($messages) && $messages === false) { + $messages = array(); + } + } + catch(Exception $e) { + throw new exception(__METHOD__ .": error while retrieving messages, DETAILS::: ". $e->getMessages()); + } + return($messages); + }//end get_messages() + //============================================================================ + +} + Property changes on: trunk/0.4/abstract/cs_genericChatMessage.abstract.class.php ___________________________________________________________________ Added: svn:keywords + Id Author Revision HeadURL Date Added: svn:mergeinfo + Copied: trunk/0.4/abstract/cs_genericChatRoom.abstract.class.php (from rev 208, trunk/0.4/abstract/cs_genericGroup.abstract.class.php) =================================================================== --- trunk/0.4/abstract/cs_genericChatRoom.abstract.class.php (rev 0) +++ trunk/0.4/abstract/cs_genericChatRoom.abstract.class.php 2011-03-26 00:57:34 UTC (rev 211) @@ -0,0 +1,110 @@ +<?php +/* + * Created on February 25, 2011 + * + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + */ + +abstract class cs_genericChatRoomAbstract extends cs_chatCategoryAbstract { + + /** Database object. */ + public $db; + + /** cs_globalFunctions object, for cleaning strings & such. */ + public $gfObj; + + /** Table name used to store list of chat rooms. */ + protected $myTable = "cswal_chat_room_table"; + + /** Sequence for chat room table. */ + protected $mySeq = "cswal_chat_room_table_change_room_id_seq"; + + /** Table handler object for simple SQL handling */ + private $dbTableHandler; + + //============================================================================ + public function __construct(cs_phpDB $db) { + $this->db = $db; + $this->gfObj = new cs_globalFunctions; + + //setup table handler. + $cleanString = array( + 'category_id' => "int", + 'room_name' => "text", + 'room_description' => "text", + 'is_private' => "bool", + 'is_closed' => "bool", + //'encoding' => "text" + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->myTable, $this->mySeq, 'chat_room_id', $cleanString); + }//end __construct() + //============================================================================ + + + + //============================================================================ + public function create_room($roomName, $roomDescription=null, $isPrivate=false) { + if(is_string($roomName) && strlen($room)) { + try { + if(!is_bool($isPrivate)) { + $isPrivate=false; + } + $insertArr = array( + 'room_name' => $roomName, + 'room_description' => $roomDescription, + 'is_private' => $isPrivate + ); + if(is_numeric($this->categoryId)) { + $insertArr['category_id'] = $this->categoryId; + } + $roomId = $this->dbTableHandler->create_record($insertArr); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": failed to create record, DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .": invalid room name (". $roomName .")"); + } + + return($roomId); + }//end create_room() + //============================================================================ + + + + //============================================================================ + public function update_room($roomId, array $updates) { + try { + $retval = $this->dbTableHandler->update_record($roomId, $updates); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": failed to update room, DETAILS::: ". $e->getMessage()); + } + return($retval); + }//end update_room(); + //============================================================================ + + + + //============================================================================ + public function close_room($roomId) { + if(is_numeric($roomId)) { + $retval = $this->update_room($roomId, array('is_closed'=>true)); + } + else { + throw new exception(__METHOD__ .": roomId (". $roomId .")"); + } + return($retval); + }//end close_room() + //============================================================================ + + +} + Property changes on: trunk/0.4/abstract/cs_genericChatRoom.abstract.class.php ___________________________________________________________________ Added: svn:keywords + Id Author Revision HeadURL Date Added: svn:mergeinfo + Added: trunk/0.4/setup/genericChat.pgsql.sql =================================================================== --- trunk/0.4/setup/genericChat.pgsql.sql (rev 0) +++ trunk/0.4/setup/genericChat.pgsql.sql 2011-03-26 00:57:34 UTC (rev 211) @@ -0,0 +1,54 @@ +BEGIN; + +-- +-- chat categories (ways to insulate chat rooms) +-- +CREATE TABLE cswal_chat_category_table ( + chat_category_id serial NOT NULL PRIMARY KEY, + category_name text NOT NULL +); + +INSERT INTO cswal_chat_category_table (chat_category_id, category_name) VALUES (0, 'DEFAULT'); + +-- +-- Chat rooms +-- +CREATE TABLE cswal_chat_room_table ( + chat_room_id serial NOT NULL PRIMARY KEY, + chat_category_id integer NOT NULL REFERENCES cswal_chat_category_table(chat_category_id) DEFAULT 0, + room_name text NOT NULL, + room_description text, + creation timestamptz NOT NULL DEFAULT NOW(), + is_private boolean NOT NULL DEFAULT false, + is_closed boolean NOT NULL DEFAULT false, + encoding text +); + + +-- +-- Chat messages +-- NOTE::: change the reference on "uid" and "private_message_uid" to match your database schema. +-- NOTE::: the "private_message_uid" field is for sending private messages (intended for a specific user). +-- +CREATE TABLE cswal_chat_message_table ( + chat_message_id serial NOT NULL PRIMARY KEY, + uid integer NOT NULL REFERENCES cs_authentication_table(uid), + private_message_uid integer DEFAULT NULL REFERENCES cs_authentication_table(uid), + chat_room_id integer NOT NULL REFERENCES cswal_chat_room_table(chat_room_id), + creation timestamptz NOT NULL DEFAULT NOW(), + message text NOT NULL +); + + +-- +-- Participant table +-- NOTE: this is a *transient* table; it only has data when the chat room is active. +-- +CREATE TABLE cswal_chat_participant_table ( + chat_participant_id serial NOT NULL PRIMARY KEY, + chat_room_id integer NOT NULL REFERENCES cswal_chat_room_table(chat_room_id), + uid integer NOT NULL REFERENCES cs_authentication_table(uid), + enter_timestamp timestamptz NOT NULL DEFAULT NOW(), + last_received_message_id integer REFERENCES cswal_chat_message_table(chat_message_id) +); + Copied: trunk/0.4/tests/testOfCSGenericChat.php (from rev 210, trunk/0.4/tests/testOfCSGenericPermissions.php) =================================================================== --- trunk/0.4/tests/testOfCSGenericChat.php (rev 0) +++ trunk/0.4/tests/testOfCSGenericChat.php 2011-03-26 00:57:34 UTC (rev 211) @@ -0,0 +1,53 @@ +<?php +/* + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + */ + +class testOfCSGenericChat extends testDbAbstract { + + + //-------------------------------------------------------------------------- + public function __construct() { + }//end __construct() + //-------------------------------------------------------------------------- + + + + //-------------------------------------------------------------------------- + function setUp() { + $this->gfObj = new cs_globalFunctions; + $this->gfObj->debugPrintOpt=1; + parent::__construct('postgres','', 'localhost', '5432'); + + }//end setUp() + //-------------------------------------------------------------------------- + + + + //-------------------------------------------------------------------------- + public function tearDown() { + if(isset($GLOBALS['keepDb'])) { + unset($GLOBALS['keepDb']); + } + else { + $this->destroy_db(); + } + } + //-------------------------------------------------------------------------- + + + + //-------------------------------------------------------------------------- + public function test_chatCategories() { + }//end test_chatCategories() + //-------------------------------------------------------------------------- + + + +} Property changes on: trunk/0.4/tests/testOfCSGenericChat.php ___________________________________________________________________ Added: svn:keywords + Id Author Revision HeadURL Date Added: svn:mergeinfo + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-24 19:07:03
|
Revision: 210 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=210&view=rev Author: crazedsanity Date: 2011-02-24 19:06:57 +0000 (Thu, 24 Feb 2011) Log Message: ----------- *** INITIAL RELEASE, v0.3.0 *** Requires: * cs-content v1.0+ Optional: * cs-phpxml v1.0+ (for cs-siteConfig) SUMMARY OF CAPABILITIES::: * Authentication tokens (lost password hashes, API keys, etc) * BBCode Parser * Database Abastraction layer, supporting PostgreSQL, MySQL, and SQLite * Database storage for sessions * XML-Based unified site configuration system * Tab system, based on templates and block rows * Generic database logging * Upgrade system for web applications with database backends * Abstract class for selecting/updating/deleting on a single table Added Paths: ----------- releases/0.3/ Property changes on: releases/0.3 ___________________________________________________________________ Added: svn:ignore + .project Added: svn:mergeinfo + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-24 18:59:20
|
Revision: 209 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=209&view=rev Author: crazedsanity Date: 2011-02-24 18:59:14 +0000 (Thu, 24 Feb 2011) Log Message: ----------- Folder for storing stable releases of CS-WebAppLibs. Added Paths: ----------- releases/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-07 19:47:32
|
Revision: 208 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=208&view=rev Author: crazedsanity Date: 2011-02-07 19:47:25 +0000 (Mon, 07 Feb 2011) Log Message: ----------- Minor changes so the last query doesn't get overwritten by currval queries. /db_types/cs_phpDB__pgsql.class.php: * connect(): -- slightly better exception message... * exec(): -- ARG CHANGE: NEW ARG: #2 ($setLastQuery=true) -- optionally NOT set lastQuery var. * get_currval(): -- pass false as the second argument to exec() so it doesn't get set as the lastQuery. Modified Paths: -------------- trunk/0.4/db_types/cs_phpDB__pgsql.class.php Modified: trunk/0.4/db_types/cs_phpDB__pgsql.class.php =================================================================== --- trunk/0.4/db_types/cs_phpDB__pgsql.class.php 2011-02-07 19:37:12 UTC (rev 207) +++ trunk/0.4/db_types/cs_phpDB__pgsql.class.php 2011-02-07 19:47:25 UTC (rev 208) @@ -201,7 +201,7 @@ } } else { - throw new exception(__METHOD__ .": paramsAreSet=(". $this->paramsAreSet ."), isConnected=(". $this->isConnected .")"); + throw new exception(__METHOD__ .": not connected... paramsAreSet=(". $this->paramsAreSet ."), isConnected=(". $this->isConnected .")"); } return($retval); @@ -225,8 +225,10 @@ * * TODO: re-implement query logging (setting debug, logfilename, etc). */ - function exec($query) { - $this->lastQuery = $query; + function exec($query,$setLastQuery=true) { + if($setLastQuery) { + $this->lastQuery = $query; + } if($this->useQueryList) { $this->queryList[] = $query; } @@ -1095,7 +1097,7 @@ //========================================================================= public function get_currval($sequence) { if(is_string($sequence) && strlen($sequence) >= 5) { - $numrows = $this->exec("SELECT currval('". $sequence ."')"); + $numrows = $this->exec("SELECT currval('". $sequence ."')",false); $dberror = $this->errorMsg(); if($numrows == 1 && !strlen($dberror)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-07 19:37:18
|
Revision: 207 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=207&view=rev Author: crazedsanity Date: 2011-02-07 19:37:12 +0000 (Mon, 07 Feb 2011) Log Message: ----------- Minor change to keep values deemed as empty from being removed from the SQL. /abstract/cs_singleTableHandler.abstract.class.php: * create_record(): -- ARG CHANGE: NEW ARG: #2 ($removeEmptyVals=TRUE) -- pass new arg to cs_globalFunctions::string_from_array() Modified Paths: -------------- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php Modified: trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-02-01 03:58:32 UTC (rev 206) +++ trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-02-07 19:37:12 UTC (rev 207) @@ -81,10 +81,10 @@ * @RETURN (int) SUCCESS: the (int) is the last inserted ID. * @EXCEPTION FAIL: exception indicates the error. */ - public function create_record(array $data) { + public function create_record(array $data, $removeEmptyVals=TRUE) { if(is_array($data) && count($data)) { $sql = 'INSERT INTO '. $this->tableName .' ' - . $this->gfObj->string_from_array($data, 'insert', null, $this->cleanStringArr, true); + . $this->gfObj->string_from_array($data, 'insert', null, $this->cleanStringArr, $removeEmptyVals); try { $newId = $this->dbObj->run_insert($sql, $this->seqName); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-01 03:58:38
|
Revision: 206 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=206&view=rev Author: crazedsanity Date: 2011-02-01 03:58:32 +0000 (Tue, 01 Feb 2011) Log Message: ----------- Remove some debugging stuff. Modified Paths: -------------- trunk/0.4/abstract/cs_genericObject.abstract.class.php Modified: trunk/0.4/abstract/cs_genericObject.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-02-01 03:51:37 UTC (rev 205) +++ trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-02-01 03:58:32 UTC (rev 206) @@ -124,19 +124,13 @@ $missingIndexes = array_diff($objectNames, $nvpArray); if(count($missingIndexes)) { -$this->gfObj->debug_print(__METHOD__ .": MISSING INDEXES::: ". $this->gfObj->debug_print($missingIndexes,0,1)); foreach($missingIndexes as $newObjectName) { $newId = $this->create_object($newObjectName); $nvpArray[$newId] = $newObjectName; } } -$this->gfObj->debug_print(__METHOD__ .": createMissing=(". $createMissing ."), counts=(". count($objectNames) ."/". count($nvpArray) ."/". count($missingIndexes)."), SQL::: ". $sql); } if(!is_array($nvpArray) || !count($nvpArray)) { -$this->gfObj->debug_print(__METHOD__ .": objectNames::: ". $this->gfObj->debug_print($objectNames,0,1)); -$this->gfObj->debug_print(__METHOD__ .": nvpArray::: ". $this->gfObj->debug_print($nvpArray,0,1)); -$this->gfObj->debug_print(__METHOD__ .": missingIndexes::: ". $this->gfObj->debug_print($missingIndexes,0,1)); -cs_debug_backtrace(1); throw new exception(__METHOD__ .": no data returned"); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-01 03:51:44
|
Revision: 205 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=205&view=rev Author: crazedsanity Date: 2011-02-01 03:51:37 +0000 (Tue, 01 Feb 2011) Log Message: ----------- Updated tests & schema. /setup/genericPermissions.pgsql.sql: * cswal_group_table: -- group_admin: changed to NOT NULL * cswal_object_table: -- object_id: changed to serial (instead of integer) * cswal_permission_table: -- object_path: removed UNIQUE constraint * MAIN... -- remove arbitrary INSERT statements -- add a constraint to the cswal_permission_table /tests/testOfCSGenericPermissions.php: * setUp(): -- supplement all the arbitrary insertsfrom the setup file with code before each run... * get_valid_users(): -- set some internal vars for later testing. * test_userGroups(): -- more tests... * test_object_paths() [NEW]: -- testing creation & manipulation of ID and object paths * test_permissions(): -- build a larger list of permissions for testing * _gpTester{}: -- create testDbTableHandler object for SQL stuff. Modified Paths: -------------- trunk/0.4/setup/genericPermissions.pgsql.sql trunk/0.4/tests/testOfCSGenericPermissions.php Modified: trunk/0.4/setup/genericPermissions.pgsql.sql =================================================================== --- trunk/0.4/setup/genericPermissions.pgsql.sql 2011-02-01 03:29:22 UTC (rev 204) +++ trunk/0.4/setup/genericPermissions.pgsql.sql 2011-02-01 03:51:37 UTC (rev 205) @@ -6,7 +6,7 @@ CREATE TABLE cswal_group_table ( group_id serial NOT NULL PRIMARY KEY, group_name text NOT NULL UNIQUE, - group_admin integer REFERENCES cs_authentication_table(uid), + group_admin integer NOT NULL REFERENCES cs_authentication_table(uid), created TIMESTAMPTZ NOT NULL DEFAULT NOW() ); @@ -43,7 +43,7 @@ -- with ID's, such as "member"=1, "blog"=2, "edit"=3; the object path would then be ":1::2::3:". -- CREATE TABLE cswal_object_table ( - object_id integer NOT NULL PRIMARY KEY, + object_id serial NOT NULL PRIMARY KEY, object_name text NOT NULL UNIQUE, created TIMESTAMPTZ NOT NULL DEFAULT NOW() ); @@ -60,7 +60,7 @@ CREATE TABLE cswal_permission_table ( permission_id serial NOT NULL PRIMARY KEY, system_name integer NOT NULL DEFAULT 0 REFERENCES cswal_system_table(system_id), - object_path text NOT NULL UNIQUE, + object_path text NOT NULL, user_id integer NOT NULL REFERENCES cs_authentication_table(uid), group_id integer NOT NULL REFERENCES cswal_group_table(group_id), inherit boolean NOT NULL DEFAULT FALSE, @@ -78,20 +78,6 @@ INSERT INTO cswal_system_table (system_id, system_name) VALUES (0, 'DEFAULT'); -INSERT INTO cswal_group_table (group_name) VALUES ('www'); -INSERT INTO cswal_group_table (group_name) VALUES ('blogs'); -INSERT INTO cswal_group_table (group_name) VALUES ('admin'); +ALTER TABLE ONLY cswal_permission_table + ADD CONSTRAINT cswal_permission_table_system_path_key UNIQUE (system_name, object_path); -INSERT INTO cswal_object_table (object_id, object_name) VALUES (0, '{APPURL}'); -INSERT INTO cswal_object_table (object_id, object_name) VALUES (1, 'member'); - -INSERT INTO cswal_permission_table - (object_path,user_id, group_id) - VALUES - (':0:', 101, 1); - -INSERT INTO cswal_permission_table - (object_path, user_id, group_id, g_r, g_w) - VALUES - (':0::1:', 101, 2, true, true); - Modified: trunk/0.4/tests/testOfCSGenericPermissions.php =================================================================== --- trunk/0.4/tests/testOfCSGenericPermissions.php 2011-02-01 03:29:22 UTC (rev 204) +++ trunk/0.4/tests/testOfCSGenericPermissions.php 2011-02-01 03:51:37 UTC (rev 205) @@ -29,6 +29,39 @@ $this->permObj = new _gpTester($this->db); $this->permObj->do_schema(); $this->get_valid_users(); + + $this->defaultGroupId = null; + + //create some groups. + { + $myGroupList = array('www', 'blogs', 'admin', __METHOD__); + #$newGroupId = $this->permObj->create_group(__METHOD__); + $userKeys = array_keys($this->validUsers); + foreach($myGroupList as $tName) { + $newGroupId = $this->permObj->create_group($tName, $this->chosenOneUid); + if(is_null($this->defaultGroupId)) { + $this->defaultGroupId = $newGroupId; + } + $this->assertTrue(is_numeric($newGroupId)); + } + + $groupList = $this->permObj->get_all_groups(); + + foreach($groupList as $groupId=>$groupData) { + $this->assertEqual($this->permObj->get_group_by_id($groupId), $groupData, "failed to get group (". $groupData['group_name'] .") by ID (". $groupId .")"); + $this->assertEqual($this->permObj->get_group($groupData['group_name']), $groupData, "failed to get group (". $groupData['group_name'] .") by name"); + } + } + + //create some objects... + { + $requiredItems = array('{APPURL}', 'member'); + foreach($requiredItems as $name) { + $newId = $this->permObj->create_object($name); + $this->assertTrue(is_numeric($newId)); + } + } + }//end setUp() //-------------------------------------------------------------------------- @@ -55,6 +88,11 @@ $sql = "SELECT uid,username FROM cs_authentication_table ORDER BY uid"; try { $this->validUsers = $this->db->run_query($sql); + + $userKeys = array_keys($this->validUsers); + $myUser = $this->validUsers[$userKeys[0]]; + $this->chosenOneUid = $myUser['uid']; + $this->defaultUid = $this->chosenOneUid; } catch(Exception $e) { cs_debug_backtrace(1); @@ -82,25 +120,12 @@ $this->assertTrue(isset($groupList[$myKey]['group_id'])); } - //create some groups. - { - $newGroupId = $this->permObj->create_group(__METHOD__); - $this->assertTrue(is_numeric($newGroupId)); - - $groupList = $this->permObj->get_all_groups(); - - foreach($groupList as $groupId=>$groupData) { - $this->assertEqual($this->permObj->get_group_by_id($groupId), $groupData, "failed to get group (". $groupData['group_name'] .") by ID (". $groupId .")"); - $this->assertEqual($this->permObj->get_group($groupData['group_name']), $groupData, "failed to get group (". $groupData['group_name'] .") by name"); - } - } - //create & test user_group relationships. { - $newId = $this->permObj->create_user_group($this->validUsers[$myKey]['uid'],$newGroupId); + $newId = $this->permObj->create_user_group($this->validUsers[$myKey]['uid'],$this->defaultGroupId); $this->assertTrue(is_numeric($newId)); - $this->assertTrue($this->permObj->is_group_member($this->validUsers[$myKey]['uid'],$newGroupId), "user (". - $this->validUsers[$myKey]['uid'] .") isn't member of group (". $newGroupId .") after being added to it... "); + $this->assertTrue($this->permObj->is_group_member($this->validUsers[$myKey]['uid'],$this->defaultGroupId), "user (". + $this->validUsers[$myKey]['uid'] .") isn't member of group (". $this->defaultGroupId .") after being added to it... "); $ugList = $this->permObj->get_user_groups($this->validUsers[$myKey]['uid']); $this->assertTrue(is_array($ugList)); @@ -113,7 +138,73 @@ //-------------------------------------------------------------------------- + public function test_object_paths() { + //basic functionality test for ID Path creation. + { + $expectThis = ':5::30::2::18::5:'; + + //make the expected string into something that be broken into an array of numbers. + $chunktify = preg_replace('/^:(.*):$/', '$1', $expectThis); + $chunktify = preg_replace('/:{2,}/', ':', $chunktify); + $bits = explode(':', $chunktify); + + $this->assertEqual($bits, $this->permObj->explode_id_path($expectThis)); + + $this->assertEqual(count($bits), 5, 'could not break string into id bits'); + + $derivedIdPath = ""; + foreach($bits as $id) { + $derivedIdPath .= $this->permObj->create_id_path_part($id); + } + $this->assertEqual($derivedIdPath, $expectThis, 'Invalid idPath, expected=('. $expectThis .'), actual=('. $derivedIdPath .')'); + + $idPathList = array(':9:', ':9::5:', ':0::0::0:', ':-1:', ':-1::-1:', ':-400::1::3:', ':51041::600000::8109223::999999999999999999999999999999999:'); + foreach($idPathList as $tPath) { + $this->assertTrue($this->permObj->is_id_path($tPath), "valid path (". $tPath .") not recognized as such"); + } + + $invalidIdPathList = array('', ':--1:', '1::3::4:', ':1::3::4', ':1:3:4:'); + foreach($invalidIdPathList as $tPath) { + $this->assertFalse($this->permObj->is_id_path($tPath), "invalid path (". $tPath .") evaluated as valid"); + } + } + + //Search for existing items (should have been created from setUp()) + { + $requiredItems = array('{APPURL}', 'member'); + $existingItems = $this->permObj->get_object_ids($requiredItems, false); + $this->assertEqual(count($existingItems), 2, 'Required items not present... '. $this->gfObj->debug_print($existingItems,0,1)); + + //in the event the required items aren't there, create them. + $testExistingItems = $this->permObj->get_object_ids($requiredItems, true); + $this->assertEqual(count($requiredItems), count($testExistingItems), 'failed to create some existing items'); + $this->assertEqual(count($testExistingItems), count($existingItems), 'WARNING: some required items were not found'); + } + + //Build new ID paths... + { + $newObjects = array('admin', 'logs', 'view'); + $idPath = $this->permObj->create_id_path('/admin/logs/view'); + $this->assertTrue(preg_match('/^:[0-9]{1,}::[0-9]{1,}::[0-9]{1,}:/', $idPath), 'path appears syntactically incorrect ('. $idPath .')'); + + //make sure the manually-created ID Path matches what was actually created. + $idList = $this->permObj->get_object_ids($newObjects, false); + $this->assertEqual(count($idList), count($newObjects), "there must be missing objects, counts don't match"); + + $expectedIdPath = ""; + foreach($idList as $id=>$n) { + $expectedIdPath .= $this->permObj->create_id_path_part($id); + } + $this->assertEqual($expectedIdPath, $idPath, "Manually created path (". $expectedIdPath .") does not match idPath (". $idPath .")"); + } + }//end test_object_paths() + //-------------------------------------------------------------------------- + + + + //-------------------------------------------------------------------------- public function test_permissions() { + #$GLOBALS['keepDb'] = true; //Test permission string parsing. { @@ -169,7 +260,9 @@ $usePermName = __METHOD__ .'/test1'; $this->assertFalse($this->permObj->permission_exists($usePermName)); $permId = $this->permObj->create_permission($usePermName, $myUid, 1, $usePermString); - $this->assertTrue($this->permObj->permission_exists($usePermName)); + if(!$this->assertTrue($this->permObj->permission_exists($usePermName), "Permission ('". $usePermName ."', id=". $permId .") does not exist")) { + $this->gfObj->debug_print($this->permObj->testDbTableHandler->get_records()); + } $this->assertTrue(is_numeric($permId)); //the method 'build_permissions_string()' should disregard extra indices in the array & build the string. @@ -199,14 +292,57 @@ $this->assertEqual($this->permObj->has_write_permission(0,$usePermName), $this->permObj->has_write_permission($thirdUser,$usePermName)); $this->assertEqual($this->permObj->has_execute_permission(0,$usePermName), $this->permObj->has_execute_permission($thirdUser,$usePermName)); } + + //create a huge list of permissions to test different scenarios. + { + $testPaths = array( + '/member', + '/member/ttorp', + '/member/ttorp/character', + '/member/ttorp/character/sheet', + '/member/ttorp/character/sheet/44', + '/admin/x', + '/admin/logs', + '/test/scripts/1/2/3/magicMarker', + '/api/system/test/212312300231223.21231/get/333', + '/content/dev/corner/cs/project', + '/content/dev/corner/cs/web/app/libs', + '/content/dev', + '/content/dev/corner', + '/content/dev/coner/cs', + + //The following items fail for no apparent reason (that I can find)... + '/admin', + '/cntenx', + '/content/dev/corner/cs/content', //fails due to duplicate objects in path ("content" is in there twice). + ); + $testPerms = array( + 'rwxrwxrwx', + 'rwxrwx---', + 'rwx---rwx', + '---rwxrwx', + 'rwx------', + '---------', + 'r--r--r--', + '-w--w--w-', + '--x--x--x' + ); + foreach($testPaths as $tPath) { + $tPermString = 'rwxrwx---'; + $newPermId = $this->permObj->create_permission($tPath, $this->chosenOneUid, $this->defaultGroupId, $tPermString); + $this->assertTrue(is_numeric($newPermId)); + } + }///*/ }//end test_permissions //-------------------------------------------------------------------------- } class _gpTester extends cs_genericPermission { + public $testDbTableHandler; public function __construct($db) { parent::__construct($db); + $this->testDbTableHandler = $this->dbTableHandler; } public function do_schema() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-02-01 03:29:28
|
Revision: 204 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=204&view=rev Author: crazedsanity Date: 2011-02-01 03:29:22 +0000 (Tue, 01 Feb 2011) Log Message: ----------- Use ID paths instead of string-based paths. /cs_genericPermission.class.php: * __construct(): -- change "object_path" to use the "email_plus" style of string cleaning (there should really be a more extensible way of using that) * create_object() [DELETED]: -- unnecessary alias method * create_permission(): -- call create_id_path() to set the value for 'object_path'. -- throw an exception if creating the ID path fails. -- NOTE::: the new exception is caught by the outer exception, which will not display those details... * get_permission(): -- create an ID path to find the object. -- translates the ID path into an actual path. * explode_path(): -- separates the given real path into bits so that it can be turned into an ID path * create_id_path(): -- creates the ID path for a given normal path. /abstract/cs_genericGroup.abstract.class.php: * __construct(): -- 'group_name' gets cleaned like email * create_group(): -- ARG CHANGE: NEW ARG: #2 ($adminUid) -- requires the admin's UID when creating the record. /abstract/cs_genericObject.abstract.class.php: * __construct(): -- change cleaning of object_name from text to sql * create_object(): -- catch exception if create_record() throws one * get_object_ids() [NEW]: -- build an array of object ID's based on the given names * create_id_path_part() [NEW]: -- basically surrounds the given number with colons (i.e. '2' -> ':2:') * create_id_path_from_objects() [NEW]: -- creates an ID path from an array of object names. * clean_object_name() [NEW]: -- special cleaning so the colons don't get stripped. * is_id_path() [NEW]: -- determines if the given string is an ID path or not * explode_id_path() [NEW]: -- breaks up an ID path into IDs * get_object_names() [NEW]: -- retrieves a list of names associated with the id's in the passed array. Modified Paths: -------------- trunk/0.4/abstract/cs_genericGroup.abstract.class.php trunk/0.4/abstract/cs_genericObject.abstract.class.php trunk/0.4/cs_genericPermission.class.php Modified: trunk/0.4/abstract/cs_genericGroup.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_genericGroup.abstract.class.php 2011-01-27 15:04:24 UTC (rev 203) +++ trunk/0.4/abstract/cs_genericGroup.abstract.class.php 2011-02-01 03:29:22 UTC (rev 204) @@ -35,7 +35,7 @@ //setup table handler. $cleanString = array( - 'group_name' => 'text', + 'group_name' => 'email', 'group_admin' => 'integer' ); $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->groupTable, $this->groupSeq, 'group_id', $cleanString); @@ -59,9 +59,13 @@ //============================================================================ - public function create_group($name) { + public function create_group($name, $adminUid) { try{ - $newId = $this->dbTableHandler->create_record(array('group_name'=>$this->clean_group_name($name))); + $insertData = array( + 'group_name' => $this->clean_group_name($name), + 'group_admin' => $adminUid + ); + $newId = $this->dbTableHandler->create_record($insertData); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to create new record, DETAILS::: ". $e->getMessage()); Modified: trunk/0.4/abstract/cs_genericObject.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-01-27 15:04:24 UTC (rev 203) +++ trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-02-01 03:29:22 UTC (rev 204) @@ -25,7 +25,7 @@ public function __construct(cs_phpDB $db) { parent::__construct($db); $cleanString = array( - 'object_name' => 'text' + 'object_name' => 'sql' ); $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->oTable, $this->oSeq, 'group_id', $cleanString); }//end __construct() @@ -36,7 +36,12 @@ //============================================================================ public function create_object($objectName) { if(strlen($objectName)) { - $newId = $this->dbTableHandler->create_record(array('object_name', $objectName)); + try { + $newId = $this->dbTableHandler->create_record(array('object_name' => $objectName)); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": failed to create object, DETAILS::: ". $e->getMessage()); + } } else { throw new exception(__METHOD__ .": invalid object name (". $objectName .")"); @@ -86,7 +91,189 @@ //============================================================================ + public function get_object_ids(array $objectNames, $createMissing=true) { + $nvpArray = array(); + if(is_array($objectNames) && count($objectNames)) { + $sql = "SELECT object_id, object_name FROM ". $this->oTable ." WHERE " + . "object_name IN "; + + $myFilter = ""; + foreach($objectNames as $n) { + $tString = "'". $this->clean_object_name($n) ."'"; + $myFilter = $this->gfObj->create_list($myFilter, $tString); + } + $sql .= '('. $myFilter .')'; + + try { + $nvpArray = $this->dbTableHandler->dbObj->run_query($sql, 'object_id', 'object_name'); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": failed to retrieve object list, DETAILS::: ". $e->getMessage()); + } + + try { + if($createMissing === true) { + //clean object names... + foreach($objectNames as $i=>$n) { + $objectNames[$i] = $this->clean_object_name($n); + } + //pull the missing indexes out so they can be created... + if(!is_array($nvpArray)) { + $nvpArray = array(); + } + $missingIndexes = array_diff($objectNames, $nvpArray); + + if(count($missingIndexes)) { +$this->gfObj->debug_print(__METHOD__ .": MISSING INDEXES::: ". $this->gfObj->debug_print($missingIndexes,0,1)); + foreach($missingIndexes as $newObjectName) { + $newId = $this->create_object($newObjectName); + $nvpArray[$newId] = $newObjectName; + } + } +$this->gfObj->debug_print(__METHOD__ .": createMissing=(". $createMissing ."), counts=(". count($objectNames) ."/". count($nvpArray) ."/". count($missingIndexes)."), SQL::: ". $sql); + } + if(!is_array($nvpArray) || !count($nvpArray)) { +$this->gfObj->debug_print(__METHOD__ .": objectNames::: ". $this->gfObj->debug_print($objectNames,0,1)); +$this->gfObj->debug_print(__METHOD__ .": nvpArray::: ". $this->gfObj->debug_print($nvpArray,0,1)); +$this->gfObj->debug_print(__METHOD__ .": missingIndexes::: ". $this->gfObj->debug_print($missingIndexes,0,1)); +cs_debug_backtrace(1); + throw new exception(__METHOD__ .": no data returned"); + } + } + catch(Exception $e) { + throw new exception(__METHOD__ .": error while creating missing objects, DETAILS::: ". $e->getMessage()); + } + } + return($nvpArray); + }//end get_object_ids() //============================================================================ + + + //============================================================================ + public function create_id_path_part($id) { + if(is_numeric($id)) { + $retval = ':'. $id .':'; + } + else { + throw new exception(__METHOD__ .": invalid id (". $id .")"); + } + return($retval); + }//end create_id_path_part() + //============================================================================ + + + + //============================================================================ + public function create_id_path_from_objects(array $objects) { + try { + $myIds = $this->get_object_ids($objects,true); + + $idPath = ""; + if(is_array($myIds) && count($myIds)) { + foreach($myIds as $id=>$name) { + try { + $idPath = $this->gfObj->create_list($idPath, $this->create_id_path_part($id), ''); + } + catch(Exception $e) { + throw new exception($e->getMessage()); + } + } + } + else { + throw new exception(__METHOD__ .": failed to create any IDs"); + } + } + catch(Exception $e) { + throw new exception(__METHOD__ .": failed to create id path, DETAILS::: ". $e->getMessage()); + } + return($idPath); + }//end create_id_path_from_objects() + //============================================================================ + + + + //============================================================================ + protected function clean_object_name($n) { + //pulled from cs-content, cs_globalFunctions::cleanString(), style="query"; modified to allow the brackets. + $evilChars = array("\$", ":", "%", "~", "*",">", "<", "-", "[", "]", ")", "(", "&", "#", "?", ".", "\,","\/","\\","\"","\|","!","^","+","`","\n","\r"); + $n = preg_replace("/\|/","",$n); + $n = preg_replace("/\'/", "", $n); + $n = str_replace($evilChars,"", $n); + $n = stripslashes(addslashes($n)); + + return($n); + }//end clean_object_name($n) + //============================================================================ + + + + //============================================================================ + public function is_id_path($path) { + $isPath = false; + if(is_string($path) && strlen($path)) { + if(preg_match('/^(:-{0,1}[0-9]{1,}:){1,}$/', $path)) { + $isPath = true; + } + } + return($isPath); + }//end is_id_path() + //============================================================================ + + + + //============================================================================ + public function explode_id_path($idPath) { + //make the expected string into something that be broken into an array of numbers. + $chunktify = preg_replace('/^:(.*):$/', '$1', $idPath); + $chunktify = preg_replace('/:{2,}/', ':', $chunktify); + $bits = explode(':', $chunktify); + return($bits); + }//end explode_id_path() + //============================================================================ + + + + //============================================================================ + public function translate_id_path($idPath) { + if($this->is_id_path($idPath)) { + $bits = $this->explode_id_path($idPath); + $translatedPath = $this->get_object_names($this->explode_id_path($idPath)); + } + else { + throw new exception(__METHOD__ .": invalid path (". $idPath .")"); + } + return($translatedPath); + }//end translate_id_path() + //============================================================================ + + + + //============================================================================ + public function get_object_names(array $idList) { + if(is_array($idList) && count($idList)) { + $sql = "SELECT object_id, object_name FROM ". $this->oTable ." WHERE object_id IN "; + + $idListString = ""; + foreach($idList as $id) { + $idListString = $this->gfObj->create_list($idListString, $id, ", "); + } + $sql .= "(". $idListString .")"; + + //run it. + try { + $objectNames = $this->dbTableHandler->dbObj->run_query($sql, 'object_id', 'object_name'); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": error while retrieving object names, DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .": invalid data type (". gettype($idList) .") or empty array"); + } + return($objectNames); + }//end get_object_names() + //============================================================================ + } ?> Modified: trunk/0.4/cs_genericPermission.class.php =================================================================== --- trunk/0.4/cs_genericPermission.class.php 2011-01-27 15:04:24 UTC (rev 203) +++ trunk/0.4/cs_genericPermission.class.php 2011-02-01 03:29:22 UTC (rev 204) @@ -36,7 +36,7 @@ protected $pathCleaner=true; /** dbTableHandler{} object for easier SQL. */ - private $dbTableHandler; + protected $dbTableHandler; //============================================================================ /** @@ -65,7 +65,7 @@ } $cleanString = array( 'system_name' => 'integer', - 'object_path' => 'text', + 'object_path' => 'email_plus', 'user_id' => 'integer', 'group_id' => 'integer', 'inherit' => 'bool', @@ -167,46 +167,21 @@ //============================================================================ - /** - * Same as create_permission(). - */ - public function create_object($name, $userId, $groupId, $permString) { - return($this->create_permission($name, $userId, $groupId, $permString)); - }//end create_object() - //============================================================================ - - - - //============================================================================ /** * Creates a permission object record. */ public function create_permission($name, $userId, $groupId, $permString) { if(is_string($name) && strlen($name) && is_numeric($userId) && $userId >= 0 && is_numeric($groupId) && $groupId >= 0) { - $cleanStringArr = array( - 'object_path' => 'sql', - 'user_id' => 'numeric', - 'group_id' => 'numeric', - 'u_r' => 'bool', - 'u_w' => 'bool', - 'u_x' => 'bool', - 'g_r' => 'bool', - 'g_w' => 'bool', - 'g_x' => 'bool', - 'o_r' => 'bool', - 'o_w' => 'bool', - 'o_x' => 'bool' - ); try{ $insertArr = $this->parse_permission_string($permString); - $insertArr['object_path'] = $this->gfObj->cleanString($name, 'sql', 0); + $insertArr['object_path'] = $this->create_id_path($name); $insertArr['user_id'] = $userId; $insertArr['group_id'] = $groupId; $newId = $this->dbTableHandler->create_record($insertArr); } catch(Exception $e) { - throw new exception(__METHOD__ .":: failed to create new record, DETAILS::: ". $e->getMessage()); + throw new exception(__METHOD__ .":: failed to create new record, name=(". $name ."), permString=(". $permString .") DETAILS::: ". $e->getMessage()); } } else { @@ -225,7 +200,14 @@ */ public function get_permission($name) { try { + if(!$this->is_id_path($name)) { + $name = $this->create_id_path($name); + } $retval = $this->dbTableHandler->get_single_record(array('object_path'=>$name)); + + //now translate the object_path... + // TODO: this could be a resource hog if called in rapid succession; consider creating an object cache or whatnot + $retval['translated_path'] = $this->translate_id_path($retval['object_path']); } catch(Exception $e) { throw new exception(__METHOD__ .":: error while locating permission '". $name ."', DETAILS::: ". $e->getMessage()); @@ -265,6 +247,9 @@ * Check available permissions... */ public function check_permission($objectName, $userId) { + if(!$this->is_id_path($objectName)) { + $objectName = $this->create_id_path($objectName,false); + } $availablePerms = array( 'r' => false, 'w' => false, @@ -410,5 +395,38 @@ return($retval); }//end has_execute_permission() //============================================================================ + + + + //============================================================================ + public function explode_path($path) { + if(is_string($path) && strlen($path)) { + $path = preg_replace('/^'. addcslashes($this->objectDelimiter, '/') .'/', '', $path); + $path = preg_replace('/'. addcslashes($this->objectDelimiter, '/') .'{2,}/', $this->objectDelimiter, $path); + $bits = explode($this->objectDelimiter, $path); + } + else { + throw new exception(__METHOD__ .": invalid path (". $path .")"); + } + return($bits); + }//end explode_path() + //============================================================================ + + + + //============================================================================ + public function create_id_path($path) { + //Get the list of objects from the path. + $bits = $this->explode_path($path); + + //now create the path. + $newPath = $this->create_id_path_from_objects($bits); + if(!$this->is_id_path($newPath)) { + throw new exception(__METHOD__ .": failed to create ID path from (". $path .")"); + } + + return($newPath); + }//end create_id_path() + //============================================================================ } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-01-27 15:04:30
|
Revision: 203 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=203&view=rev Author: crazedsanity Date: 2011-01-27 15:04:24 +0000 (Thu, 27 Jan 2011) Log Message: ----------- Fix naming of cs_genericObject, cs_genericPermission now extends it. Modified Paths: -------------- trunk/0.4/cs_genericPermission.class.php Added Paths: ----------- trunk/0.4/abstract/cs_genericObject.abstract.class.php Removed Paths: ------------- trunk/0.4/abstract/cs_genericObject.class.php Copied: trunk/0.4/abstract/cs_genericObject.abstract.class.php (from rev 202, trunk/0.4/abstract/cs_genericObject.class.php) =================================================================== --- trunk/0.4/abstract/cs_genericObject.abstract.class.php (rev 0) +++ trunk/0.4/abstract/cs_genericObject.abstract.class.php 2011-01-27 15:04:24 UTC (rev 203) @@ -0,0 +1,92 @@ +<?php + +/* + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + */ + +abstract class cs_genericObjectAbstract extends cs_genericUserGroupAbstract { + + /** Table name used to store object records. */ + protected $oTable = "cswal_object_table"; + + /** Sequence for object table. */ + protected $oSeq = "cswal_object_table_object_id_seq"; + + /** dbTableHandler{} object for simplifying SQL. */ + private $dbTableHandler; + + //============================================================================ + public function __construct(cs_phpDB $db) { + parent::__construct($db); + $cleanString = array( + 'object_name' => 'text' + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->oTable, $this->oSeq, 'group_id', $cleanString); + }//end __construct() + //============================================================================ + + + + //============================================================================ + public function create_object($objectName) { + if(strlen($objectName)) { + $newId = $this->dbTableHandler->create_record(array('object_name', $objectName)); + } + else { + throw new exception(__METHOD__ .": invalid object name (". $objectName .")"); + } + return($newId); + }//end create_object() + //============================================================================ + + + + //============================================================================ + public function get_object_by_name($objectName) { + if(strlen($objectName)) { + try { + $retval = $this->dbTableHandler->get_single_record(array('object_name'=>$objectName)); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to object from name=(". $objectName ."), DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .":: invalid object name (". $objectName .")"); + } + return($retval); + }//end get_object_by_name() + //============================================================================ + + + + //============================================================================ + public function get_object_by_id($objectId) { + if(strlen($objectName)) { + try { + $retval = $this->dbTableHandler->get_record_by_id($objectId); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to object for ID=(". $objectId ."), DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .":: invalid object ID (". $objectId .")"); + } + return($retval); + }//end get_object_by_id() + //============================================================================ + + + + //============================================================================ + //============================================================================ + +} +?> Deleted: trunk/0.4/abstract/cs_genericObject.class.php =================================================================== --- trunk/0.4/abstract/cs_genericObject.class.php 2011-01-27 14:53:53 UTC (rev 202) +++ trunk/0.4/abstract/cs_genericObject.class.php 2011-01-27 15:04:24 UTC (rev 203) @@ -1,92 +0,0 @@ -<?php - -/* - * FILE INFORMATION: - * - * $HeadURL$ - * $Id$ - * $LastChangedDate$ - * $LastChangedBy$ - * $LastChangedRevision$ - */ - -abstract class cs_genericObject extends cs_genericUserGroupAbstract { - - /** Table name used to store object records. */ - protected $oTable = "cswal_object_table"; - - /** Sequence for object table. */ - protected $oSeq = "cswal_object_table_object_id_seq"; - - /** dbTableHandler{} object for simplifying SQL. */ - private $dbTableHandler; - - //============================================================================ - public function __construct(cs_phpDB $db) { - parent::__construct($db); - $cleanString = array( - 'object_name' => 'text' - ); - $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->oTable, $this->oSeq, 'group_id', $cleanString); - }//end __construct() - //============================================================================ - - - - //============================================================================ - public function create_object($objectName) { - if(strlen($objectName)) { - $newId = $this->dbTableHandler->create_record(array('object_name', $objectName)); - } - else { - throw new exception(__METHOD__ .": invalid object name (". $objectName .")"); - } - return($newId); - }//end create_object() - //============================================================================ - - - - //============================================================================ - public function get_object_by_name($objectName) { - if(strlen($objectName)) { - try { - $retval = $this->dbTableHandler->get_single_record(array('object_name'=>$objectName)); - } - catch(Exception $e) { - throw new exception(__METHOD__ .":: failed to object from name=(". $objectName ."), DETAILS::: ". $e->getMessage()); - } - } - else { - throw new exception(__METHOD__ .":: invalid object name (". $objectName .")"); - } - return($retval); - }//end get_object_by_name() - //============================================================================ - - - - //============================================================================ - public function get_object_by_id($objectId) { - if(strlen($objectName)) { - try { - $retval = $this->dbTableHandler->get_record_by_id($objectId); - } - catch(Exception $e) { - throw new exception(__METHOD__ .":: failed to object for ID=(". $objectId ."), DETAILS::: ". $e->getMessage()); - } - } - else { - throw new exception(__METHOD__ .":: invalid object ID (". $objectId .")"); - } - return($retval); - }//end get_object_by_id() - //============================================================================ - - - - //============================================================================ - //============================================================================ - -} -?> Modified: trunk/0.4/cs_genericPermission.class.php =================================================================== --- trunk/0.4/cs_genericPermission.class.php 2011-01-27 14:53:53 UTC (rev 202) +++ trunk/0.4/cs_genericPermission.class.php 2011-01-27 15:04:24 UTC (rev 203) @@ -11,7 +11,7 @@ * $LastChangedRevision$ */ -class cs_genericPermission extends cs_genericUserGroupAbstract { +class cs_genericPermission extends cs_genericObjectAbstract { /** Database object. */ public $db; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-01-27 14:53:59
|
Revision: 202 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=202&view=rev Author: crazedsanity Date: 2011-01-27 14:53:53 +0000 (Thu, 27 Jan 2011) Log Message: ----------- Class for handling generic objects (for the permissions system, but could be re-used). Added Paths: ----------- trunk/0.4/abstract/cs_genericObject.class.php Copied: trunk/0.4/abstract/cs_genericObject.class.php (from rev 195, trunk/0.4/abstract/cs_genericUserGroup.abstract.class.php) =================================================================== --- trunk/0.4/abstract/cs_genericObject.class.php (rev 0) +++ trunk/0.4/abstract/cs_genericObject.class.php 2011-01-27 14:53:53 UTC (rev 202) @@ -0,0 +1,92 @@ +<?php + +/* + * FILE INFORMATION: + * + * $HeadURL$ + * $Id$ + * $LastChangedDate$ + * $LastChangedBy$ + * $LastChangedRevision$ + */ + +abstract class cs_genericObject extends cs_genericUserGroupAbstract { + + /** Table name used to store object records. */ + protected $oTable = "cswal_object_table"; + + /** Sequence for object table. */ + protected $oSeq = "cswal_object_table_object_id_seq"; + + /** dbTableHandler{} object for simplifying SQL. */ + private $dbTableHandler; + + //============================================================================ + public function __construct(cs_phpDB $db) { + parent::__construct($db); + $cleanString = array( + 'object_name' => 'text' + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->oTable, $this->oSeq, 'group_id', $cleanString); + }//end __construct() + //============================================================================ + + + + //============================================================================ + public function create_object($objectName) { + if(strlen($objectName)) { + $newId = $this->dbTableHandler->create_record(array('object_name', $objectName)); + } + else { + throw new exception(__METHOD__ .": invalid object name (". $objectName .")"); + } + return($newId); + }//end create_object() + //============================================================================ + + + + //============================================================================ + public function get_object_by_name($objectName) { + if(strlen($objectName)) { + try { + $retval = $this->dbTableHandler->get_single_record(array('object_name'=>$objectName)); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to object from name=(". $objectName ."), DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .":: invalid object name (". $objectName .")"); + } + return($retval); + }//end get_object_by_name() + //============================================================================ + + + + //============================================================================ + public function get_object_by_id($objectId) { + if(strlen($objectName)) { + try { + $retval = $this->dbTableHandler->get_record_by_id($objectId); + } + catch(Exception $e) { + throw new exception(__METHOD__ .":: failed to object for ID=(". $objectId ."), DETAILS::: ". $e->getMessage()); + } + } + else { + throw new exception(__METHOD__ .":: invalid object ID (". $objectId .")"); + } + return($retval); + }//end get_object_by_id() + //============================================================================ + + + + //============================================================================ + //============================================================================ + +} +?> Property changes on: trunk/0.4/abstract/cs_genericObject.class.php ___________________________________________________________________ Added: svn:keywords + Id Author Revision HeadURL Date Added: svn:mergeinfo + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-01-27 06:18:16
|
Revision: 201 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=201&view=rev Author: crazedsanity Date: 2011-01-27 06:18:09 +0000 (Thu, 27 Jan 2011) Log Message: ----------- permissions to allow id-paths; use dbTableHandler to make SQL easier. /cs_genericPermission.class.php: * MAIN::: -- changed objTable to permTable, from const to protected -- changed objSeq to permSeq, from const to protected -- objectDelimiter [NEW]: character to separate objects in a path. -- pathCleaner [NEW]: how to clean the path -- dbTableHandler [NEW]: object to create & retrieve data from the db. * __construct(): -- ARG CHANGE: NEW ARG: #2 ($objectDelimiter=NULL) -- ARG CHANGE: NEW ARG: #3 ($useUrlCleaner=true) -- set internal vars for objectDelimiter and useUrlCleaner -- setup internal var for dbTableHandler * build_permission_string(): -- added comment to explain what might otherwise seem illogical -- more helpful information in the event of an exception * create_permission(): -- minor column name changes (object_name to object_path) -- use dbTableHandler::create_record() instead of arbitrary SQL. * get_object() [DELETED]: -- unnecessary alias method * get_permission(): -- use dbTableHandler::get_single_record() instead of arbitrary SQL. * get_object_by_id() [DELETED]: -- unnecessary alias method * get_permission_by_id(): -- use dbTableHandler::get_record_by_id() instead of arbitrary SQL. * get_permission_list(): -- remove some commented-out code. /abstract/cs_genericGroup.abstract.class.php: * MAIN::: -- changed groupTable from constant to protected -- changed groupSeq from constant to protected -- dbTableHandler [NEW]: object to create & retrieve data from db. * __construct(): -- setup the dbTableHandler object. * create_group(): -- use dbTableHandler::create_record() instead of arbitrary SQL. * get_group(): -- use dbTableHandler::get_single_record() instead of arbitrary SQL. * get_group_by_id(): -- use dbTableHandler::get_record_by_id() instead of arbitrary SQL. /abstract/cs_genericUserGroup.abstract.class.php: * MAIN::: -- changed ugTable from constant to protected -- changed ugSeq from constant to protected -- dbTableHandler [NEW]: for table interaction * __construct(): -- set dbTableHandler object * create_user_group(): -- use dbTableHandler::create_record() * get_user_groups(): -- use dbTableHandler::get_records() * is_group_member(): -- fixed to work properly /setup/genericPermissions.pgsql.sql: * cswal_object_table: -- updated comment -- remove "is_hidden" column, unnecessary (and confusing) * INSERT STATEMENTS::: -- updated to match new schema. /tests/testOfCSGenericPermissions.php: * test_userGroups(): -- updated tests * test_permissions(): -- removed calls to deleted methods Modified Paths: -------------- trunk/0.4/abstract/cs_genericGroup.abstract.class.php trunk/0.4/abstract/cs_genericUserGroup.abstract.class.php trunk/0.4/cs_genericPermission.class.php trunk/0.4/setup/genericPermissions.pgsql.sql trunk/0.4/tests/testOfCSGenericPermissions.php Modified: trunk/0.4/abstract/cs_genericGroup.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_genericGroup.abstract.class.php 2011-01-27 05:04:56 UTC (rev 200) +++ trunk/0.4/abstract/cs_genericGroup.abstract.class.php 2011-01-27 06:18:09 UTC (rev 201) @@ -20,15 +20,25 @@ public $gfObj; /** Table name used to store groups. */ - const groupTable = "cswal_group_table"; + protected $groupTable = "cswal_group_table"; /** Sequence for groups table. */ - const groupSeq = "cswal_group_table_group_id_seq"; + protected $groupSeq = "cswal_group_table_group_id_seq"; + /** Table handler object for simple SQL handling */ + private $dbTableHandler; + //============================================================================ public function __construct(cs_phpDB $db) { $this->db = $db; $this->gfObj = new cs_globalFunctions; + + //setup table handler. + $cleanString = array( + 'group_name' => 'text', + 'group_admin' => 'integer' + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->groupTable, $this->groupSeq, 'group_id', $cleanString); }//end __construct() //============================================================================ @@ -51,9 +61,7 @@ //============================================================================ public function create_group($name) { try{ - $name = $this->clean_group_name($name); - $sql = "INSERT INTO ". self::groupTable ." (group_name) VALUES ('". $name ."')"; - $newId = $this->db->run_insert($sql, self::groupSeq); + $newId = $this->dbTableHandler->create_record(array('group_name'=>$this->clean_group_name($name))); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to create new record, DETAILS::: ". $e->getMessage()); @@ -68,9 +76,7 @@ //============================================================================ public function get_group($name) { try { - $name = $this->clean_group_name($name); - $sql = "SELECT * FROM ". self::groupTable ." WHERE group_name='". $name ."'"; - $retval = $this->db->run_query($sql); + $retval = $this->dbTableHandler->get_single_record(array('group_name' => $this->clean_group_name($name))); } catch(Exception $e) { throw new exception(__METHOD__ .":: error while locating group '". $name ."', DETAILS::: ". $e->getMessage()); @@ -85,8 +91,7 @@ //============================================================================ public function get_all_groups() { try { - $sql = "SELECT * FROM ". self::groupTable ." ORDER BY group_name"; - $retval = $this->db->run_query($sql); + $retval = $this->dbTableHandler->get_records(); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to retrieve groups, DETAILS::: ". $e->getMessage()); @@ -102,8 +107,7 @@ public function get_group_by_id($groupId) { try { if(!is_null($groupId) && is_numeric($groupId)) { - $sql = "SELECT * FROM ". self::groupTable ." WHERE group_id='". $groupId ."'"; - $retval = $this->db->run_query($sql); + $retval = $this->dbTableHandler->get_record_by_id($groupId); } else { throw new exception(__METHOD__ .":: invalid group ID (". $groupId .")"); Modified: trunk/0.4/abstract/cs_genericUserGroup.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_genericUserGroup.abstract.class.php 2011-01-27 05:04:56 UTC (rev 200) +++ trunk/0.4/abstract/cs_genericUserGroup.abstract.class.php 2011-01-27 06:18:09 UTC (rev 201) @@ -1,8 +1,6 @@ <?php /* - * Created on June 18, 2010 - * * FILE INFORMATION: * * $HeadURL$ @@ -15,14 +13,22 @@ abstract class cs_genericUserGroupAbstract extends cs_genericGroupAbstract { /** Table name used to store user_group records. */ - const ugTable = "cswal_user_group_table"; + protected $ugTable = "cswal_user_group_table"; /** Sequence for user_group table. */ - const ugSeq = "cswal_user_group_table_user_group_id_seq"; + protected $ugSeq = "cswal_user_group_table_user_group_id_seq"; + /** dbTableHandler{} object for simplifying SQL. */ + private $dbTableHandler; + //============================================================================ public function __construct(cs_phpDB $db) { parent::__construct($db); + $cleanString = array( + 'user_id' => 'integer', + 'group_id' => 'integer' + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->ugTable, $this->ugSeq, 'user_group_id', $cleanString); }//end __construct() //============================================================================ @@ -32,8 +38,7 @@ public function create_user_group($userId, $groupId) { if(is_numeric($userId) && is_numeric($groupId) && $userId >= 0 && $groupId >= 0) { try { - $sql = "INSERT INTO ". self::ugTable ." (user_id, group_id) VALUES (". $userId .", ". $groupId .")"; - $newId = $this->db->run_insert($sql, self::ugSeq); + $newId = $this->dbTableHandler->create_record(array('user_id'=>$userId,'group_id'=>$groupId)); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to create user group, DETAILS::: ". $e->getMessage()); @@ -52,9 +57,7 @@ public function get_user_groups($userId) { if(is_numeric($userId) && $userId >= 0) { try { - $sql = "SELECT ug.*, g.group_name, g.group_admin FROM ". self::ugTable ." AS ug INNER " - ."JOIN ". parent::groupTable ." as g USING (group_id) WHERE user_id=". $userId; - $retval = $this->db->run_query($sql, 'group_id'); + $retval = $this->dbTableHandler->get_records(array('user_id'=>$userId)); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to locate groups for user_id=(". $userId ."), DETAILS::: ". $e->getMessage()); @@ -73,8 +76,11 @@ public function is_group_member($userId, $groupId) { $groupList = $this->get_user_groups($userId); $retval = false; - if(isset($groupList[$groupId])) { - $retval = true; + if(is_array($groupList)) { + $keys = array_keys($groupList); + if($groupList[$keys[0]]['group_id'] == $groupId) { + $retval = true; + } } return($retval); }//end is_group_member() Modified: trunk/0.4/cs_genericPermission.class.php =================================================================== --- trunk/0.4/cs_genericPermission.class.php 2011-01-27 05:04:56 UTC (rev 200) +++ trunk/0.4/cs_genericPermission.class.php 2011-01-27 06:18:09 UTC (rev 201) @@ -20,19 +20,29 @@ public $gfObj; /** Table name used to store permissions. */ - const objTable = "cswal_object_table"; + protected $permTable = "cswal_permission_table"; /** Sequence for permissions table. */ - const objSeq = "cswal_object_table_object_id_seq"; + protected $permSeq = "cswal_permission_table_permission_id_seq"; /** List of valid keys... */ protected $keys = array(); + /** Determine object path pieces based on this... */ + protected $objectDelimiter="/"; + + /** How to clean the path (if at all); boolean true = use cs_globalFunctions::clean_url(); boolean false will + cause it to not be cleaned at all; a string will use cs_globalFunctions::cleanString({string})*/ + protected $pathCleaner=true; + + /** dbTableHandler{} object for easier SQL. */ + private $dbTableHandler; + //============================================================================ /** * Generic permission system based on *nix filesystem permissions. */ - public function __construct(cs_phpDB $db) { + public function __construct(cs_phpDB $db, $objectDelimiter=NULL, $useUrlCleaner=true) { $this->db = $db; parent::__construct($db); $this->gfObj = new cs_globalFunctions; @@ -47,6 +57,29 @@ 7 => 'o_w', 8 => 'o_x' ); + if(!is_null($objectDelimiter) && is_string($objectDelimiter) && strlen($objectDelimiter)) { + $this->objectDelimiter=$objectDelimiter; + } + if(is_bool($useUrlCleaner) || (is_string($useUrlCleaner) && strlen($useUrlCleaner))) { + $this->pathCleaner = $useUrlCleaner; + } + $cleanString = array( + 'system_name' => 'integer', + 'object_path' => 'text', + 'user_id' => 'integer', + 'group_id' => 'integer', + 'inherit' => 'bool', + 'u_r' => 'bool', + 'u_w' => 'bool', + 'u_x' => 'bool', + 'g_r' => 'bool', + 'g_w' => 'bool', + 'g_x' => 'bool', + 'o_r' => 'bool', + 'o_w' => 'bool', + 'o_x' => 'bool', + ); + $this->dbTableHandler = new cs_dbTableHandler($this->db, $this->permTable, $this->permSeq, 'permission_id', $cleanString); }//end __construct() //============================================================================ @@ -98,6 +131,9 @@ */ protected function build_permission_string(array $perms) { $this->_sanityCheck(); + + //NOTE:: the incoming $perms must have more (or equal) items vs. $this->keys so that it can accept arrays with extra + // items, but can disregard those that obviously do not have enough. if(is_array($perms) && count($perms) >= count($this->keys)) { $retval = ""; foreach($this->keys as $dbColName) { @@ -118,7 +154,11 @@ } } else { - throw new exception(__METHOD__ .":: invalid permission set."); + $extraInfo=""; + if(!is_array($perms)) { + $extraInfo = " (expected array, received ". gettype($perms) ." '". $perms ."')"; + } + throw new exception(__METHOD__ .":: invalid permission set". $extraInfo); } return($retval); }//end build_permission_string(); @@ -144,7 +184,7 @@ public function create_permission($name, $userId, $groupId, $permString) { if(is_string($name) && strlen($name) && is_numeric($userId) && $userId >= 0 && is_numeric($groupId) && $groupId >= 0) { $cleanStringArr = array( - 'object_name' => 'sql', + 'object_path' => 'sql', 'user_id' => 'numeric', 'group_id' => 'numeric', 'u_r' => 'bool', @@ -159,13 +199,11 @@ ); try{ $insertArr = $this->parse_permission_string($permString); - $insertArr['object_name'] = $this->gfObj->cleanString($name, 'sql', 0); + $insertArr['object_path'] = $this->gfObj->cleanString($name, 'sql', 0); $insertArr['user_id'] = $userId; $insertArr['group_id'] = $groupId; - $insertSql = $this->gfObj->string_from_array($insertArr, 'insert', null, $cleanStringArr); - $sql = "INSERT INTO ". self::objTable ." ". $insertSql; - $newId = $this->db->run_insert($sql, self::objSeq); + $newId = $this->dbTableHandler->create_record($insertArr); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to create new record, DETAILS::: ". $e->getMessage()); @@ -183,24 +221,11 @@ //============================================================================ /** - * Same as get_permission(). - */ - public function get_object($name) { - return($this->get_permission($name)); - }//end get_object() - //============================================================================ - - - - //============================================================================ - /** * Retrieves a permission object by name from the database, exception on failure. */ public function get_permission($name) { try { - $name = $this->gfObj->cleanString($name, 'sql', 0); - $sql = "SELECT * FROM ". self::objTable ." WHERE object_name='". $name ."'"; - $retval = $this->db->run_query($sql); + $retval = $this->dbTableHandler->get_single_record(array('object_path'=>$name)); } catch(Exception $e) { throw new exception(__METHOD__ .":: error while locating permission '". $name ."', DETAILS::: ". $e->getMessage()); @@ -214,24 +239,12 @@ //============================================================================ /** - * Same as get_permission_by_id(). - */ - public function get_object_by_id($objectId) { - return($this->get_permission_by_id($objectId)); - }//end get_object_by_id() - //============================================================================ - - - - //============================================================================ - /** * Retrieves a permission object from the database based on an ID. */ public function get_permission_by_id($permId) { try { if(!is_null($permId) && is_numeric($permId)) { - $sql = "SELECT * FROM ". self::objTable ." WHERE object_id='". $permId ."'"; - $retval = $this->db->run_query($sql); + $retval = $this->dbTableHandler->get_record_by_id($permId); } else { throw new exception(__METHOD__ .":: invalid permission ID (". $permId .")"); @@ -298,7 +311,6 @@ if(preg_match('/'. $type .'_[rwx]$/',$myKey)) { //chop the last character off (i.e. 'r' from 'u_r') $myPermChar = substr($myKey, -1); - #$retval[$myPermChar] = $this->gfObj->interpret_bool($permData[$myKey], array('f', 't')); $retval[$myPermChar] = $this->evaluate_perm_value($permData[$myKey], $type); } } Modified: trunk/0.4/setup/genericPermissions.pgsql.sql =================================================================== --- trunk/0.4/setup/genericPermissions.pgsql.sql 2011-01-27 05:04:56 UTC (rev 200) +++ trunk/0.4/setup/genericPermissions.pgsql.sql 2011-01-27 06:18:09 UTC (rev 201) @@ -40,13 +40,11 @@ -- -- Object table -- Unique set of names which should be chained together to create an object path; for a URL of "/member/blog/edit", the pieces would be created --- with ID's, such as "member"=1, "blog"=2, "edit"=3; the object path would then be ":1::2::3:"; an extra prefix element might be created to --- define a default, inheritable set of permissions, such as "{root}"=10; the path might then be ":10::1::2::3:". +-- with ID's, such as "member"=1, "blog"=2, "edit"=3; the object path would then be ":1::2::3:". -- CREATE TABLE cswal_object_table ( object_id integer NOT NULL PRIMARY KEY, object_name text NOT NULL UNIQUE, - is_hidden boolean NOT NULL DEFAULT FALSE, created TIMESTAMPTZ NOT NULL DEFAULT NOW() ); @@ -84,8 +82,8 @@ INSERT INTO cswal_group_table (group_name) VALUES ('blogs'); INSERT INTO cswal_group_table (group_name) VALUES ('admin'); -INSERT INTO cswal_object_table (object_id, object_name,is_hidden) VALUES (0, '/', true); -INSERT INTO cswal_object_table (object_id, object_name,is_hidden) VALUES (1, 'member', false); +INSERT INTO cswal_object_table (object_id, object_name) VALUES (0, '{APPURL}'); +INSERT INTO cswal_object_table (object_id, object_name) VALUES (1, 'member'); INSERT INTO cswal_permission_table (object_path,user_id, group_id) Modified: trunk/0.4/tests/testOfCSGenericPermissions.php =================================================================== --- trunk/0.4/tests/testOfCSGenericPermissions.php 2011-01-27 05:04:56 UTC (rev 200) +++ trunk/0.4/tests/testOfCSGenericPermissions.php 2011-01-27 06:18:09 UTC (rev 201) @@ -89,9 +89,9 @@ $groupList = $this->permObj->get_all_groups(); - foreach($groupList as $groupData) { - $this->assertEqual($this->permObj->get_group_by_id($groupData['group_id']), $groupData); - $this->assertEqual($this->permObj->get_group($groupData['group_name']), $groupData); + foreach($groupList as $groupId=>$groupData) { + $this->assertEqual($this->permObj->get_group_by_id($groupId), $groupData, "failed to get group (". $groupData['group_name'] .") by ID (". $groupId .")"); + $this->assertEqual($this->permObj->get_group($groupData['group_name']), $groupData, "failed to get group (". $groupData['group_name'] .") by name"); } } @@ -100,8 +100,7 @@ $newId = $this->permObj->create_user_group($this->validUsers[$myKey]['uid'],$newGroupId); $this->assertTrue(is_numeric($newId)); $this->assertTrue($this->permObj->is_group_member($this->validUsers[$myKey]['uid'],$newGroupId), "user (". - $this->validUsers[$myKey]['uid'] .") isn't member of group (". $newGroupId .") after ". - "being added to it... "); + $this->validUsers[$myKey]['uid'] .") isn't member of group (". $newGroupId .") after being added to it... "); $ugList = $this->permObj->get_user_groups($this->validUsers[$myKey]['uid']); $this->assertTrue(is_array($ugList)); @@ -175,9 +174,7 @@ //the method 'build_permissions_string()' should disregard extra indices in the array & build the string. $this->assertEqual($this->permObj->make_perm_string($this->permObj->get_permission_by_id($permId)), $usePermString); - $this->assertEqual($this->permObj->make_perm_string($this->permObj->get_object_by_id($permId)), $usePermString); $this->assertEqual($this->permObj->make_perm_string($this->permObj->get_permission($usePermName)), $usePermString); - $this->assertEqual($this->permObj->make_perm_string($this->permObj->get_object($usePermName)), $usePermString); //check to make sure individual permission requests work as expected. $this->assertTrue($this->permObj->has_read_permission($myUid, $usePermName)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-01-27 05:05:02
|
Revision: 200 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=200&view=rev Author: crazedsanity Date: 2011-01-27 05:04:56 +0000 (Thu, 27 Jan 2011) Log Message: ----------- Minor logic fixes, new method to match method from cs_phpDB. /abstract/cs_singleTableHandler.abstract.class.php: * get_record_by_id(): -- return just the sub-array (field=>value) * get_single_record(): -- return just the sub-array (field=>value) * update_record(): -- remove commented-out debug stuff. * get_last_query() [NEW]: -- return value from cs_phpDB::get_last_query(). Modified Paths: -------------- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php Modified: trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php =================================================================== --- trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-01-27 04:04:11 UTC (rev 199) +++ trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php 2011-01-27 05:04:56 UTC (rev 200) @@ -114,6 +114,12 @@ if(is_numeric($recId)) { try { $data = $this->get_records(array($this->pkeyField => $recId)); + if(isset($data[$recId])) { + $data = $data[$recId]; + } + else { + throw new exception(__METHOD__ .": returned data did not contain ID (". $recId .")"); + } } catch(Exception $e) { throw new exception(__METHOD__ .":: error while retrieving record (". $recId ."), DETAILS::: ". $e->getMessage()); @@ -142,8 +148,14 @@ try { $data = $this->get_records($filter, null, 1); - $keys = array_keys($data); - $retval = $data[$keys[0]]; + if(is_array($data)) { + $keys = array_keys($data); + $retval = $data[$keys[0]]; + } + else { + //technically, the call to get_records() got boolean(false) from cs_phpDB::run_query(), so we could just return $data directly... + $retval = false; + } } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to retrieve record, DETAILS::: ". $e->getMessage()); @@ -233,7 +245,6 @@ .' WHERE '. $this->pkeyField .'='. $recId; try { $retval = $this->dbObj->run_update($sql, true); -#$this->gfObj->debug_print(__METHOD__ .":: retval=(". $retval ."), SQL::: ". $sql ,1); } catch(Exception $e) { throw new exception(__METHOD__ .":: failed to update record (". $recId ."), DETAILS::: ". $e->getMessage()); @@ -269,6 +280,14 @@ return($result); }//end delete_record() //------------------------------------------------------------------------- + + + + //------------------------------------------------------------------------- + public function get_last_query() { + return($this->dbObj->get_last_query()); + }//end get_last_query(); + //------------------------------------------------------------------------- } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-01-27 04:04:17
|
Revision: 199 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=199&view=rev Author: crazedsanity Date: 2011-01-27 04:04:11 +0000 (Thu, 27 Jan 2011) Log Message: ----------- New class for handling insert/delete/select statements for a single table. /cs_dbTableHandler.class.php [NEW]: * class that simply extends cs_singleTableHandlerAbstract{}, for the simple purpose of being able to create a sub-object for this handler instead of extending it directly. Added Paths: ----------- trunk/0.4/cs_dbTableHandler.class.php Copied: trunk/0.4/cs_dbTableHandler.class.php (from rev 195, trunk/0.4/abstract/cs_singleTableHandler.abstract.class.php) =================================================================== --- trunk/0.4/cs_dbTableHandler.class.php (rev 0) +++ trunk/0.4/cs_dbTableHandler.class.php 2011-01-27 04:04:11 UTC (rev 199) @@ -0,0 +1,35 @@ +<?php +/* + * SVN INFORMATION::: + * ------------------- + * Last Author::::::::: $Author$ + * Current Revision:::: $Revision$ + * Repository Location: $HeadURL$ + * Last Updated:::::::: $Date$ + */ + +class cs_dbTableHandler extends cs_singleTableHandlerAbstract { + + + //------------------------------------------------------------------------- + /** + * Generic way of using a class to define how to update a single database table. + * + * @param $dbObj (object) Connected instance of cs_phpDB{}. + * @param $tableName (str) Name of table inserting/updating. + * @param $seqName (str) Name of sequence, used with PostgreSQL for retrieving the last inserted ID. + * @param $pkeyField (str) Name of the primary key field, for performing updates & retrieving specific records. + * @param $cleanStringArr (array) Array of {fieldName}=>{dataType} for allowing updates & creating records. + */ + public function __construct(cs_phpDB $dbObj, $tableName, $seqName, $pkeyField, array $cleanStringArr) { + try { + parent::__construct($dbObj, $tableName, $seqName, $pkeyField, $cleanStringArr); + } + catch(Exception $e) { + throw new exception(__METHOD__ .": unable to start, DETAILS::: ". $e->getMessage()); + } + }//end __construct() + //------------------------------------------------------------------------- + +} + Property changes on: trunk/0.4/cs_dbTableHandler.class.php ___________________________________________________________________ Added: svn:keywords + Id Author Revision HeadURL Date Added: svn:mergeinfo + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cra...@us...> - 2011-01-27 03:55:16
|
Revision: 198 http://cs-webapplibs.svn.sourceforge.net/cs-webapplibs/?rev=198&view=rev Author: crazedsanity Date: 2011-01-27 03:55:10 +0000 (Thu, 27 Jan 2011) Log Message: ----------- Return the last SQL statement/query. /cs_phpDB.class.php: * get_last_query(): -- returns the last SQL statement from dbLayerObj (lastQuery var) /db_types/cs_phpDB__mysql.class.php: * MAIN::: -- lastQuery changed to public from protected /db_types/cs_phpDB__pgsql.class.php: * MAIN::: -- lastQuery changed to public from protected /db_types/cs_phpDB__sqlite.class.php: * MAIN::: -- lastQuery changed to public from protected Modified Paths: -------------- trunk/0.4/cs_phpDB.class.php trunk/0.4/db_types/cs_phpDB__mysql.class.php trunk/0.4/db_types/cs_phpDB__pgsql.class.php trunk/0.4/db_types/cs_phpDB__sqlite.class.php Modified: trunk/0.4/cs_phpDB.class.php =================================================================== --- trunk/0.4/cs_phpDB.class.php 2011-01-26 18:09:30 UTC (rev 197) +++ trunk/0.4/cs_phpDB.class.php 2011-01-27 03:55:10 UTC (rev 198) @@ -252,6 +252,14 @@ return($this->dbLayerObj->is_connected()); }//end is_connected() //========================================================================= + + + + //========================================================================= + public function get_last_query() { + return($this->dbLayerObj->lastQuery); + }//end get_last_query() + //========================================================================= } // end class phpDB ?> Modified: trunk/0.4/db_types/cs_phpDB__mysql.class.php =================================================================== --- trunk/0.4/db_types/cs_phpDB__mysql.class.php 2011-01-26 18:09:30 UTC (rev 197) +++ trunk/0.4/db_types/cs_phpDB__mysql.class.php 2011-01-27 03:55:10 UTC (rev 198) @@ -26,7 +26,7 @@ protected $inTrans = FALSE; /** Holds the last query performed. */ - protected $lastQuery = NULL; + public $lastQuery = NULL; /** List of queries that have been run */ protected $queryList=array(); Modified: trunk/0.4/db_types/cs_phpDB__pgsql.class.php =================================================================== --- trunk/0.4/db_types/cs_phpDB__pgsql.class.php 2011-01-26 18:09:30 UTC (rev 197) +++ trunk/0.4/db_types/cs_phpDB__pgsql.class.php 2011-01-27 03:55:10 UTC (rev 198) @@ -44,7 +44,7 @@ protected $inTrans = FALSE; /** Holds the last query performed. */ - protected $lastQuery = NULL; + public $lastQuery = NULL; /** List of queries that have been run */ protected $queryList=array(); Modified: trunk/0.4/db_types/cs_phpDB__sqlite.class.php =================================================================== --- trunk/0.4/db_types/cs_phpDB__sqlite.class.php 2011-01-26 18:09:30 UTC (rev 197) +++ trunk/0.4/db_types/cs_phpDB__sqlite.class.php 2011-01-27 03:55:10 UTC (rev 198) @@ -26,7 +26,7 @@ protected $inTrans = FALSE; /** Holds the last query performed. */ - protected $lastQuery = NULL; + public $lastQuery = NULL; /** List of queries that have been run */ protected $queryList=array(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |