Code base synced, updated
authorRoland Häder <roland@mxchange.org>
Sun, 28 Sep 2008 23:53:57 +0000 (23:53 +0000)
committerRoland Häder <roland@mxchange.org>
Sun, 28 Sep 2008 23:53:57 +0000 (23:53 +0000)
44 files changed:
.gitattributes
application/mxchange/init.php
inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php
inc/classes/main/class_BaseFrameworkSystem.php
inc/classes/main/commands/web/class_WebLoginFailedCommand.php
inc/classes/main/commands/web/class_WebLogoutCommand.php [new file with mode: 0644]
inc/classes/main/commands/web/class_WebLogoutDoneCommand.php
inc/classes/main/controller/web/class_WebLogoutController.php [new file with mode: 0644]
inc/classes/main/criteria/class_SearchCriteria.php
inc/classes/main/database/databases/class_LocalFileDatabase.php
inc/classes/main/images/class_BaseImage.php
inc/classes/main/images/extended/class_PngImage.php
inc/classes/main/mailer/debug/class_DebugMailer.php
inc/classes/main/output/class_ConsoleOutput.php
inc/classes/main/request/class_HttpRequest.php
inc/classes/main/resolver/action/class_BaseActionResolver.php
inc/classes/main/resolver/command/class_BaseCommandResolver.php
inc/classes/main/resolver/controller/class_BaseControllerResolver.php
inc/classes/main/resolver/controller/image/class_ImageControllerResolver.php
inc/classes/main/resolver/controller/web/class_WebControllerResolver.php
inc/classes/main/response/class_BaseResponse.php [new file with mode: 0644]
inc/classes/main/response/class_HttpResponse.php [deleted file]
inc/classes/main/response/class_ImageResponse.php [deleted file]
inc/classes/main/response/http/.htaccess [new file with mode: 0644]
inc/classes/main/response/http/class_HttpResponse.php [new file with mode: 0644]
inc/classes/main/response/image/.htaccess [new file with mode: 0644]
inc/classes/main/response/image/class_ImageResponse.php [new file with mode: 0644]
inc/classes/main/result/class_DatabaseResult.php
inc/classes/main/template/class_BaseTemplateEngine.php
inc/classes/main/template/class_TemplateEngine.php [deleted file]
inc/classes/main/template/image/class_ImageTemplateEngine.php
inc/classes/main/template/mail/class_MailTemplateEngine.php
inc/classes/main/template/web/class_WebTemplateEngine.php
inc/classes/middleware/database/class_DatabaseConnection.php
inc/classes/third_party/api/wernisportal/class_WernisApi.php
inc/config.php
inc/config/class_FrameworkConfiguration.php
inc/database.php
inc/database/lib-local.php
inc/includes.php
inc/language.php
inc/loader/class_ClassLoader.php
inc/selector.php
index.php

index 875707fa28c53da7e74a76308f6198eaa68e4b8f..963494c045eed4863739c4041a60f400374621f6 100644 (file)
@@ -257,6 +257,7 @@ inc/classes/main/commands/web/class_WebHomeCommand.php -text
 inc/classes/main/commands/web/class_WebLoginAreaCommand.php -text
 inc/classes/main/commands/web/class_WebLoginCommand.php -text
 inc/classes/main/commands/web/class_WebLoginFailedCommand.php -text
+inc/classes/main/commands/web/class_WebLogoutCommand.php -text
 inc/classes/main/commands/web/class_WebLogoutDoneCommand.php -text
 inc/classes/main/commands/web/class_WebRegisterCommand.php -text
 inc/classes/main/commands/web/class_WebResendLinkCommand.php -text
@@ -286,6 +287,7 @@ inc/classes/main/controller/web/class_WebDefaultController.php -text
 inc/classes/main/controller/web/class_WebDefaultNewsController.php -text
 inc/classes/main/controller/web/class_WebLoginController.php -text
 inc/classes/main/controller/web/class_WebLoginFailedController.php -text
+inc/classes/main/controller/web/class_WebLogoutController.php -text
 inc/classes/main/controller/web/class_WebLogoutDoneController.php -text
 inc/classes/main/controller/web/class_WebRegisterController.php -text
 inc/classes/main/controller/web/class_WebStatusController.php -text
@@ -433,15 +435,17 @@ inc/classes/main/resolver/web/.htaccess -text
 inc/classes/main/resolver/web/class_WebCommandResolver.php -text
 inc/classes/main/resolver/web/class_WebControllerResolver.php -text
 inc/classes/main/response/.htaccess -text
-inc/classes/main/response/class_HttpResponse.php -text
-inc/classes/main/response/class_ImageResponse.php -text
+inc/classes/main/response/class_BaseResponse.php -text
+inc/classes/main/response/http/.htaccess -text
+inc/classes/main/response/http/class_HttpResponse.php -text
+inc/classes/main/response/image/.htaccess -text
+inc/classes/main/response/image/class_ImageResponse.php -text
 inc/classes/main/result/.htaccess -text
 inc/classes/main/result/class_DatabaseResult.php -text
 inc/classes/main/rng/.htaccess -text
 inc/classes/main/rng/class_RandomNumberGenerator.php -text
 inc/classes/main/template/.htaccess -text
 inc/classes/main/template/class_BaseTemplateEngine.php -text
-inc/classes/main/template/class_TemplateEngine.php -text
 inc/classes/main/template/image/.htaccess -text
 inc/classes/main/template/image/class_ImageTemplateEngine.php -text
 inc/classes/main/template/mail/.htaccess -text
index 4dc2e1949a0917bae5709faec1b1363dca135788..eb2152432ed54d71fa5a97e180bd0e5571de70f3 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+// Get a new configuration instance
+$cfg = FrameworkConfiguration::createFrameworkConfiguration();
+
 // Initialize output system
-require(PATH . "inc/output.php");
+require($cfg->readConfig('base_path') . "inc/output.php");
 
 // Initialize file i/o system
-require(PATH . "inc/file_io.php");
+require($cfg->readConfig('base_path') . "inc/file_io.php");
 
 // Include the language sub-system
-require(PATH . "inc/language.php");
+require($cfg->readConfig('base_path') . "inc/language.php");
 
 // Get the database layer as well
-require(PATH . "inc/database.php");
+require($cfg->readConfig('base_path') . "inc/database.php");
 
 // Generate call-back function
 $callback = sprintf("%s::getInstance",
index 846f140d04474decf80be2a8ac78fb77c459fe14..6e3f3d6d4f5c5d4fe18fa072bca8272445abad5c 100644 (file)
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 interface FrameworkDatabaseInterface extends FrameworkInterface {
-       /**
-        * 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
-        * @return      $isUnused               true = The unique ID was not found in the database,
-        *                                                      false = It is already in use by an other object
-        */
-       function isUniqueIdUsed ($uniqueID, $inConstructor = false);
 }
 
 // [EOF]
index 9dd62b4f4467abcbb78a441bd2e85cdc914dd3b4..7e461ac820071fde42e846ae1b7f2e79adf211be 100644 (file)
@@ -281,7 +281,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 
                        // Set the compressor channel
                        $this->setCompressorChannel(CompressorChannel::createCompressorChannel(sprintf("%s%s",
-                               PATH,
+                               $this->getConfigInstance()->readConfig('base_path'),
                                $this->getConfigInstance()->readConfig('compressor_base_path')
                        )));
 
@@ -557,25 +557,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                $this->realClass = $realClass;
        }
 
-       /**
-        * Compare if both simulation part description and class name matches
-        * (shall be enough)
-        *
-        * @param       $itemInstance   An object instance to an other class
-        * @return      boolean                 The result of comparing class name simulation part description
-        * @deprecated
-        */
-       public function itemMatches ($itemInstance) {
-               $this->partialStub("Deprecated!");
-               return (
-                       (
-                               $this->__toString()   == $itemInstance->__toString()
-                       ) && (
-                               $this->getObjectDescription() == $itemInstance->getObjectDescription()
-                       )
-               );
-       }
-
        /**
         * Compare class name of this and given class name
         *
@@ -737,8 +718,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                } // END - if
 
                // Generate FQFN for all application templates
-               $fqfn = sprintf("%s%s/%s/%s",
-                       PATH,
+               $fqfn = sprintf("%s%s/%s",
                        $this->getConfigInstance()->readConfig('application_path'),
                        strtolower($appInstance->getAppShortName()),
                        $this->getConfigInstance()->readConfig('tpl_base_path')
@@ -911,7 +891,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
                } // END - if
 
                // Add line number to the code
-               foreach (explode("\n", $phpCode) as $lineNo=>$code) {
+               foreach (explode("\n", $phpCode) as $lineNo => $code) {
                        // Add line numbers
                        $markedCode .= sprintf("<span id=\"code_line\">%s</span>: %s\n",
                                ($lineNo + 1),
index 9981133487d64b8cb2a9485617bb03694ee1104e..7c74d7bd2735a999fe68dcf75743a5834f1b9c3d 100644 (file)
@@ -63,6 +63,9 @@ class WebLoginFailedCommand extends BaseCommand implements Commandable {
                // Prepare a template instance
                $templateInstance = $this->prepareTemplateInstance($appInstance);
 
+               // Assign application data with template engine
+               $templateInstance->assignApplicationData($appInstance);
+
                // Load the master template
                $masterTemplate = $appInstance->getMasterTemplate();
 
diff --git a/inc/classes/main/commands/web/class_WebLogoutCommand.php b/inc/classes/main/commands/web/class_WebLogoutCommand.php
new file mode 100644 (file)
index 0000000..e220c51
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/**
+ * A command for logout
+ *
+ * @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 WebLogoutCommand extends BaseCommand implements Commandable {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this class
+        *
+        * @param       $resolverInstance       An instance of a command resolver class
+        * @return      $commandInstance        An instance a prepared command class
+        */
+       public final static function createWebLogoutCommand (CommandResolver $resolverInstance) {
+               // Get new instance
+               $commandInstance = new WebLogoutCommand();
+
+               // Set the application instance
+               $commandInstance->setResolverInstance($resolverInstance);
+
+               // Return the prepared instance
+               return $commandInstance;
+       }
+
+       /**
+        * Executes the given command with given request and response objects
+        *
+        * @param       $requestInstance        An instance of a class with an Requestable interface
+        * @param       $responseInstance       An instance of a class with an Responseable interface
+        * @return      void
+        */
+       public function execute (Requestable $requestInstance, Responseable $responseInstance) {
+               // Get an auth instance for checking and updating the auth cookies
+               $authInstance = ObjectFactory::createObjectByConfiguredName('auth_method_class', array($responseInstance));
+
+               // Set request instance
+               $authInstance->setRequestInstance($requestInstance);
+
+               // Destroy the auth data
+               $authInstance->destroyAuthData();
+
+               // Redirect to "logout done" page
+               $responseInstance->redirectToConfiguredUrl('logout_done_url');
+       }
+
+       /**
+        * Adds extra filters to the given controller instance
+        *
+        * @param       $controllerInstance             A controller instance
+        * @param       $requestInstance                An instance of a class with an Requestable interface
+        * @return      void
+        */
+       public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) {
+               // Empty for now
+       }
+}
+
+// [EOF]
+?>
index 15ecb706881634d80a72fa310b4d8adbb9271ad4..bbb7f2f702f93e2afe91c0a63dc9f62b7394af2c 100644 (file)
@@ -63,6 +63,9 @@ class WebLogoutDoneCommand extends BaseCommand implements Commandable {
                // Prepare a template instance
                $templateInstance = $this->prepareTemplateInstance($appInstance);
 
+               // Assign application data
+               $templateInstance->assignApplicationData($appInstance);
+
                // Load the master template
                $masterTemplate = $appInstance->getMasterTemplate();
 
diff --git a/inc/classes/main/controller/web/class_WebLogoutController.php b/inc/classes/main/controller/web/class_WebLogoutController.php
new file mode 100644 (file)
index 0000000..00b020a
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * The default controller for logout page
+ *
+ * @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
+ * @todo               This controller shall still provide some headlines for sidebars
+ *
+ * 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 WebLogoutController extends BaseController implements Controller {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this class
+        *
+        * @param       $resolverInstance               An instance of a command resolver class
+        * @return      $controllerInstance             A prepared instance of this class
+        */
+       public final static function createWebLogoutController (CommandResolver $resolverInstance) {
+               // Create the instance
+               $controllerInstance = new WebLogoutController();
+
+               // Set the command resolver
+               $controllerInstance->setResolverInstance($resolverInstance);
+
+               // Add user auth filter (we don't need an update of the user here because it will be redirected)
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_auth_class'));
+
+               // User status filter
+               $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_status_class'));
+
+               // Return the prepared instance
+               return $controllerInstance;
+       }
+
+       /**
+        * Handles the given request and response
+        *
+        * @param       $requestInstance        An instance of a request class
+        * @param       $responseInstance       An instance of a response class
+        * @return      void
+        */
+       public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) {
+               // Get the command instance
+               $commandInstance = $this->getResolverInstance()->resolveCommandByRequest($requestInstance);
+
+               // This request was valid! :-D
+               $requestInstance->requestIsValid();
+
+               // Execute the command
+               $commandInstance->execute($requestInstance, $responseInstance);
+
+               // Flush the response out
+               $responseInstance->flushBuffer();
+       }
+}
+
+// [EOF]
+?>
index b9f27db7b08859e83633d6ee3bec2ed3e0765f52..c95d853bfd07b67bbc7f518317300b1b3208cfe0 100644 (file)
@@ -188,9 +188,9 @@ class SearchCriteria extends BaseFrameworkSystem implements LocalSearchCriteria
                $counted = 0;
 
                // Walk through all entries
-               foreach ($entryArray as $key=>$entry) {
+               foreach ($entryArray as $key => $entry) {
                        // Then walk through all search criteria
-                       foreach ($this->searchCriteria as $criteriaKey=>$criteriaValue) {
+                       foreach ($this->searchCriteria as $criteriaKey => $criteriaValue) {
                                // Is the element found and does it match?
                                if (($key == $criteriaKey) && ($criteriaValue == $entry)) {
                                        // Then count this one up
index 69ce662f9e4055ae034a006259ff6bafaa027007..25cf9389f68b7708182e3767fedece739e04d8ec 100644 (file)
@@ -150,96 +150,6 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                return $this->lastException;
        }
 
-       /**
-        * 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
-        * @deprecated
-        */
-       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(".", "..", ".htaccess", ".svn", "info." . $this->getFileExtension()))) {
-                       // 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
         *
@@ -475,7 +385,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                                // Is this an array?
                                if (is_array($dataArray)) {
                                        // Search in the criteria with FMFW (First Matches, First Wins)
-                                       foreach ($dataArray as $key=>$value) {
+                                       foreach ($dataArray as $key => $value) {
                                                // Get criteria element
                                                $criteria = $criteriaInstance->getCriteriaElemnent($key);
 
@@ -603,7 +513,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                                // Is this an array?
                                if (is_array($dataArray)) {
                                        // Search in the criteria with FMFW (First Matches, First Wins)
-                                       foreach ($dataArray as $key=>$value) {
+                                       foreach ($dataArray as $key => $value) {
                                                // Get criteria element
                                                $criteria = $searchInstance->getCriteriaElemnent($key);
 
@@ -621,7 +531,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
                                                        } // END - if
 
                                                        // Entry found, so update it
-                                                       foreach ($criteriaArray as $criteriaKey=>$criteriaValue) {
+                                                       foreach ($criteriaArray as $criteriaKey => $criteriaValue) {
                                                                $dataArray[$criteriaKey] = $criteriaValue;
                                                        } // END - foreach
 
index 7c1e0891cd92102079a0a7c5958aaff73469e87b..7f667cde4a48e487d69789dffbdf59532435c32c 100644 (file)
@@ -469,10 +469,10 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
                $this->setBlue($blue);
 
                // Get a pointer for background color
-               $backColor = imagecolorallocate($this->imageResource, $red, $green, $blue);
+               $backColor = imagecolorallocate($this->getImageResource(), $red, $green, $blue);
 
                // Fill the image
-               imagefill($this->imageResource, 0, 0, $backColor);
+               imagefill($this->getImageResource(), 0, 0, $backColor);
 
                // Compile foreground colors
                $red   = $templateInstance->compileRawCode($this->foregroundColor['red']);
@@ -486,7 +486,7 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
                $this->setBlue($blue);
 
                // Get a pointer for foreground color
-               $foreColor = imagecolorallocate($this->imageResource, $red, $green, $blue);
+               $foreColor = imagecolorallocate($this->getImageResource(), $red, $green, $blue);
 
                switch ($this->groupable) {
                        case "single": // Single image string
@@ -502,7 +502,7 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
                                $size = $templateInstance->compileRawCode($this->getFontSize());
 
                                // Set the image string
-                               imagestring($this->imageResource, $size, $x, $y, $imageString, $foreColor);
+                               imagestring($this->getImageResource(), $size, $x, $y, $imageString, $foreColor);
                                break;
 
                        case "groupable": // More than one string allowed
@@ -521,7 +521,7 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
 
                                        // Set the image string
                                        //* DEBUG: */ echo __METHOD__.": size={$size}, x={$x}, y={$y}, string={$imageString}<br />\n";
-                                       imagestring($this->imageResource, $size, $x, $y, $imageString, $foreColor);
+                                       imagestring($this->getImageResource(), $size, $x, $y, $imageString, $foreColor);
                                } // END - foreach
                                break;
                }
index f8ee28b8f5b3a28f6d6c982edc5f7e78cdc3aa0b..8b0332099fef9479c671f4e2e5aefb9b2deb73d4 100644 (file)
@@ -64,6 +64,12 @@ class PngImage extends BaseImage {
                // Get a file name for our image
                $cacheFile = $this->getTemplateInstance()->getImageCacheFqfn();
 
+               // Does it exist?
+               if (file_exists($cacheFile)) {
+                       // Remove it
+                       @unlink($cacheFile);
+               } // END - if
+
                // Finish the image and send it to a cache file
                imagepng($this->getImageResource(), $cacheFile, 9, PNG_ALL_FILTERS);
        }
index ffc3fc6ea81bd5eb17ff5fdfcc81e5108771f222..042ee69194122982abbf123343e0e495f9a0bfd4 100644 (file)
@@ -85,13 +85,13 @@ class DebugMailer extends BaseMailer implements DeliverableMail {
                                $templateInstance->assignVariable('subject', $this->getSubjectLine());
 
                                // Walk through all variables, first config to assign them
-                               foreach ($recipientList['config_vars'] as $variable=>$dummy) {
+                               foreach ($recipientList['config_vars'] as $variable => $dummy) {
                                        // Load the config value and set it
                                        $templateInstance->assignConfigVariable($variable);
                                } // END - if
 
                                // Now do the same with the values but ask the "value instance" instead!
-                               foreach ($recipientList['value_vars'] as $variable=>$dummy) {
+                               foreach ($recipientList['value_vars'] as $variable => $dummy) {
                                        // Is the value instance there?
                                        if (!isset($recipientList['values'][$variable])) {
                                                // Throw exception
index b1cae5c408f77eee0c7816b72f768ed2720f54c0..bcc1fc5eb8d91bc0674fcb25c0b58a2c1c73e3a0 100644 (file)
@@ -90,7 +90,7 @@ class ConsoleOutput extends BaseFrameworkSystem implements OutputStreamer {
        public final function output ($outStream=false) {
                if ($outStream === false) {
                        // Output something here...
-                       foreach ($this->vars as $var=>$value) {
+                       foreach ($this->vars as $var => $value) {
                                $this->output("var=".$var.", value=".$value."");
                        }
                } else {
index a046f185c689e055a03a777f26e0cd3a566659fb..0241cfc19f92e29a1cb4b20c268369883780b9cb 100644 (file)
@@ -72,8 +72,8 @@ class HttpRequest extends BaseFrameworkSystem implements Requestable {
         * @return      void
         */
        public function prepareRequestData () {
-               // Copy the $_REQUEST array
-               $this->requestData = $_REQUEST;
+               // Copy GET then POST data
+               $this->requestData = array_merge($_GET, $_POST);
        }
 
        /**
@@ -124,6 +124,7 @@ class HttpRequest extends BaseFrameworkSystem implements Requestable {
         * @return      void
         */
        public function setRequestElement ($element, $value) {
+               error_log(__METHOD__.":{$element}={$value}");
                $this->requestData[$element] = $value;
        }
 
index 0f41a35df2cd993a2a702b28278f4616044aa731..0c7f268faf88de2a449f14377ad7180325da9865 100644 (file)
@@ -101,9 +101,6 @@ class BaseActionResolver extends BaseResolver {
                        $isValid = true;
                } // END - if
 
-               // Debug output
-               //* DEBUG: */ $this->debugBackTrace();
-
                // Set action name
                $this->setActionName($actionName);
 
index f26d351fa6d4c7536c050868f96198de2ad0f813..d1fa003a380d07015beb28a2dd86ef061f271449 100644 (file)
@@ -125,9 +125,6 @@ class BaseCommandResolver extends BaseResolver {
                        $isValid = true;
                } // END - if
 
-               // Debug output
-               //* DEBUG: */ $this->debugBackTrace();
-
                // Set command name
                $this->setCommandName($commandName);
 
index 2548b4f702fceb914c7cf1702ab514cd10cc0835..ec61d4e1cbc6e85676c0cf63f1ab68f8952fe4eb 100644 (file)
@@ -117,9 +117,6 @@ class BaseControllerResolver extends BaseResolver {
                        }
                } // END - while
 
-               // Debug output
-               //* DEBUG: */ $this->debugBackTrace();
-
                // Return the result
                return $isValid;
        }
index 157a98c60f5f16fc1bb040b1d6d024c184cb9526..b2f4fcd815eb755996b572a0a13c85e07927df08 100644 (file)
@@ -120,9 +120,6 @@ class ImageControllerResolver extends BaseControllerResolver implements Controll
         *                                                                              controller class is missing (bad!)
         */
        private function loadController ($controllerName) {
-                // Debug message
-                //* DEBUG: */ $this->debugBackTrace();
-
                // Cache default command
                $defaultController = $this->getConfigInstance()->readConfig('default_image_command');
 
index 2446e6dc776b885ea3d370ff63c77b7cecb1cb79..da09dca315e5e2e3cde48a959fd50146c3801d0f 100644 (file)
@@ -120,9 +120,6 @@ class WebControllerResolver extends BaseControllerResolver implements Controller
         *                                                                              controller class is missing (bad!)
         */
        private function loadController ($controllerName) {
-                // Debug message
-                //* DEBUG: */ $this->debugBackTrace();
-
                // Cache default command
                $defaultController = $this->getConfigInstance()->readConfig('default_web_command');
 
diff --git a/inc/classes/main/response/class_BaseResponse.php b/inc/classes/main/response/class_BaseResponse.php
new file mode 100644 (file)
index 0000000..2ecfaa2
--- /dev/null
@@ -0,0 +1,200 @@
+<?php
+/**
+ * A generic request class
+ *
+ * @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/>.
+ *
+ * The extended headers are taken from phpMyAdmin setup tool, written by
+ * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
+ */
+class BaseResponse extends BaseFrameworkSystem {
+       /**
+        * Response status
+        */
+       private $responseStatus = "200 OK";
+
+       /**
+        * Array with all headers
+        */
+       private $responseHeaders = array();
+
+       /**
+        * Cookies we shall sent out
+        */
+       private $cookies = array();
+
+       /**
+        * Body of the response
+        */
+       private $responseBody = "";
+
+       /**
+        * Instance of the template engine
+        */
+       private $templateInstance = null;
+
+       /**
+        * Fatal resolved messages from filters and so on
+        */
+       private $fatalMessages = array();
+
+       /**
+        * Protected constructor
+        *
+        * @param       $className      Name of the concrete response
+        * @return      void
+        */
+       protected function __construct ($className) {
+               // Call parent constructor
+               parent::__construct($className);
+
+               // Clean up a little
+               $this->removeNumberFormaters();
+               $this->removeSystemArray();
+       }
+
+       /**
+        * Setter for status
+        *
+        * @param       $status         New response status
+        * @return      void
+        */
+       public final function setResponseStatus ($status) {
+               $this->responseStatus = (string) $status;
+       }
+
+       /**
+        * Add header element
+        *
+        * @param       $name   Name of header element
+        * @param       $value  Value of header element
+        * @return      void
+        */
+       public final function addHeader ($name, $value) {
+               $this->responseHeaders[$name] = $value;
+       }
+
+       /**
+        * Reset the header array
+        *
+        * @return      void
+        */
+       public final function resetResponseHeaders () {
+               $this->responseHeaders = array();
+       }
+
+       /**
+        * "Writes" data to the response body
+        *
+        * @param       $output         Output we shall sent in the HTTP response
+        * @return      void
+        */
+       public final function writeToBody ($output) {
+               $this->responseBody .= $output;
+       }
+
+       /**
+        * Sets the response body to something new
+        *
+        * @param       $output         Output we shall sent in the HTTP response
+        * @return      void
+        */
+       public final function setResponseBody ($output) {
+               $this->responseBody = $output;
+       }
+
+       /**
+        * Adds a fatal message id to the response. The added messages can then be
+        * processed and outputed to the world
+        *
+        * @param       $messageId      The message id we shall add
+        * @return      void
+        */
+       public final function addFatalMessage ($messageId) {
+               // Adds the resolved message id to the fatal message list
+               $this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
+       }
+
+       /**
+        * Flushs the cached HTTP response to the outer world
+        *
+        * @param       $force  Wether we shall force the output or abort if headers are
+        *                                      already sent with an exception
+        * @return      void
+        * @throws      ResponseHeadersAlreadySentException             Thrown if headers are
+        *                                                                                                      already sent
+        */
+       public function flushBuffer ($force = false) {
+               if ((headers_sent()) && (!$force)) {
+                       // Headers are already sent!
+                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+               } elseif (!headers_sent()) {
+                       // Send headers out
+                       header("HTTP/1.1 {$this->responseStatus}");
+
+                       // Used later
+                       $now = gmdate('D, d M Y H:i:s') . ' GMT';
+
+                       // General header for no caching
+                       $this->addHeader('Expired', $now); // RFC2616 - Section 14.21
+                       $this->addHeader('Last-Modified', $now);
+                       $this->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
+                       $this->addHeader('Pragma', 'no-cache'); // HTTP/1.0
+
+                       // Define the charset to be used
+                       //$this->addHeader('Content-type:', sprintf("text/html; charset=%s", $this->getConfigInstance()->readConfig('header_charset')));
+
+                       // Send all headers
+                       foreach ($this->responseHeaders as $name => $value) {
+                               header("{$name}: {$value}");
+                               //* DEBUG: */ echo "{$name}: {$value}<br />\n";
+                       } // END - foreach
+
+                       // Send cookies out?
+                       if (count($this->cookies) > 0) {
+                               // Send all cookies
+                               $cookieString = implode(" ", $this->cookies);
+                               header("Set-Cookie: {$cookieString}");
+
+                               // Remove them all
+                               $this->cookies = array();
+                       } // END - if
+               }
+
+               // Are there some error messages?
+               if (count($this->fatalMessages) == 0) {
+                       // Flush the output to the world
+                       $this->getWebOutputInstance()->output($this->responseBody);
+               } else {
+                       // Display all error messages
+                       $this->getApplicationInstance()->handleFatalMessages($this->fatalMessages);
+
+                       // Send the error messages out to the world
+                       $this->getWebOutputInstance()->output($this->responseBody);
+               }
+
+               // Clear response header and body
+               $this->setResponseBody("");
+               $this->resetResponseHeaders();
+       }
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/response/class_HttpResponse.php b/inc/classes/main/response/class_HttpResponse.php
deleted file mode 100644 (file)
index 869d358..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-/**
- * A class for an HTTP response on an HTTP request
- *
- * @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/>.
- *
- * The extended headers are taken from phpMyAdmin setup tool, written by
- * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
- */
-class HttpResponse extends BaseFrameworkSystem implements Responseable {
-       /**
-        * Response status
-        */
-       private $responseStatus = "200 OK";
-
-       /**
-        * Array with all headers
-        */
-       private $responseHeaders = array();
-
-       /**
-        * Cookies we shall sent out
-        */
-       private $cookies = array();
-
-       /**
-        * Body of the response
-        */
-       private $responseBody = "";
-
-       /**
-        * Instance of the template engine
-        */
-       private $templateInstance = null;
-
-       /**
-        * Fatal resolved messages from filters and so on
-        */
-       private $fatalMessages = array();
-
-       /**
-        * Protected constructor
-        *
-        * @return      void
-        */
-       protected function __construct () {
-               // Call parent constructor
-               parent::__construct(__CLASS__);
-
-               // Clean up a little
-               $this->removeNumberFormaters();
-               $this->removeSystemArray();
-       }
-
-       /**
-        * Creates an object of this class
-        *
-        * @param       $appInstance            An instance of a manageable application
-        * @return      $responseInstance       A prepared instance of this class
-        */
-       public final static function createHttpResponse (ManageableApplication $appInstance) {
-               // Get a new instance
-               $responseInstance = new HttpResponse();
-
-               // Set the application instance
-               $responseInstance->setApplicationInstance($appInstance);
-
-               // Initialize the template engine here
-               $responseInstance->initTemplateEngine($appInstance);
-
-               // Return the prepared instance
-               return $responseInstance;
-       }
-
-       /**
-        * Setter for status
-        *
-        * @param       $status         New response status
-        * @return      void
-        */
-       public final function setResponseStatus ($status) {
-               $this->responseStatus = (string) $status;
-       }
-
-       /**
-        * Add header element
-        *
-        * @param       $name   Name of header element
-        * @param       $value  Value of header element
-        * @return      void
-        */
-       public final function addHeader ($name, $value) {
-               $this->responseHeaders[$name] = $value;
-       }
-
-       /**
-        * Reset the header array
-        *
-        * @return      void
-        */
-       public final function resetResponseHeaders () {
-               $this->responseHeaders = array();
-       }
-
-       /**
-        * "Writes" data to the response body
-        *
-        * @param       $output         Output we shall sent in the HTTP response
-        * @return      void
-        */
-       public function writeToBody ($output) {
-               $this->responseBody .= $output;
-       }
-
-       /**
-        * Sets the response body to something new
-        *
-        * @param       $output         Output we shall sent in the HTTP response
-        * @return      void
-        */
-       public function setResponseBody ($output) {
-               $this->responseBody = $output;
-       }
-
-       /**
-        * Flushs the cached HTTP response to the outer world
-        *
-        * @param       $force  Wether we shall force the output or abort if headers are
-        *                                      already sent with an exception
-        * @return      void
-        * @throws      ResponseHeadersAlreadySentException             Thrown if headers are
-        *                                                                                                      already sent
-        */
-       public function flushBuffer ($force=false) {
-               if ((headers_sent()) && (!$force)) {
-                       // Headers are already sent!
-                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-               } elseif (!headers_sent()) {
-                       // Send headers out
-                       header("HTTP/1.1 {$this->responseStatus}");
-
-                       // Used later
-                       $now = gmdate('D, d M Y H:i:s') . ' GMT';
-
-                       // General header for no caching
-                       $this->addHeader('Expired', $now); // rfc2616 - Section 14.21
-                       $this->addHeader('Last-Modified', $now);
-                       $this->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
-                       $this->addHeader('Pragma', 'no-cache'); // HTTP/1.0
-
-                       // Define the charset to be used
-                       //$this->addHeader('Content-Type:', sprintf("text/html; charset=%s", $this->getConfigInstance()->readConfig('header_charset')));
-
-                       foreach ($this->responseHeaders as $name=>$value) {
-                               header("{$name}: {$value}");
-                       } // END - foreach
-
-                       // Send cookies out?
-                       if (count($this->cookies) > 0) {
-                               // Send all cookies
-                               $cookieString = implode(" ", $this->cookies);
-                               header("Set-Cookie: {$cookieString}");
-
-                               // Remove them all
-                               $this->cookies = array();
-                       } // END - if
-               }
-
-               // Are there some error messages?
-               if (count($this->fatalMessages) == 0) {
-                       // Flush the output to the world
-                       $this->getWebOutputInstance()->output($this->responseBody);
-               } else {
-                       // Display all error messages
-                       $this->getApplicationInstance()->handleFatalMessages($this->fatalMessages);
-
-                       // Send the error messages out to the world
-                       $this->getWebOutputInstance()->output($this->responseBody);
-               }
-
-               // Clear response header and body
-               $this->setResponseBody("");
-               $this->resetResponseHeaders();
-       }
-
-       /**
-        * Initializes the template engine instance
-        *
-        * @param       $appInstance    An instance of a manageable application
-        * @return      void
-        */
-       public final function initTemplateEngine (ManageableApplication $appInstance) {
-               $this->setTemplateInstance($this->prepareTemplateInstance($appInstance));
-       }
-
-       /**
-        * Adds a fatal message id to the response. The added messages can then be
-        * processed and outputed to the world
-        *
-        * @param       $messageId      The message id we shall add
-        * @return      void
-        */
-       public final function addFatalMessage ($messageId) {
-               // Adds the resolved message id to the fatal message list
-               $this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
-       }
-
-       /**
-        * Adds a cookie to the response
-        *
-        * @param       $cookieName             Cookie's name
-        * @param       $cookieValue    Value to store in the cookie
-        * @param       $encrypted              Do some extra encryption on the value
-        * @param       $expires                Timestamp of expiration (default: configured)
-        * @return      void
-        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
-        * @todo        Encryption of cookie data not yet supported.
-        * @todo        Why are these parameters conflicting?
-        * @todo        If the return statement is removed and setcookie() commented out,
-        * @todo        this will send only one cookie out, the first one.
-        */
-       public function addCookie ($cookieName, $cookieValue, $encrypted = false, $expires = null) {
-               //* DEBUG: */ echo $cookieName."=".$cookieValue."<br />\n";
-               // Are headers already sent?
-               if (headers_sent()) {
-                       // Throw an exception here
-                       //* DEBUG: */ return;
-                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-               } // END - if
-
-               // Shall we encrypt the cookie?
-               if ($encrypted === true) {
-               } // END - if
-
-               // For slow browsers set the cookie array element first
-               $_COOKIE[$cookieName] = $cookieValue;
-
-               // Get all config entries
-               if (is_null($expires)) {
-                       $expires = (time() + $this->getConfigInstance()->readConfig('cookie_expire'));
-               } // END - if
-
-               $path = $this->getConfigInstance()->readConfig('cookie_path');
-               $domain = $this->getConfigInstance()->readConfig('cookie_domain');
-
-               setcookie($cookieName, $cookieValue, $expires);
-               //, $path, $domain, (isset($_SERVER['HTTPS']))
-               return;
-
-               // Now construct the full header
-               $cookieString = $cookieName . "=" . $cookieValue . "; ";
-               $cookieString .= "expires=" . date("D, d-F-Y H:i:s", $expires) . " GMT";
-               // $cookieString .= "; path=".$path."; domain=".$domain;
-
-               // Set the cookie as a header
-               $this->cookies[$cookieName] = $cookieString;
-       }
-
-       /**
-        * Redirect to a configured URL. The URL can be absolute or relative. In
-        * case of relative URL it will be extended automatically.
-        *
-        * @param       $configEntry    The configuration entry which holds our URL
-        * @return      void
-        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
-        */
-       public function redirectToConfiguredUrl ($configEntry) {
-               // Is the header not yet sent?
-               if (headers_sent()) {
-                       // Throw an exception here
-                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-               } // END - if
-
-               // Get the url from config
-               $url = $this->getConfigInstance()->readConfig($configEntry);
-
-               // Do we have a "http" in front of the URL?
-               if (substr(strtolower($url), 0, 4) != "http") {
-                       // Is there a / in front of the relative URL?
-                       if (substr($url, 0, 1) == "/") $url = substr($url, 1);
-
-                       // No, then extend it with our base URL
-                       $url = $this->getConfigInstance()->readConfig('base_url') . "/" . $url;
-               } // END - if
-
-               // Add redirect header
-               $this->addHeader("Location", $url);
-
-               // Set correct response status
-               $this->setResponseStatus("301 Moved Permanently");
-
-               // Clear the body
-               $this->setResponseBody("");
-
-               // Flush the result
-               $this->flushBuffer();
-
-               // All done here...
-               exit();
-       }
-
-       /**
-        * Expires the given cookie if it is set
-        *
-        * @param       $cookieName             Cookie to expire
-        * @return      void
-        */
-       public function expireCookie ($cookieName) {
-               // Is the cookie there?
-               if (isset($_COOKIE[$cookieName])) {
-                       // Then expire it with 20 minutes past
-                       $this->addCookie($cookieName, "", false, (time() - 1200));
-
-                       // Remove it from array
-                       unset($_COOKIE[$cookieName]);
-               } // END - if
-       }
-
-       /**
-        * Refreshs a given cookie. This will make the cookie live longer
-        *
-        * @param       $cookieName             Cookie to refresh
-        * @return      void
-        */
-       public function refreshCookie ($cookieName) {
-               // Only update existing cookies
-               if (isset($_COOKIE[$cookieName])) {
-                       // Update the cookie
-                       $this->addCookie($cookieName, $_COOKIE[$cookieName], false);
-               } // END - if
-       }
-
-       /**
-        * Getter for default command
-        *
-        * @return      $defaultCommand         Default command for this response
-        */
-       public function getDefaultCommand () {
-               $defaultCommand = $this->getConfigInstance()->readConfig('default_web_command');
-               return $defaultCommand;
-       }
-}
-
-// [EOF]
-?>
diff --git a/inc/classes/main/response/class_ImageResponse.php b/inc/classes/main/response/class_ImageResponse.php
deleted file mode 100644 (file)
index 71acb35..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-<?php
-/**
- * A class for an image response on an HTTP request
- *
- * @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/>.
- *
- * The extended headers are taken from phpMyAdmin setup tool, written by
- * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
- */
-class ImageResponse extends BaseFrameworkSystem implements Responseable {
-       /**
-        * Response status
-        */
-       private $responseStatus = "200 OK";
-
-       /**
-        * Array with all headers
-        */
-       private $responseHeaders = array();
-
-       /**
-        * Cookies we shall sent out
-        */
-       private $cookies = array();
-
-       /**
-        * Body of the response
-        */
-       private $responseBody = "";
-
-       /**
-        * Fatal resolved messages from filters and so on
-        */
-       private $fatalMessages = array();
-
-       /**
-        * Instance of the image
-        */
-       private $imageInstance = null;
-
-       /**
-        * Protected constructor
-        *
-        * @return      void
-        */
-       protected function __construct () {
-               // Call parent constructor
-               parent::__construct(__CLASS__);
-
-               // Clean up a little
-               $this->removeNumberFormaters();
-               $this->removeSystemArray();
-       }
-
-       /**
-        * Creates an object of this class
-        *
-        * @param       $appInstance            An instance of a manageable application
-        * @return      $responseInstance       A prepared instance of this class
-        */
-       public final static function createImageResponse (ManageableApplication $appInstance) {
-               // Get a new instance
-               $responseInstance = new ImageResponse();
-
-               // Set the application instance
-               $responseInstance->setApplicationInstance($appInstance);
-
-               // Initialize the template engine here
-               $responseInstance->initTemplateEngine($appInstance);
-
-               // Return the prepared instance
-               return $responseInstance;
-       }
-
-       /**
-        * Setter for status
-        *
-        * @param       $status         New response status
-        * @return      void
-        */
-       public final function setResponseStatus ($status) {
-               $this->responseStatus = (string) $status;
-       }
-
-       /**
-        * Add header element
-        *
-        * @param       $name   Name of header element
-        * @param       $value  Value of header element
-        * @return      void
-        */
-       public final function addHeader ($name, $value) {
-               $this->responseHeaders[$name] = $value;
-       }
-
-       /**
-        * Reset the header array
-        *
-        * @return      void
-        */
-       public final function resetResponseHeaders () {
-               $this->responseHeaders = array();
-       }
-
-       /**
-        * "Writes" data to the response body
-        *
-        * @param       $output         Output we shall sent in the HTTP response
-        * @return      void
-        */
-       public function writeToBody ($output) {
-               $this->responseBody .= $output;
-       }
-
-       /**
-        * Sets the response body to something new
-        *
-        * @param       $output         Output we shall sent in the HTTP response
-        * @return      void
-        */
-       public function setResponseBody ($output) {
-               $this->responseBody = $output;
-       }
-
-       /**
-        * Flushs the cached HTTP response to the outer world
-        *
-        * @param       $force  Wether we shall force the output or abort if headers are
-        *                                      already sent with an exception
-        * @return      void
-        * @todo        Add support for fatal messages in image response
-        * @throws      ResponseHeadersAlreadySentException             Thrown if headers are
-        *                                                                                                      already sent
-        */
-       public function flushBuffer ($force=false) {
-               if ((headers_sent()) && (!$force)) {
-                       // Headers are already sent!
-                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-               } elseif (!headers_sent()) {
-                       // Send headers out
-                       header("HTTP/1.1 {$this->responseStatus}");
-
-                       // Used later
-                       $now = gmdate('D, d M Y H:i:s') . ' GMT';
-
-                       // General header for no caching
-                       $this->addHeader('Expired', $now); // rfc2616 - Section 14.21
-                       $this->addHeader('Last-Modified', $now);
-                       $this->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
-                       $this->addHeader('Pragma', 'no-cache'); // HTTP/1.0
-                       $this->addHeader('Content-type', 'image/'.$this->imageInstance->getImageType());
-
-                       // Define the charset to be used
-                       //$this->addHeader('Content-Type:', sprintf("text/html; charset=%s", $this->getConfigInstance()->readConfig('header_charset')));
-
-                       foreach ($this->responseHeaders as $name=>$value) {
-                               header("{$name}: {$value}");
-                       } // END - foreach
-
-                       // Send cookies out?
-                       if (count($this->cookies) > 0) {
-                               // Send all cookies
-                               $cookieString = implode(" ", $this->cookies);
-                               header("Set-Cookie: {$cookieString}");
-
-                               // Remove them all
-                               $this->cookies = array();
-                       } // END - if
-               }
-
-               // Are there some error messages?
-               if (count($this->fatalMessages) == 0) {
-                       // Get image content from cache
-                       $imageContent = $this->imageInstance->getContent();
-                       die($imageContent);
-               } else {
-                       // Display all error messages
-                       $this->partialStub("Fatal messages are currently unsupported in image response.");
-               }
-
-               // Clear response header and body
-               $this->setResponseBody("");
-               $this->resetResponseHeaders();
-       }
-
-       /**
-        * Initializes the template engine instance
-        *
-        * @param       $appInstance    An instance of a manageable application
-        * @return      void
-        */
-       public final function initTemplateEngine (ManageableApplication $appInstance) {
-               // Get config instance
-               $cfg = $this->getConfigInstance();
-
-               // Set new template engine
-               $cfg->setConfigEntry('template_class'         , $cfg->readConfig('image_template_class'));
-               $cfg->setConfigEntry('raw_template_extension' , ".img");
-               $cfg->setConfigEntry('code_template_extension', ".itp");
-               $cfg->setConfigEntry('tpl_base_path'          , "templates/images/");
-               $cfg->setConfigEntry('code_template_type'     , "image");
-
-               // Get a prepared instance
-               $this->setTemplateInstance($this->prepareTemplateInstance($appInstance));
-       }
-
-       /**
-        * Adds a fatal message id to the response. The added messages can then be
-        * processed and outputed to the world
-        *
-        * @param       $messageId      The message id we shall add
-        * @return      void
-        */
-       public final function addFatalMessage ($messageId) {
-               // Adds the resolved message id to the fatal message list
-               $this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
-       }
-
-       /**
-        * Adds a cookie to the response
-        *
-        * @param       $cookieName             Cookie's name
-        * @param       $cookieValue    Value to store in the cookie
-        * @param       $encrypted              Do some extra encryption on the value
-        * @param       $expires                Timestamp of expiration (default: configured)
-        * @return      void
-        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
-        * @todo        Encryption of cookie data not yet supported.
-        * @todo        Why are these parameters conflicting?
-        * @todo        If the return statement is removed and setcookie() commented out,
-        * @todo        this will send only one cookie out, the first one.
-        */
-       public function addCookie ($cookieName, $cookieValue, $encrypted = false, $expires = null) {
-               // Are headers already sent?
-               if (headers_sent()) {
-                       // Throw an exception here
-                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-               } // END - if
-
-               // Shall we encrypt the cookie?
-               if ($encrypted === true) {
-               } // END - if
-
-               // For slow browsers set the cookie array element first
-               $_COOKIE[$cookieName] = $cookieValue;
-
-               // Get all config entries
-               if (is_null($expires)) {
-                       $expires = (time() + $this->getConfigInstance()->readConfig('cookie_expire'));
-               } // END - if
-
-               $path = $this->getConfigInstance()->readConfig('cookie_path');
-               $domain = $this->getConfigInstance()->readConfig('cookie_domain');
-
-               setcookie($cookieName, $cookieValue, $expires);
-               //, $path, $domain, (isset($_SERVER['HTTPS']))
-               return;
-
-               // Now construct the full header
-               $cookieString = $cookieName . "=" . $cookieValue . "; ";
-               $cookieString .= "expires=" . date("D, d-F-Y H:i:s", $expires) . " GMT";
-               // $cookieString .= "; path=".$path."; domain=".$domain;
-
-               // Set the cookie as a header
-               $this->cookies[$cookieName] = $cookieString;
-       }
-
-       /**
-        * Redirect to a configured URL. The URL can be absolute or relative. In
-        * case of relative URL it will be extended automatically.
-        *
-        * @param       $configEntry    The configuration entry which holds our URL
-        * @return      void
-        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
-        */
-       public function redirectToConfiguredUrl ($configEntry) {
-               // Is the header not yet sent?
-               if (headers_sent()) {
-                       // Throw an exception here
-                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-               } // END - if
-
-               // Get the url from config
-               $url = $this->getConfigInstance()->readConfig($configEntry);
-
-               // Do we have a "http" in front of the URL?
-               if (substr(strtolower($url), 0, 4) != "http") {
-                       // Is there a / in front of the relative URL?
-                       if (substr($url, 0, 1) == "/") $url = substr($url, 1);
-
-                       // No, then extend it with our base URL
-                       $url = $this->getConfigInstance()->readConfig('base_url') . "/" . $url;
-               } // END - if
-
-               // Add redirect header
-               $this->addHeader("Location", $url);
-
-               // Set correct response status
-               $this->setResponseStatus("301 Moved Permanently");
-
-               // Clear the body
-               $this->setResponseBody("");
-
-               // Flush the result
-               $this->flushBuffer();
-
-               // All done here...
-               exit();
-       }
-
-       /**
-        * Expires the given cookie if it is set
-        *
-        * @param       $cookieName             Cookie to expire
-        * @return      void
-        */
-       public function expireCookie ($cookieName) {
-               // Is the cookie there?
-               if (isset($_COOKIE[$cookieName])) {
-                       // Then expire it with 20 minutes past
-                       $this->addCookie($cookieName, "", false, (time() - 1200));
-
-                       // Remove it from array
-                       unset($_COOKIE[$cookieName]);
-               } // END - if
-       }
-
-       /**
-        * Refreshs a given cookie. This will make the cookie live longer
-        *
-        * @param       $cookieName             Cookie to refresh
-        * @return      void
-        */
-       public function refreshCookie ($cookieName) {
-               // Only update existing cookies
-               if (isset($_COOKIE[$cookieName])) {
-                       // Update the cookie
-                       $this->addCookie($cookieName, $_COOKIE[$cookieName], false);
-               } // END - if
-       }
-
-       /**
-        * Setter for image instanxe
-        *
-        * @param       $imageInstance  An instance of an image
-        * @return      void
-        */
-       public final function setImageInstance (BaseImage $imageInstance) {
-               $this->imageInstance = $imageInstance;
-       }
-
-       /**
-        * Getter for default command
-        *
-        * @return      $defaultCommand         Default command for this response
-        */
-       public function getDefaultCommand () {
-               $defaultCommand = $this->getConfigInstance()->readConfig('default_image_command');
-               return $defaultCommand;
-       }
-}
-
-// [EOF]
-?>
diff --git a/inc/classes/main/response/http/.htaccess b/inc/classes/main/response/http/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/response/http/class_HttpResponse.php b/inc/classes/main/response/http/class_HttpResponse.php
new file mode 100644 (file)
index 0000000..50bf2de
--- /dev/null
@@ -0,0 +1,211 @@
+<?php
+/**
+ * A class for an HTTP response on an HTTP request
+ *
+ * @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/>.
+ *
+ * The extended headers are taken from phpMyAdmin setup tool, written by
+ * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
+ */
+class HttpResponse extends BaseResponse implements Responseable {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an object of this class
+        *
+        * @param       $appInstance            An instance of a manageable application
+        * @return      $responseInstance       A prepared instance of this class
+        */
+       public final static function createHttpResponse (ManageableApplication $appInstance) {
+               // Get a new instance
+               $responseInstance = new HttpResponse();
+
+               // Set the application instance
+               $responseInstance->setApplicationInstance($appInstance);
+
+               // Initialize the template engine here
+               $responseInstance->initTemplateEngine($appInstance);
+
+               // Return the prepared instance
+               return $responseInstance;
+       }
+
+       /**
+        * Initializes the template engine instance
+        *
+        * @param       $appInstance    An instance of a manageable application
+        * @return      void
+        */
+       public final function initTemplateEngine (ManageableApplication $appInstance) {
+               $this->setTemplateInstance($this->prepareTemplateInstance($appInstance));
+       }
+
+       /**
+        * Adds a cookie to the response
+        *
+        * @param       $cookieName             Cookie's name
+        * @param       $cookieValue    Value to store in the cookie
+        * @param       $encrypted              Do some extra encryption on the value
+        * @param       $expires                Timestamp of expiration (default: configured)
+        * @return      void
+        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
+        * @todo        Encryption of cookie data not yet supported.
+        * @todo        Why are these parameters conflicting?
+        * @todo        If the return statement is removed and setcookie() commented out,
+        * @todo        this will send only one cookie out, the first one.
+        */
+       public function addCookie ($cookieName, $cookieValue, $encrypted = false, $expires = null) {
+               //* DEBUG: */ echo $cookieName."=".$cookieValue."<br />\n";
+               // Are headers already sent?
+               if (headers_sent()) {
+                       // Throw an exception here
+                       //* DEBUG: */ return;
+                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+               } // END - if
+
+               // Shall we encrypt the cookie?
+               if ($encrypted === true) {
+               } // END - if
+
+               // For slow browsers set the cookie array element first
+               $_COOKIE[$cookieName] = $cookieValue;
+
+               // Get all config entries
+               if (is_null($expires)) {
+                       $expires = (time() + $this->getConfigInstance()->readConfig('cookie_expire'));
+               } // END - if
+
+               $path = $this->getConfigInstance()->readConfig('cookie_path');
+               $domain = $this->getConfigInstance()->readConfig('cookie_domain');
+
+               setcookie($cookieName, $cookieValue, $expires);
+               //, $path, $domain, (isset($_SERVER['HTTPS']))
+               return;
+
+               // Now construct the full header
+               $cookieString = $cookieName . "=" . $cookieValue . "; ";
+               $cookieString .= "expires=" . date("D, d-F-Y H:i:s", $expires) . " GMT";
+               // $cookieString .= "; path=".$path."; domain=".$domain;
+
+               // Set the cookie as a header
+               $this->cookies[$cookieName] = $cookieString;
+       }
+
+       /**
+        * Redirect to a configured URL. The URL can be absolute or relative. In
+        * case of relative URL it will be extended automatically.
+        *
+        * @param       $configEntry    The configuration entry which holds our URL
+        * @return      void
+        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
+        */
+       public function redirectToConfiguredUrl ($configEntry) {
+               // Is the header not yet sent?
+               if (headers_sent()) {
+                       // Throw an exception here
+                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+               } // END - if
+
+               // Assign application data
+               $this->getTemplateInstance()->assignApplicationData($this->getApplicationInstance());
+
+               // Get the url from config
+               $url = $this->getConfigInstance()->readConfig($configEntry);
+
+               // Compile the URL
+               $url = $this->getTemplateInstance()->compileRawCode($url);
+
+               // Do we have a "http" in front of the URL?
+               if (substr(strtolower($url), 0, 4) != "http") {
+                       // Is there a / in front of the relative URL?
+                       if (substr($url, 0, 1) == "/") $url = substr($url, 1);
+
+                       // No, then extend it with our base URL
+                       $url = $this->getConfigInstance()->readConfig('base_url') . "/" . $url;
+               } // END - if
+
+               // Add redirect header
+               $this->addHeader("Location", $url);
+
+               // Set correct response status
+               $this->setResponseStatus("301 Moved Permanently");
+
+               // Clear the body
+               $this->setResponseBody("");
+
+               // Flush the result
+               $this->flushBuffer();
+
+               // All done here...
+               exit();
+       }
+
+       /**
+        * Expires the given cookie if it is set
+        *
+        * @param       $cookieName             Cookie to expire
+        * @return      void
+        */
+       public function expireCookie ($cookieName) {
+               // Is the cookie there?
+               if (isset($_COOKIE[$cookieName])) {
+                       // Then expire it with 20 minutes past
+                       $this->addCookie($cookieName, "", false, (time() - 1200));
+
+                       // Remove it from array
+                       unset($_COOKIE[$cookieName]);
+               } // END - if
+       }
+
+       /**
+        * Refreshs a given cookie. This will make the cookie live longer
+        *
+        * @param       $cookieName             Cookie to refresh
+        * @return      void
+        */
+       public function refreshCookie ($cookieName) {
+               // Only update existing cookies
+               if (isset($_COOKIE[$cookieName])) {
+                       // Update the cookie
+                       $this->addCookie($cookieName, $_COOKIE[$cookieName], false);
+               } // END - if
+       }
+
+       /**
+        * Getter for default command
+        *
+        * @return      $defaultCommand         Default command for this response
+        */
+       public function getDefaultCommand () {
+               $defaultCommand = $this->getConfigInstance()->readConfig('default_web_command');
+               return $defaultCommand;
+       }
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/response/image/.htaccess b/inc/classes/main/response/image/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/response/image/class_ImageResponse.php b/inc/classes/main/response/image/class_ImageResponse.php
new file mode 100644 (file)
index 0000000..c03e6ea
--- /dev/null
@@ -0,0 +1,268 @@
+<?php
+/**
+ * A class for an image response on an HTTP request
+ *
+ * @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/>.
+ *
+ * The extended headers are taken from phpMyAdmin setup tool, written by
+ * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
+ */
+class ImageResponse extends BaseResponse implements Responseable {
+       /**
+        * Instance of the image
+        */
+       private $imageInstance = null;
+
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an object of this class
+        *
+        * @param       $appInstance            An instance of a manageable application
+        * @return      $responseInstance       A prepared instance of this class
+        */
+       public final static function createImageResponse (ManageableApplication $appInstance) {
+               // Get a new instance
+               $responseInstance = new ImageResponse();
+
+               // Set the application instance
+               $responseInstance->setApplicationInstance($appInstance);
+
+               // Initialize the template engine here
+               $responseInstance->initTemplateEngine($appInstance);
+
+               // Return the prepared instance
+               return $responseInstance;
+       }
+
+       /**
+        * Initializes the template engine instance
+        *
+        * @param       $appInstance    An instance of a manageable application
+        * @return      void
+        */
+       public final function initTemplateEngine (ManageableApplication $appInstance) {
+               // Get config instance
+               $cfg = $this->getConfigInstance();
+
+               // Set new template engine
+               $cfg->setConfigEntry('template_class'         , $cfg->readConfig('image_template_class'));
+               $cfg->setConfigEntry('raw_template_extension' , ".img");
+               $cfg->setConfigEntry('code_template_extension', ".itp");
+               $cfg->setConfigEntry('tpl_base_path'          , "templates/images/");
+               $cfg->setConfigEntry('code_template_type'     , "image");
+
+               // Get a prepared instance
+               $this->setTemplateInstance($this->prepareTemplateInstance($appInstance));
+       }
+
+       /**
+        * Adds a cookie to the response
+        *
+        * @param       $cookieName             Cookie's name
+        * @param       $cookieValue    Value to store in the cookie
+        * @param       $encrypted              Do some extra encryption on the value
+        * @param       $expires                Timestamp of expiration (default: configured)
+        * @return      void
+        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
+        * @todo        Encryption of cookie data not yet supported.
+        * @todo        Why are these parameters conflicting?
+        * @todo        If the return statement is removed and setcookie() commented out,
+        * @todo        this will send only one cookie out, the first one.
+        */
+       public function addCookie ($cookieName, $cookieValue, $encrypted = false, $expires = null) {
+               // Are headers already sent?
+               if (headers_sent()) {
+                       // Throw an exception here
+                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+               } // END - if
+
+               // Shall we encrypt the cookie?
+               if ($encrypted === true) {
+               } // END - if
+
+               // For slow browsers set the cookie array element first
+               $_COOKIE[$cookieName] = $cookieValue;
+
+               // Get all config entries
+               if (is_null($expires)) {
+                       $expires = (time() + $this->getConfigInstance()->readConfig('cookie_expire'));
+               } // END - if
+
+               $path = $this->getConfigInstance()->readConfig('cookie_path');
+               $domain = $this->getConfigInstance()->readConfig('cookie_domain');
+
+               setcookie($cookieName, $cookieValue, $expires);
+               //, $path, $domain, (isset($_SERVER['HTTPS']))
+               return;
+
+               // Now construct the full header
+               $cookieString = $cookieName . "=" . $cookieValue . "; ";
+               $cookieString .= "expires=" . date("D, d-F-Y H:i:s", $expires) . " GMT";
+               // $cookieString .= "; path=".$path."; domain=".$domain;
+
+               // Set the cookie as a header
+               $this->cookies[$cookieName] = $cookieString;
+       }
+
+       /**
+        * Redirect to a configured URL. The URL can be absolute or relative. In
+        * case of relative URL it will be extended automatically.
+        *
+        * @param       $configEntry    The configuration entry which holds our URL
+        * @return      void
+        * @throws      ResponseHeadersAlreadySentException             If headers are already sent
+        */
+       public function redirectToConfiguredUrl ($configEntry) {
+               // Is the header not yet sent?
+               if (headers_sent()) {
+                       // Throw an exception here
+                       throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+               } // END - if
+
+               // Assign application data
+               $this->getTemplateInstance()->assignApplicationData($this->getApplicationInstance());
+
+               // Get the url from config
+               $url = $this->getConfigInstance()->readConfig($configEntry);
+
+               // Compile the URL
+               $url = $this->getTemplateInstance()->compileRawCode($url);
+
+               // Do we have a "http" in front of the URL?
+               if (substr(strtolower($url), 0, 4) != "http") {
+                       // Is there a / in front of the relative URL?
+                       if (substr($url, 0, 1) == "/") $url = substr($url, 1);
+
+                       // No, then extend it with our base URL
+                       $url = $this->getConfigInstance()->readConfig('base_url') . "/" . $url;
+               } // END - if
+
+               // Add redirect header
+               $this->addHeader("Location", $url);
+
+               // Set correct response status
+               $this->setResponseStatus("301 Moved Permanently");
+
+               // Clear the body
+               $this->setResponseBody("");
+
+               // Flush the result
+               $this->flushBuffer();
+
+               // All done here...
+               exit();
+       }
+
+       /**
+        * Flushs the cached HTTP response to the outer world
+        *
+        * @param       $force  Wether we shall force the output or abort if headers are
+        *                                      already sent with an exception
+        * @return      void
+        */
+       public function flushBuffer ($force = false) {
+               // Finish the image
+               $this->getImageInstance()->finishImage();
+
+               // Get image content
+               $content = $this->getImageInstance()->getContent();
+
+               // Set it as response body
+               $this->setResponseBody($content);
+
+               // Set content type
+               $this->addHeader('Content-type', "image/".$this->getImageInstance()->getImageType());
+
+               // Call parent method
+               parent::flushBuffer($force);
+       }
+
+       /**
+        * Expires the given cookie if it is set
+        *
+        * @param       $cookieName             Cookie to expire
+        * @return      void
+        */
+       public function expireCookie ($cookieName) {
+               // Is the cookie there?
+               if (isset($_COOKIE[$cookieName])) {
+                       // Then expire it with 20 minutes past
+                       $this->addCookie($cookieName, "", false, (time() - 1200));
+
+                       // Remove it from array
+                       unset($_COOKIE[$cookieName]);
+               } // END - if
+       }
+
+       /**
+        * Refreshs a given cookie. This will make the cookie live longer
+        *
+        * @param       $cookieName             Cookie to refresh
+        * @return      void
+        */
+       public function refreshCookie ($cookieName) {
+               // Only update existing cookies
+               if (isset($_COOKIE[$cookieName])) {
+                       // Update the cookie
+                       $this->addCookie($cookieName, $_COOKIE[$cookieName], false);
+               } // END - if
+       }
+
+       /**
+        * Setter for image instanxe
+        *
+        * @param       $imageInstance  An instance of an image
+        * @return      void
+        */
+       public final function setImageInstance (BaseImage $imageInstance) {
+               $this->imageInstance = $imageInstance;
+       }
+
+       /**
+        * Getter for image instanxe
+        *
+        * @return      $imageInstance  An instance of an image
+        */
+       public final function getImageInstance () {
+               return $this->imageInstance;
+       }
+
+       /**
+        * Getter for default command
+        *
+        * @return      $defaultCommand         Default command for this response
+        */
+       public function getDefaultCommand () {
+               $defaultCommand = $this->getConfigInstance()->readConfig('default_image_command');
+               return $defaultCommand;
+       }
+}
+
+// [EOF]
+?>
index f7b1648ff08346d7c8f359bf7a68212fccb6493e..3f8918b79da8c54dc29f1dfad2ddde98cb5857f5 100644 (file)
@@ -103,7 +103,7 @@ class DatabaseResult extends BaseFrameworkSystem implements SearchableResult, Up
                $entryKey = $this->key();
 
                // Now get the update criteria array and update all entries
-               foreach ($updateInstance->getUpdateCriteria() as $criteriaKey=>$criteriaValue) {
+               foreach ($updateInstance->getUpdateCriteria() as $criteriaKey => $criteriaValue) {
                        // Update data
                        $this->resultArray['rows'][$entryKey][$criteriaKey] = $criteriaValue;
 
@@ -318,7 +318,7 @@ class DatabaseResult extends BaseFrameworkSystem implements SearchableResult, Up
                        $currentEntry = $this->current();
 
                        // Walk only through out-dated columns
-                       foreach ($this->outDated as $key=>$dummy) {
+                       foreach ($this->outDated as $key => $dummy) {
                                // Does this key exist?
                                //* DEBUG: */ echo "outDated: {$key}<br />\n";
                                if (isset($currentEntry[$key])) {
index 4db73b617de299fc4c976bb955506c8a622ee28d..7e1aa7c194f0fb6d1a015e4b640aa3f104396b3b 100644 (file)
@@ -69,11 +69,6 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
         */
        private $varStack = array();
 
-       /**
-        * Configuration variables in a simple array
-        */
-       private $configVariables = array();
-
        /**
         * Loaded templates for recursive protection and detection
         */
@@ -154,10 +149,12 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                // Is the group there?
                if (isset($this->varStack[$this->currGroup])) {
                        // Now search for it
-                       foreach ($this->varStack[$this->currGroup] as $idx=>$currEntry) {
+                       foreach ($this->varStack[$this->currGroup] as $idx => $currEntry) {
+                               //* DEBUG: */ echo __METHOD__.":currGroup={$this->currGroup},idx={$idx},currEntry={$currEntry['name']},var={$var}<br />\n";
                                // Is the entry found?
                                if ($currEntry['name'] == $var) {
                                        // Found!
+                                       //* DEBUG: */ echo __METHOD__.":FOUND!<br />\n";
                                        $found = $idx;
                                        break;
                                } // END - if
@@ -586,7 +583,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                // Did we find some variables?
                if ((is_array($variableMatches)) && (count($variableMatches) == 4) && (count($variableMatches[0]) > 0)) {
                        // Initialize all missing variables
-                       foreach ($variableMatches[3] as $key=>$var) {
+                       foreach ($variableMatches[3] as $key => $var) {
                                // Variable name
                                $varName = $variableMatches[1][$key];
 
@@ -628,10 +625,17 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                        if ((!isset($this->loadedRawData[$template])) && (!in_array($template, $this->loadedTemplates))) {
 
                                // Template not found, but maybe variable assigned?
+                               //* DEBUG: */ echo __METHOD__.":template={$template}<br />\n";
                                if ($this->isVariableAlreadySet($template) !== false) {
                                        // Use that content here
                                        $this->loadedRawData[$template] = $this->readVariable($template);
 
+                                       // Recursive protection:
+                                       $this->loadedTemplates[] = $template;
+                               } elseif (isset($this->varStack['config'][$template])) {
+                                       // Use that content here
+                                       $this->loadedRawData[$template] = $this->varStack['config'][$template];
+
                                        // Recursive protection:
                                        $this->loadedTemplates[] = $template;
                                } else {
@@ -671,7 +675,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                if (in_array($template, $this->compiledTemplates)) {
                        // Abort here...
                        return;
-               }
+               } // END - if
 
                // Remember this template being compiled
                $this->compiledTemplates[] = $template;
@@ -703,7 +707,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
         */
        private function insertAllTemplates (array $templateMatches) {
                // Run through all loaded codes
-               foreach ($this->loadedRawData as $template=>$code) {
+               foreach ($this->loadedRawData as $template => $code) {
 
                        // Search for the template
                        $foundIndex = array_search($template, $templateMatches[1]);
@@ -766,7 +770,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
         */
        private function assignAllVariables (array $varMatches) {
                // Search for all variables
-               foreach ($varMatches[1] as $key=>$var) {
+               foreach ($varMatches[1] as $key => $var) {
 
                        // Detect leading equals
                        if (substr($varMatches[2][$key], 0, 1) == "=") {
@@ -796,7 +800,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                if (count($this->loadedRawData) > 0) {
 
                        // Then compile all!
-                       foreach ($this->loadedRawData as $template=>$code) {
+                       foreach ($this->loadedRawData as $template => $code) {
 
                                // Is this template already compiled?
                                if (in_array($template, $this->compiledTemplates)) {
@@ -836,7 +840,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
         */
        private function insertRawTemplates () {
                // Load all templates
-               foreach ($this->rawTemplates as $template=>$content) {
+               foreach ($this->rawTemplates as $template => $content) {
                        // Set the template as a variable with the content
                        $this->assignVariable($template, $content);
                }
@@ -895,7 +899,8 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
         */
        public function assignConfigVariable ($var) {
                // Sweet and simple...
-               $this->configVariables[$var] = $this->getConfigInstance()->readConfig($var);
+               //* DEBUG: */ echo __METHOD__.":var={$var}<br />\n";
+               $this->varStack['config'][$var] = $this->getConfigInstance()->readConfig($var);
        }
 
        /**
@@ -916,7 +921,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
        /**
         * Load a specified code template into the engine
         *
-        * @param               $template               The code template we shall load which is
+        * @param       $template       The code template we shall load which is
         *                                              located in "code" by default
         * @return      void
         */
@@ -944,14 +949,16 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                        // Transfer it's name/value combination to the $content array
                        //* DEBUG: */ echo $currVariable['name']."=<pre>".htmlentities($currVariable['value'])."</pre>\n";
                        $dummy[$currVariable['name']] = $currVariable['value'];
-
                }// END - if
 
-               // Set the new variable (don't remove the second dollar !)
+               // Set the new variable (don't remove the second dollar!)
                $$validVar = $dummy;
 
                // Prepare all configuration variables
-               $config = $this->configVariables;
+               $config = null;
+               if (isset($this->varStack['config'])) {
+                       $config = $this->varStack['config'];
+               } // END - if
 
                // Remove some variables
                unset($idx);
@@ -1184,6 +1191,9 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 
                // Get version number and assign it
                $this->assignVariable('app_version'   , $appInstance->getAppVersion());
+
+               // Assign extra application-depending data
+               $appInstance->assignExtraTemplateData($this);
        }
 
        /**
diff --git a/inc/classes/main/template/class_TemplateEngine.php b/inc/classes/main/template/class_TemplateEngine.php
deleted file mode 100644 (file)
index afa0cbb..0000000
+++ /dev/null
@@ -1,1208 +0,0 @@
-<?php
-/**
- * The own template engine for loading caching and sending out the web pages
- * and emails.
- *
- * @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 TemplateEngine extends BaseFrameworkSystem implements CompileableTemplate {
-       /**
-        * The local path name where all templates and sub folders for special
-        * templates are stored. We will internally determine the language plus
-        * "html" for web templates or "emails" for email templates
-        */
-       private $basePath = "";
-
-       /**
-        * The extension for web and email templates (not compiled templates)
-        */
-       private $templateExtension = ".tpl";
-
-       /**
-        * The extension for code templates (not compiled templates)
-        */
-       private $codeExtension = ".ctp";
-
-       /**
-        * Path relative to $basePath and language code for compiled code-templates
-        */
-       private $compileOutputPath = "templates/_compiled";
-
-       /**
-        * The raw (maybe uncompiled) template
-        */
-       private $rawTemplateData = "";
-
-       /**
-        * Template data with compiled-in variables
-        */
-       private $compiledData = "";
-
-       /**
-        * The last loaded template's FQFN for debugging the engine
-        */
-       private $lastTemplate = "";
-
-       /**
-        * The variable stack for the templates. This must be initialized and
-        * shall become an instance of FrameworkArrayObject.
-        */
-       private $varStack = null;
-
-       /**
-        * Configuration variables in a simple array
-        */
-       private $configVariables = array();
-
-       /**
-        * Loaded templates for recursive protection and detection
-        */
-       private $loadedTemplates = array();
-
-       /**
-        * Compiled templates for recursive protection and detection
-        */
-       private $compiledTemplates = array();
-
-       /**
-        * Loaded raw template data
-        */
-       private $loadedRawData = null;
-
-       /**
-        * Raw templates which are linked in code templates
-        */
-       private $rawTemplates = null;
-
-       /**
-        * A regular expression for variable=value pairs
-        */
-       private $regExpVarValue = '/([\w_]+)(="([^"]*)"|=([\w_]+))?/';
-
-       /**
-        * A regular expression for filtering out code tags
-        *
-        * E.g.: {?template:variable=value;var2=value2;[...]?}
-        */
-       private $regExpCodeTags = '/\{\?([a-z_]+)(:("[^"]+"|[^?}]+)+)?\?\}/';
-
-       /**
-        * Loaded helpers
-        */
-       private $helpers = array();
-
-       // Exception codes for the template engine
-       const EXCEPTION_TEMPLATE_TYPE_IS_UNEXPECTED   = 0x020;
-       const EXCEPTION_TEMPLATE_CONTAINS_INVALID_VAR = 0x021;
-       const EXCEPTION_INVALID_VIEW_HELPER           = 0x022;
-
-       /**
-        * Protected constructor
-        *
-        * @return      void
-        */
-       protected function __construct () {
-               // Call parent constructor
-               parent::__construct(__CLASS__);
-
-               // Clean up a little
-               $this->removeNumberFormaters();
-               $this->removeSystemArray();
-       }
-
-       /**
-        * Creates an instance of the class TemplateEngine and prepares it for usage
-        *
-        * @param       $basePath               The local base path for all templates
-        * @param       $langInstance   An instance of LanguageSystem (default)
-        * @param       $ioInstance             An instance of FileIoHandler (default, middleware!)
-        * @return      $tplInstance    An instance of TemplateEngine
-        * @throws      BasePathIsEmptyException                If the provided $basePath is empty
-        * @throws      InvalidBasePathStringException  If $basePath is no string
-        * @throws      BasePathIsNoDirectoryException  If $basePath is no
-        *                                                                                      directory or not found
-        * @throws      BasePathReadProtectedException  If $basePath is
-        *                                                                                      read-protected
-        */
-       public final static function createTemplateEngine ($basePath, ManageableLanguage  $langInstance, FileIoHandler $ioInstance) {
-               // Get a new instance
-               $tplInstance = new TemplateEngine();
-
-               // Is the base path valid?
-               if (empty($basePath)) {
-                       // Base path is empty
-                       throw new BasePathIsEmptyException($tplInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
-               } elseif (!is_string($basePath)) {
-                       // Is not a string
-                       throw new InvalidBasePathStringException(array($tplInstance, $basePath), self::EXCEPTION_INVALID_STRING);
-               } elseif (!is_dir($basePath)) {
-                       // Is not a path
-                       throw new BasePathIsNoDirectoryException(array($tplInstance, $basePath), self::EXCEPTION_INVALID_PATH_NAME);
-               } elseif (!is_readable($basePath)) {
-                       // Is not readable
-                       throw new BasePathReadProtectedException(array($tplInstance, $basePath), self::EXCEPTION_READ_PROTECED_PATH);
-               }
-
-               // Get configuration instance
-               $cfgInstance = FrameworkConfiguration::getInstance();
-
-               // Set the base path
-               $tplInstance->setBasePath($basePath);
-
-               // Initialize the variable stack
-               $tplInstance->initVariableStack();
-
-               // Set the language and IO instances
-               $tplInstance->setLanguageInstance($langInstance);
-               $tplInstance->setFileIoInstance($ioInstance);
-
-               // Set template extensions
-               $tplInstance->setRawTemplateExtension($cfgInstance->readConfig('raw_template_extension'));
-               $tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
-
-               // Absolute output path for compiled templates
-               $tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
-
-               // Return the prepared instance
-               return $tplInstance;
-       }
-
-       /**
-        * Search for a variable in the stack
-        *
-        * @param               $var            The variable we are looking for
-        * @return      $idx            FALSE means not found, >=0 means found on a specific index
-        */
-       private function isVariableAlreadySet ($var) {
-               // First everything is not found
-               $found = false;
-
-               // Now search for it
-               for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-                       // Get current item
-                       $currEntry = $idx->current();
-
-                       // Is the entry found?
-                       if ($currEntry['name'] == $var) {
-                               // Found!
-                               $found = $idx->key();
-                               break;
-                       }
-               }
-
-               // Return the current position
-               return $found;
-       }
-
-       /**
-        * Return a content of a variable or null if not found
-        *
-        * @param       $var            The variable we are looking for
-        * @return      $content        Content of the variable or null if not found
-        */
-       private function readVariable ($var) {
-               // First everything is not found
-               $content = null;
-
-               // Now search for it
-               for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-                       // Get current item
-                       $currEntry = $idx->current();
-
-                       // Is the entry found?
-                       if ($currEntry['name'] == $var) {
-                               // Found!
-                               $content = $currEntry['value'];
-                               break;
-                       }
-               }
-
-               // Return the current position
-               return $content;
-       }
-
-       /**
-        * Add a variable to the stack
-        *
-        * @param               $var            The variable we are looking for
-        * @param               $value  The value we want to store in the variable
-        * @return      void
-        */
-       private function addVariable ($var, $value) {
-               // Add it to the stack
-               $this->varStack->append(array(
-                       'name'  => trim($var),
-                       'value' => trim($value)
-               ));
-       }
-
-       /**
-        * Modify an entry on the stack
-        *
-        * @param               $var            The variable we are looking for
-        * @param               $value  The value we want to store in the variable
-        * @return      void
-        */
-       private function modifyVariable ($var, $value) {
-               // It should be there so let's look again...
-               for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-                       // Get current entry
-                       $currEntry = $idx->current();
-
-                       // Is this the requested variable?
-                       if ($currEntry['name'] == $var) {
-                               // Change it to the other value
-                               $this->varStack->offsetSet($idx->key(), array(
-                                       'name'  => $var,
-                                       'value' => $value
-                               ));
-                       }
-               }
-       }
-
-       /**
-        * Initialize the variable stack. This holds all variables for later
-        * compilation.
-        *
-        * @return      void
-        */
-       public final function initVariableStack () {
-               $this->varStack = new FrameworkArrayObject("FakedVariableStack");
-       }
-
-       /**
-        * Setter for base path
-        *
-        * @param               $basePath               The local base path for all templates
-        * @return      void
-        */
-       public final function setBasePath ($basePath) {
-               // Cast it
-               $basePath = (string) $basePath;
-
-               // And set it
-               $this->basePath = $basePath;
-       }
-
-       /**
-        * Getter for base path
-        *
-        * @return      $basePath               The local base path for all templates
-        */
-       public final function getBasePath () {
-               // And set it
-               return $this->basePath;
-       }
-
-       /**
-        * Setter for template extension
-        *
-        * @param               $templateExtension      The file extension for all uncompiled
-        *                                                      templates
-        * @return      void
-        */
-       public final function setRawTemplateExtension ($templateExtension) {
-               // Cast it
-               $templateExtension = (string) $templateExtension;
-
-               // And set it
-               $this->templateExtension = $templateExtension;
-       }
-
-       /**
-        * Setter for code template extension
-        *
-        * @param               $codeExtension          The file extension for all uncompiled
-        *                                                      templates
-        * @return      void
-        */
-       public final function setCodeTemplateExtension ($codeExtension) {
-               // Cast it
-               $codeExtension = (string) $codeExtension;
-
-               // And set it
-               $this->codeExtension = $codeExtension;
-       }
-
-       /**
-        * Getter for template extension
-        *
-        * @return      $templateExtension      The file extension for all uncompiled
-        *                                                      templates
-        */
-       public final function getRawTemplateExtension () {
-               // And set it
-               return $this->templateExtension;
-       }
-
-       /**
-        * Getter for code-template extension
-        *
-        * @return      $codeExtension          The file extension for all code-
-        *                                                      templates
-        */
-       public final function getCodeTemplateExtension () {
-               // And set it
-               return $this->codeExtension;
-       }
-
-       /**
-        * Setter for path of compiled templates
-        *
-        * @param               $compileOutputPath              The local base path for all
-        *                                                              compiled templates
-        * @return      void
-        */
-       public final function setCompileOutputPath ($compileOutputPath) {
-               // Cast it
-               $compileOutputPath = (string) $compileOutputPath;
-
-               // And set it
-               $this->compileOutputPath = $compileOutputPath;
-       }
-
-       /**
-        * Setter for template type. Only "html", "emails" and "compiled" should
-        * be sent here
-        *
-        * @param               $templateType   The current template's type
-        * @return      void
-        */
-       private final function setTemplateType ($templateType) {
-               // Cast it
-               $templateType = (string) $templateType;
-
-               // And set it (only 2 letters)
-               $this->templateType = $templateType;
-       }
-
-       /**
-        * Getter for template type
-        *
-        * @return      $templateType   The current template's type
-        */
-       public final function getTemplateType () {
-               return $this->templateType;
-       }
-
-       /**
-        * Setter for the last loaded template's FQFN
-        *
-        * @param               $template               The last loaded template
-        * @return      void
-        */
-       private final function setLastTemplate ($template) {
-               // Cast it to string
-               $template = (string) $template;
-               $this->lastTemplate = $template;
-       }
-
-       /**
-        * Getter for the last loaded template's FQFN
-        *
-        * @return      $template               The last loaded template
-        */
-       private final function getLastTemplate () {
-               return $this->lastTemplate;
-       }
-
-       /**
-        * Assign (add) a given variable with a value
-        *
-        * @param               $var            The variable we are looking for
-        * @param               $value  The value we want to store in the variable
-        * @return      void
-        */
-       public final function assignVariable ($var, $value) {
-               // First search for the variable if it was already added
-               $idx = $this->isVariableAlreadySet($var);
-
-               // Was it found?
-               if ($idx === false) {
-                       // Add it to the stack
-                       $this->addVariable($var, $value);
-               } elseif (!empty($value)) {
-                       // Modify the stack entry
-                       $this->modifyVariable($var, $value);
-               }
-       }
-
-       /**
-        * Assign a given congfiguration variable with a value
-        *
-        * @param               $var            The configuration variable we are looking for
-        * @param               $value  The value we want to store in the variable
-        * @return      void
-        */
-       public final function assignConfigVariable ($var, $value) {
-               // Sweet and simple...
-               $this->configVariables[$var] = $value;
-       }
-
-       /**
-        * Removes a given variable
-        *
-        * @param               $var            The variable we are looking for
-        * @return      void
-        */
-       public final function removeVariable ($var) {
-               // First search for the variable if it was already added
-               $idx = $this->isVariableAlreadySet($var);
-
-               // Was it found?
-               if ($idx !== false) {
-                       // Remove this variable
-                       $this->varStack->offsetUnset($idx);
-               }
-       }
-
-       /**
-        * Private setter for raw template data
-        *
-        * @param               $rawTemplateData        The raw data from the template
-        * @return      void
-        */
-       private final function setRawTemplateData ($rawTemplateData) {
-               // Cast it to string
-               $rawTemplateData = (string) $rawTemplateData;
-
-               // And store it in this class
-               $this->rawTemplateData = $rawTemplateData;
-       }
-
-       /**
-        * Private setter for compiled templates
-        */
-       private final function setCompiledData ($compiledData) {
-               // Cast it to string
-               $compiledData = (string) $compiledData;
-
-               // And store it in this class
-               $this->compiledData = $compiledData;
-       }
-
-       /**
-        * Private loader for all template types
-        *
-        * @param               $template               The template we shall load
-        * @return      void
-        */
-       private final function loadTemplate ($template) {
-               // Cast it to string
-               $template = (string) $template;
-
-               // Get extension for the template
-               $ext = $this->getRawTemplateExtension();
-
-               // If we shall load a code-template we need to switch the file extension
-               if ($this->getTemplateType() == $this->getConfigInstance()->readConfig('code_template_type')) {
-                       // Switch over to the code-template extension
-                       $ext = $this->getCodeTemplateExtension();
-               }
-
-               // Construct the FQFN for the template by honoring the current language
-               $fqfn = sprintf("%s%s/%s/%s%s",
-                       $this->getBasePath(),
-                       $this->getLanguageInstance()->getLanguageCode(),
-                       $this->getTemplateType(),
-                       $template,
-                       $ext
-               );
-
-               // Load the raw template data
-               $this->loadRawTemplateData($fqfn);
-       }
-
-       /**
-        * A private loader for raw template names
-        *
-        * @param               $fqfn   The full-qualified file name for a template
-        * @return      void
-        * @throws      NullPointerException    If $inputInstance is null
-        * @throws      NoObjectException               If $inputInstance is not an object
-        * @throws      MissingMethodException  If $inputInstance is missing a
-        *                                                              required method
-        */
-       private function loadRawTemplateData ($fqfn) {
-               // Get a input/output instance from the middleware
-               $ioInstance = $this->getFileIoInstance();
-
-               // Validate the instance
-               if (is_null($ioInstance)) {
-                       // Throw exception
-                       throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
-               } elseif (!is_object($ioInstance)) {
-                       // Throw another exception
-                       throw new NoObjectException($ioInstance, self::EXCEPTION_IS_NO_OBJECT);
-               } elseif (!method_exists($ioInstance, 'loadFileContents')) {
-                       // Throw yet another exception
-                       throw new MissingMethodException(array($ioInstance, 'loadFileContents'), self::EXCEPTION_MISSING_METHOD);
-               }
-
-               // Load the raw template
-               $rawTemplateData = $ioInstance->loadFileContents($fqfn);
-
-               // Store the template's contents into this class
-               $this->setRawTemplateData($rawTemplateData);
-
-               // Remember the template's FQFN
-               $this->setLastTemplate($fqfn);
-       }
-
-       /**
-        * Try to assign an extracted template variable as a "content" or "config"
-        * variable.
-        *
-        * @param               $varName                The variable's name (shall be content or
-        *                                              config) by default
-        * @param               $var                    The variable we want to assign
-        */
-       private function assignTemplateVariable ($varName, $var) {
-               // Is it not a config variable?
-               if ($varName != "config") {
-                       // Regular template variables
-                       $this->assignVariable($var, "");
-               } else {
-                       // Configuration variables
-                       $this->assignConfigVariable($var, $this->getConfigInstance()->readConfig($var));
-               }
-       }
-
-       /**
-        * Extract variables from a given raw data stream
-        *
-        * @param       $rawData        The raw template data we shall analyze
-        * @return      void
-        */
-       private function extractVariablesFromRawData ($rawData) {
-               // Cast to string
-               $rawData = (string) $rawData;
-
-               // Search for variables
-               @preg_match_all('/\$(\w+)(\[(\w+)\])?/', $rawData, $variableMatches);
-
-               // Did we find some variables?
-               if ((is_array($variableMatches)) && (count($variableMatches) == 4) && (count($variableMatches[0]) > 0)) {
-                       // Initialize all missing variables
-                       foreach ($variableMatches[3] as $key=>$var) {
-                               // Try to assign it, empty strings are being ignored
-                               $this->assignTemplateVariable($variableMatches[1][$key], $var);
-                       }
-               }
-       }
-
-       /**
-        * Main analysis of the loaded template
-        *
-        * @param               $templateMatches        Found template place-holders, see below
-        * @return      void
-        *
-        *---------------------------------
-        * Structure of $templateMatches:
-        *---------------------------------
-        * [0] => Array - An array with all full matches
-        * [1] => Array - An array with left part (before the ":") of a match
-        * [2] => Array - An array with right part of a match including ":"
-        * [3] => Array - An array with right part of a match excluding ":"
-        */
-       private function analyzeTemplate (array $templateMatches) {
-               // Backup raw template data
-               $backup = $this->getRawTemplateData();
-
-               // Initialize some arrays
-               if (is_null($this->loadedRawData)) { $this->loadedRawData = array(); $this->rawTemplates = array(); }
-
-               // Load all requested templates
-               foreach ($templateMatches[1] as $template) {
-
-                       // Load and compile only templates which we have not yet loaded
-                       // RECURSIVE PROTECTION! BE CAREFUL HERE!
-                       if ((!isset($this->loadedRawData[$template])) && (!in_array($template, $this->loadedTemplates))) {
-
-                               // Template not found, but maybe variable assigned?
-                               if ($this->isVariableAlreadySet($template) !== false) {
-                                       // Use that content here
-                                       $this->loadedRawData[$template] = $this->readVariable($template);
-
-                                       // Recursive protection:
-                                       $this->loadedTemplates[] = $template;
-                               } else {
-                                       // Then try to search for code-templates
-                                       try {
-                                               // Load the code template and remember it's contents
-                                               $this->loadCodeTemplate($template);
-                                               $this->loadedRawData[$template] = $this->getRawTemplateData();
-
-                                               // Remember this template for recursion detection
-                                               // RECURSIVE PROTECTION!
-                                               $this->loadedTemplates[] = $template;
-                                       } catch (FilePointerNotOpenedException $e) {
-                                               // Even this is not done... :/
-                                               $this->rawTemplates[] = $template;
-                                       }
-                               }
-
-                       } // if ((!isset( ...
-
-               } // for ($templateMatches ...
-
-               // Restore the raw template data
-               $this->setRawTemplateData($backup);
-       }
-
-       /**
-        * Compile a given raw template code and remember it for later usage
-        *
-        * @param               $code           The raw template code
-        * @param               $template               The template's name
-        * @return      void
-        */
-       private function compileCode ($code, $template) {
-               // Is this template already compiled?
-               if (in_array($template, $this->compiledTemplates)) {
-                       // Abort here...
-                       return;
-               }
-
-               // Remember this template being compiled
-               $this->compiledTemplates[] = $template;
-
-               // Compile the loaded code in five steps:
-               //
-               // 1. Backup current template data
-               $backup = $this->getRawTemplateData();
-
-               // 2. Set the current template's raw data as the new content
-               $this->setRawTemplateData($code);
-
-               // 3. Compile the template data
-               $this->compileTemplate();
-
-               // 4. Remember it's contents
-               $this->loadedRawData[$template] = $this->getRawTemplateData();
-
-               // 5. Restore the previous raw content from backup variable
-               $this->setRawTemplateData($backup);
-       }
-
-       /**
-        * Insert all given and loaded templates by running through all loaded
-        * codes and searching for their place-holder in the main template
-        *
-        * @param               $templateMatches        See method analyzeTemplate()
-        * @return      void
-        */
-       private function insertAllTemplates (array $templateMatches) {
-               // Run through all loaded codes
-               foreach ($this->loadedRawData as $template=>$code) {
-
-                       // Search for the template
-                       $foundIndex = array_search($template, $templateMatches[1]);
-
-                       // Lookup the matching template replacement
-                       if (($foundIndex !== false) && (isset($templateMatches[0][$foundIndex]))) {
-
-                               // Get the current raw template
-                               $rawData = $this->getRawTemplateData();
-
-                               // Replace the space holder with the template code
-                               $rawData = str_replace($templateMatches[0][$foundIndex], $code, $rawData);
-
-                               // Set the new raw data
-                               $this->setRawTemplateData($rawData);
-
-                       } // END - if
-
-               } // END - foreach
-       }
-
-       /**
-        * Load all extra raw templates
-        *
-        * @return      void
-        */
-       private function loadExtraRawTemplates () {
-               // Are there some raw templates we need to load?
-               if (count($this->rawTemplates) > 0) {
-                       // Try to load all raw templates
-                       foreach ($this->rawTemplates as $key => $template) {
-                               try {
-                                       // Load the template
-                                       $this->loadWebTemplate($template);
-
-                                       // Remember it's contents
-                                       $this->rawTemplates[$template] = $this->getRawTemplateData();
-
-                                       // Remove it from the loader list
-                                       unset($this->rawTemplates[$key]);
-
-                                       // Remember this template for recursion detection
-                                       // RECURSIVE PROTECTION!
-                                       $this->loadedTemplates[] = $template;
-                               } catch (FilePointerNotOpenedException $e) {
-                                       // This template was never found. We silently ignore it
-                                       unset($this->rawTemplates[$key]);
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Assign all found template variables
-        *
-        * @param               $varMatches     An array full of variable/value pairs.
-        * @return      void
-        */
-       private function assignAllVariables (array $varMatches) {
-               // Search for all variables
-               foreach ($varMatches[1] as $key=>$var) {
-
-                       // Detect leading equals
-                       if (substr($varMatches[2][$key], 0, 1) == "=") {
-                               // Remove and cast it
-                               $varMatches[2][$key] = (string) substr($varMatches[2][$key], 1);
-                       }
-
-                       // Do we have some quotes left and right side? Then it is free text
-                       if ((substr($varMatches[2][$key], 0, 1) == "\"") && (substr($varMatches[2][$key], -1, 1) == "\"")) {
-                               // Free string detected! Which we can assign directly
-                               $this->assignVariable($var, $varMatches[3][$key]);
-                       } elseif (!empty($varMatches[2][$key])) {
-                               // Non-string found so we need some deeper analysis...
-                               // @TODO Unfinished work or don't die here.
-                               die("Deeper analysis not yet implemented!");
-                       }
-
-               } // for ($varMatches ...
-       }
-       /**
-        * Compiles all loaded raw templates
-        *
-        * @param               $templateMatches        See method analyzeTemplate() for details
-        * @return      void
-        */
-       private function compileRawTemplateData (array $templateMatches) {
-               // Are some code-templates found which we need to compile?
-               if (count($this->loadedRawData) > 0) {
-
-                       // Then compile all!
-                       foreach ($this->loadedRawData as $template=>$code) {
-
-                               // Is this template already compiled?
-                               if (in_array($template, $this->compiledTemplates)) {
-                                       // Then skip it
-                                       continue;
-                               }
-
-                               // Search for the template
-                               $foundIndex = array_search($template, $templateMatches[1]);
-
-                               // Lookup the matching variable data
-                               if (($foundIndex !== false) && (isset($templateMatches[3][$foundIndex]))) {
-
-                                       // Split it up with another reg. exp. into variable=value pairs
-                                       preg_match_all($this->regExpVarValue, $templateMatches[3][$foundIndex], $varMatches);
-
-                                       // Assign all variables
-                                       $this->assignAllVariables($varMatches);
-
-                               } // END - if (isset($templateMatches ...
-
-                               // Compile the loaded template
-                               $this->compileCode($code, $template);
-
-                       } // END - foreach ($this->loadedRawData ...
-
-                       // Insert all templates
-                       $this->insertAllTemplates($templateMatches);
-
-               } // END - if (count($this->loadedRawData) ...
-       }
-
-       /**
-        * Inserts all raw templates into their respective variables
-        *
-        * @return      void
-        */
-       private function insertRawTemplates () {
-               // Load all templates
-               foreach ($this->rawTemplates as $template=>$content) {
-                       // Set the template as a variable with the content
-                       $this->assignVariable($template, $content);
-               }
-       }
-
-       /**
-        * Finalizes the compilation of all template variables
-        *
-        * @return      void
-        */
-       private function finalizeVariableCompilation () {
-               // Get the content
-               $content = $this->getRawTemplateData();
-
-               // Walk through all variables
-               for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-                       // Get current entry
-                       $currEntry = $idx->current();
-
-                       // Replace all [$var] or {?$var?} with the content
-                       //* DEBUG: */ echo "name=".$currEntry['name'].", value=<pre>".htmlentities($currEntry['value'])."</pre>\n";
-                       $content = str_replace("\$content[".$currEntry['name']."]", $currEntry['value'], $content);
-                       $content = str_replace("[".$currEntry['name']."]", $currEntry['value'], $content);
-                       $content = str_replace("{?".$currEntry['name']."?}", $currEntry['value'], $content);
-               } // END - for
-
-               // Set the content back
-               $this->setRawTemplateData($content);
-       }
-
-       /**
-        * Getter for raw template data
-        *
-        * @return      $rawTemplateData        The raw data from the template
-        */
-       public final function getRawTemplateData () {
-               return $this->rawTemplateData;
-       }
-
-       /**
-        * Getter for compiled templates
-        */
-       public final function getCompiledData () {
-               return $this->compiledData;
-       }
-
-       /**
-        * Load a specified web template into the engine
-        *
-        * @param               $template               The web template we shall load which is
-        *                                              located in "html" by default
-        * @return      void
-        */
-       public final function loadWebTemplate ($template) {
-               // Set template type
-               $this->setTemplateType($this->getConfigInstance()->readConfig('web_template_type'));
-
-               // Load the special template
-               $this->loadTemplate($template);
-       }
-
-       /**
-        * Load a specified email template into the engine
-        *
-        * @param               $template               The email template we shall load which is
-        *                                              located in "emails" by default
-        * @return      void
-        */
-       public final function loadEmailTemplate ($template) {
-               // Set template type
-               $this->setTemplateType($this->getConfigInstance()->readConfig('email_template_type'));
-
-               // Load the special template
-               $this->loadTemplate($template);
-       }
-
-       /**
-        * Load a specified code template into the engine
-        *
-        * @param               $template               The code template we shall load which is
-        *                                              located in "code" by default
-        * @return      void
-        */
-       public final function loadCodeTemplate ($template) {
-               // Set template type
-               $this->setTemplateType($this->getConfigInstance()->readConfig('code_template_type'));
-
-               // Load the special template
-               $this->loadTemplate($template);
-       }
-
-       /**
-        * Compile all variables by inserting their respective values
-        *
-        * @return      void
-        */
-       public final function compileVariables () {
-               // Initialize the $content array
-               $validVar = $this->getConfigInstance()->readConfig('tpl_valid_var');
-               $dummy = array();
-
-               // Iterate through all variables
-               for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-
-                       // Get current variable from the stack
-                       $currVariable = $idx->current();
-
-                       // Transfer it's name/value combination to the $content array
-                       //* DEBUG: */ echo $currVariable['name']."=<pre>".htmlentities($currVariable['value'])."</pre>\n";
-                       $dummy[$currVariable['name']] = $currVariable['value'];
-
-               }// END - if
-
-               // Set the new variable (don't remove the second dollar !)
-               $$validVar = $dummy;
-
-               // Prepare all configuration variables
-               $config = $this->configVariables;
-
-               // Remove some variables
-               unset($idx);
-               unset($currVariable);
-
-               // Run the compilation twice to get content from helper classes in
-               $cnt = 0;
-               while ($cnt < 3) {
-                       // Finalize the compilation of template variables
-                       $this->finalizeVariableCompilation();
-
-                       // Prepare the eval() command for comiling the template
-                       $eval = sprintf("\$result = \"%s\";",
-                               addslashes($this->getRawTemplateData())
-                       );
-
-                       // This loop does remove the backslashes (\) in PHP parameters
-                       // @TODO Make this some nicer...
-                       while (strpos($eval, "<?") !== false) {
-                               // Get left part before "<?"
-                               $evalLeft = substr($eval, 0, strpos($eval, "<?"));
-
-                               // Get all from right of "<?"
-                               $evalRight = substr($eval, (strpos($eval, "<?") + 2));
-
-                               // Is this a full PHP tag?
-                               if (substr(strtolower($evalRight), 0, 3) == "php") {
-                                       // Remove "php" string from full PHP tag
-                                       $evalRight = substr($evalRight, 3);
-                               } // END - if
-
-                               // Cut middle part out and remove escapes
-                               $evalMiddle = trim(substr($evalRight, 0, strpos($evalRight, "?>")));
-                               $evalMiddle = stripslashes($evalMiddle);
-
-                               // Remove the middle part from right one
-                               $evalRight = substr($evalRight, (strpos($evalRight, "?>") + 2));
-
-                               // And put all together
-                               $eval = sprintf("%s<%%php %s %%>%s", $evalLeft, $evalMiddle, $evalRight);
-                       } // END - while
-
-                       // Prepare PHP code for eval() command
-                       $eval = str_replace(
-                               "<%php", "\";",
-                               str_replace(
-                                       "%>", "\$result .= \"", $eval
-                               )
-                       );
-
-                       // Debug message
-                       if ((defined('DEBUG_EVAL')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Constructed PHP command: <pre><em>%s</em></pre><br />\n",
-                               $this->__toString(),
-                               htmlentities($eval)
-                       ));
-
-                       // Run the constructed command. This will "compile" all variables in
-                       eval($eval);
-
-                       // Set raw template data
-                       $this->setRawTemplateData($result);
-                       $cnt++;
-               }
-
-               // Set the new content
-               $this->setCompiledData($result);
-       }
-
-       /**
-        * Compile all required templates into the current loaded one
-        *
-        * @return      void
-        * @throws      UnexpectedTemplateTypeException If the template type is
-        *                                                                                      not "code"
-        * @throws      InvalidArrayCountException              If an unexpected array
-        *                                                                                      count has been found
-        */
-       public final function compileTemplate () {
-               // We will only work with template type "code" from configuration
-               if ($this->getTemplateType() != $this->getConfigInstance()->readConfig('code_template_type')) {
-                       // Abort here
-                       throw new UnexpectedTemplateTypeException(array($this, $this->getTemplateType(), $this->getConfigInstance()->readConfig('code_template_type')), self::EXCEPTION_TEMPLATE_TYPE_IS_UNEXPECTED);
-               } // END - if
-
-               // Get the raw data.
-               $rawData = $this->getRawTemplateData();
-
-               // Remove double spaces and trim leading/trailing spaces
-               $rawData = trim(str_replace("  ", " ", $rawData));
-
-               // Search for raw variables
-               $this->extractVariablesFromRawData($rawData);
-
-               // Search for code-tags which are {? ?}
-               preg_match_all($this->regExpCodeTags, $rawData, $templateMatches);
-
-               // Analyze the matches array
-               if ((is_array($templateMatches)) && (count($templateMatches) == 4) && (count($templateMatches[0]) > 0)) {
-                       // Entries are found:
-                       //
-                       // The main analysis
-                       $this->analyzeTemplate($templateMatches);
-
-                       // Compile raw template data
-                       $this->compileRawTemplateData($templateMatches);
-
-                       // Are there some raw templates left for loading?
-                       $this->loadExtraRawTemplates();
-
-                       // Are some raw templates found and loaded?
-                       if (count($this->rawTemplates) > 0) {
-
-                               // Insert all raw templates
-                               $this->insertRawTemplates();
-
-                               // Remove the raw template content as well
-                               $this->setRawTemplateData("");
-
-                       } // END - if
-
-               } // END - if($templateMatches ...
-       }
-
-       /**
-        * Output the compiled page to the outside world. In case of web templates
-        * this would be vaild (X)HTML code. And in case of email templates this
-        * would store a prepared email body inside the template engine.
-        *
-        * @return      void
-        */
-       public final function output () {
-               // Check which type of template we have
-               switch ($this->getTemplateType()) {
-               case "html": // Raw HTML templates can be send to the output buffer
-                       // Quick-N-Dirty:
-                       $this->getWebOutputInstance()->output($this->getCompiledData());
-                       break;
-
-               default: // Unknown type found
-                       // Construct message
-                       $msg = sprintf("[%s:] Unknown/unsupported template type <strong>%s</strong> detected.",
-                               $this->__toString(),
-                               $this->getTemplateType()
-                       );
-
-                       if ((is_object($this->getDebugInstance())) && (method_exists($this->getDebugInstance(), 'output'))) {
-                               // Use debug output handler
-                               $this->getDebugInstance()->output($msg);
-                               die();
-                       } else {
-                               // Put directly out
-                               // DO NOT REWRITE THIS TO app_die() !!!
-                               die($msg);
-                       }
-                       break;
-               }
-       }
-
-       /**
-        * Loads a given view helper (by name)
-        *
-        * @param       $helperName     The helper's name
-        * @return      void
-        * @throws      ViewHelperNotFoundException     If the given view helper was not found
-        */
-       protected function loadViewHelper ($helperName) {
-               // Make first character upper case, rest low
-               $helperName = ucfirst($helperName);
-
-               // Is this view helper loaded?
-               if (!isset($this->helpers[$helperName])) {
-                       // Create a class name
-                       $className = "{$helperName}ViewHelper";
-
-                       // Does this class exists?
-                       if (!class_exists($className)) {
-                               // Abort here!
-                               throw new ViewHelperNotFoundException(array($this, $helperName), self::EXCEPTION_INVALID_VIEW_HELPER);
-                       }
-
-                       // Generate new instance
-                       $eval = sprintf("\$this->helpers[%s] = %s::create%s();",
-                               $helperName,
-                               $className,
-                               $className
-                       );
-
-                       // Run the code
-                       eval($eval);
-               }
-
-               // Return the requested instance
-               return $this->helpers[$helperName];
-       }
-
-       /**
-        * Assigns the last loaded raw template content with a given variable
-        *
-        * @param       $templateName   Name of the template we want to assign
-        * @param       $variableName   Name of the variable we want to assign
-        * @return      void
-        */
-       public function assignTemplateWithVariable ($templateName, $variableName) {
-               // Get the content from last loaded raw template
-               $content = $this->getRawTemplateData();
-
-               // Assign the variable
-               $this->assignVariable($variableName, $content);
-
-               // Purge raw content
-               $this->setRawTemplateData("");
-       }
-
-       /**
-        * Transfers the content of this template engine to a given response instance
-        *
-        * @param       $responseInstance       An instance of a response class
-        * @return      void
-        */
-       public function transferToResponse (Responseable $responseInstance) {
-               // Get the content and set it in the response class
-               $responseInstance->writeToBody($this->getCompiledData());
-       }
-
-       /**
-        * Assigns all the application data with template variables
-        *
-        * @param       $appInstance    A manageable application instance
-        * @return      void
-        */
-       public function assignApplicationData (ManageableApplication $appInstance) {
-               // Get long name and assign it
-               $this->assignVariable("app_full_name" , $appInstance->getAppName());
-
-               // Get short name and assign it
-               $this->assignVariable("app_short_name", $appInstance->getAppShortName());
-
-               // Get version number and assign it
-               $this->assignVariable("app_version"   , $appInstance->getAppVersion());
-       }
-}
-
-// [EOF]
-?>
index 210002ffe9dd04119b6b200b532a4d112c857b70..68d1cbef656889d941dc91e3076d62b840428f74 100644 (file)
@@ -100,7 +100,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl
                $tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
 
                // Absolute output path for compiled templates
-               $tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
+               $tplInstance->setCompileOutputPath($cfgInstance->readConfig('base_path') . $cfgInstance->readConfig('compile_output_path'));
 
                // Return the prepared instance
                return $tplInstance;
index fbe229d7cf9454630a22705204104bf17dec3414..8fcd0f9e5f685b963bb454fec23dbd736c4d6246 100644 (file)
@@ -100,7 +100,7 @@ class MailTemplateEngine extends BaseTemplateEngine implements CompileableTempla
                $tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
 
                // Absolute output path for compiled templates
-               $tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
+               $tplInstance->setCompileOutputPath($cfgInstance->readConfig('base_path') . $cfgInstance->readConfig('compile_output_path'));
 
                // Return the prepared instance
                return $tplInstance;
index d166f9f0191ca14e0ccfbe2b43711a16ad6c9348..61a6bbb1075a90d2ebe55c06794dd543614f7bf0 100644 (file)
@@ -81,7 +81,7 @@ class WebTemplateEngine extends BaseTemplateEngine implements CompileableTemplat
                $tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
 
                // Absolute output path for compiled templates
-               $tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
+               $tplInstance->setCompileOutputPath($cfgInstance->readConfig('base_path') . $cfgInstance->readConfig('compile_output_path'));
 
                // Return the prepared instance
                return $tplInstance;
index 1d9fe9b43e45671eb24ed75597b79d134debb52a..736ea4b501c14eb7261912180802c355d49049e1 100644 (file)
@@ -98,25 +98,6 @@ class DatabaseConnection extends BaseMiddleware implements DatabaseConnector, Re
                $this->dbLayer = $dbLayer;
        }
 
-       /**
-        * 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
-        * @return      $isUnused               true    = The unique ID was not found in the database,
-        *                                                      false = It is already in use by an other object
-        */
-       public function isUniqueIdUsed ($uniqueID, $inConstructor = false) {
-               // Connect to the database
-               $this->dbLayer->connectToDatabase();
-
-               // Pass the returning result through
-               return $this->dbLayer->isUniqueIdUsed($uniqueID, $inConstructor);
-       }
-
        /**
         * Runs a "select" statement on the database layer with given table name
         * and criteria. If this doesn't fail the result will be returned
index 4c306dd1a19e91c3e06e78faf315e00bd41ac369..cdda5d45d68ad99a3d723d59c9d2cf946193d822 100644 (file)
@@ -200,7 +200,7 @@ class WernisApi extends BaseFrameworkSystem {
 
                // Construct the request string
                $requestString = $this->config['api_url'] . $scriptName."?api_id=".$this->config['wernis_api_id']."&api_key=".$this->config['wernis_api_key'];
-               foreach ($requestData as $key=>$value) {
+               foreach ($requestData as $key => $value) {
                        $requestString .= "&".$key."=".$value;
                }
 
index 4c739507448a53cf20f9560a624a52a63c294fa8..d50782a1daac0c90a0eb5d57dd1d1ec9749ee8fe 100644 (file)
 $cfg = FrameworkConfiguration::createFrameworkConfiguration();
 
 // CFG: SERVER-PATH
-$cfg->definePath(dirname(dirname(__FILE__)) . '/'); // DON'T MISS THE TRAILING SLASH!!!
+$cfg->setConfigEntry('base_path', (dirname(dirname(__FILE__)) . '/')); // DON'T MISS THE TRAILING SLASH!!!
 
 // CFG: BASE-URL
 $cfg->setConfigEntry('base_url', $cfg->detectBaseUrl());
 
 // CFG: DATABASE-TYPE
-$cfg->defineDatabaseType('local');
+$cfg->setConfigEntry('db_type', "local");
 
 // CFG: LOCAL-DB-PATH
-$cfg->setConfigEntry('local_db_path', "db/");
+$cfg->setConfigEntry('local_db_path', $cfg->readConfig('base_path') . "db/");
 
 // CFG: TIME-ZONE
 $cfg->setDefaultTimezone("Europe/Berlin");
@@ -84,7 +84,7 @@ $cfg->setConfigEntry('lang_base_path', "inc/language/"); // DON'T MISS THE TRAIL
 $cfg->setConfigEntry('compressor_base_path', "inc/classes/main/compressor/"); // DON'T MISS THE TRAILING SLASH!
 
 // CFG: APPLICATION-PATH
-$cfg->setConfigEntry('application_path', "application");
+$cfg->setConfigEntry('application_path', $cfg->readConfig('base_path') . "application/");
 
 // CFG: COMPILE-OUTPUT-PATH
 $cfg->setConfigEntry('compile_output_path', "templates/_compiled/"); // DON'T MISS THE TRAILING SLASH!
@@ -116,9 +116,6 @@ $cfg->setConfigEntry('tpl_selector_prefix', "selector");
 // CFG: WEB-CONTENT-TYPE
 $cfg->setConfigEntry('web_content_type', "text/html");
 
-// CFG: HEADER-CHARSET
-$cfg->setConfigEntry('header_charset', "utf-8");
-
 // CFG: VALID-TEMPLATE-VARIABLE
 $cfg->setConfigEntry('tpl_valid_var', "content");
 
index 6bfdfbf7c1efab379a9cb45a1c0a2bd9e4d0b6ad..8f6fa15f45cd254137a917bb7744bd481a3974f8 100644 (file)
@@ -139,7 +139,7 @@ class FrameworkConfiguration implements Registerable {
                                        // Base path added? (Uni* / Windows)
                                        if ((substr($inc, 0, 1) != "/") && (substr($inc, 1, 1) != ":")) {
                                                // Generate FQFN
-                                               $fqfn = sprintf("%s/inc/extra/%s", PATH, $inc);
+                                               $fqfn = sprintf("%s/inc/extra/%s", $this->readConfig('base_path'), $inc);
                                        } // END - if
                                } // END - if
 
@@ -149,63 +149,14 @@ class FrameworkConfiguration implements Registerable {
                } // END - if
        }
 
-       /**
-        * Define the database type which must be valid and will not be verified.
-        *
-        * @param               $type   The database type. See path inc/database/.
-        * @return      void
-        */
-       public function defineDatabaseType ($type) {
-               // Is it defined or not?
-               if (defined('_DB_TYPE')) {
-                       // Already defined! But we cannot throw an exception here... :(
-                       ApplicationEntryPoint::app_die(sprintf("[%s:] Please define the database type only once in your application!",
-                               __CLASS__
-                       ));
-               }
-
-               // Set the constant
-               define('_DB_TYPE', (string) $type);
-       }
-
-       /**
-        * Define the local file path
-        *
-        * @param               $path   Local file path for include files.
-        * @return      void
-        */
-       public function definePath ($path) {
-               // Cast to string
-               $path = (string) $path;
-
-               // Replace backslashes with slashes
-               $path = str_replace("\\", "/", $path);
-
-               // Is it defined or not?
-               if ((!is_dir($path)) || (!is_readable($path))) {
-                       // Is not a valid path
-                       ApplicationEntryPoint::app_die(sprintf("[%s:] Invalid path (not found) specified. Please make sure it is created.",
-                               __CLASS__
-                       ));
-               } elseif (defined('PATH')) {
-                       // Already defined! But we cannot throw an exception here... :(
-                       ApplicationEntryPoint::app_die(sprintf("[%s:] Please define the local file path only once in your application.",
-                               __CLASS__
-                       ));
-               }
-
-               // Define path here
-               define('PATH', $path);
-       }
-
        /**
         * Read a configuration element.
         *
-        * @param               $cfgEntry       The configuration element
+        * @param       $cfgEntry       The configuration element
         * @return      $cfgValue       The fetched configuration value
-        * @throws      ConfigEntryIsEmptyException     If $cfgEntry is empty
+        * @throws      ConfigEntryIsEmptyException             If $cfgEntry is empty
         * @throws      ConfigEntryNotFoundException    If a configuration element
-        *                                                                      was not found
+        *                                                                                      was not found
         */
        public function readConfig ($cfgEntry) {
                // Cast to string
@@ -232,8 +183,8 @@ class FrameworkConfiguration implements Registerable {
        /**
         * Set a configuration entry.
         *
-        * @param               $cfgEntry       The configuration entry we want to add/change
-        * @param               $cfgValue       The configuration value we want to set
+        * @param       $cfgEntry       The configuration entry we want to add/change
+        * @param       $cfgValue       The configuration value we want to set
         * @return      void
         * @throws      ConfigEntryIsEmptyException     If $cfgEntry is empty
         */
index 1d381d2e2b482139d043173e4caebb3e9d8c4dde..03bc377ac5d781427711d319ddd2a873b9f8202a 100644 (file)
  */
 
 // Initialize layer
-$layer = null;
+$layerInstance = null;
 
-// Is the type defined?
-if (!defined('_DB_TYPE')) {
-       // Abort here
-       ApplicationEntryPoint::app_die("[Main:] Please define a database type first!<br />
-E.g.:<pre>&#36;cfg->defineDatabaseType(&quot;local&quot;);</pre>
-This will choose the local file-based database layer.");
-}
+// Get config instance
+$cfg = FrameworkConfiguration::getInstance();
 
 // Generate FQFN for the database layer
 $INC = sprintf("%sinc/database/lib-%s%s",
-       PATH,
-       _DB_TYPE,
-       FrameworkConfiguration::getInstance()->readConfig('php_extension')
+       $cfg->readConfig('base_path'),
+       $cfg->readConfig('db_type'),
+       $cfg->readConfig('php_extension')
 );
 
 // Load the database layer include
@@ -47,7 +42,7 @@ if ((file_exists($INC)) && (is_file($INC)) && (is_readable($INC))) {
 } else {
        // Layer is missing!
        ApplicationEntryPoint::app_die(sprintf("[Main:] Database layer is missing! (%s) -&gt; R.I.P.",
-               _DB_TYPE
+               $cfg->readConfig('db_type')
        ));
 }
 
@@ -56,7 +51,7 @@ unset($INC);
 
 // Prepare database instance
 try {
-       $db = DatabaseConnection::createDatabaseConnection(DebugMiddleware::getInstance(), $layer);
+       $db = DatabaseConnection::createDatabaseConnection(DebugMiddleware::getInstance(), $layerInstance);
 } catch (NullPointerException $e) {
        ApplicationEntryPoint::app_die(sprintf("[Main:] Database sub-system not initialized for the follwing reason: <strong>%s</strong><br />\n",
                $e->getMessage()
index 7216bedd6eedf727fe74b77fe305fac57e115f85..ae748c5de1024d95682c0a906b1dbaed43bfa884 100644 (file)
@@ -24,7 +24,7 @@
 
 // Zum Testen speichern wir in lokale Dateien (LocalFileDatabase)
 try {
-       $layer = LocalFileDatabase::createLocalFileDatabase(PATH . FrameworkConfiguration::getInstance()->readConfig('local_db_path'), FileIoHandler::getInstance());
+       $layerInstance = LocalFileDatabase::createLocalFileDatabase(FrameworkConfiguration::getInstance()->readConfig('local_db_path'), FileIoHandler::getInstance());
 } catch (SavePathIsEmptyException $e) {
        ApplicationEntryPoint::app_die(sprintf("[Main:] Database layer could not be initialized. Reason: <strong>%s</strong>",
                $e->getMessage()
index 41933d9544f8b36974032ce942b3ebdc819cc070..54bd39be01546f744b9cb064b576ab3cc833377f 100644 (file)
@@ -26,7 +26,7 @@
 $cfg = FrameworkConfiguration::getInstance();
 
 // Include the class loader function
-require(sprintf("%sinc/loader/class_ClassLoader%s", PATH, $cfg->readConfig('php_extension')));
+require(sprintf("%sinc/loader/class_ClassLoader%s", $cfg->readConfig('base_path'), $cfg->readConfig('php_extension')));
 
 // Does the user has an application specified?
 if (!empty($_GET['app'])) {
@@ -71,7 +71,7 @@ function __autoload ($className) {
 /**
  * Is the devel package included?
  */
-if (is_dir(sprintf("%sdevel", PATH))) {
+if (is_dir(sprintf("%sdevel", $cfg->readConfig('base_path')))) {
        /**
         * Load all development includes
         */
index 3f7c3859cbc2e97cf2785b8a36c3d056c33ba129..6db17c0ba7bb4ec55caf0da4b4ad868de3734dbf 100644 (file)
@@ -22,7 +22,7 @@
  */
 try {
        $lang = LanguageSystem::createLanguageSystem(sprintf("%s%s",
-               PATH,
+               $cfg->readConfig('base_path'),
                FrameworkConfiguration::getInstance()->readConfig('lang_base_path')
        ));
 } catch (LanguagePathIsEmptyException $e) {
index 7297c7d199355193949bb933514ff1e88c3d7fff..134b8c10d4af9d7a533065d105da41c4f92c09c6 100644 (file)
@@ -119,8 +119,8 @@ class ClassLoader {
 
                // Construct the FQFN for the cache
                if (!defined('DEVELOPER')) {
-                       $this->listCacheFQFN  = PATH . $this->cfgInstance->readConfig('local_db_path') . "list-" . $this->cfgInstance->readConfig('app_name') . ".cache";
-                       $this->classCacheFQFN = PATH . $this->cfgInstance->readConfig('local_db_path') . "class-" . $this->cfgInstance->readConfig('app_name') . ".cache";
+                       $this->listCacheFQFN  = $this->cfgInstance->readConfig('local_db_path') . "list-" . $this->cfgInstance->readConfig('app_name') . ".cache";
+                       $this->classCacheFQFN = $this->cfgInstance->readConfig('local_db_path') . "class-" . $this->cfgInstance->readConfig('app_name') . ".cache";
                } // END - if
 
                // Set suffix and prefix from configuration
@@ -208,8 +208,8 @@ class ClassLoader {
        /**
         * Scans recursively a local path for class files which must have a prefix and a suffix as given by $this->suffix and $this->prefix
         *
-        * @param               $basePath               The relative base path to PATH constant for all classes
-        * @param               $ignoreList     An optional list (array or string) of directory names which shall be ignored
+        * @param       $basePath               The relative base path to 'base_path' constant for all classes
+        * @param       $ignoreList             An optional list (array or string) of directory names which shall be ignored
         * @return      void
         */
        public function loadClasses ($basePath, $ignoreList = array() ) {
@@ -280,7 +280,7 @@ class ClassLoader {
                $this->prefixLen = strlen($this->prefix);
 
                // Set base directory
-               $basePath = sprintf("%sinc/config/", PATH);
+               $basePath = sprintf("%sinc/config/", $this->cfgInstance->readConfig('base_path'));
 
                // Load all classes from the config directory
                $this->loadClasses($basePath);
@@ -334,7 +334,7 @@ class ClassLoader {
         */
        private function includeExtraConfigs () {
                // Run through all class names (should not be much)
-               foreach ($this->classes as $fileName=>$fqfn) {
+               foreach ($this->classes as $fileName => $fqfn) {
                        // Is this a config?
                        if (substr($fileName, 0, $this->prefixLen) == $this->prefix) {
                                // Then include it
index a1ae868810ed07cc3b140d2a876d625c43039877..ddab76926ef76f12dcc80b111927c49d7f854c08 100644 (file)
@@ -45,8 +45,7 @@ foreach ($configAppIncludes as $inc) {
        }
 
        // Generate a FQFN for the helper class
-       $fqfn = sprintf("%s%s/%s/%s%s",
-               PATH,
+       $fqfn = sprintf("%s%s/%s%s",
                $cfg->readConfig('application_path'),
                $cfg->readConfig('app_name'),
                $inc,
index 9d61748040789a81eec21cfd61263ca3a1ff4d9b..5b3894a3797ad1534645ad861269651dba6c1180 100644 (file)
--- a/index.php
+++ b/index.php
@@ -68,7 +68,7 @@ class ApplicationEntryPoint {
                if (empty($message)) {
                        // No message provided
                        $message = "No message provided!";
-               }
+               } // END - if
 
                // Get some instances
                $tpl = FrameworkConfiguration::getInstance()->readConfig('template_class');
@@ -93,13 +93,25 @@ class ApplicationEntryPoint {
                        // Get and prepare backtrace for output
                        $backtraceArray = debug_backtrace();
                        $backtrace = "";
-                       foreach ($backtraceArray as $key=>$trace) {
+                       foreach ($backtraceArray as $key => $trace) {
                                if (!isset($trace['file'])) $trace['file'] = __FILE__;
                                if (!isset($trace['line'])) $trace['line'] = __LINE__;
                                if (!isset($trace['args'])) $trace['args'] = array();
                                $backtrace .= "<span class=\"backtrace_file\">".basename($trace['file'])."</span>:".$trace['line'].", <span class=\"backtrace_function\">".$trace['function']."(".count($trace['args']).")</span><br />";
                        } // END - foreach
 
+                       // Init application instance
+                       $appInstance = null;
+
+                       // Is the class there?
+                       if (class_exists('ApplicationHelper')) {
+                               // Get application instance
+                               $appInstance = ApplicationHelper::getInstance();
+
+                               // Assign application data
+                               $templateInstance->assignApplicationData($appInstance);
+                       } // END - if
+
                        // Assign variables
                        $templateInstance->assignVariable('message', $message);
                        $templateInstance->assignVariable('code', $code);
@@ -150,13 +162,13 @@ class ApplicationEntryPoint {
                require(dirname(__FILE__) . '/inc/config.php');
 
                // Load all include files
-               require(PATH . 'inc/includes.php');
+               require($cfg->readConfig('base_path') . 'inc/includes.php');
 
                // Load all framework classes
-               require(PATH . 'inc/classes.php');
+               require($cfg->readConfig('base_path') . 'inc/classes.php');
 
                // Include the application selector
-               require(PATH . 'inc/selector.php');
+               require($cfg->readConfig('base_path') . 'inc/selector.php');
        } // END - main()
 
 } // END - class