Release Notes


version: 96
date: 31-07-2014
changes:

- Improved zone url matching - now '/' is a valid zone url prefix
- Changed DomainClass::entityData to default to an empty array (not null) and removed duplicate $entityData variable from DAODomainClass
- Modified the basic get/set methods of DomainClass and added a propertyExists() method.
- Added a getID() function to DAODomainClass

================================================

version: 95
date: 28-07-2014
changes:

- Created a 'classes' directory to store framework/supporting classes.
- Updated DAODomainClass will now only save to DB fields that have 'changed'.
- Fixed bug whereby prepareEntityCreateData() was not being called upon entity create

================================================

version: 94
date: 23-07-2014
changes:

- Added $CONTENTIGO_HOME to the include path so that contentigo scripts can be included in a static way, ie require('foo/bar.php') directly from anywhere.

================================================

version: 93
date: 22-07-2014
changes:

- Added DomainClass.php and DAODomainClass.php and also added the loadObject function which looks inside the /site/classes folder for classes
	these changes allow support of proper data encapsulation objects for object model implementation. 

================================================

version: 92
date: 18-07-2014
changes:

- Changes to Database module DAO for better transaction handling support - added functions:
	startTransaction(), completeTransaction(), commitTransaction() and rollbackTransaction()
	Generally commitTransaction() should not be required to be called.
- Also updated DAO::executeScript function with modified/improved transaction handling.  
- Included latest adodb library - version 519  (2014-04-30), but not yet brought online.

================================================

version: 91
date: 14-06-2014
changes:

- Updated ContentigoUtils::doPost2 to support an added $headerFields parameter to allow the caller to specify header fields
- Changed the EndPoint response data handling. Now the $dataCollector['endpoint_response'] is used to return data from EndPoints
	As $dataCollector is GLOBAL any function in the call stack can add data to this variable.

================================================

version: 90
date: 25-06-2014
changes:

- Modified the callEndPoint() function to better handle response when endpoint is 'unauthorized'.
	It now calls an overridable function EndPoint::unauthorizedResponse(); which returns and object in the same format
	as a standard EndPoint function, which contains an http code (in this case will typically be 403 Forbidden)
- Added the following line to contentigo to allow for relative includes of scripts, ie: require_once('site.php'); this will make rich class/object models much 
	easier to manage. 
		set_include_path( get_include_path() . PATH_SEPARATOR . $SITE_LOCATION);
- Change to callEndPoint(), now the response string defaults to '{}' (a valid JSON string), this is done to avoid jQuery ajax firing the 'error' function
	when datatype set to 'JSON'. 

================================================

version: 89
date: 30-05-2014
changes:

- Introduction of the EndPoint functionality for implementation of RESTful APIs. Essentially you create a CSM_ZONES entry for your API, eg:

			$site[CSM_ZONES] = array (
				'/api' => array('ENDPOINT_CONTEXT' => true)
			);
		
	then define your endpoints as below in the $site[CSM_URL_CONTENT_MAP]:
	
			'/api/some-entity'	=> array( 'endpoint' => 'SomeEntity_EndPoint'),

	the 'SomeEntity_EndPoint' live in the /end_points directory and extends 'EndPoint'

================================================

version: 88
date: 13-03-2014
changes:

- Improved Redirect action to handle invalid urls, by returning a 400 Bad Request
- Improved exitWithHTTPCode() funtion to handle: 400, 404 and 429 errors

================================================

version: 87
date: 13-03-2014
changes:

- Module class changed - the module_init function takes a $moduleNamespace by default and sets to a protected $moduleNamespace variable
	this gives all Modules the ability to be 'namespace aware'. 

================================================

version: 86
date: 04-03-2014
changes:

- Fixed bug with 'catch-all' url processing

================================================

version: 85
date: 04-03-2014
changes:

- Fixed bug with catch-all urls incorrectly matching urls at same directory level; 
- Fixed bug when CSM_URL_CONTENT_MAP cdef is an empty array, eg: '/' => array(), 

================================================

version: 84
date: 04-03-2014
changes:

- Added function exitWithHTTPCode() which takes an error code (as an integer) and returns appropriate http response
	THIS IS NOT FINISHED AND IS ONLY IMPLEMENTED FOR 404 ERRORS, eg: exitWithHTTPCode(404);
- Major rewrite of url matching code in contentigo - should be more efficient and by default returns 404 responses when urls not matched.
	for "catch-all" urls (for APIs etc) they must be listed in a new $site[CSM_CATCH_ALL_URLS] array.
	BEWARE: NOW default behaviour is to return 404 response if request not an exact match found in url map. 
		typically effected urls have actions that use the $pathParts array to read individual path parts. 
- Big change to Database module - dbconnections are now instance variables, allowing to connect to multiple databases at the same time (as it should be)
- Also changes made to DAO.php to allow a dbconnection to be passed in at creation time.
- Improved the CSM_SUBMISSION_REPEAT_PROTECTION algorithm to work correctly on sequential requests for same URL

================================================

version: 83
date: 27-02-2014
changes:

- Added a 'getSmarty' function, but really need a neat way to register custom modifiers etc (and a neat way to define site-wide constants
- MAJOR: changed the main flow order - loadBlocks now gets called before we call actions. This means actions can override block content like 
	page titles etc.

================================================

version: 82
date: 02-02-2014
changes:

- Added $site[CSM_POSTPROCESSOR_ACTIONS] to specify common actions that will run after url specific actions
- Added ability to CSM_EXIT_TO_LOCATION from the return array in actions
	 which returns after chained actions and post processing actions complete. 
- The additional "CSM_EXIT_NOW => true" parameter means the script will exit to location immediately
	and not run chained or post processing actions.  
- Added extention 'ico' to resource type map - to correctly render ico (favicons) as PNGs
	(beware, not all favicons are PNGs)
- 'domain' property now available in the $dataCollector['environment'] array.

================================================

version: 81
date: 28-01-2014
changes:

- MAJOR SITE CONFIG CHANGE, sites now require a /site/domains.php file and a /site/domains/ folder.
	In addition, the site index.php file is simplified (see "tuvanco" as an implementation example).
- Minor change to Mandrill module to return the response object
- Minor change to ContentigoUtils::downloadToFile to avoid an undefined variable warning

================================================

version: 80
date: 13-01-2014
changes:

- Added the "Madrill" module for sending emails via the Mandrill API

================================================

version: 79
date: 10-01-2014
changes:

- Refactored Email module to split sendEmail into a second renderEmail() function, so emails
	can be send via a 3rd party API (eg: mandrill)
- Updated ContentigoUtils::doPost2 to allow for single payload data with the $postDataIsPayload param

================================================

version: 78
date: 21-11-2013
changes:

- Added new parameter function 'requestParamsWithPrefix' that returns a list of parameters whose name starts with a given
	prefix. Useful when prefixing form input names with a 'namespace' prefix. 
- Added a new CSM_SUBMISSION_REPEAT_PROTECTION site property that allows specification of a minimum url submission rate
	in seconds. This is to help prevent brute force attempts on login forms etc.
- Small update to ContentigoUtils function 'urlProxy' to check for existance of 'path' value in $urlParts

================================================

version: 77
date: 25-07-2013
changes:

- Added CURL header curl_setopt( $ch, CURLOPT_ENCODING, ''); to ContentigoUtils to handle gzipped content

================================================

version: 76
date: 13-07-2013
changes:

- Changes to the resource_handler to better handle cacheing and implement a 'CSM_SITE_CHANGE_DATE' site change date 
	 to control browser caching and make cached resources 'stale'. 

================================================
version: 75
date: 04-07-2013
changes:

- Changes to the resource_handler to better handle cacheing and implement a 'CSM_SITE_CHANGE_DATE' site change date 
	 to control browser caching and make cached resources 'stale'. 
- Added the JobManager module to run and control threaded processes (very cool).
	Change JobManager to use the WorkerCacheDAO class found within the module directory

================================================

version: 74
date: 27-06-2013
changes:

- Added function "downloadToFile()" to ContentigoUtils (does not implement the max download limit arg)

================================================

version: 73
date: 26-05-2013
changes:

- Added 'apk' => 'application/vnd.android.package-archive' as a known content type

================================================

version: 72
date: 17-05-2013
changes:

- Created two new helper functions 'arrayVal' and 'booleanArrayVal' which do the same as 'requestParam' and 'booleanRequestParam', 
	but you can pass in the specific array, ie not tied to $_REQUEST array 

================================================

version: 71
date: 06-05-2013
changes:

- Added the 'textToHTML' function to ContentigoUtils module. It converts line breaks to <br> and links to <a> tags

================================================

version: 70
date: 29-04-2013
changes:

- Added ability to override content-type for a given URL in the $site[CSM_URL_CONTENT_MAP], eg:
	'/rss' => array( 'actions' => array('LoadRSS'), 'template' => 'rss', 'content_type' => 'application/rss+xml')
- Updated Email module - the rendered template email subject now available in the email body template as variable "__subject__" eg: {$data.view.__subject__}.
	This is because a valid <title> tag must exist in the <head>, so makes sense to use the actual email subject as the title. 

================================================

version: 69
date: 15-04-2013
changes:

- Moved the $zoneDef['ZONE_TEMPLATE'] template override block so that 
	Zones can be defined JUST for the purposes of templates (no special session keys required)

================================================

version: 68
date: 01-04-2013
changes:

- Updated Email module - only attempts to send emails if there is more than 1 recipient
- Updated Email module to filter out all invalid email addresses

================================================

version: 67
date: 31-03-2013
changes:

- Altered ContentigoUtils method doUnproxyGet() to handle when url paths are empty
	*NEEDS TESTING*
- Placed 'local handling' code before 'resource' handling code
	(resource handlers look at $_SESSION['locale']

================================================

version: 66
date: 19-03-2013
changes:

- Specified the HTTP_REDIRECT for aliases to be a 301 permanent redirect
- Introduced a new 'Test' module to perform simple module testing (implemented in cQuery)
	Tests can now be defined using the CSM_RUN_TESTS and CSM_TESTS site properties
- Added a '301 Moved Permanently' header when doing a 'CSM_FORCE_HTTPS' redirect
- Improved resource handling and added some audio mime types

================================================

version: 65
date: 17-01-2013
changes:

- Fixed 'Undefined index: path' notice when accessing site root
- Created function purgeSiteSession() that emptys site session data, for use when 'logging out' 

================================================

version: 64
date: 08-01-2013
changes:

- Removed old ADODB and Smarty 2 libraries to reduce footprint

================================================

version: 63
date: 05-01-2013
changes:

- Added the 'ParamViewAction' to simply pass url params through to the view context
- *** Included and now using Smarty 3.1.12 *** Beware, there maybe template compatibility issues.
- Included smarty 2.6.27 to replace old Smarty 2.6.26 - not used in this version of Contentigo

================================================

version: 62
date: 04-12-2012
changes:

- Changed Email module to content type text/html, not text/plain
- Updated Email module to allow common email headers and footers

================================================

version: 61
date: 27-11-2012
changes:

- Updated Email module to base64 encode email subject so that UTF-8 characters are correctly displayed.
- Added 'startsWith' and 'endsWith' string functions to Utils module

================================================

version: 60
date: 23-11-2012
changes:

- Improved the util function 'textToURLText' and added an optional '$ampersandReplacement' argument 

================================================

version: 59
date: 17-11-2012
changes:

- Added function 'actionErrorRedirect' to redirect user back to a defined referer page to handle application errors
	referer pages are defined in '$site[CSM_URL_REFERERS]'

================================================

version: 58
date: 17-11-2012
changes:

- Modifications to 'FieldValidatorAction' (check SupplierBox and Jivewall work before versioning)
- Change the login redirect behaviour to store GET and POST (REQUEST) data while performing the login process

================================================

version: 57
date: 12-11-2012
changes:

- Added the 'Favicon' action to load favicons from site/resources/images location
- Copied the Jivewall function 'textToURLText' to ContentigoUtils (turns arbitrary text into URL friendly SEO text)

================================================
version: 56
date: 09-10-2012
changes:

- Property REDIRECT_ON_AUTHERIZATION_FAILURE can now be defined in a CSM_ZONE definition to override global 'CSM_AUTHENTICATION' value per zone
	(useful to force a user to login to a '/secured' url, but directly return a 403 if attempt a '/secured/admin' url)
- Added site property 'CSM_JAVASCRIPT_DISABLE_OPTIMIZATION' to allow to bypass javascript minification
- Fixed a bug with util function 'doPost2'

================================================

version: 55
date: 01-11-2012
changes:

- Now using newer jsmin library version 1.1.2
- Now using latest ADODB version 'adodb518a'
- Utils now implemented as the module 'ContentigoUtils' (beware, must change all sites to use new class)

================================================

version: 54
date: 14-10-2012
changes:

- Added support for internal url alias redirect with $site[CSM_URL_ALIASES]
- 'HTTP_REDIRECT' => true CSM_URL_ALIASES correctly causes a redirect of an aliased URL
- Added 'svg' as a known content type in resources.config.php
- Added 'generateRandomKey' function to Utils class - generates strings of random letters & numbers

================================================
version: 53
date: 13-06-2012
changes:

- Updated 'outputFile' core function - now returns false if file does not exist
- Added site variable 'CSM_CSS_DISABLE_OPTIMIZATION' to turn off cssTidy if causes problems with CSS (-webkit-xxx stuff)

================================================

version: 0.1.52
date: 26-04-2012
changes:

- Added the 'CSM_DEBUG_EMAIL_FILE_EXTENSION' option to site.php to allow custom file extentions (default is .txt)
- Changed the Email module headers

================================================
version: 0.1.51
date: 30-01-2012
changes:

- Added saveData2() a far more convenient way to save JSON content data (saveData() should be deprecated)
- Changed Database module to allow for multiple schemas to be defined in the database JSON config
- Added an optional 'namespace' to loadModule to allow multple instances of differently configered modules
  (eg: multiple database modules that connect to different databases)
- Fixed some incorrect references to locale parameters being passed to 'getLocaleFileName' 
- Fixed that block data was not getting derived from locale. 
- removed more unrequired files from ADODB
- removed csstidy (original) and left the modified version

================================================
version: 0.1.49
date: 25-10-2011
changes:

- updated Email module to create debug email directory if doesn't exist.
- added CSM_FIELD_VALIDATORS to $site to define site field validators
- added 'FieldValidatorAction' as a system action to load site field validators

================================================
version: 0.1.48
date: 23-11-2011
changes:

- upgraded adodb from 511 to 514 (DELETE the previous version when done)
- added a 'CSM_FORCE_HTTPS' option, that redirects all HTTP pages to its HTTPS equivilent.

================================================
version: 0.1.47
date: 18-10-2011
changes:

- added 3rd parameter to 'outputFile' which allows to download a file with an alternative name
- added a few more resource types to the resources.config.php to handle docx files etc

================================================
version: 0.1.46
date: 16-10-2011
changes:

- added SORT_ASCENDING and SORT_DESCENDING constants to DAO class

================================================
version: 0.1.45
date: 14-10-2011
changes:

- small change to 'doRedirectOnAutherization' function - non-functional
- small change to doRedirectOnAutherization function - only appends param string if param data not empty
- fixed bug in Redirect action

================================================
version: 0.1.44
date: 06-10-2011
changes:

- added support of the $site[CSM_AUTHENTICATION] config item which allows configuration of redirect to login pages if authentication is required
- changed 'booleanRequestParam' to remove the 3rd '$valueIfNotFound' parameter! It was wrong to add it.

================================================
version: 0.1.43
date: 30-09-2011
changes:

- changed 'requestParam' to handle when values are arrays (from the html form input "foo[]" convention)
- changed 'booleanRequestParam' to take a 3rd '$valueIfNotFound' parameter

================================================
version: 0.1.42
date: 28-09-2011
changes:

- added helper function 'requestParamExists()' useful for checking if request parameters exist and have a non-zero string length

================================================
version: 0.1.41
date: 26-09-2011
changes:

- added function existsRequestParam() to contentigo to allow a defined value to be returned if a request param does or doesn't exist

================================================
version: 0.1.40
date: 23-09-2011
changes:

- moved 'requestParam()' and 'booleanRequestParam()' into Contentigo class from Action class - for universal access

================================================
version: 0.1.39
date: 22-09-2011
changes:

- Removed the 'return by reference' "&" of Database::&getDAO( $daoName)
- added 'arrayValue' to the Utils library

================================================
version: 0.1.38
date: 20-09-2011
changes:

- added 'audio' as a resource type in 'resources.config.php' (although not sure if needed)
- added a 'truncate' string function to 'Utils'

================================================
version: 0.1.37
date: 10-09-2011
changes:

- Added new system action 'Sitemap' which looks for a 'sitemap.xml' file under site environement
- Altered Database module to attempt to disconnect before establishing a new connection
- fixed small bug with caching of css files - an extra ';' was added which broke the CSS optimizer
- created a new version of the CSS optimizer that does not produce loads of output errors

================================================
version: 0.1.36
date: 08-09-2011
changes:

- placed Action under /contentigo/actions/
- system now looks for a system action if one not found in user site
- created 'Robots' as a system action that looks for a 'robots.txt' file under environment directories
- moved 'Redirect' action from Femtoo to system action

================================================
version: 0.1.35
date: 04-09-2011
changes:

- mb_trim declared as 'static'
- removed 'CSM_BLOCKS_DEFINITIONS' and all related functionality - was only used in one site and was easily circumvented
- removed 'CSM_BLOCK_DATA_MAP' and all related functionality - beware of any sites still using this...
- added Action::booleanRequestParam( $paramName, $valueForTrue) to help parse request parameters to true/false values;

================================================
version: 0.1.34
date: 01-09-2011
changes:

- Changed Email::sendMail function not to assume there is a 'toEmailAddresses' parameter
- Removed need for CSM_DATABASE_ENABLED site variable
- Database module established own connection when first loaded
- All modules now have an inherited Module::module_init() function to perform one-time initialization 

================================================
version: 0.1.33
date: 29-08-2011
changes:

- Slightly changed Action::requestParam() and automatically handles slashes

================================================
version: 0.1.32
date: 29-08-2011
changes:

- Environment specific site.php config file now loaded and overrides default site.php
- Slightly changed Action::

================================================
version: 0.1.31
date: 28-08-2011
changes:

- Implemented automatic javascript minifying
- Implemented automatic CSS minifying/tidying

================================================

version: 0.1.29
date: 24-08-2011
changes:

- updated Contentigo::returnTemplateContent() to combine existing '$dataCollector' into template data

================================================

version: 0.1.28
date: 24-08-2011
changes:

- Added the 'sendPlainMail()' function to the Email module to help send quick and simple emails
- fixed a bug so that environment defaults are present even if no environment specific content exists
- Changed Action::requestParam() - now checks it not an empty string, even after trimming

================================================

version: 0.1.27
date: 25-07-2011
changes:

- $ENVIRONMENT no longer accessible globally, but should now be accessed via the dataCollector
- Added environment defualts, specifaically 'server_name' to the $dataCollector['environment'] array
- a ZONE can now specify 'SERVER_RESTRICTED' => true to only allow requests originating from the server 
- added 'loadValidator' function to load field validators from the /site/field_validators directory

================================================

version: 0.1.26
date: 14-07-2011
changes:

- CSM_SCRIPT_SETS to allow script files to be bundled together under a single name
- CSM_CSS_SETS to allow css files to be bundled together under a single name
- added 'requestParam()' to action superclass - trims params if they exist and allows a default if param not found 
- added the Module super class for modules, although has not method or properties at the moment
- fixed a bug with i18n for CSS files
- made $dataCollector accesible globally
- added logMessage and logVar global functions

================================================
version: 0.1.25
date: 26-06-2011CSM_SCRIPT_SETSme
changes:

- fixed small bug in Email module
- fixed bug that 'contentigo' wasn't available as a global variable

================================================
version: 0.1.24
date: 04-06-2011
changes:

- Removed some of the unrequired files from the Adodb library (Database module)
- Added 'pptx' as a resource type so pptx files can be correctly handled by the browser

================================================
version: 0.1.23
date: 30-05-2011
changes:

- improved the DAO->executeScript() function to take optional 'tokens' and 'replacements' array to allow sql script substitutions (database ids etc)

================================================
version: 0.1.22
date: 27-05-2011
changes:

- added new function: loadJSONDataFile( $jsonDataFile, $assoc = true) - to load any arbitary json data file.

================================================
version: 0.1.21
date: 14-05-2011
changes:

- deprecated $CONTENTIGO_LOCATION variable and replaced with $CONTENTIGO_HOME
- altered standard index.php - now looks for $CONTENTIGO_HOME which is a full path to the contentigo installation
- changed DAO->getFieldValueForField() - no longer throws an exception, but returns false

================================================

version: 0.1.20
date: 12-05-2011
changes:

- block data is now loaded for 'template' output for both cdef blocks and template blocks
	(could do with some refactoring)
- block data follows the alias naming in the sitemap ('>>>' notation)
- fixed bug that content type was not being set when serving up image resources 

================================================

version: 0.1.19
date: 05-05-2011
changes:

- blocks may now contain other blocks - if more than one block is specified in a cdef and 'response_type' is SINGLE_BLOCK, the first block is the 'main' block that gets displayed by Smarty

================================================
version: 0.1.18
date: 30-04-2011
changes:

- fixed bug in 'loadData()' function to correctly use the session locale
- all url site map entries must start with '/'
- $pathDepth now start from 0, ie the path '/' = 0, '/foo' = 1 '/foo/bar = 2 etc
- the $pathParts array now includes the 0th element '/' (so array is one element larger for all urls) 
- CSM_ROOT now defaults to '/' not ''

================================================
version: 0.1.17
date: 17-04-2011
changes:

- fixed a bug with template blocks

================================================
version: 0.1.16
date: 13-04-2011
changes:

- added convenience method to the DAO object of database module

================================================

version: 0.1.15
date: 31-03-2011
changes:

- introduced 'ZONE_TEMPLATE' property of a CSM_ZONE entry. So now each 'zone' can have its own template
- changed the data structure of the email template data

================================================
version: 0.1.14
date: 18-03-2011
changes:

- improved i18n support for both URL or custom schemes.

================================================
version: 0.1.13
date: 12-03-2011
changes:

- renamed and added constants for the site.php file
- fixes to the email module

================================================
version: 0.1.12
date: 05-03-2011
changes:

- added the Email module for template based, content driven email sending. very flexible
- added the contentigo 'returnTemplateContent' method and a movement toward class methods

================================================


version: 0.1.11
date: 12-12-2010
changes:

- added url 'zones' for restricting user access to parts of sites.
	this is a neat feature, simply checks a url against an entry in sites['ZONES'] to see if the defined key is 'true' in the session['ZONES'] array 

================================================


version: 0.1.10
date: 26-11-2010
changes:

- block content now merged with view data. site -> template -> block
- $dataCollector['block'] context removed.
- added DEFAULT_TIMEZONE parameter to the $site file, ie $site['DEFAULT_TIMEZONE'], which calls "date_default_timezone_set[...]"

================================================


version: 0.1.9
date: 26-11-2010
changes:

- introduced the Database module and database support :-)

================================================


version: 0.1.8
date: 11-11-2010
changes:

- introduced 'content caching'

================================================

version: 0.1.7
date: 07-11-2010
changes:

- merged $data.template with $data.site to allow overriding for things like page titles, meta tags etc
- refactoring (re-ordered the process flow in contentigo

================================================

version: 0.1.6
date: 02-11-2010
changes:

- refactored loading of blocks
- introduced: $site['BLOCKS_DEFINITIONS'] to allow actions to be called whenever a block is loaded

================================================


version: 0.1.5
date: 01-11-2010
changes:

- introduced environment data (live, staging etc) for databases and services...

================================================


version: 0.1.4
date: 14-10-2010
changes:

- introduced site modules

================================================



version: 0.1.2
date: 14-10-2010
changes:

- improve action interface
- added 'PREPROCESSOR_ACTIONS'
- added 'BLOCK_DATA_MAP'
- added 'ACTION_RESPONSE_MAP'

================================================

version: 0.1.1
date: 21-09-2010
changes:

- added request 'response types' (TEMPLATE, SINGLE_BLOCK, RAW)
- added 'actions' to handle data processing and business logic functions

================================================

version: 0.1.0
date: 13-09-2010
changes:

Initial release
================================================