                        Mojavi CHANGELOG for 2.0
                  ------------------------------------


----- BUG FIXES ----------------------------------------------------------------

- Path variables would not be retrievable because REQUEST_URI does not exist
- Stripping slashes on request parameters that are arrays
- Controller::getDefaultView() can return VIEW_NONE without breaking
- ValidatorManager handled required messages incorrectly


----- NOTABLE MODIFICATIONS ----------------------------------------------------

If you need help making the following changes, check out this upgrade forum:

    http://www.mojavi.org/forum/viewtopic.php?t=145


1. All custom sub-classes constructors no longer need to take a &$controller
   parameter and do not need to call the parent constructor

   this includes Actions and Views

       OLD  class MyAction extends Action {
                 function & MyAction (&$controller) {
                     parent::Action($controller);
                 }
            }

       NEW  class MyAction extends Action {
            }

2. All methods that would take no parameters such as execute() and the like,
   must now take three required parameters. This includes practically any
   method where you would need access directly to $controller, $request or
   $user.

       OLD  class MyAction extends Action {
                function execute () {
                }
            }

       NEW  class MyAction extends Action {
                function execute (&$controller, &$request, &$user) {
                }
            }

3. Renderer constructors now take the three most common parameters, $controller,
   $request, and $user. A template must be specified with setTemplate(), instead
   of being set in the constructor.

4. Removed all constructor params from all renderers. Initialization is now
   done by calling $renderer->getEngine() and altering the engine settings
   directly.

5. SmartyRenderer and SmartTemplatesRenderer don't require a constant to be set
   defining the path to the class files. Now, you must include the class manually
   before you create the renderer instance.

6. Controller now caches filter lists. View the GlobalFilterList source to see
   how it's caching Filter implementations on a request level.

7. All parameters GET/PATH/POST are stripped of slashes if magic_quotes_gpc is
   on.

8. When returning a view it is now possible to optionally return an array to
   specify a separate action and view to use, instead of the default of the
   current action. The array must have three indices:

       Index one:   Module name
       Index two:   Action name
       Index three: View

       e.g.:  return array('Default', 'PageNotFound', VIEW_SUCCESS)

9. A module can contain its own configuration file. If the file 'config.php'
   exists in a root module directory, it is executed a single time before any
   requests to that module are made.


10. Provided support for module named actions and views.

        e.g. class:   <MyModule>_<MyAction>Action
             in file: <MyAction>Action.class.php

             Same works with views, but replace Action with View.

11. Index action classes no longer need to be named ModuleNameIndexAction,
    they're now named ModuleName_IndexAction. The filename remains the same.

        e.g. class:   <MyModule>_IndexAction
             in file: <MyModule>/IndexAction.class.php


to be finished ...


----- DIRECTORY STRUCTURE ------------------------------------------------------

lib/            - Source to all classes included in mojavi-all-classes.php
                -
                - *NOTE* this is included for your convenience, but is not
                - required to run Mojavi

lib/filter/     - Filter system

lib/logging/    - Logging system

opt/            - Optional classes that must be included manually
                - Do NOT put custom classes in this directory otherwise they
                - will be overridden when you get a new Mojavi version

opt/auth/       - Custom authentication handlers

opt/filters/    - Custom filters

opt/logging/    - Custom logging utilities

opt/renderers/  - Custom renderers

opt/session/    - Custom session handlers

opt/sql/        - SQL utilities

opt/user/       - Custom user containers and members

opt/util/       - Utility classes

opt/validators/ - Custom validators

webapp/         - Base directory structure for your web application


----- NEW CONFIG SETTINGS ------------------------------------------------------

AVAILABLE          - Allows you to specify the status of your website as being
                   - available or unavailable.

DISPLAY_ERRORS     - Whether or not to display errors. Used for development
                   - and debugging purposes.

LOG_DIR            - Absolute file-system path to a world-writable log directory

MOJAVI_FILE        - Absolute file-system path to the
                   - mojavi/mojavi-all-classes.php file
                   -
                   - *NOTE* this file contains all lib classes

OPT_DIR            - Absolute file-system path to the opt directory

MODULE_ACCESSOR    - The parameter name used to specify a module.
ACTION_ACCESSOR    - The parameter name used to specify an action.

PATH_INFO_ARRAY    - Associative array that may contain a key that hOLDs path
PATH_INFO_KEY      - information for a request, and the key name

SCRIPT_PATH        - Absolute web path to the index.php script

UNAVAILABLE_MODULE - Allows you to specify an action to be executed when the
UNAVAILABLE_ACTION - site is unavailable
                   -
                   - *NOTE* works with AVAILABLE config setting


----- NEW CLASSES --------------------------------------------------------------

lib/ActionChain
lib/logging/Appender
lib/logging/ErrorLogger
lib/logging/FileAppender
lib/logging/Layout
lib/logging/Logger
lib/logging/LogManager
lib/logging/Message
lib/logging/PatternLayout
lib/logging/StdoutAppender
opt/auth/AuthorizationHandler
opt/auth/PrivilegeAuthorizationHandler
opt/session/MySQLSessionHandler
opt/session/PgSQLSessionHandler
opt/session/SessionHandler
opt/session/SQLSessionHandler
opt/sql/SQLStatement
opt/user/Container
opt/user/PrivilegeUser
opt/user/SessionContainer
opt/util/ConversionPattern


----- MOVED FILES -------------------------------------------------------------

GlobalFilterList:

OLD: lib/standard_filters/GlobalFilterList.class.php
NEW: lib/GlobalFilterList.class.php


YourModuleFilterList:

OLD: webapp/modules/YourModule/filters/YourModuleFilterList.class.php
NEW: webapp/modules/YourModule/YourModuleFilterList.class.php


SmartTemplatesRenderer:

OLD: lib/SmartTemplatesRenderer.class.php
NEW: opt/renderers/SmartTemplatesRenderer.class.php


SmartyRenderer:

OLD: lib/SmartyRenderer.class.php
NEW: opt/renderers/SmartyRenderer.class.php


to be finished ...


----- NEW CONSTANTS ------------------------------------------------------------

AUTH_DIR      - Custom authentication handlers reside here
              - Defined as: OPT_DIR/auth/

FILTER_DIR    - Custom filters reside here
              - Defined as: OPT_DIR/filters/
              -
              - *NOTE* used to be STANDARD_FILTER_DIR

LIB_DIR       - Custom library files reside here
              - Defined as: BASE_DIR/lib/

LOGGING_DIR   - Custom logging utilities reside here
              - Defined as: OPT_DIR/loggers/

MODULE_DIR    - Modules reside here
              - Defined as: BASE_DIR/modules/

RENDERER_DIR  - Custom renderers reside here
              - Defined as: OPT_DIR/renderers/

SESSION_DIR   - Custom session handlers reside here
              - Defined as: OPT_DIR/session_handlers/

SQL_DIR       - SQL utilities reside here
              - Defined as: OPT_DIR/sql/

TEMPLATE_DIR  - Globally available templates reside here
              - Defined as: BASE_DIR/templates/

USER_DIR      - Custom user containers and members reside here
              - Defined as: OPT_DIR/user/

UTIL_DIR      - Utility classes reside here
              - Defined as: OPT_DIR/util/

VALIDATOR_DIR - Custom validators reside here
              - Defined as: OPT_DIR/validators/
              -
              - *NOTE* used to be STANDARD_VALIDATOR_DIR


----- NEW METHODS --------------------------------------------------------------

Action::initialize()
Controller::forward()
Controller::getRenderMode()
Controller::redirect()
Controller::setRenderMode()
Renderer::clearResult()
Renderer::getEngine()
Renderer::fetchResult()
Renderer::getMode()
Renderer::getTemplateDir()
Renderer::setArray()
Renderer::setArrayByRef()
Renderer::setMode()
Renderer::setTemplateDir()
Renderer::templateExists()
Request::getAttributeNames()
Request::getAttributes()
Request::getCookie()
Request::getCookieNames()
Request::getCookies()
Request::getParameterNames()
Request::getParameters()
Request::hasAttribute()
Request::hasCookie()
Request::hasError()
Request::hasParameter()
Request::setErrors()
Request::setParameter()
Request::setParameterByRef()
User::clearAttributes()
User::getAttributeNames ()
User::getAttributes()
User::mergeAttributes()
Validator::getErrorMessage()
Validator::getParameter()
Validator::setErrorMessage()
Validator::setParameter()
Validator::setParameterByRef()
ValidatorManager::setRequired()


to be finished ...


----- MODIFIED METHODS ---------------------------------------------------------

Action::getDefaultView()
Action::getPrivilege()
Controller::dispatch()
Controller::genURL()
Request::removeAttribute()
Validator::initialize()
ValidatorManager::register()


to be finished ...


----- RENAMED METHODS ----------------------------------------------------------

* Denotes a modified function definition

OLD   Controller::handleRequest()
NEW   Controller::forward()

OLD   Renderer::isTemplateAbsolute()
NEW * Renderer::isPathAbsolute()


to be finished ...


----- REMOVED METHODS ----------------------------------------------------------

Controller::handleError()
ExecutionChain::getIndex()
ExecutionChain::setIndex()
Renderer::Renderer();
Request::getMethod()
Request::setMethod()
SmartTemplatesRenderer::getSmartTemplate()
SmartTemplatesRenderer::SmartTemplatesRenderer();
SmartyRenderer::getSmarty()
SmartyRenderer::SmartyRenderer()


to be finished ...