Release date: July 19, 2010
Changed CacheHooks to use getCurrentUrl() instead of getUrl() to account for query strings.
Changed CacheAdaptor to allow colons (:) and pipes (|) in cache keys and changed the namespace format to use pipes.
Changed CoreError to allow group stacks, and also to allow grouped errors to remain out of the global errors array.
Added batch API processing to the CoreApi class.
Added an ApiHelper utility class to make internal API calls without an extra HTTP request.
Changed the class_exists() || require() calls in the CoreBootstrap to not try to autoload.
Release date: May 27, 2010
Changed CoreBootstrap to destroy events after running them.
Added clearCache() method to the ModelCache helper which dispatches to a CacheHelper utility.
Added getCacheNamespace() method to the ModelCache helper so namespaces can be assigned dynamically in extensions.
Changed CoreDatabaseModel so the addQueryFilters() method can handle __id as a column value.
Changed CoreDatabaseModel so the addQueryFilters() method can accept HAVING filters.
Changed CoreDatabaseModel so the addQueryFilters() method can sort randomly.
Added BETWEEN filter to the MySqlQuery class.
Added setAlerts() to CoreAlert.
Changed CoreApi to add any alerts to the result.
Added exists() and removeDatabase() methods to the DatabaseManager class.
Renamed ModelTest helper to the more generic ModelDatabase.
Changed the DatabaseFactory constructor to accept a config array as well as config file name.
Added database cache classes (DbcacheTiered, CacheModel, CacheRecord).
Force API HEAD calls to GET.
Added Compress flag to the AccessHooks page cache.
Added query string support to the ConcatHelper class when including JS files.
Added setRoutedUrl() to CoreUrl.
Changed MySQL BETWEEN query to put quotes around values.
Release date: April 11, 2010
Changed CoreBootstrap to allow controllers to have numbers in them.
CoreBootstrap now sends a 404 header when the controller can't be found in verbose error mode.
Changed CoreConfig, CoreDisplay, CoreEvent, CoreLanguage, CoreLoader, CoreRegistry and CoreUrl to abstract classes.
Changed CoreLoader to a singleton. Static methods still work as usual. Extensions will need to call self::getInstance()->method() instead of self::method().
Added includeFile() method to CoreLoader.
Added a class extension property to the CoreLoader class.
Changed CoreUrl::setUrl() to parse out the query string.
Added CoreError::setErrors() method and renamed appendError() to error() and made it public.
Changed CoreDisplay::setErrorCode() to CoreDisplay::setStatusCode() and added http.config.php error codes.
Added CoreApi, the ApiHelper utility and an ApiController class to the standard site.
CoreControllerLite now sends an HTTP response header before throwing the exception in error().
The error() method in CoreControllerLite only uses the generic "Fatal error" when no other errors have been triggered.
Added getConfig() method to CoreModel.
Added clearHelpers() method to CoreModel.
Added Sanitizer utility and incorporated it into the CoreModel::sanitize() method.
Added pre-save event to CoreModel to automatically sanitize all data before saving.
Added init() method to CoreModel to hold all helper initialization, and __clone() now calls init().
The CoreDatabaseModel pre-load and post-load events get passed the $arrLoading data.
The setLoading() and clearLoading() methods are only called in the CoreDatabaseModel load() method if no wrapper method has set them.
Added setTable() method to CoreDatabaseModel.
Added extra $arrFilters and $blnCalcFoundRows params to CoreDatabaseModel::loadById().
Added items() method to the CoreIterator class to return all items.
Changed ObjectIterator's getAssociativeList() method to call get() instead of get[Foo]().
Changed MySqlQuery class to put quotation marks around the table name.
Added buildInsertOrUpdateQuery() to the MySqlQuery class.
Added optional seed to the random sort order in the MySqlQuery class.
Added isSelect(), isInsert(), isUpdate() and isDelete() to the MySqlQuery class.
Changed the MySqlQuery class to not required a "join using" value to allow for natural joins.
Added insert or update functionality to the MySqlQuery class.
Added optional ClassLoader parameter to the ModelRelations helper for the callback function to use to load the model when not using AppLoader::includeModel().
In the ModelValidation helper the custom validate function can now be an array called with call_user_func().
Added strlen() validation to strings, count() validation to arrays, and min and max value validation to ints and floats in the ModelValidation class.
Added ModelBackup helper to backup records before saving or deleting.
Added ModelCounter helper to update a record count in a different model on save or delete.
Moved CACHE_ADD_ONLY and CACHE_REPLACE_ONLY constants from CacheAdaptor to the Cache interface.
The loadMulti() method in the cache classes keys the results by the uncleaned keys.
Added decrement() to the Memcache classes.
Added urlencode() to base64 encoded concat URLs in the ConcatHelper utility.
Added getFilesDirectory(), setFilesDirectory() and setLenient() to the file system handlers.
Added optional TempDir config value used by LocalFileSystemHandler.
Added FileHelper utility.
Added blnIncludeKeys option to the XmlBuilder utility.
Added htmlentities() to Form::getTextarea() value.
Changed verifyPost() to verifyRequest() in the Token utility.
Add reviveToken() to the Token utility.
Added ExampleApi class to the standard site.
Added an initDebugging() override to the standard and lite site bootstraps to use the DebugDisplay handler.
Release date: October 29, 2009
Added DatabaseManager class to manage multiple read and write database combinations.
Added getInsertAllQuery() method to CoreDatabaseModel to generate a query to insert all new loaded records.
Changed the Timer utility so microtime() returns a float.
Added $strMethodPrefix defaulted to 'display' to the controller.
Database model save events now have a blnNewRecord flag when a record is being inserted.
Added a success flag to all the post event calls in the CoreDatabaseModel class.
Added pre and post destroy callbacks to the CoreDatabaseModel class.
Cloning a CoreModel object clears out the iterator object.
Changed the CoreEvent class and the helper callbacks to accept explicit args instead of using func_get_args().
Added an optional $blnIgnore flag to the MySQL Query class for inserts and updates.
Added an insert() method to the iterators to insert an item at a certain position.
Added an optional argument to CoreEvent::register() to insert the event at a certain position.
Fixed the MySQL class getAffectedRows() method.
Release date: October 15, 2009
Added includeController, includeModel, includeHooks, and includeExtension classes to the CoreLoader class.
Replaced the CoreActiveRecord class with CoreModel, CoreDatabaseModel, CoreDatabaseScaffoldModel, CoreRecord and CoreModelHelper.
Added ModelCache, ModelRelations and ModelValidation helpers.
Added display.pre-output event to the display class right before the output is printed.
Changed the CoreEvent class to store the event actions in an AssociativeIterator object.
Changed CoreEvent::register() to return a unique event action key which can be used with the new CoreEvent::remove() function.
Added an option to the AssociativeIterator object to generate a unique key.
Fixed a bug with the AssociativeIterator breaking on array_search() returning 0.
Changed how the LocalFileSystemHandler works with temp files.
Changed CoreUrl so if there are multiple filters with the same name it creates an array instead of replacing them.
Changed the Form class to accept name/value pairs for the additional config params.
Added getTableColumns() to the MySql class.
Release date: October 6, 2009
Broke up sites' classes directories into models, controllers and bootstraps directories.
Removed the php/models directory in favor of the new site-specific models directory.
Changed set_include_path() in the front controller to only add the main Phork directory and the main site directory.
Changed every include path accordingly to account for new paths. This change affected nearly every file.
The front controllers now pass the install dir, site dir and config dir to the bootstrap which then sets additional paths.
Changed CoreBootstrap to check class_exists() before including any app files.
Release date: October 2, 2009
Removed the auto_prepend.php file and split the code between the core bootstrap and each site's front controller.
Moved the config files into each site's directory.
Added the option of site-specific language translation files.
Added a scripts directory for each site instead of an application-wide scripts directory.
Reorganized fatal error handling in both controllers and each site's front controller.
Moved the hook registration from the front controller file into the site bootstrap.
Turned off mod rewrite by default in each site.config.php file.
Changed the .htaccess file and CoreUrl class to use PATH_INFO instead of REQUEST_URI.
Removed the constants.php file.
Release date: October 1, 2009
Phork 1.0 is the first publicly available release of Phork.