GithubHelp home page GithubHelp logo

nikdrosakis / gaiacms Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 16.87 MB

A new system approach to blogging

License: GNU General Public License v2.0

Hack 0.01% PHP 20.43% CSS 14.29% JavaScript 62.30% Shell 0.39% HTML 2.59%

gaiacms's Introduction

gaiacms

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)

SQL-SCHEMA image

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.

gaiacms's People

Contributors

nikdrosakis avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.