For this entry I'd like to describe the CMS I am planning on building. This will be the requirements that this project is designed to fulfil.
The Core CMS
Adaptability
My primary concern is that my system be flexible and scalable. I really have no idea what direction my site is going to take in the future so I would like to ensure that I can update this system quickly and easily. I believe it would be best if each application of the site (that is blogs, file databases, photo galleries, etc.) could be independent of the others and that the base CMS should not be dependent on any one application's existence.
In order to fulfil this requirement, the CMS should be able to accept and manage modules that describe an application. Each module should be a self contained set of code and auxiliary files that should have access to the shared resources of the CMS (such as the database). This will allow me to develop the site in parts: first the core CMS and then the individual modules.
Clean URLs
I want my URLs to be nice and clean, no ?module=blog&year=2004&month=12&day=25&item=TheRequirements junk at the end but rather blog/When/2004/12/25/TheRequirements, like at ongoing. That way I can change the underlying structure of my site as needed without breaking others' bookmarks. Further, this would make the URLs a bit easier to remember.
Security
Since my site is important to me I'd like my CMS to be as secure from SQL injection and other hacks that could damage it or the users of the site.
Global Template
The CMS should support a global template for the site that would be placed in as few files as possible to allow for very quick visual modification of the site. The template will define the global navigation, header, footer, and layout. Each module will produce the content of this template.
I have yet to decide if a module should be allowed to override the template. I'm leaning towards, no.
A Central User Database
One of the shared resources my modules should have is a central user database. This would store various information about the users (email, password, hometown, interests, etc.) so that each could have a profile but would also maintain their level of access to the site. There should be a privilege flag for each user that determines the actions the user can perform, such as create resources on the site for modules that allow such things (a created resource could be a comment on the blog).
One problem I haven't worked out yet is how modules can maintain their own options for the users. For example, what it a forum module wanted a GD-like rating system, how would the module be able to store ratings? If I could find a way to work this out it might replace the flag the privilege flag mentioned before.
The Base Modules
These are the modules I currently have planned that should be enough to recreate my site as it is currently
The Blog
The blog should support the addition, deletion, and modification of enteries. I should be able to give an entry a specific post date (so that it can be something other than the current timestamp) and a last-modified date. Each entry should be able to be inserted into one or more categories where categories are easily created. The entries may then be searched by category or by post time (where post time is organized by original post date, not the last-modified date).
Comments should be supported and should also be able to be disabled for individual entries, categories, or globally. Anonymous comments will be supported although may be disabled. There should be a way to close entries to comments after a certain interval of time.
HTML should be disabled in the entries as well as the comments in order to ensure XHTML validity. Instead, some sort of BB code should be implemented that can be extended as needed.
Links Database
There should be a links database that stores links in one or more categories, have a title, and a short description. This module will support the searching and organization of these links.
I want this module because I find it difficult to manage my links now. I try to categorize them but some fit in multiple categories and others dont seem to fit well in any category I have created. I really dislike duplication of links on my static pages because it makes it difficult to remove all instances of it if I find that the site is no longer up or no longer what it used to be.
Downloads Database
Similar to the links database, this module will support the organization of downloads. Each download may be in one or more categories, has a title, description, and option of a screenshot.
Photo Gallery
Since I plan on having a lot more photos on my site I would like a module that is able to organize and present them as well in a similar manner as the downloads and links databases.
Another function could be created that allows a module to access the true table name. Perhaps like:
A module would be required to use this table name in order to perform queries.
A second module could then access the tables of 'blog' as long as it knew the names of 'blog's tables (before the UID was prepended). It could just use DB::get_name() to get the real names of the tables for one or more modules and use JOIN.
The second module could know the name of the blogging module through configuration by the administrator.