Friday, 20 April 2012

The history of CMS & Me

Twelve years ago I started a job in Dublin working for the then Parallel Internet a small startup internet company that had great designers.  At that time most websites were brochure websites that gave a basic overview of the company the were related to.  They were hard for clients to update as you had to contact your website provider to apply costly updates or manage the HTML yourself and if you didn't know what you were doing could very suddenly break the complete design.

We like many others at the time moved to the concept of storing content in a backend database and pulling out the information into designated locations so that clients could manage their content easily.  Tom Skinner the Managing Director of Parallel Internet and myself chatted about building lots of little 'Tools' to do specific jobs for each and every thing that a client would want to do on a site.   Each tool was a separate module that a client could have access to.  Eventually the branding changed from Parallel Internet Tools to simply pTools.

It didn't take long for the Page management tool to expand into a small CMS and then expand to incorporate Enterprise level requirements.  We were now building Bespoke Content Management Systems for major companies.  Pushing the technology as far as we could, but I always had the issue that for each bespoke solution we were almost reinventing the wheel for each client giving each client a completely bespoke solution from code right through to the database structure.  The only problem with this style of software development is that if you find a problem you have to re-architecture multiple systems rather than one code base.

I eventually left Parallel Internet about 9 years ago to start Libertas Solutions a company which was based on the principle of building the best Content Management System one that would be a robust solution that would work for all levels of client from small brochure website to Enterprise level requirements.

The system that I designed and built for Libertas Solutions was designed to be able to manage multiple websites on one database.  It had the ability to switch on features depending on the licence that someone had.  This meant that the modules would add features depending on the clients requirements like an Approval process for publishing pages.  The best part was that since we controlled the templates we were able to make all of our clients websites WAI level 3 Compliant.   The benefit of this is that subparts of the templates were shared across all of our clients meaning that one update to fix a WAI compliance issue fed through to all of our clients for free. 


We designed the system to be simple to use once you learnt how to use one module you could run with any of the modules for example, it took about half a days training for a client to be able to manage their website and keep it WAI level 3 compliant. Also more importantly any security fixes or additional features were available to clients straight away with the minimum development time.  It should be noted that the CMS from Libertas Solutions has since been Open Sourced.  Though you will find it hard to install and get running.  I wrote it when Internet Explorer was King of the Hill so the huge Javascript libraries for example will probably need replacing to work in anything but Internet Explorer.

In the last 6 years I've been working for Mills & Reeve a law firm in Birmingham UK building complex bespoke internal systems each of which manage content in a way which is designed to create efficiencies were possible.  With improvements with languages like Javascript.  jQuery for example allows cleaner code and more features.

In the last few months I've accepted Voluntary position on the Board of the Absolute Tae Kwon-Do Association in charge of Media.  Of course the first thing I have to do is take over and replace the website with some type of CMS.  After spending the last few months testing different systems including attempting to gets the CMS I wrote for Libertas back on its feet.  Unfortunately I've moved away from a Windows Machine so I no longer have Internet Explorer a requirement for the Administration of that CMS.

So I've decided to start to write a new CMS from scratch using the Smarty Template Engine rather than the  XML & XSLT that I used for both the Libertas Solutions's and pTools CMS.

The main code for this CMS will be based round a central engine that will decide what modules need to be loaded. I have also taken the opportunity to build a Factory builder that will allow me to open a factory object that is capable of retrieving a list of objects based on a table structure definition.  The benefit of having table definition  files is that the install script can build the database table and auto fill lookup tables.  Two birds one stone type of thing.

Since not all of the CMS customers will want to have some modules working in the same way,  For example the user module for handling logins will use NTLM authentication for internal systems but use a database for external systems.  So the engine will first look in a project folder for a class and if it can not find it then will look in the Engines Class folder.  This will allow the overwriting of classes in a safe manner.  Also if there are several modules for the same system they can be in the Engine Class folder.  The Project Class folder can then have a class that just inherits which ever of the classes we want to use for the projects

APP/
       Classes/
               user_ntlm.class.php
               user_db.class.php
               user_openid.class.php

Projects/
       CLIENT_1/
               Classes/
                       user.class.php


the user class is just an empty class that inherits one of the main  classes.

Since the Engine will manage the loading of modules we need only require the bare minimum files.  Rather than including every module that a module needs we will leave it up to the Engine.

For example lets say you have a class that is 100 lines long and has two functions A&B.  Both of these do something but function B needs to execute code in an additional class and lets say that that class is 7000 lines of code in length.

Now if we called Function A() 99% of the time then it is very inefficient to include the second class in our code just because we might 1% of the time call function B.  By allowing the Engine to manage the loading of modules we can only include the second class when function B needs it thus reducing the foot print of our system.


I'll let you know how I'm getting on.