The purpose of this page is to outline all of the planned features of Alpha, and to put some structure on these features in terms of when they will be released. The project will not release alpha or beta builds publicly, so all releases that are outlined on this page can be considered "final", production-quality releases which will be fully tested.
The following key outlines the development status of each of these listed features:
Work has not started:
Work under way:
Version 1.0: The Core Release
Released: March 20th 2011
This is the initial release of the framework, where the emphasis will firmly be on the core functionality of the Alpha MVC components and data types.
For this release the following functionality will be included:
Saving/loading - a parent persistence class (Data Access Object, or DAO) will be designed to handle the basic tasks of saving, loading, and deleting business objects. Business objects will extend this abstract class to inherit this functionality.
Populating objects from POST - the DAO will require a method for automatically populating a business object from data provided by HTTP POST data, which will be widely used in web forms.
Object locking with version numbers - every business object that extends the DAO will have a version number, which will be incremented each time the object is updated in the database. The version number will be used to facilitate an optimistic locking mechanism which will be included in the DAO parent logic.
Auto-generation of class tables - the DAO will possess a method for automatically generating a CREATE TABLE statement in SQL which will be run on the database to create the tables for each business object in the system.
Auto-detection of class table existence, and requirement for update - the DAO will require methods for detecting the presence of the database table for a business object, so that an administrator can create them from the admin backend if required.
Design addAttribute method - an addAttribute method on the DAO will be required for adding new database columns to existing business object tables.
Unique constraints - the ability to flag a business object attribute as being unique would be useful for automatically adding unique constraints to the database when the business object table is being created.
Foreign key constraints - the ability to flag a relationship between two business object definitions, and related dependencies (with cascade delete/update support where required), would be a useful feature. ONE-TO-ONE, ONE-TO-MANY and MANY-TO-MANY relationships will be supported.
Overloaded database tables - optionally, the saving of instance records for different types of business objects to the same database table will be supported.
Multi-page transactions with commit/rollback (unit of work) - in order to facilitate multi-page transactions in a single session, support for a unit of work will be built into the top-level parent controller class.
Pagination of list results - lists of business objects in the system will be spread across multiple pages, or paginated, to make navigation of long lists easier.
Design front controller - an optional front controller will be added to the system, with support for secure (encrypted) and plain text query strings. A sample Apache config file will be included to show you how to use mod_rewrite to use simpler URLs to access page controllers.
Controller for generating RSS/Atom feed views - a controller for presenting the data from a business object as an RSS, RSS2 or Atom news feed will be designed.
Route all get/post requests through the front controller - as a configuration option, we could choose to route all of the requests to each controller in the system through the front controller instead. The admin backend will use the front controller with encrypted query strings by default.
Auto-loading of custom controllers - when you add a custom controller to override one of the default ones for a given business object, Alpha will load the custom one preferentially.
Tag-based search - a special tag class will be added, to allow any business object in the system to be tagged with a given keyword. The search controller will then search the tags rather than the business object data itself.
Pagination of search results - all search engine results, like other lists in the system, should be spread across multiple pages when the list is long to help make navigation easier.
Auto-tagging of business object attributes - certain attributes, e.g. the title and description of an article, could be automatically parsed for tag keywords upon creation. The aim is to take the hassle out of tagging items that you always want to be searchable. Support for a list of commonly-used stop words (the, and, a, to etc.) to exclude from auto-tagging should be added.
Generic create/detail/edit/list views with delete functionality - as part of scaffolding, we will need to be able to generate these default views dynamically for every business object in the system.
Generic admin backend with business object list for homepage - a standard, powerful administration backend is required.
Support for HTML templates - views will need to support HTML templates, to allow design professionals to work on clean HTML pages without the need to understand the underlying PHP code intimately. A default set of templates used in scaffolding will be included.
Auto-loading of custom views - when you add a custom view to override one of the default ones for a given business object, Alpha will load the custom one preferentially.
Text box widget - use for larger amounts of text, will evolve into a rich text editor over time. Will include link to pop-up documentation on Markdown syntax required.
Button widget - used throughout the application in the user interface, comes with simple colour switching mouse-over effect.
Calendar widget - a pop-up calendar used to enable a user to choose a date easily. Time fields will also be available for Timestamp objects.
Record selection widget - useful for building relations between business objects, a widget for inserting the OID of one business object into a field in another business object is required. Will also support MANY-TO-MANY lookup views.
Tag cloud widget - a tag cloud widget will be included, which links back each tab link to the search controller to display results for that tag.
Logging - extensive Log4j-style logging to be included, with support for configurable logging level (DEBUG through to FATAL). All main MVC classes to have extensive DEBUG logging calls in included.
Custom exceptions - Alpha will include many custom exception classes for various scenarios, with code for handling the common exceptions when they occur. Uncaught exceptions will be caught by a global exception handler and logged to the system log file.
Page-level security - each page controller in the system will have its own level of security, which will be checked against the privileges of the user requesting the page to ensure that they can access it.
Add validation rules to each of the complex data types - each complex data type in Alpha will come with built-in validation (an Integer will not accept non-integer values, a Date will only accept valid dates etc.).
Define a set of standard validation rules for dates, emails etc. - these rules will be system-wide and stored in one location.
Ensure that all $_GET variables are being checked for correctness - all data passed on URL query strings must be checked to ensure that it is valid.
Ensure that all forms only accept posts from the current server - web forms will contain dynamic security fields to prevent the automated posting of invalid data from remote servers by bots or other tools.
Implement base64 encoding and strong encryption on all get vars - support for strongly-encrypted URL query strings will be included with Alpha as an optional extra level of security. These secure URLs will be used in the administration back-end.
Request filters - add maintainable list of bad clients and IP addresses and a request filter class, to block requests from SPAM bots and other automatic probe and scraping applications.
Publishing system (CMS)
Facade class for Markdown - the PHP Markdown Extra library will be the text-to-HTML parser of choice for the Alpha CMS. All additional support and facade classes required for this library will be included.
Cache/checkCache/loadCache methods for Markdown-generated HTML on the article class (must check for folder permissions) - a HTML caching feature will be added to enable the caching of the HTML produced by Markdown for subsequent requests of the same content, to increase performance.
Generate code in articles with the Geshi library (requires custom version of Markdown class) - Geshi is a library for colour-coding computer code in HTML, making it much more readable and therefore suitable for web publication. A custom version of the Markdown Extra class will be included which invoke Geshi on certain special code tags. Note this support will be optional, as Geshi will not ship with Alpha.
Add preview controller for doing updates - a preview controller for viewing the changes to an article before committing them to the database should be included.
Add attachments folder for each article - each article will have an attachments folder on the server, so that a user can add an attachment file to an article and link to it.
Print-friendly versions of the article objects - a controller for rendering printer-friendly versions of articles will be included.
Add article comment class - a class for enabling the ability of users to comment on an article (blog-style) will be included.
Add controllers and views for article comments, and link them to each article (ONE-TO-MANY) - see previous comment.
Add article votes and score attributes, with new controllers allowing users to score an article - a basic scoring system (values 1-10) will be included for users to rate content.
Generate PDF versions of articles using TCPDF, with PDF cache - a set of classes for converting the HTML from Markdown to PDFs using the TCPDF library will be included, as will caching support for the resulting .pdf files.
Load article from text file - add the ability to load an article which is stored in a .text file.
User class - as user management is such a common feature in all systems, a default user class will be included with Alpha containing common functionality. The class will be extendible, just like any business object.
Group-based rights management - a user's ability to access any given page will be determined by their group membership. A single user can belong in many groups (MANY-TO-MANY).
Login/logout controllers - user authentication controllers will be included as standard.
User preferences view/controller and class - this controller will be included to enable a user to control settings on their user profile.
Write unit tests for all major framework classes and functionality - this is an ongoing effort, but it is a must to ensure the quality and the robustness of the code in the core classes.
Write utility classes for generating RSS, RSS2, and Atom news feeds - classes for generating new feeds in multiple formats from data stored in business objects will be included.
Write utility classes for generating MS Excel versions of business objects - useful for reports, export of business object records to Excel spreadsheets will be supported.
Design a config singleton class which reads the configuration .ini files - the admin can make changes to the configuration via a .ini files, which are parsed and used to populate a configuration singleton object accessible throughout the system. A server.ini file will be used to define three deployment environments (dev, test, pro).
Add a controller to the admin backend for running all of the unit tests - the ability to run all of the PHPUnit tests from the administration backend would be useful.
Add a controller to the admin backend for running all of the software metrics analysis - a basic software metrics analysis controller will be included with the framework, which will be accessible from the administration backend.
Add a class for discovering and running cron tasks - a class for discovering cron tasks in the /tasks directory will be included, adding support for PHP-based cron tasks into the framework.
Version 1.1: DAO abstraction and utils
Released: December 11th 2011
Abstract the data layer - remove dependence of Alpha on the MySQL database by making modules for other databases easy to develop.
Add support for Memcache - the load() methods should be made to optionally check a Memcached instance for a cached business object, while any save() performed on a business object should remove it from the cache. Caching will occur post-load.
Add KPI class and analysis controller - add code KPIs (Key Performance Indicators), to benchmark live code chunks and alarm performance bottlenecks if they occur.
Add a back-up class - a utility class for performing Alpha application back-ups, including database dumps and file back-ups on selected folders, will be added.
Version 1.2: Advanced Data Persistence Features
Planned release date: Q1 2012
Add support for PostgreSQL - design a PostgreSQL DAO module.
Add support for SQLite - design a SQLite DAO module.
Data warehouse - add the ability to flag a business object for backing up to a separate database (data warehouse) upon each update to an object.
Add a class auto-loader - a class auto-loader should be added, which will remove the need for the require statements in the framework, making the code easier to maintain. The auto-loader will need to check custom directories as well as the framework directories.
Write utility classes and controllers for exposing business objects via a REST API - the ability to expose data to remote servers as web services would be useful in some instances. REST supporting XML will be the preferred medium. The generic get() method on all business object classes might make a good starting point to expose.
SQLite database for unit testing and general storage - add support for a configurable SQLite database used for unit testing database persistence code. It may also be a useful alternative to MySQL in some instances.
Add support for a NoSQL solution - added a DAO module for a key/value store would be great, need to decide which one to target.