simplicity in a minimal standardized approach to creating content
THE MYTH
In Greek mythology, Gaia in mythology (etymology from Ancient Greek "earth") was the personification of the Earth and one of the Greek primordial deities. Gaia was the great mother of all: the primal Greek Mother Goddess; creator and giver of birth to the Earth and all the Universe; the heavenly gods, the Titans, and the Giants were born to her.
As any myth that is based on facts, discoveries and inventions, gaiacms has the vision to become a CMS and a platform bridging web and mobile technologies. Gaia is intended to be the root system for creating apps and websites and a creative lab where other elements can exist.
****ARCHITECTURE
Gaia's purpose to be the root system for creating apps and websites and a creative lab where other elements can exist and other systems could co-exist. gaiacms wants to inspire simple users and tech-specilized programmers at the passion of creativity. It want users to utilize the system to create something higher. So except from giving the maximum possible customization ability, it avoids giving interface libraries, but the tools to create one for each own.
Template is a construction of pages and pages are constructions of modules or custom html through a wysiwyg editor.
Copying modules between templates, a template wizard and existant html5 integration to gaiacms makes template creation faster.
Available features at the custom version are:
- template wizard and styler to start a template.
- modulized content and stylesheets with pages and modules, for greate variety and custom user design.
- utilizes 5 databases and key-stores, with MYSQL on the middle of the system.
- cache system for creater performance with 2 key-stores (Redis, Memcached).
- easy dashboard for the greatest user control and with user permissions.
- custom template and module creation.
- template integration converting an existant html5 template to php-js gaiacms template
- custom taxonomy groups, post types, user roles for greater content abstraction.
- optimized php and javascript libraries to take advantage of.
TEMPLATES Tranforming an html template to gaia template!!!12
DASHBOARD
- Home
- Users
- Posts
- Taxonomy
- Templates
- Pages
- Modules
- Menu
- Globals
- Informatics
- todo
GS-OBJECTS
Objects are uploaded files and images.
Schema contains: οbj(ects), obj(ect) view(s) and obj(ect)groups
Obj belongs to an objgroupid and has a global title,filename,status(0:deleted,1:inactive,2:active) and privacy (0:hidden, 1:visible) for all instances,
and timestamps: created and modified (this changes when objview is added or deleted).
Object views are different obj instances with linkid the id of the table that is linked in (eg post.id,user.id).
Object groups contains name and format(1:images,2:files) customised object groups and multiple object groups
NOTIFICATIONS
Notifications in gaiacms 1.0 gives a total amount of factors and details that have to be fullfilled, so as the system is active and healthy.
1) One template is installed (else Install Template)
2) Pages and template folder are created in template folder (else Create Pages)
3) Modules and template folder are created in modules folder (else Create Modules)
4) Required global are given. (else fill the required globals)
5) Required pagevars are given. (else fill the required page vars)
6) Required gaia system folders and files exist (else reinstall gaia sys)
gaiacms makes use of 3 different databases and 2 key-store services.
Databases
- MYSQL
- MongoDB
- CassandraDB
Key-Stores
- Redis
- Memcached
The main core system is installed in MYSQL with Innodb format tables and is accessed with PHP through PDO Abstraction Layer (DB class).
Setup table is the basic table that contains entries for templates [type:1] and apps [type:2].
gaiacms MYSQL database includes 10 groups of tables, totally 17 at the current version.
- post - postax. Postax is the bridge to tax.
- tax - taxgrp. Contains custom taxonomy groups.
- user - usergrp. Contains custom usergroups and the ability to give permissions and privileges to users and all the userdata (except from user obj, eg images that are contained in
- obj - objgroup. All files uploaded to website are saved into objects. Objgroup contains custom obj groups.
- page. custom content and preformed pages are the ground for modules and pages if selected are inserted to menu.
- menu. All menu links of all menus separated in templates with templateid.
- varglobal - varpage: Global vars are global settings common data for all templates and locals and varpage are localized variables different at each template [templateid].
- comment. Commenting post, object, or apps (type)
- meschat. Messages between registered users.
- app_ [tables]. All extra installable tables.
MongoDB is the bson pal of the system (DB2 Class) that is planning to make data transfer much easier and Cassandra DB (DB2 Class) is the big data brother. Both of then are currently under integration for gaiacms Analytics and Statistics and other various services that are currently developed.
VAR-PAGE
Pagevars are placed asynchronously, appended to the id attribute on each html tag that is created by webmaster.
Variables of pages are localized. Default language is english(en). Also greek (el) is installed at varpage table.
When someone changes template, he expects that vars would be the same the different html, differently everything has to be rewritten from scratch.
In next gaiacms version, local page will be added, with the choice to add/remove language(s).
PAGE-LINK
pagelink is the awesome link of the page after the domain url.
pagefile is the php file connected with the pagelink at menupage table.
VAR-GLOBALS
are global variables common for any template, any page, any language.
Are installed synchonously through php method is().
AWESOME
Links has to be SEO oriented. There are at least two ways to organize links:
(a) SITE_URL/post/postname - SITE_URL/taxonomy/taxonomy-name
(b) SITE_URL/postname - SITE_URL/taxonomy-name
While the the second choice is simpler to use and delicate, it is more demanding, because it has to check all types of links, every time the system needs to produce one page.
1) taxonomy arrays
2) post uri arrays
3) custom pages uri arrays
4) apps uri arrays
5) user array
to find the url type.
Of course this data needs to be cached. But even, when the website is becoming larger conflicts are becoming larger, too.
So, even the system uses the (a) method with the following $_GET['page'] url types:
postgroup name from postgrp for posts that produces single posts => SITE_URL/[postgroup]/[postname]
taxgroup from taxgrp for taxonomies that produces archieves => SITE_URL/[taxgroup]/[taxname]
usergroup from usergrp for users that produces user profiles => SITE_URL/[usergroup]/[username]
page from pages that produces custom page pages => SITE_URL/page/[pageuri]
The problem that arises is what happens when the second uri level: post, page,taxonomy etc, changes it's name?
Even if we preserve the third uri level (eg post uri), the second level is very easy to change, eg when website grows and new taxonomies are added. All saved and bookmarked and internal links are mistaken.
The solution gaiacms follows to this is to create and cache a big array of preserved names with merged arrays from all the above groups and to keep urls with two levels. At least that is the starting point, using the Redis caching hand.