Core Feature

A feature defined in the Core. Although Core Features are programmed in plug-ins too (since they need to make use of the signal mechanism,) they are mandatory and cannot be deselected.

List feature [core]

In order to allow for lists to be created, we need to have a plugin that generates indexes of all the data the user wants to list (but no more than what the user wants to avoid wasting time updating useless indexes.)

As the system moves forward, it can add new indexes dynamically, so we don't have to offer one specific list from the start. This being said, we want lists of all the pages (since pages are users, that includes users too.)

The lists can then be used to display pages as in a blog (i.e. newest to oldest, display title & teaser, etc.) It can be used to show the latest 3 ...


Having a pop-up instead of any other type of message box will allow use to (1) have the box be stationary (z-index of 1 or more, fixed position, etc.); and (2) have ONE message box for ALL websites, which means a lot of time saved since you won't have to recreate a different box for each theme. Also, when not an error/warning message, we want to have a countdown and auto-close feature.

All the themes need to be capable of showing messages, preferably near the top, but it could also be a popup box like the default CSS offers. (Especially for long forms, we may ...

Filter feature [core]

To avoid security problems on websites, you need to have different level of filtering of the data posted by the website users.

This generally comes down to something similar to this:

* The owner of a website can write anything they want on any page, including HTML, JavaScript, IFRAME, etc.

* An editor may be able to add IFRAMEs or OBJECTs, but no JavaScript.

* An author is able to enter anything on a page except IFRAME, OBJECT and JavaScript code.

* A registered user can insert images and format his text (left, right, bold, etc.)

* A simple visitor can only write text.

The filter can do ...

Users, Sessions, Duration...

The website must be capable of supporting users. For this purpose we'll use the content type "users". Users are defined in that content type and therefore benefit from all the capabilities offered by the content type (revisions, signatures, pictures, extra fields to enhance the default profile of a user with things like an address, phone number, etc.)

There are two main categories of users: anonymous users and registered users.

Registered users are viewed as anonymous users until logged in, although we can make use of several level/degree ...

More about groups, actions, and permissions is defined here:
Content Object in Cassandra (Content Tree)


It is to be noted that in regard to terminology, the terms used in the many document are somewhat confusing. It will get fixed with time. In the software, however, the terminology we are trying to be correct. There are 4 terms that are important defined as:

  • Permissions: Includes all the information that pertain to whether a user can act on a piece of data or not.
  • Rights: rights are assigned to users and content; users can act on the content only when they ...

Layout feature [core]

The layout feature offers a very easy way for our end users to select a layout for their website (global, generally called theme) or on a per page basis (local).

The layout may be one wide column on the left and a smaller one on the right. It could be 4 boxes, 2 at the top and 2 at the bottom of the same size, or with the top-left smaller than the top-right, etc.

Some of the content of the boxes can be predefined as the user edits a page (i.e. marking this top-left box content as the default for top-left boxes.) Moving the data from one box to another should be easy.

Technically, layouts ...

Page feature [core]

Support means to add pages to the website.

This does not automatically translate into "Post Content" since a page may just be a set of references to other pages, list of things, etc.

Creating a page requires:

1. Adding a title

2. Selecting a layout, Selecting a favicon1

  • 1. At times, I create a page that references a different project. For example, I have the SSWF project on my company's website. This project has its own favicon, but unfortunately on that page it shows the company's website icon. This feature would simply declare a shortcut icon meta tag with the correct ...

Note: The snapbackend process is fully functional. It generates sitemap.xml, sends emails, and verify whether an attachment is a virus... This feature is therefore complete although some plugin specific backends may not work or even not be implemented.

The system uses CRON to run batch processes. All batch processes run in the background, most certainly not on the main servers (i.e. the servers where users connect to use the website.)

For this reason, necessary batch work needs to be reported to backend servers.

Because some of the work can take a long time and a process may fail, we want ...

Content Concept

Note: In itself, this is marked as complete since it works already, although we will be making many additions, the basic concepts will remain the same.

The content is organized on a per page basis. It is formed of one to many elements. We use the Qt XSLT library with XML templates to finalize the output of a page with the dynamically generated data. (Details see Content Object in Cassandra (Content Tree)).

cTemplate basics1

The cTemplate library is used to transform inline tags with a corresponding value.

The ...

  • 1. cTemplate will not be used since XSLT is enough to do the job offered by cTemplate plus much more.
Syndicate content Syndicate content

Snap! Websites
An Open Source CMS System in C++

Contact Us Directly