inc/classes/exceptions/container/class_ContainerMaybeDamagedException.php -text
inc/classes/exceptions/controller/.htaccess -text
inc/classes/exceptions/controller/class_DefaultControllerException.php -text
+inc/classes/exceptions/criteria/.htaccess -text
+inc/classes/exceptions/criteria/class_FrameworkException.php -text
inc/classes/exceptions/database/.htaccess -text
inc/classes/exceptions/database/local_file/.htaccess -text
inc/classes/exceptions/database/local_file/class_SavePathIsEmptyException.php -text
inc/classes/exceptions/database/local_file/class_SavePathIsNoDirectoryException.php -text
inc/classes/exceptions/database/local_file/class_SavePathReadProtectedException.php -text
inc/classes/exceptions/database/local_file/class_SavePathWriteProtectedException.php -text
+inc/classes/exceptions/database/wrapper/.htaccess -text
+inc/classes/exceptions/database/wrapper/class_WrapperUserNameNotFoundException.php -text
inc/classes/exceptions/helper/.htaccess -text
inc/classes/exceptions/helper/class_FormClosedException.php -text
inc/classes/exceptions/helper/class_FormGroupClosedException.php -text
inc/classes/interfaces/.htaccess -text
inc/classes/interfaces/application/.htaccess -text
inc/classes/interfaces/application/class_ManageableApplication.php -text
+inc/classes/interfaces/cache/.htaccess -text
+inc/classes/interfaces/cache/class_Cacheable.php -text
inc/classes/interfaces/class_ -text
inc/classes/interfaces/class_FrameworkInterface.php -text
inc/classes/interfaces/commands/.htaccess -text
inc/classes/interfaces/compressor/class_Compressor.php -text
inc/classes/interfaces/controller/.htaccess -text
inc/classes/interfaces/controller/class_Controller.php -text
+inc/classes/interfaces/criteria/.htaccess -text
+inc/classes/interfaces/criteria/class_Criteria.php -text
+inc/classes/interfaces/criteria/extended/.htaccess -text
+inc/classes/interfaces/criteria/extended/class_LocalCriteria.php -text
inc/classes/interfaces/database/.htaccess -text
inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php -text
inc/classes/interfaces/database/frontend/.htaccess -text
inc/classes/interfaces/user/.htaccess -text
inc/classes/interfaces/user/class_ManageableUser.php -text
inc/classes/main/.htaccess -text
+inc/classes/main/cache/.htaccess -text
+inc/classes/main/cache/class_MemoryCache.php -text
inc/classes/main/class_ -text
inc/classes/main/class_BaseFrameworkSystem.php -text
inc/classes/main/class_FrameworkArrayObject.php -text
inc/classes/main/controller/form/class_WebDoFormController.php -text
inc/classes/main/controller/registration/.htaccess -text
inc/classes/main/controller/registration/class_DefaultRegistrationController.php -text
+inc/classes/main/criteria/.htaccess -text
+inc/classes/main/criteria/class_SearchCriteria.php -text
inc/classes/main/database/.htaccess -text
+inc/classes/main/database/class_ -text
inc/classes/main/database/class_BaseDatabaseFrontend.php -text
+inc/classes/main/database/class_BaseDatabaseWrapper.php -text
inc/classes/main/database/classes/.htaccess -text
inc/classes/main/database/classes/class_LocalFileDatabase.php -text
+inc/classes/main/database/databases/.htaccess -text
+inc/classes/main/database/databases/class_LocalFileDatabase.php -text
+inc/classes/main/database/wrapper/.htaccess -text
+inc/classes/main/database/wrapper/class_UserDatabaseWrapper.php -text
inc/classes/main/debug/.htaccess -text
inc/classes/main/debug/class_DebugConsoleOutput.php -text
inc/classes/main/debug/class_DebugErrorLogOutput.php -text
inc/classes/main/extended/class_ObjectLimits.php -text
inc/classes/main/extended/class_SerializationContainer.php -text
inc/classes/main/factories/.htaccess -text
+inc/classes/main/factories/cache/.htaccess -text
+inc/classes/main/factories/cache/class_CacheFactory.php -text
inc/classes/main/factories/class_BaseFactory.php -text
inc/classes/main/factories/objects/.htaccess -text
inc/classes/main/factories/objects/class_ObjectFactory.php -text
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * An exception thrown when a criteria was not supported
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class UnsupportedCriteriaException extends FrameworkException {
+ /**
+ * The super constructor for all exceptions
+ *
+ * @param $classArray The non-optional message for the exception
+ * @param $code An optional code for better debugging
+ * @return void
+ */
+ public function __construct (array $classArray, $code = 0) {
+ // Construct the message
+ $message = sprintf("[%s:%d] Unsupported criteria <u>%s</u> detected.",
+ $classArray[0]->__toString(),
+ $this->getLine(),
+ $classArray[1]->__toString()
+ );
+
+ // make sure everything is assigned properly
+ parent::__construct($message, $code);
+ }
+}
+
+// [EOF]
+?>
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * An exception thrown when the database wrapper has not found the username
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class WrapperUserNameNotFoundException extends FrameworkException {
+ /**
+ * The constructor
+ *
+ * @param $msgArray Message from the exception
+ * @param $code Code number for the exception
+ * @return void
+ */
+ public function __construct (array $msgArray, $code) {
+ // Add a message around the missing class
+ $message = sprintf("[%s:%d] Username <u>%s</u> was not found. Requesting class: <u>%s</u>",
+ $msgArray[0]->__toString(),
+ $this->getLine(),
+ $msgArray[1]->getUserName(),
+ $msgArray[1]->__toString()
+ );
+
+ // Call parent constructor
+ parent::__construct($message, $code);
+ }
+}
+
+// [EOF]
+?>
/**
* The constructor
*
- * @param $message Message from the exception
+ * @param $msgArray Message from the exception
* @param $code Code number for the exception
* @return void
*/
- public function __construct (BaseFrameworkSystem $class, $code) {
+ public function __construct (array $msgArray, $code) {
// Add a message around the missing class
- $message = sprintf("Die interne Script-Klasse <u>%s</u> konnte nicht gefunden werden!", $class);
+ $message = sprintf("[%s:%d] Internal class <u>%s</u> not found.",
+ $msgArray[0]->__toString(),
+ $this->getLine(),
+ $msgArray[1]
+ );
// Call parent constructor
parent::__construct($message, $code);
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * An interface for classes which are "able" to cache
+ *
+ * @author Roland Haeder <webmaster@mxchange.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+interface Cacheable extends FrameworkInterface {
+ /**
+ * Does the specified offset exist in cache?
+ *
+ * @param $offset The offsrt we are looking for
+ * @return $exists Wether the offset exists
+ */
+ function offsetExists ($offset);
+}
+
+// [EOF]
+?>
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * An interface for criterias
+ *
+ * @author Roland Haeder <webmaster@mxchange.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+interface Criteria extends FrameworkInterface {
+ /**
+ * Add extra criteria
+ *
+ * @param $criteriaKey Criteria key
+ * @param $criteriaValue Criteria value
+ * @return void
+ */
+ function addCriteria ($criteriaKey, $criteriaValue);
+}
+
+//
+?>
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * An interface for local criterias
+ *
+ * @author Roland Haeder <webmaster@mxchange.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+interface LocalCriteria extends Criteria {
+}
+
+//
+?>
* ObjectContainer
*/
function loadObject ();
+
+ /**
+ * Makes sure that the database connection is alive
+ *
+ * @return void
+ */
+ function connectToDatabase ();
+
+ /**
+ * Starts a SELECT query on the database by given return type, table name
+ * and search criteria
+ *
+ * @param $resultType Result type ("array", "object" and "indexed" are valid)
+ * @param $tableName Name of the database table
+ * @param $criteria Search criteria class
+ * @return $resultData Result data of the query
+ */
+ function querySelect ($resultType, $tableName, Criteria $criteriaInstance);
}
// [EOF]
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * A simple memory cache (similar to a registry)
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.3.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.mxchange.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class MemoryCache extends BaseFrameworkSystem implements Cacheable {
+ /**
+ * The "memory cache" is simply a wrapped object array
+ */
+ private $dataCache = null;
+
+ /**
+ * Private constructor
+ *
+ * @return void
+ */
+ protected function __construct () {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+
+ // Set part description
+ $this->setObjectDescription("Memory cache");
+
+ // Create unique ID number
+ $this->createUniqueID();
+
+ // Clean up a little
+ $this->removeNumberFormaters();
+ $this->removeSystemArray();
+ }
+
+ /**
+ * Creates an instance of this class
+ *
+ * @return $cacheInstance An instance of this cache class
+ */
+ public final static function createMemoryCache () {
+ // Get a new instance
+ $cacheInstance = new MemoryCache();
+
+ // Initialize the cache
+ $cacheInstance->initCache();
+
+ // Return the prepared instance
+ return $cacheInstance;
+ }
+
+ /**
+ * Initialize this cache by creating an object array
+ *
+ * @return void
+ */
+ protected function initCache () {
+ // Now create the "data cache"
+ $this->dataCache = new FrameworkArrayObject();
+ }
+
+ /**
+ * Does the specified offset exist in cache?
+ *
+ * @param $offset The offset we are looking for
+ * @return $exists Wether the offset exists
+ */
+ public final function offsetExists ($offset) {
+ $exists = $this->dataCache->offsetExists($offset);
+ return $exists;
+ }
+
+ /**
+ * Setter for cache offset
+ *
+ * @param $offset The offset we shall set
+ * @param $data Data to store in the cache
+ * @return void
+ */
+ public final function offsetSet ($offset, $data) {
+ $this->dataCache->offsetSet($offset, $data);
+ }
+
+ /**
+ * Getter for cache offset or "null" if not found
+ *
+ * @param $offset The offset we shall set
+ * @return $data Data to store in the cache
+ */
+ public final function offsetget ($offset) {
+ // Default is offset not found
+ $data = null;
+
+ // Is the offset there?
+ if ($this->offsetExists($offset)) {
+ // Then get the data from it
+ $data = $this->dataCache->offsetGet($offset);
+ }
+
+ // Return data
+ return $data;
+ }
+}
+
+// [EOF]
+?>
*
* @return void
*/
- private function __construct () {
+ protected function __construct () {
// Call parent constructor
- parent::constructor(__CLASS__);
+ parent::__construct(__CLASS__);
// Set part description
$this->setObjectDescription("");
const EXCEPTION_HEADERS_ALREADY_SENT = 0x033;
const EXCEPTION_DEFAUL_CONTROLLER_GONE = 0x034;
const EXCEPTION_CLASS_NOT_FOUND = 0x035;
+ const EXCEPTION_REQUIRED_INTERFACE_MISSING = 0x036;
/**
* In the super constructor these system classes shall be ignored or else
} elseif (is_float($arg)) {
// Floating point
$argsString .= $arg."(float)";
- } elseif ($arg instanceof BaseFramework) {
+ } elseif ($arg instanceof BaseFrameworkSystem) {
// Own object instance
$argsString .= $arg->__toString()."(Object)";
} elseif (is_object($arg)) {
$this->removeSystemArray();
// Initialize both filter chains
- $this->preFilterChain = FilterChain::createFilterChain();
- $this->postFilterChain = FilterChain::createFilterChain();
+ $this->preFilterChain = ObjectFactory::createObjectByConfiguredName('filter_chain');
+ $this->postFilterChain = ObjectFactory::createObjectByConfiguredName('filter_chain');
}
/**
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * Search criteria for e.g. searching in databases. Do not use this class if
+ * you are looking for a ship or company, or what ever. Instead use this class
+ * for looking in storages like the database.
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.3.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.mxchange.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class SearchCriteria extends BaseFrameworkSystem implements LocalCriteria {
+ /**
+ * Criteria to handle
+ */
+ private $searchCriteria = array();
+
+ /**
+ * Limitation for the search
+ */
+ private $limit = 0;
+
+ /**
+ * Skip these entries before using them
+ */
+ private $skip = 0;
+
+ /**
+ * Private constructor
+ *
+ * @return void
+ */
+ protected function __construct () {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+
+ // Set part description
+ $this->setObjectDescription("Search criteria class");
+
+ // Create unique ID number
+ $this->createUniqueID();
+
+ // Clean up a little
+ $this->removeNumberFormaters();
+ $this->removeSystemArray();
+ }
+
+ /**
+ * Create an instance of this class
+ *
+ * @return $criteriaInstance An instance of this criteria
+ */
+ public final static function createSearchCriteria () {
+ // Get a new instance
+ $criteriaInstance = new SearchCriteria();
+
+ // Return this instance
+ return $criteriaInstance;
+ }
+
+ /**
+ * Add extra criteria
+ *
+ * @param $criteriaKey Criteria key
+ * @param $criteriaValue Criteria value
+ * @return void
+ */
+ public function addCriteria ($criteriaKey, $criteriaValue) {
+ $this->searchCriteria[$criteriaKey] = $criteriaValue;
+ }
+
+ /**
+ * Setter for limit
+ *
+ * @param $limit Search limit
+ * @return void
+ */
+ public final function setLimit ($limit) {
+ $this->limit = $limit;
+ }
+
+ /**
+ * Setter for skip
+ *
+ * @param $skip Search skip
+ * @return void
+ */
+ public final function setSkip ($skip) {
+ $this->skip = $skip;
+ }
+
+ /**
+ * "Getter" for a cache key
+ *
+ * @return $cacheKey The key suitable for the cache system
+ */
+ public function getCacheKey () {
+ // Initialize the key
+ $cacheKey = "";
+
+ // Now walk through all criterias
+ foreach ($this->searchCriteria as $criteriaKey => $criteriaValue) {
+ // Add the value URL encoded to avoid any trouble with special characters
+ $cacheKey .= sprintf("%s=%s;",
+ $criteriaKey,
+ urlencode($criteriaValue)
+ );
+ }
+
+ // Add limit and skip values
+ $cacheKey .= sprintf("%%limit%%=%s;%%skip%%=%s",
+ $this->limit,
+ $this->skip
+ );
+
+ // Return the cache key
+ return $cacheKey;
+ }
+}
+
+// [EOF]
+?>
--- /dev/null
+<?php
+/**
+ *
+ *
+ * @see DatabaseFrontendInterface - An interface for database frontends (front-end to the application)
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class extends BaseDatabaseFrontend {
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
+ protected function __construct($class) {
+ // Call parent constructor
+ parent::constructor(__CLASS__);
+
+ // Set part description
+ $this->setObjectDescription("");
+
+ // Create unique ID number
+ $this->createUniqueID();
+
+ // Clean up a little
+ $this->removeNumberFormaters();
+ $this->removeSystemArray();
+ }
+}
+
+// [EOF]
+?>
--- /dev/null
+<?php
+/**
+ * A generic database wrapper
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class BaseDatabaseWrapper extends BaseFrameworkSystem {
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
+ protected function __construct($class) {
+ // Call parent constructor
+ parent::__construct($class);
+
+ // Clean up a little
+ $this->removeNumberFormaters();
+ $this->removeSystemArray();
+ }
+}
+
+// [EOF]
+?>
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * Database backend class for storing objects in locally created files.
+ *
+ * This class serializes objects and saves them to local files.
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontendInterface {
+ /**
+ * Save path for "file database"
+ */
+ private $savePath = "";
+
+ /**
+ * The file's extension
+ */
+ private $fileExtension = "serialized";
+
+ /**
+ * The last read file's name
+ */
+ private $lastFile = "";
+
+ /**
+ * The last read file's content including header information
+ */
+ private $lastContents = array();
+
+ /**
+ * Wether the "connection is already up
+ */
+ private $alreadyConnected = false;
+
+ /**
+ * The private constructor. Do never instance from outside!
+ * You need to set a local file path. The class will then validate it.
+ *
+ * @return void
+ */
+ protected function __construct() {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+
+ // Set description
+ $this->setObjectDescription("Class for local file databases");
+
+ // Create unique ID
+ $this->createUniqueID();
+
+ // Clean up a little
+ $this->removeSystemArray();
+ }
+
+ /**
+ * Create an object of LocalFileDatabase and set the save path for local files.
+ * This method also validates the given file path.
+ *
+ * @param $savePath The local file path string
+ * @param $ioInstance The input/output handler. This
+ * should be FileIoHandler
+ * @return $dbInstance An instance of LocalFileDatabase
+ */
+ public final static function createLocalFileDatabase ($savePath, FileIoHandler $ioInstance) {
+ // Get an instance
+ $dbInstance = new LocalFileDatabase();
+
+ // Set save path and IO instance
+ $dbInstance->setSavePath($savePath);
+ $dbInstance->setFileIoInstance($ioInstance);
+
+ // "Connect" to the database
+ $dbInstance->connectToDatabase();
+
+ // Return database instance
+ return $dbInstance;
+ }
+
+ /**
+ * Setter for save path
+ *
+ * @param $savePath The local save path where we shall put our serialized classes
+ * @return void
+ */
+ public final function setSavePath ($savePath) {
+ // Secure string
+ $savePath = (string) $savePath;
+
+ // Set save path
+ $this->savePath = $savePath;
+ }
+
+ /**
+ * Getter for save path
+ *
+ * @return $savePath The local save path where we shall put our serialized classes
+ */
+ public final function getSavePath () {
+ return $this->savePath;
+ }
+
+ /**
+ * Saves a given object to the local file system by serializing and
+ * transparently compressing it
+ *
+ * @param $object The object we shall save to the local file system
+ * @return void
+ * @throws NullPointerException If the object instance is null
+ * @throws NoObjectException If the parameter $object is not
+ * an object
+ */
+ public final function saveObject ($object) {
+ // Some tests on the parameter...
+ if (is_null($object)) {
+ // Is null, throw exception
+ throw new NullPointerException($object, self::EXCEPTION_IS_NULL_POINTER);
+ } elseif (!is_object($object)) {
+ // Is not an object, throw exception
+ throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT);
+ } elseif (!method_exists($object, '__toString')) {
+ // A highly required method was not found... :-(
+ throw new MissingMethodException(array($object, '__toString'), self::EXCEPTION_MISSING_METHOD);
+ }
+
+ // Get a string containing the serialized object. We cannot exchange
+ // $this and $object here because $object does not need to worry
+ // about it's limitations... ;-)
+ $serialized = $this->serializeObject($object);
+
+ // Get a path name plus file name and append the extension
+ $fqfn = $this->getSavePath() . $object->getPathFileNameFromObject() . "." . $this->getFileExtension();
+
+ // Save the file to disc we don't care here if the path is there,
+ // this must be done in later methods.
+ $this->getFileIoInstance()->saveFile($fqfn, array($this->getCompressorChannel()->getCompressorExtension(), $serialized));
+ }
+
+ /**
+ * Get a serialized string from the given object
+ *
+ * @param $object The object we want to serialize and transparently
+ * compress
+ * @return $serialized A string containing the serialzed/compressed object
+ * @see ObjectLimits An object holding limition information
+ * @see SerializationContainer A special container class for e.g.
+ * attributes from limited objects
+ */
+ private function serializeObject ($object) {
+ // If there is no limiter instance we serialize the whole object
+ // otherwise only in the limiter object (ObjectLimits) specified
+ // attributes summarized in a special container class
+ if ($this->getLimitInstance() === null) {
+ // Serialize the whole object. This tribble call is the reason
+ // why we need a fall-back implementation in CompressorChannel
+ // of the methods compressStream() and decompressStream().
+ $serialized = $this->getCompressorChannel()->getCompressor()->compressStream(serialize($object));
+ } else {
+ // Serialize only given attributes in a special container
+ $container = SerializationContainer::createSerializationContainer($this->getLimitInstance(), $object);
+
+ // Serialize the container
+ $serialized = $this->getCompressorChannel()->getCompressor()->compressStream(serialize($container));
+ }
+
+ // Return the serialized object string
+ return $serialized;
+ }
+
+ /**
+ * Analyses if a unique ID has already been used or not by search in the
+ * local database folder.
+ *
+ * @param $uniqueID A unique ID number which shall be checked
+ * before it will be used
+ * @param $inConstructor If we got called in a de/con-structor or
+ * from somewhere else
+ * @return $isUnused true = The unique ID was not found in the database,
+ * false = It is already in use by an other object
+ * @throws NoArrayCreatedException If explode() fails to create an array
+ * @throws InvalidArrayCountException If the array contains less or
+ * more than two elements
+ */
+ public function isUniqueIdUsed ($uniqueID, $inConstructor = false) {
+ // Currently not used... ;-)
+ $isUsed = false;
+
+ // Split the unique ID up in path and file name
+ $pathFile = explode("@", $uniqueID);
+
+ // Are there two elements? Index 0 is the path, 1 the file name + global extension
+ if (!is_array($pathFile)) {
+ // No array found
+ if ($inConstructor) {
+ return false;
+ } else {
+ throw new NoArrayCreatedException(array($this, "pathFile"), self::EXCEPTION_ARRAY_EXPECTED);
+ }
+ } elseif (count($pathFile) != 2) {
+ // Invalid ID returned!
+ if ($inConstructor) {
+ return false;
+ } else {
+ throw new InvalidArrayCountException(array($this, "pathFile", count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
+ }
+ }
+
+ // Create full path name
+ $pathName = $this->getSavePath() . $pathFile[0];
+
+ // Check if the file is there with a file handler
+ if ($inConstructor) {
+ // No exceptions in constructors and destructors!
+ $dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName, true);
+
+ // Has an object being created?
+ if (!is_object($dirInstance)) return false;
+ } else {
+ // Outside a constructor
+ try {
+ $dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName);
+ } catch (PathIsNoDirectoryException $e) {
+ // Okay, path not found
+ return false;
+ }
+ }
+
+ // Initialize the search loop
+ $isValid = false;
+ while ($dataFile = $dirInstance->readDirectoryExcept(array(".", ".."))) {
+ // Generate FQFN for testing
+ $fqfn = sprintf("%s/%s", $pathName, $dataFile);
+ $this->setLastFile($fqfn);
+
+ // Get instance for file handler
+ $inputHandler = $this->getFileIoInstance();
+
+ // Try to read from it. This makes it sure that the file is
+ // readable and a valid database file
+ $this->setLastFileContents($inputHandler->loadFileContents($fqfn));
+
+ // Extract filename (= unique ID) from it
+ $ID = substr(basename($fqfn), 0, -(strlen($this->getFileExtension()) + 1));
+
+ // Is this the required unique ID?
+ if ($ID == $pathFile[1]) {
+ // Okay, already in use!
+ $isUsed = true;
+ }
+ }
+
+ // Close the directory handler
+ $dirInstance->closeDirectory();
+
+ // Now the same for the file...
+ return $isUsed;
+ }
+
+ /**
+ * Setter for the last read file
+ *
+ * @param $fqfn The FQFN of the last read file
+ * @return void
+ */
+ private final function setLastFile ($fqfn) {
+ // Cast string
+ $fqfn = (string) $fqfn;
+ $this->lastFile = $fqfn;
+ }
+
+ /**
+ * Getter for last read file
+ *
+ * @return $lastFile The last read file's name with full path
+ */
+ public final function getLastFile () {
+ return $this->lastFile;
+ }
+
+ /**
+ * Setter for contents of the last read file
+ *
+ * @param $contents An array with header and data elements
+ * @return void
+ */
+ private final function setLastFileContents ($contents) {
+ // Cast array
+ $contents = (array) $contents;
+ $this->lastContents = $contents;
+ }
+
+ /**
+ * Getter for last read file's content as an array
+ *
+ * @return $lastContent The array with elements 'header' and 'data'.
+ */
+ public final function getLastContents () {
+ return $this->lastContents;
+ }
+
+ /**
+ * Getter for file extension
+ *
+ * @return $fileExtension The array with elements 'header' and 'data'.
+ */
+ public final function getFileExtension () {
+ return $this->fileExtension;
+ }
+
+ /**
+ * Get cached (last fetched) data from the local file database
+ *
+ * @param $uniqueID The ID number for looking up the data
+ * @return $object The restored object from the maybe compressed
+ * serialized data
+ * @throws MismatchingCompressorsException If the compressor from
+ * the loaded file
+ * mismatches with the
+ * current used one.
+ * @throws NullPointerException If the restored object
+ * is null
+ * @throws NoObjectException If the restored "object"
+ * is not an object instance
+ * @throws MissingMethodException If the required method
+ * toString() is missing
+ */
+ public final function getObjectFromCachedData ($uniqueID) {
+ // Get instance for file handler
+ $inputHandler = $this->getFileIoInstance();
+
+ // Get last file's name and contents
+ $fqfn = $this->repairFQFN($this->getLastFile(), $uniqueID);
+ $contents = $this->repairContents($this->getLastContents(), $fqfn);
+
+ // Let's decompress it. First we need the instance
+ $compressInstance = $this->getCompressorChannel();
+
+ // Is the compressor's extension the same as the one from the data?
+ if ($compressInstance->getCompressorExtension() != $contents['header'][0]) {
+ /**
+ * @todo For now we abort here but later we need to make this a little more dynamic.
+ */
+ throw new MismatchingCompressorsException(array($this, $contents['header'][0], $fqfn, $compressInstance->getCompressorExtension()), self::EXCEPTION_MISMATCHING_COMPRESSORS);
+ }
+
+ // Decompress the data now
+ $serialized = $compressInstance->getCompressor()->decompressStream($contents['data']);
+
+ // And unserialize it...
+ $object = unserialize($serialized);
+
+ // This must become a valid object, so let's check it...
+ if (is_null($object)) {
+ // Is null, throw exception
+ throw new NullPointerException($object, self::EXCEPTION_IS_NULL_POINTER);
+ } elseif (!is_object($object)) {
+ // Is not an object, throw exception
+ throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT);
+ } elseif (!$object instanceof FrameworkInterface) {
+ // A highly required method was not found... :-(
+ throw new MissingMethodException(array($object, '__toString'), self::EXCEPTION_MISSING_METHOD);
+ }
+
+ // And return the object
+ return $object;
+ }
+
+ /**
+ * Private method for re-gathering (repairing) the FQFN
+ *
+ * @param $fqfn The current FQFN we shall validate
+ * @param $uniqueID The unique ID number
+ * @return $fqfn The repaired FQFN when it is empty
+ * @throws NoArrayCreatedException If explode() has not
+ * created an array
+ * @throws InvalidArrayCountException If the array count is not
+ * as the expected
+ */
+ private function repairFQFN ($fqfn, $uniqueID) {
+ // Cast both strings
+ $fqfn = (string) $fqfn;
+ $uniqueID = (string) $uniqueID;
+
+ // Is there pre-cached data available?
+ if (empty($fqfn)) {
+ // Split the unique ID up in path and file name
+ $pathFile = explode("@", $uniqueID);
+
+ // Are there two elements? Index 0 is the path, 1 the file name + global extension
+ if (!is_array($pathFile)) {
+ // No array found
+ throw new NoArrayCreatedException(array($this, "pathFile"), self::EXCEPTION_ARRAY_EXPECTED);
+ } elseif (count($pathFile) != 2) {
+ // Invalid ID returned!
+ throw new InvalidArrayCountException(array($this, "pathFile", count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
+ }
+
+ // Create full path name
+ $pathName = $this->getSavePath() . $pathFile[0];
+
+ // Nothing cached, so let's create a FQFN first
+ $fqfn = sprintf("%s/%s.%s", $pathName, $pathFile[1], $this->getFileExtension());
+ $this->setLastFile($fqfn);
+ }
+
+ // Return repaired FQFN
+ return $fqfn;
+ }
+
+ /**
+ * Private method for re-gathering the contents of a given file
+ *
+ * @param $contents The (maybe) already cached contents as an array
+ * @param $fqfn The current FQFN we shall validate
+ * @return $contents The repaired contents from the given file
+ */
+ private function repairContents ($contents, $fqfn) {
+ // Is there some content and header (2 indexes) in?
+ if ((!is_array($contents)) || (count($contents) != 2) || (!isset($contents['header'])) || (!isset($contents['data']))) {
+ // No content found so load the file again
+ $contents = $inputHandler->loadFileContents($fqfn);
+
+ // And remember all data for later usage
+ $this->setLastContents($contents);
+ }
+
+ // Return the repaired contents
+ return $contents;
+ }
+
+ /**
+ * Makes sure that the database connection is alive
+ *
+ * @return void
+ */
+ public function connectToDatabase () {
+ // @TODO Do some checks on the database directory and files here
+ }
+
+ /**
+ * Loads data saved with saveObject from the database and re-creates a
+ * full object from it.
+ * If limitObject() was called before a new object ObjectContainer with
+ * all requested attributes will be returned instead.
+ *
+ * @return Object The fully re-created object or instance to
+ * ObjectContainer
+ * @throws SavePathIsEmptyException If the given save path is an
+ * empty string
+ * @throws SavePathIsNoDirectoryException If the save path is no
+ * path (e.g. a file)
+ * @throws SavePathReadProtectedException If the save path is read-
+ * protected
+ * @throws SavePathWriteProtectedException If the save path is write-
+ * protected
+ */
+ public function loadObject () {
+ // Already connected? Then abort here
+ if ($this->alreadyConnected === true) return true;
+
+ // Get the save path
+ $savePath = $this->getSavePath();
+
+ if (empty($savePath)) {
+ // Empty string
+ throw new SavePathIsEmptyException($dbInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
+ } elseif (!is_dir($savePath)) {
+ // Is not a dir
+ throw new SavePathIsNoDirectoryException($savePath, self::EXCEPTION_INVALID_PATH_NAME);
+ } elseif (!is_readable($savePath)) {
+ // Path not readable
+ throw new SavePathReadProtectedException($savePath, self::EXCEPTION_READ_PROTECED_PATH);
+ } elseif (!is_writeable($savePath)) {
+ // Path not writeable
+ throw new SavePathWriteProtectedException($savePath, self::EXCEPTION_WRITE_PROTECED_PATH);
+ }
+
+ // "Connection" established... ;-)
+ $this->alreadyConnected = true;
+ }
+
+ /**
+ * Starts a SELECT query on the database by given return type, table name
+ * and search criteria
+ *
+ * @param $resultType Result type ("array", "object" and "indexed" are valid)
+ * @param $tableName Name of the database table
+ * @param $criteria Local search criteria class
+ * @return $resultData Result data of the query
+ * @throws UnsupportedCriteriaException If the criteria is unsupported
+ */
+ public function querySelect ($resultType, $tableName, Criteria $criteriaInstance) {
+ // Is this criteria supported?
+ if (!$criteriaInstance instanceof LocalCriteria) {
+ // Not supported by this database layer
+ throw new UnsupportedCriteriaException(array($this, $criteriaInstance), self::EXCEPTION_REQUIRED_INTERFACE_MISSING);
+ }
+
+ // A "select" query on local files is not that easy, so begin slowly with it...
+ $this->partialStub(sprintf("type=%s,table=%s,criteria=%s", $resultType, $tableName, $criteriaInstance));
+ }
+}
+
+// [EOF]
+?>
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * A database wrapper for the User class
+ *
+ * @see DatabaseFrontendInterface - An interface for database frontends (front-end to the application)
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class UserDatabaseWrapper extends BaseDatabaseWrapper {
+ /**
+ * Cache instance
+ */
+ private $cacheInstance = null;
+
+ // Constants for exceptions
+ const EXCEPTION_CLIENT_USERNAME_NOT_FOUND = 0xe00;
+
+ // Constants for database columns
+ const DB_COLUMN_USERNAME = "username";
+
+ // Constants for database table names
+ const DB_TABLE_USER = "user";
+
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
+ protected function __construct() {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+
+ // Set part description
+ $this->setObjectDescription("Database wrapper for user objects");
+
+ // Create unique ID number
+ $this->createUniqueID();
+ }
+
+ /**
+ * Creates an instance of this database wrapper by a provided user class
+ *
+ * @return $wrapperInstance An instance of the created wrapper class
+ * @throws WrapperUserNameNotFoundException If the supplied username
+ * does not exist
+ */
+ public final static function createUserDatabaseWrapper () {
+ // Get a new instance
+ $wrapperInstance = new UserDatabaseWrapper();
+
+ // Initialize the cache instance
+ $wrapperInstance->initCacheInstance();
+
+ // Return the instance
+ return $wrapperInstance;
+ }
+
+ /**
+ * Initializes the cache instance with a new object
+ *
+ * @return void
+ */
+ protected function initCacheInstance () {
+ // Set the new instance
+ $this->cacheInstance = CacheFactory::getFactory()->createConfiguredCache();
+ }
+
+ /**
+ * Do a "select" query on the user table with the given search criteria and
+ * store it in cache for later usage
+ *
+ * @param $criteriaInstance An instance of a Criteria class
+ * @return $resultInstance An instance of a database result class
+ */
+ public function doSelectByCriteria (Criteria $criteriaInstance) {
+ // First get a key suitable for our cache and extend it with this class name
+ $cacheKey = sprintf("%s@%s",
+ $this->__toString(),
+ $criteriaInstance->getCacheKey()
+ );
+
+ // Does this key exists in cache?
+ if ($this->cacheInstance->offsetExists($cacheKey)) {
+ // Then use this result
+ $result = $cacheInstance->offsetGet($cacheKey);
+ } else {
+ // Now it's time to ask the database layer for this select statement
+ $result = $this->getDatabaseInstance()->doSelectByTableCriteria(self::DB_TABLE_USER, $criteriaInstance);
+
+ // Cache the result
+ $this->cacheInstance->offsetSet($cacheKey, $result);
+ }
+
+ // Create an instance of a DatabaseResult class with the given result
+ $resultInstance = DatabaseResult::createDatabaseResult($result);
+
+ // And return the instance
+ return $resultInstance;
+ }
+}
+
+// [EOF]
+?>
--- /dev/null
+Deny from all
--- /dev/null
+<?php
+/**
+ * A cache factory
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class CacheFactory extends BaseFactory {
+ /**
+ * Singleton instance
+ */
+ private static $selfInstance = null;
+
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
+ protected function __construct () {
+ // Call parent constructor
+ parent::__construct(__CLASS__);
+
+ // Set object description
+ $this->setObjectDescription("Factory for cache objects");
+
+ // Create unique ID number
+ $this->createUniqueID();
+ }
+
+ /**
+ * Singleton getter for this class
+ *
+ * @return $selfInstance An instance of this class
+ */
+ public final static function getFactory () {
+ // Is the instance null?
+ if (is_null(self::$selfInstance)) {
+ // Set a new one
+ self::$selfInstance = new CacheFactory();
+ }
+
+ // Return the instance
+ return self::$selfInstance;
+ }
+
+ /**
+ * Creates a configured cache instance
+ *
+ * @return $cacheInstance An instance of the configured cache
+ */
+ public function createConfiguredCache () {
+ // Read the config entry
+ $cacheType = $this->getConfigInstance()->readConfig("cache_type");
+
+ // And get a new instance
+ $cacheInstance = ObjectFactory::createObjectByName($cacheType);
+
+ // Return the instance
+ return $cacheInstance;
+ }
+}
+
+// [EOF]
+?>
// Call parent constructor
parent::__construct($class);
- // Create unique ID number
- $this->createUniqueID();
-
// Clean up a little
$this->removeNumberFormaters();
$this->removeSystemArray();
/**
* Protected constructor
*
- * @param $class Name of the real class (not BaseFactory)
* @return void
*/
protected function __construct () {
// Set object description
$this->setObjectDescription("Simple generic object factory");
+
+ // Create unique ID number
+ $this->createUniqueID();
}
/**
throw new EmptyVariableException(array($factoryInstance, 'className'), self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
} elseif (!class_exists($className)) {
// Then throw an exception
- throw new ClassNotFoundException($className, self::EXCEPTION_CLASS_NOT_FOUND);
+ throw new ClassNotFoundException(array($factoryInstance, $className), self::EXCEPTION_CLASS_NOT_FOUND);
}
// Then Prepare the eval() command
// Return the prepared instance
return $objectInstance;
}
+
+ /**
+ * Creates an object by it's configured name
+ *
+ * @param $configEnttry Configuration entry to read
+ * @return $objectInstance An instance of the requested object
+ */
+ public final static function createObjectByConfiguredName ($configEntry) {
+ // Read the configuration entry
+ $className = FrameworkConfiguration::getInstance()->readConfig($configEntry);
+
+ // Send this to the other factory...
+ $objectInstance = self::createObjectByName($className);
+
+ // Return the instance
+ return $objectInstance;
+ }
}
// [EOF]
// Set part description
$this->setObjectDescription("Factory for webpages with news");
+
+ // Create unique ID number
+ $this->createUniqueID();
}
/**
} catch (UsernameMissingException $e) {
// Okay, this user is missing!
$alreadyTaken = false;
- } catch (FrameworkException $e) {
- // Something bad happend
- ApplicationEntryPoint::app_die(sprintf("Exception: %s", $e->__toString()));
}
// Return the result
/**
* Getter for username
*
- * @return $userName The username to set
+ * @return $userName The username to get
*/
public final function getUsername () {
return $this->userNane;
}
+
+ /**
+ * Determines wether the username exists or not
+ *
+ * @return $exists Wether the username exists
+ */
+ protected function ifUsernameExists () {
+ // By default the username does exist
+ $exists = true;
+
+ // Get a UserDatabaseWrapper instance
+ $wrapperInstance = UserDatabaseWrapper::createUserDatabaseWrapper();
+
+ // Create a search criteria
+ $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria');
+
+ // Add the username as a criteria and set limit to one entry
+ $criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_USERNAME, $this->getUsername());
+ $criteriaInstance->setLimit(1);
+
+ // Get a search result
+ $result = $wrapperInstance->doSelectByCriteria($criteriaInstance);
+
+ // Search for it
+ if ($result->next()) {
+ // Entry found, so all is fine
+ $exists = true;
+ }
+
+ // Return the status
+ return $exists;
+ }
}
// [EOF]
// Clean up a little
$this->removeNumberFormaters();
+ $this->removeSystemArray();
}
}
|| (!method_exists($cInstance->getCompressor(), 'compressStream'))
|| (!method_exists($cInstance->getCompressor(), 'decompressStream'))
) {
- // Set the null compressor handler
- $cInstance->setCompressor(NullCompressor::createNullCompressor());
+ // Set the null compressor handler. This should not be configureable!
+ $cInstance->setCompressor(ObjectFactory::createObjectByName('NullCompressor'));
}
// Return the compressor instance
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class DatabaseConnection extends BaseMiddleware implements DatabaseConnector, LimitableObject {
- // Array for connection data
- private $connectData = array();
+ /**
+ * Array for connection data
+ */
+ private $connectData = array(
+ 'login' => "",
+ 'pass' => "",
+ 'dbase' => "",
+ 'host' => ""
+ );
// The real database layer
private $dbLayer = null;
// An instance of this class
private static $thisInstance = null;
- // Private constructor
+ /**
+ * Protected constructor
+ *
+ * @return void
+ */
protected function __construct() {
// Call parent constructor
parent::__construct(__CLASS__);
// Create an unique ID
$this->createUniqueID();
-
- // Clean up a little
- $this->removeSystemArray();
}
// Create new database connection layer
}
// Public setter for database connection
- public final function setConnectionData ($login, $pass, $dbase, $host) {
+ public final function setConnectionData ($login, $pass, $dbase, $host="localhost") {
// Transfer connection data
$this->connectData['login'] = (string) $login;
$this->connectData['pass'] = (string) $pass;
*
* @param $object The object we shall save
* @return void
- * @throws NullPointerException If $limitInstance is null
- * @throws NoObjectException If $limitInstance is not an object
- * @throws MissingMethodException If the required method
- * saveObject() was not found
*/
- public final function saveObject ($object) {
- // Some sanity checks
- if (is_null($this->dbLayer)) {
- // Is null
- throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
- } elseif (!is_object($this->dbLayer)) {
- // Is not an object
- throw new NoObjectException($this->dbLayer, self::EXCEPTION_IS_NO_OBJECT);
- } elseif (!method_exists($this->dbLayer, 'saveObject')) {
- // Does not have the required instance
- throw new MissingMethodException(array($this->dbLayer, 'saveObject'), self::EXCEPTION_MISSING_METHOD);
- }
+ public function saveObject ($object) {
+ // Connect to the database
+ $this->dbLayer->connectToDatabase();
// For now just pipe it through to the database layer
$this->dbLayer->saveObject($object);
* elements we shall exclusivly include in
* saving process
* @return void
- * @throws NullPointerException If $limitInstance is null
- * @throws NoObjectException If $limitInstance is not an object
- * @throws MissingMethodException If the required method
- * limitObject() was not found
*/
- public final function limitObject (ObjectLimits $limitInstance) {
- // Get real database connection
- $this->dbLayer = $this->getDatabaseInstance();
-
- // Some sanity checks
- if (is_null($this->dbLayer)) {
- // Is null
- throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
- } elseif (!is_object($this->dbLayer)) {
- // Is not an object
- throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT);
- } elseif (!method_exists($this->dbLayer, 'limitObject')) {
- // Does not have the required instance
- throw new MissingMethodException(array($this->dbLayer, 'limitObject'), self::EXCEPTION_MISSING_METHOD);
- }
+ public function limitObject (ObjectLimits $limitInstance) {
+ // Connect to the database
+ $this->dbLayer->connectToDatabase();
// For now we pipe this through to the real database instance
$this->dbLayer->limitObject($limitInstance);
* Analyses if a unique ID has already been used or not. This method does
* only pass the given ID through to the "real" database layer.
*
- * @param $uniqueID A unique ID number which shall be checked
- * before it will be used
- * @param $inConstructor If called from a constructor or from
- * somewhere else
+ * @param $uniqueID A unique ID number which shall be checked
+ * before it will be used
+ * @param $inConstructor If called from a constructor or from
+ * somewhere else
* @return $isUnused true = The unique ID was not found in the database,
- * false = It is already in use by an other object
- * @throws NullPointerException If $this->dbLayer is null
- * @throws NoObjectException If $this->dbLayer is not an object
- * @throws MissingMethodException If the required method
- * isUniqueIdUsed() was not found
+ * false = It is already in use by an other object
*/
- public final function isUniqueIdUsed ($uniqueID, $inConstructor = false) {
- // Some sanity checks
- if (is_null($this->dbLayer)) {
- // Is null
- throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
- } elseif (!is_object($this->dbLayer)) {
- // Is not an object
- throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT);
- } elseif (!method_exists($this->dbLayer, 'isUniqueIdUsed')) {
- // Does not have the required instance
- throw new MissingMethodException(array($this->dbLayer, 'isUniqueIdUsed'), self::EXCEPTION_MISSING_METHOD);
- }
+ public function isUniqueIdUsed ($uniqueID, $inConstructor = false) {
+ // Connect to the database
+ $this->dbLayer->connectToDatabase();
// Pass the returning result through
return $this->dbLayer->isUniqueIdUsed($uniqueID, $inConstructor);
/**
* Gets cached data from the database layer and if not found fetch it from
* the database again. This method does not return the header stuff because
- * The underlaying database class will return only the requested content.
+ * the underlaying database class will return only the requested content.
*
- * @param $idNumber The ID number which we need for looking up
- * the requested data
+ * @param $idNumber The ID number which we need for looking up
+ * the requested data
* @return $cachedArray The maybe cached data from the database
- * @throws NullPointerException If $this->dbLayer is null
- * @throws NoObjectException If $this->dbLayer is not an object
- * @throws MissingMethodException If the required method
- * isUniqueIdUsed() was not found
*/
- public final function getObjectFromCachedData ($idNumber) {
- // Some sanity checks
- if (is_null($this->dbLayer)) {
- // Is null
- throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
- } elseif (!is_object($this->dbLayer)) {
- // Is not an object
- throw new NoObjectException($object, self::EXCEPTION_IS_NO_OBJECT);
- } elseif (!method_exists($this->dbLayer, 'getObjectFromCachedData')) {
- // Does not have the required instance
- throw new MissingMethodException(array($this->dbLayer, 'getObjectFromCachedData'), self::EXCEPTION_MISSING_METHOD);
- }
+ public function getObjectFromCachedData ($idNumber) {
+ // Connect to the database
+ $this->dbLayer->connectToDatabase();
// Pass the returning result through
return $this->dbLayer->getObjectFromCachedData($idNumber);
/**
* Setter for the real database layer
- * @param $dbLayer An instance of the real database layer
+ * @param $dbLayer An instance of the real database layer
* @return void
*/
public final function setDatabaseLayer (DatabaseFrontendInterface $dbLayer) {
$this->dbLayer = $dbLayer;
}
+
+ /**
+ * Runs a "select" statement on the database layer with given table name
+ * and criteria. If this doesn't fail the result will be returned
+ *
+ * @param $tableName Name of the "table" we shall query
+ * @param $criteriaInstance An instance of a Criteria class
+ * @return $result The result as an array
+ */
+ public function doSelectByTableCriteria ($tableName, Criteria $criteriaInstance) {
+ // Connect to the database
+ $this->dbLayer->connectToDatabase();
+
+ // Get result from query
+ $result = $this->dbLayer->querySelect("array", $tableName, $criteriaInstance);
+
+ // Return the result
+ return $result;
+ }
}
// [EOF]
// Create an unique ID
$this->createUniqueID();
- // Clean up a little
- $this->removeNumberFormaters();
- $this->removeSystemArray();
-
// Set own instance
self::$thisInstance = $this;
}
$ioHandler = new FileIoHandler();
// Set the *real* file IO instances (both the same)
- $ioHandler->setInputStream(FileIoStream::createFileIoStream());
- $ioHandler->setOutputStream(FileIoStream::createFileIoStream());
+ $ioHandler->setInputStream(ObjectFactory::createObjectByConfiguredName('file_input_stream'));
+ $ioHandler->setOutputStream(ObjectFactory::createObjectByConfiguredName('file_output_stream'));
// Return instance
return $ioHandler;
$cfg->defineDatabaseType('local');
// CFG: LOCAL-DB-PATH
-$cfg->setConfigEntry('local_db_path', 'db/');
+$cfg->setConfigEntry('local_db_path', "db/");
// CFG: TIME-ZONE
$cfg->setDefaultTimezone("Europe/Berlin");
// CFG: VERBOSE-LEVEL
$cfg->setConfigEntry('verbose_level', 0);
+// CFG: CACHE-TYPE
+$cfg->setConfigEntry('cache_type', "MemoryCache");
+
+// CFG: SEARCH-CRITERIA
+$cfg->setConfigEntry('search_criteria', "SearchCriteria");
+
+// CFG: FILE-IO-HANDLER
+$cfg->setConfigEntry('file_io_handler', "FileIoHandler");
+
+// CFG: FILTER-CHAIN
+$cfg->setConfigEntry('filter_chain', "FilterChain");
+
+// CFG: FILE-INPUT-STREAM
+$cfg->setConfigEntry('file_input_stream', "FileIoStream");
+
+// CFG: FILE-OUTPUT-STREAM
+$cfg->setConfigEntry('file_output_stream', "FileIoStream");
+
// [EOF]
?>
*/
// Get the instance
-$io = FileIoHandler::createFileIoHandler();
+$io = ObjectFactory::createObjectByConfiguredName('file_io_handler');
// [EOF]
?>