From 085ea87b1cf68367500311a90fff3e2715ff32a9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Wed, 7 Oct 2009 18:26:11 +0000 Subject: [PATCH] Initial copied required files and directories --- .gitattributes | 13 ++ application/qa/.htaccess | 1 + application/qa/class_ApplicationHelper.php | 255 +++++++++++++++++++++ application/qa/config.php | 80 +++++++ application/qa/data.php | 51 +++++ application/qa/debug.php | 26 +++ application/qa/exceptions.php | 85 +++++++ application/qa/exceptions/.htaccess | 1 + application/qa/init.php | 53 +++++ application/qa/interfaces/.htaccess | 1 + application/qa/loader.php | 39 ++++ application/qa/main/.htaccess | 1 + application/qa/starter.php | 53 +++++ application/qa/templates/.htaccess | 1 + 14 files changed, 660 insertions(+) create mode 100644 application/qa/.htaccess create mode 100644 application/qa/class_ApplicationHelper.php create mode 100644 application/qa/config.php create mode 100644 application/qa/data.php create mode 100644 application/qa/debug.php create mode 100644 application/qa/exceptions.php create mode 100644 application/qa/exceptions/.htaccess create mode 100644 application/qa/init.php create mode 100644 application/qa/interfaces/.htaccess create mode 100644 application/qa/loader.php create mode 100644 application/qa/main/.htaccess create mode 100644 application/qa/starter.php create mode 100644 application/qa/templates/.htaccess diff --git a/.gitattributes b/.gitattributes index 01b4f85..99a52ea 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,18 @@ * text=auto !eol /Doxyfile -text +application/qa/.htaccess -text +application/qa/class_ApplicationHelper.php -text +application/qa/config.php -text +application/qa/data.php -text +application/qa/debug.php -text +application/qa/exceptions.php -text +application/qa/exceptions/.htaccess -text +application/qa/init.php -text +application/qa/interfaces/.htaccess -text +application/qa/loader.php -text +application/qa/main/.htaccess -text +application/qa/starter.php -text +application/qa/templates/.htaccess -text /clear-cache.sh -text db/.htaccess -text db/news/.htaccess -text diff --git a/application/qa/.htaccess b/application/qa/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/application/qa/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/qa/class_ApplicationHelper.php b/application/qa/class_ApplicationHelper.php new file mode 100644 index 0000000..8fcf4bd --- /dev/null +++ b/application/qa/class_ApplicationHelper.php @@ -0,0 +1,255 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ +class ApplicationHelper extends BaseApplication implements ManageableApplication, Registerable { + /** + * The version number of this application + */ + private $appVersion = ""; + + /** + * The human-readable name for this application + */ + private $appName = ""; + + /** + * The short uni*-like name for this application + */ + private $shortName = ""; + + /** + * An instance of a controller + */ + private $controllerInstance = null; + + /** + * An instance of this class + */ + private static $thisInstance = null; + + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Getter for an instance of this class + * + * @return $thisInstance An instance of this class + */ + public final static function getInstance () { + // Is the instance there? + if (is_null(self::$thisInstance)) { + self::$thisInstance = new ApplicationHelper(); + } + + // Return the instance + return self::$thisInstance; + } + + /** + * Getter for the version number + * + * @return $appVersion The application's version number + */ + public final function getAppVersion () { + return $this->appVersion; + } + + /** + * Setter for the version number + * + * @param $appVersion The application's version number + * @return void + */ + public final function setAppVersion ($appVersion) { + // Cast and set it + $appVersion = (string) $appVersion; + $this->appVersion = $appVersion; + } + + /** + * Getter for human-readable name + * + * @return $appName The application's human-readable name + */ + public final function getAppName () { + return $this->appName; + } + + /** + * Setter for human-readable name + * + * @param $appName The application's human-readable name + * @return void + */ + public final function setAppName ($appName) { + // Cast and set it + $appName = (string) $appName; + $this->appName = $appName; + } + + /** + * Getter for short uni*-like name + * + * @return $shortName The application's short uni*-like name + */ + public final function getAppShortName () { + return $this->shortName; + } + + /** + * Setter for short uni*-like name + * + * @param $shortName The application's short uni*-like name + * @return void + */ + public final function setAppShortName ($shortName) { + // Cast and set it + $shortName = (string) $shortName; + $this->shortName = $shortName; + } + + /** + * Builds the master template's name + * + * @return $masterTemplateName Name of the master template + */ + public function buildMasterTemplateName () { + // Get short name and add suffix + $masterTemplateName = str_replace("-", "", $this->getAppShortName()) . "_main"; + + // Return it + return $masterTemplateName; + } + + /** + * Launches the admin area + * + * @return void + */ + public final function entryPoint () { + // Create a new request object + $requestInstance = ObjectFactory::createObjectByName('HttpRequest'); + + // Remember request instance here + $this->setRequestInstance($requestInstance); + + // Default response is HTTP (HTML page) and type is 'Web' + $response = 'http'; + $responseType = 'web'; + + // Do we have another response? + if ($requestInstance->isRequestElementSet('request')) { + // Then use it + $response = strtolower($requestInstance->getRequestElement('request')); + $responseType = $response; + } // END - if + + // ... and a new response object + $responseClass = sprintf("%sResponse", $this->convertToClassName($response)); + $responseInstance = ObjectFactory::createObjectByName($responseClass, array($this)); + + // Remember response instance here + $this->setResponseInstance($responseInstance); + + // Get the parameter from the request + $commandName = $requestInstance->getRequestElement('page'); + + // If it is null then get default command + if (is_null($commandName)) { + // Get default command + $commandName = $responseInstance->getDefaultCommand(); + + // Set it in request + $requestInstance->setRequestElement('page', $commandName); + } // END - if + + // Get a resolver + $resolverClass = sprintf("%sControllerResolver", $this->convertToClassName($responseType)); + $resolverInstance = ObjectFactory::createObjectByName($resolverClass, array($commandName, $this)); + + // Get a controller instance as well + $this->controllerInstance = $resolverInstance->resolveController(); + + // Get a web output class + $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class', array($this)); + + // Set it in this application + $this->setWebOutputInstance($outputInstance); + + // Handle the request + $this->controllerInstance->handleRequest($requestInstance, $responseInstance); + } + + /** + * Handle the indexed array of fatal messages and puts them out in an + * acceptable fasion + * + * @param $messageList An array of fatal messages + * @return void + */ + public function handleFatalMessages (array $messageList) { + // Walk through all messages + foreach ($messageList as $message) { + print("MSG:".$message."
\n"); + } // END - if + } + + /** + * Assigns application-depending data + * + * @param $templateInstance An instance of a template engine + * @return void + */ + public function assignExtraTemplateData (CompileableTemplate $templateInstance) { + // Assign charset + $templateInstance->assignConfigVariable('header_charset'); + } +} + +// [EOF] +?> diff --git a/application/qa/config.php b/application/qa/config.php new file mode 100644 index 0000000..749cc4a --- /dev/null +++ b/application/qa/config.php @@ -0,0 +1,80 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// Get a configuration instance for shorter lines +$cfg = FrameworkConfiguration::getInstance(); + +// CFG: HEADER-CHARSET +$cfg->setConfigEntry('header_charset', 'utf-8'); + +// CFG: DEFAULT-WEB-COMMAND +$cfg->setConfigEntry('default_web_command', 'start'); + +// CFG: FORM-ACTION +$cfg->setConfigEntry('form_action', 'index.php?app={?app_short_name?}&page=do_form'); + +// CFG: FORM-METHOD +$cfg->setConfigEntry('form_method', 'post'); + +// CFG: FORM-TARGET +$cfg->setConfigEntry('form_target', '_self'); + +// CFG: NEWS-READER-HOME-CLASS +$cfg->setConfigEntry('news_reader_start_class', 'DefaultNewsReader'); + +// CFG: NEWS-DOWNLOAD-FILTER +$cfg->setConfigEntry('news_download_filter', 'NewsDownloadFilter'); + +// CFG: NEWS-PROCESS-FILTER +$cfg->setConfigEntry('news_process_filter', 'NewsProcessFilter'); + +// CFG: USER-AUTH-FILTER +$cfg->setConfigEntry('user_auth_filter', 'UserAuthFilter'); + +// CFG: USER-UPDATE-FILTER +$cfg->setConfigEntry('user_update_filter', 'UserUpdateFilter'); + +// CFG: BLOG-DATA-FILTER +$cfg->setConfigEntry('qa_data_filter', 'QualityAssuranceDataFetchFilter'); + +// CFG: NEWS-HOME-LIMIT +$cfg->setConfigEntry('news_start_limit', 10); + +// CFG: NEWS-BLOG-FAILED-LIMIT +$cfg->setConfigEntry('news_qa_failed_limit', 15); + +// CFG: RANDOM-STRING-LENGTH +$cfg->setConfigEntry('random_string_length', 100); + +// CFG: WEB-BLOCK-HELPER +$cfg->setConfigEntry('web_block_helper', 'WebBlockHelper'); + +// CFG: WEB-FORM-HELPER +$cfg->setConfigEntry('web_form_helper', 'WebFormHelper'); + +// CFG: WEB-LINK-HELPER +$cfg->setConfigEntry('web_link_helper', 'WebLinkHelper'); + +// [EOF] +?> diff --git a/application/qa/data.php b/application/qa/data.php new file mode 100644 index 0000000..6770e20 --- /dev/null +++ b/application/qa/data.php @@ -0,0 +1,51 @@ +isClass("ApplicationSelector"))) { return; } + * + * isset() is required to prevent a warning and is_object() is highly required + * when the application itself is requested in URL (hint: index.php?app=your_app) + * + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// Get config instance +$cfg = FrameworkConfiguration::getInstance(); + +// Get an instance of the helper +$app = call_user_func_array( + array($cfg->getConfigEntry('app_helper_class'), 'getInstance'), + array() +); + +// Set application name and version +$app->setAppName('Quality Assurance'); +$app->setAppVersion('0.0.0'); +$app->setAppShortName('qa'); + +// [EOF] +?> diff --git a/application/qa/debug.php b/application/qa/debug.php new file mode 100644 index 0000000..02446e9 --- /dev/null +++ b/application/qa/debug.php @@ -0,0 +1,26 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// [EOF] +?> diff --git a/application/qa/exceptions.php b/application/qa/exceptions.php new file mode 100644 index 0000000..85f160f --- /dev/null +++ b/application/qa/exceptions.php @@ -0,0 +1,85 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// Our own exception handler +function __exceptionHandler (FrameworkException $e) { + // Call the app_die() method + ApplicationEntryPoint::app_die(sprintf("[Main:] The application %s (%s) has terminated due to an uncaught exception: %s [%s]: %s Backtrace:
%s
", + ApplicationHelper::getInstance()->getAppName(), + ApplicationHelper::getInstance()->getAppShortName(), + $e->__toString(), + $e->getHexCode(), + $e->getMessage(), + $e->getPrintableBackTrace() + ), + $e->getHexCode(), + $e->getExtraData() + ); +} // END - function + +// Set the new handler +set_exception_handler('__exceptionHandler'); + +// Error handler +function __errorHandler ($errno, $errstr, $errfile, $errline, array $errcontext) { + // Construct the message + $message = sprintf("File: %s, Line: %s, Code: %s, Message: %s", + basename($errfile), + $errline, + $errno, + $errstr + ); + + // Throw an exception here + throw new FatalErrorException($message, BaseFrameworkSystem::EXCEPTION_FATAL_ERROR); +} // END - function + +// Set error handler +set_error_handler('__errorHandler'); + +// Assertion handler +function __assertHandler ($file, $line, $code) { + // Empty code? + if ($code === '') $code = 'Unknown'; + + // Create message + $message = sprintf("File: %s, Line: %s, Code: %s", + basename($file), + $line, + $code + ); + + // Throw an exception here + throw new AssertionException($message, BaseFrameworkSystem::EXCEPTION_ASSERTION_FAILED); +} // END - function + +// Init assert handling +assert_options(ASSERT_ACTIVE, 1); +assert_options(ASSERT_WARNING, 0); +assert_options(ASSERT_BAIL, 0); +assert_options(ASSERT_QUIET_EVAL, 0); +assert_options(ASSERT_CALLBACK, '__assertHandler'); + +// [EOF] +?> diff --git a/application/qa/exceptions/.htaccess b/application/qa/exceptions/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/application/qa/exceptions/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/qa/init.php b/application/qa/init.php new file mode 100644 index 0000000..0e2f5c8 --- /dev/null +++ b/application/qa/init.php @@ -0,0 +1,53 @@ +isClass("ApplicationSelector"))) { return; } + * + * isset() is required to prevent a warning and is_object() is highly required + * when the application itself is requested in URL (hint: index.php?app=your_app) + * + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// Get config instance +$cfg = FrameworkConfiguration::getInstance(); + +// Initialize output system +require($cfg->getConfigEntry('base_path') . 'inc/output.php'); + +// Initialize file i/o system +require($cfg->getConfigEntry('base_path') . 'inc/file_io.php'); + +// Include the language sub-system +require($cfg->getConfigEntry('base_path') . 'inc/language.php'); + +// This application needs a database connection then we have to simply include +// the inc/database.php script +require($cfg->getConfigEntry('base_path') . 'inc/database.php'); + +// [EOF] +?> diff --git a/application/qa/interfaces/.htaccess b/application/qa/interfaces/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/application/qa/interfaces/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/qa/loader.php b/application/qa/loader.php new file mode 100644 index 0000000..32b30b5 --- /dev/null +++ b/application/qa/loader.php @@ -0,0 +1,39 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// Get config instance +$cfg = FrameworkConfiguration::getInstance(); + +// Load all classes for the application +foreach ($lowerClasses as $className) { + // Load the application classes + ClassLoader::getInstance()->scanClassPath(sprintf("%s/%s/%s", $cfg->getConfigEntry('application_path'), $cfg->getConfigEntry('app_name'), $className)); +} // END - if + +// Clean up the global namespace +unset($lowerClasses); +unset($className); + +// [EOF] +?> diff --git a/application/qa/main/.htaccess b/application/qa/main/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/application/qa/main/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/application/qa/starter.php b/application/qa/starter.php new file mode 100644 index 0000000..1911db3 --- /dev/null +++ b/application/qa/starter.php @@ -0,0 +1,53 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 QA Developer Team + * @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 . + */ + +// Is there an application helper instance? We need the method main() for +// maining the application +$app = call_user_func_array(array(FrameworkConfiguration::getInstance()->getConfigEntry('app_helper_class'), 'getInstance'), array()); + +// Some sanity checks +if ((empty($app)) || (is_null($app))) { + // Something went wrong! + ApplicationEntryPoint::app_die(sprintf("[Main:] The application %s could not be launched because the helper class %s is not loaded.", + $application, + FrameworkConfiguration::getInstance()->getConfigEntry('app_helper_class') + )); +} elseif (!is_object($app)) { + // No object! + ApplicationEntryPoint::app_die(sprintf("[Main:] The application %s could not be launched because 'app' is not an object.", + $application + )); +} elseif (!method_exists($app, FrameworkConfiguration::getInstance()->getConfigEntry('entry_method'))) { + // Method not found! + ApplicationEntryPoint::app_die(sprintf("[Main:] The application %s could not be launched because the method %s is missing.", + $application, + FrameworkConfiguration::getInstance()->getConfigEntry('entry_method') + )); +} + +// Call user function +call_user_func_array(array($app, FrameworkConfiguration::getInstance()->getConfigEntry('entry_method')), array()); + +// [EOF] +?> diff --git a/application/qa/templates/.htaccess b/application/qa/templates/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/application/qa/templates/.htaccess @@ -0,0 +1 @@ +Deny from all -- 2.30.2