Now a more generate interface
[core.git] / inc / classes / main / database / databases / class_LocalFileDatabase.php
index 8187f96e54bc091305abccaffc93159a068628fb..2d4929c80273157a75fa9b143d66484711c2e270 100644 (file)
@@ -6,7 +6,7 @@
  *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.ship-simu.org
  *
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontendInterface {
-
        // Constants for MySQL backward-compatiblity (PLEASE FIX THEM!)
        const DB_CODE_TABLE_MISSING     = 0x100;
        const DB_CODE_TABLE_UNWRITEABLE = 0x101;
        const DB_CODE_DATA_FILE_CORRUPT = 0x102;
 
+       // Status results
+       const RESULT_OKAY = 'ok';
+
        /**
         * Save path for "file database"
         */
-       private $savePath = "";
+       private $savePath = '';
 
        /**
         * The file's extension
         */
-       private $fileExtension = "serialized";
+       private $fileExtension = 'serialized';
 
        /**
         * The last read file's name
         */
-       private $lastFile = "";
+       private $lastFile = '';
 
        /**
         * The last read file's content including header information
@@ -58,7 +60,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
        /**
         * Last error message
         */
-       private $lastError = "";
+       private $lastError = '';
 
        /**
         * Last exception
@@ -73,7 +75,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
        /**
         * Element for index
         */
-       private $indexKey = "__idx";
+       private $indexKey = '__idx';
 
        /**
         * The protected constructor. Do never instance from outside! You need to
@@ -94,10 +96,10 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
         * 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
+        * @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
@@ -173,7 +175,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
         * @return      void
         */
        private final function resetLastError () {
-               $this->lastError = "";
+               $this->lastError = '';
                $this->lastException = null;
        }
 
@@ -283,7 +285,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                $infoArray = array();
 
                // Create FQFN for getting the table information file
-               $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/info.' . $this->getFileExtension();
+               $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, 'info');
 
                // Get the file contents
                try {
@@ -296,6 +298,21 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                return $infoArray;
        }
 
+       /**
+        * Generates an FQFN from given dataset instance and string
+        *
+        * @param       $dataSetInstance        An instance of a database set class
+        * @param       $rowName                        Name of the row
+        * @return      $fqfn                           The FQFN for this row
+        */
+       private function generateFqfnFromDataSet (Criteria $dataSetInstance, $rowName) {
+               // This is the FQFN
+               $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/' . $rowName . '.' . $this->getFileExtension();
+
+               // Return it
+               return $fqfn;
+       }
+
        /**
         * Creates the table info file from given dataset instance
         *
@@ -304,7 +321,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
         */
        private function createTableInfoFile (StoreableCriteria $dataSetInstance) {
                // Create FQFN for creating the table information file
-               $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/info.' . $this->getFileExtension();
+               $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, 'info');
 
                // Get the data out from dataset in a local array
                $this->tableInfo[$dataSetInstance->getTableName()] = array(
@@ -331,7 +348,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                if (!isset($this->tableInfo['primary'])) {
                        // Then create the info file
                        $this->createTableInfoFile($dataSetInstance);
-               } elseif (($this->getConfigInstance()->readConfig('db_update_primary_forced') === "Y") && ($dataSetInstance->getPrimaryKey() != $this->tableInfo['primary'])) {
+               } elseif (($this->getConfigInstance()->getConfigEntry('db_update_primary_forced') == 'Y') && ($dataSetInstance->getPrimaryKey() != $this->tableInfo['primary'])) {
                        // Set the array element
                        $this->tableInfo[$dataSetInstance->getTableName()]['primary'] = $dataSetInstance->getPrimaryKey();
 
@@ -353,12 +370,12 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
         * 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       $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
-        * @throws      SqlException                                    If an "SQL error" occurs
+        * @throws      SqlException                                    If an 'SQL error' occurs
         */
        public function querySelect ($resultType, $tableName, LocalSearchCriteria $criteriaInstance) {
                // The result is null by any errors
@@ -367,15 +384,15 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                // Create full path name
                $pathName = $this->getSavePath() . $tableName . '/';
 
-               // A "select" query is not that easy on local files, so first try to
-               // find the "table" which is in fact a directory on the server
+               // A 'select' query is not that easy on local files, so first try to
+               // find the 'table' which is in fact a directory on the server
                try {
                        // Get a directory pointer instance
                        $directoryInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName);
 
                        // Initialize the result data, this need to be rewritten e.g. if a local file cannot be read
                        $resultData = array(
-                               'status'        => "ok",
+                               'status'        => LocalfileDatabase::RESULT_OKAY,
                                'rows'          => array()
                        );
 
@@ -385,7 +402,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                        $idx = 1;
 
                        // Read the directory with some exceptions
-                       while (($dataFile = $directoryInstance->readDirectoryExcept(array(".", "..", ".htaccess", ".svn", "info." . $this->getFileExtension()))) && ($limitFound < $criteriaInstance->getLimit())) {
+                       while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', "info." . $this->getFileExtension()))) && ($limitFound < $criteriaInstance->getLimit())) {
                                // Does the extension match?
                                if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) {
                                        // Skip this file!
@@ -467,12 +484,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
         */
        public function queryInsertDataSet (StoreableCriteria $dataSetInstance) {
                // Create full path name
-               $fqfn = sprintf("%s%s/%s.%s",
-                       $this->getSavePath(),
-                       $dataSetInstance->getTableName(),
-                       md5($dataSetInstance->getUniqueValue()),
-                       $this->getFileExtension()
-               );
+               $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, md5($dataSetInstance->getUniqueValue()));
 
                // Try to save the request away
                try {
@@ -521,7 +533,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                        $searchInstance = $dataSetInstance->getSearchInstance();
 
                        // Read the directory with some exceptions
-                       while (($dataFile = $directoryInstance->readDirectoryExcept(array(".", "..", ".htaccess", ".svn", "info." . $this->getFileExtension()))) && ($limitFound < $searchInstance->getLimit())) {
+                       while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', "info." . $this->getFileExtension()))) && ($limitFound < $searchInstance->getLimit())) {
                                // Does the extension match?
                                if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) {
                                        // Skip this file!