È necessario un ambiente di tipo Apache, MySQL, PHP
Gli unici passi necessari per eseguire gyural sono
Per testare che tutto abbia funzionato lancia il virtualhost e via.
È un vettore di oggetti in JSON, si possono creare più configurazioni per switchare velocemente tra una versione di produzione e una di test.
{
"working":{
"ErrorApp":"error",
"IndexApp":"index",
"siteName":"Gyural",
"uri":"http://localhost:8888",
"uploadPath":"upl/",
"mysql":"mysql://root:root@localhost/lemonade",
"supportMail":"info@gyural.federicoq.com",
"mail":"help@gyural.federicoq.com",
"ssl": 0,
"dev": 0,
"version": 1,
"online": 1
}
}
Il funzionamento di gyural è sintetizzabile con la "processione" di tutte le richieste effettuate dall'utente verso index.php
index.php crea un ambiente atto a gestire la richiesta, nel migliore dei modi possibili
<?php
# 1.0.0 # 28/8/2012
# federicoq
// Gyural
error_reporting(0);
define('gyu', true);
include 'config.php';
include absolute . 'funcs/gyu.php';
try {
gyu_autoload();
checkDevelop();
LoadClass('standardObject');
LoadClass('users');
defined('dbLink') ? $databaseDriver = ParseDatabase(dbLink, $dbLink_pattern) : null;
session_start();
Route($page);
is_object(Database()) ? Login() : die('Did you hear the explosion?');
include application . $page;
if(is_object(Database()))
Database()->close();
} catch (Exception $e) {
__error($e);
}
?>
Sono la cosa più utile che c'è. Con le funzioni si ha la possibilità di creare interfacce di accesso e helper per applicazioni o parti di esse.
Si può dire che Gyural tutto viene eseguito grazie a una sua stessa FUNC.
Strutturalmente, per funzionare le FUNCS devono rispondere a questi requisiti
function repository__name()Shipped, e indispensabili per l'esecuzione.
Senza questo piccolo set di FUNCS non è possibile eseguire gyural.
Documenterò solo le funzioni che vengono poi utilizzate dallo sviluppatore...
function Functions($respository, $forceGlobal = 0)
Carica la $repository e la rende pronta per essere richiamata dalle app.
Ricorda che le FUNC LOCALI hanno la precedenza su quelle GLOBALI nel caso di: 1/app/news/_/func.php e di 2/funcs/third/news.php la 1 sarà quella richiamata.
function CallFunction($respository, $func, $args)
Richiama la FUNC repository__func($args)
Se $repository non è ancora mai stata richiamata con Functions($repository); è lei che provvede ad effettuarlo.
function LoadClass($lib, $istance = false, $args = null)
Richiama la LIB $lib ed è ingrado di istanziarla immediatamente, o semplicemente renderla disponibile in caso di richiesta.
Ricorda che le LIB LOCALI hanno la precedenza su quelle GLOBALI nel caso di: 1/app/news/_/news.lib.php e di 2/libs/news.lib.php la 1 sarà quella richiamata.
function isGyu()
Verifica se per caso l'applicazione viene richiamata all'esterno dell'ecosistema gyural.
function isSsl()
Verifica se c'è in corso una connessione SSL protetta con gyural.
function isMobile()
Verifica se il navigatore è mobile
Shipped, gyural ha già un set di funzioni per interagire con il database (mysql per ora)
function FetchObject($oggetto, $alwayArray = 0, $classe = 'standardObject')
È la funzione che userai di più se lavorerai con MySQL
La funzione restituisce un vettore di oggetti, contenente il risultato dell'oggetto MySQLgyu.lib.php
Si può personalizzare la richiesta specificando se restituire sempre un vettore (anche in caso di un solo risultato) e
Scegliando il tipo di LIBS da associare ad ogni elemento del risultato.
function Database()
Questa funzione permette di richiamare AL VOLO l'oggetto DATABASE.
All'interno della funzione Database() è presente un intero oggetto MySQLgyu.lib pronto a rispondere alle richieste!
Lavora spesso in coppia con FetchObject();
print_r(FetchObject(Database()->query("SELECT * FROM `news`")));
// E si avrà la stampa di tutti i record di `news`
function CreateQuery($tipo, $tabella, $campi, $identifier)
La funzione permette di pre-confezionare una query pronta da far eseguire al MySQLgyu.lib.php
Raramente usata, le query di SELECT, INSERT, UPDATE e DELETE vengono solitamente fatte dall'istanza della LIB stessa.
function ParseDatabase($path, $pattern)
Noia, di sistema, controlla che la stringa sia fatta bene
function MysqlConnect($server, $username, $password, $database)
Noia, di sistema, si collega al db
Shipped, ci sono un po' di funzioncine, niente di ché in realtà.. andrebbero arricchite e sistemate...
function date2unix($data)
Trasforma una data del formato europeo gg/mm/AA hh:ii:ss in unixepoch.. accetta qualunque separatore, l'importante che "i numeri non si tocchino"
function seconds2Days($seconds)
Trasforma in Giorni i secondi... 86400 = 1
Shipped, questa non la documento... è in fase di restauro, è appiccicaticcia... :)
Shipped
Gyural basa la sua sicurezza sulle tipologie di accesso che si fanno alle applicazioni e dal livello di accesso dell'utente.
La prima parte che vedremo è quella sulla tipologia di accesso.
La tipologia di metodo d'accesso che una determinata applicazione accetta è stabilito all'interno dell'app stessa. è la funzione che deve subito seguire isGyu(); nella stesura dell'app.
function MethodAjax()
Accetta SOLAMENTE richiesta di tipo AJAX.
function MethodStandard()
Accetta ogni tipologia di richiesta.
function MethodApplication()
Accetta solamente chiamate dall'interno di altre APP. (attenzione alla ricorsione però: evitate di richiamare un'app all'interno di se stessa.)
function Application($app, $hideOtherApplication = null, $app_data = null)
Questa funzione permette di richiamare un'applicazione all'interno di un'altra.
con $hideOtherApplication si può inibire l'esecuzione di APP all'interno dell'app che richiami
con $app_data si può possono passare informazioni all'app. la quale potrà gestire col vettore/variabile/oggetto $app_data;
Affinchè i livelli di accesso funzionino è necessario che sia mantenuta l'architettura del database di gyural con la presenza della tabella "users" e "rights"
Brevemente, all'interno della tabella users c'è una colonna "groupID" che rappresenta il gruppo d'appartenenza dell'utente
All'interno di rights c'è invece il livello di accesso ad una specifica app da parte di ogni singolo gruppo
function Right($m, $ifBad = null)
Va richiamata questa funzione prima di qualunque accesso/modifica/render
Si stabilisce il livello minimo $m necessario affinché l'applicazione possa essere esguita
Ricordiamo che l'utente sloggato ha di default livello 0 per ogni app.
Con la wild-card * è sufficiente che l'utente sia loggato.
function i_can($what, $level)
La funzione restituisce true o false in base alla possibilità o meno dell'utente loggato di eseguire l'app $what con il livello $level
function Login()
La funzione controlla ed eventualmente tenta una procedura di login da parte dell'utente.
function Logged()
La funzione restituisce true o false in base al corrente stato di logged da parte dell'utente che l'esegue.
function Me()
Restituisce l'oggetto users.lib.php dell'utente attualmente loggato.
Shipped, banali ma utilissima.
Per funzionare deve essere preservata la tabella variables all'interno del database.
La funzione permette di salvare all'interno del database una serie di variabili riservate all'utente.. utile in caso di salvataggio di impostazioni per il sito, preferenze nella visualizzazione... immaginiamoli come dei cookie ma che risiedono sul database, invece che sul pc dell'utente.
function get_var($key, $user = NULL, $complex = NULL)
function set_var($key, $value, $user = NULL)
function del_var($key, $user = NULL)
Se omesso l'attributo USER verrà in automatico passato quello dell'utente loggato.
Qui succede tutto! Qui andiamo a creare le nostre app, quindi il nostro sito, il nostro social, il nostro qualunque-cosa!
Le APP, per esistere devono avere una cartella all'interno della cartella /app.
Ogni APP può avere al suo interno un set di FUNCS e una LIB. Affinché ciò avvenga l'app deve avere una subfolder dal nome: /app/_ e al suo interno i due file che stabiliscono le FUNC e la LIB.
per esempio:
Applicazione news
Ogni applicazione è richiamata dall'utente finale tramite l'indirizzo: http://example.com/news
Una chiamata secca all'APP verrà convertita in una chiamata per /news/index
Ogni applicazione può avere infinite sotto-applicazioni banalmente "pagine". Il percorso dell'app è fedele a quella della pagina, salvo la presenza di alcune variabili.
Le variabili possono essere in qualunque parte dell'url, ma occhio a google, cerca di rispettare sempre la stessa sintassi.
esempio di applicazione semplice: /news/index.php
isGyu();
MethodStandard();
Right('*');
// L'app sarà eseguibile da chiunque è loggato. Ed è accettata qualunque forma di chiamata
$news = LoadClass('news', 1)->filter(
array('visibile', 1),
'ORDER BY `data` DESC'
);
print_r($news);
All'interno dell'app è possibile richiamare altre applicazioni.. nell'esempio banale di un sito internet...
isGyu();
MethodStandard();
Right('*');
// L'app sarà eseguibile da chiunque è loggato. Ed è accettata qualunque forma di chiamata
$news = LoadClass('news', 1)->filter(
array('visibile', 1),
'ORDER BY `data` DESC'
);
Application('generali/header');
Application('generali/footer');
// Abbiamo richiamato due applicazioni, 'generali/header' e 'generali/footer' questo ci
// permette di assemblare parti di app diverse all'interno della stessa..
ed è possibile anche stampare dell'html al suo interno...
isGyu();
MethodStandard();
Right('*');
// L'app sarà eseguibile da chiunque è loggato. Ed è accettata qualunque forma di chiamata
$news = LoadClass('news', 1)->filter(
array('visibile', 1),
'ORDER BY `data` DESC'
);
Application('generali/header');
foreach($news as $notizia)
echo '<h1>'.$notizia->getAttr('title').'</h1>';
Application('generali/footer');
Dall'interno di un'app è possibile effettuare qualunque cosa!
Le librerie sono la cosa più importante, nel caso di una webapplication, o di un sito dinamico, o comunque un qualcosa che lavori con dei dati..
E in gyural sono molto flessibili e molto carine!
Per funzionare devono:
È la libreria perfetta per giocare con i dati!
Nasce per dialogare con MySQLgyu.lib.php sotto le mentite spoglie di Database()
Offre una serie di metodi/attributi che permettono di gestire *senza perder tempo* gli oggetti
$gyu_table
Specifica a quale tabella del database fa capo l'oggetto viene utilizzata per i metodi put/hang/delete
$gyu_id viene utilizzato per il metodo get()
Specifica quale campo della tabella rappresenta univocamente il record.
- eredita al suo interno alcune proprietà che gli vengono iniettate da MySQLgyu -
public function filter(…)
Permette di ottenere un gruppo di oggetti che rispondono ai criteri del filtro.
il metodo accetta infiniti attributi e nelle forme di Array() o String.
Gli Array() rappresentano i criteri che matchano le richieste:
public function get($index)
Permette di perfezionare in automatico una query di SELECT di un singolo elemento usando il $gyu_id come campo di riferimento. Restituisce un oggetto della stessa classe del chiamante.
public function getAttr($name)
Get the $name attr from the object. { try to call getName(); }
public function setAttr($key, $vValue)
Set the $key attribute with the $vValue value { try to call setKey($value); }
public function render($name)
Render the $name from the object { try to call rendername(); }
public function format($template, $externalVars)
$categorie[0]->format('<li>{{name}} e {{madre}}</li>');
Permette di ottenere una stringa con l'oggetto formattato.. {{name}} corrisponde ad una chiamata del tipo getAttr('name') ed è possibile anche accedere ad eventuali attributi di oggetti risposta del getAttr();
public function notNull($what)
Verifica se un'attributo è nullo (false, 0, null, array(0))
public function refill($vArray = null)
Refill the object with the $vArray values.
public function hang($vArray = null)
$object->hang() ==> prepare the query to insert the object in the database.
public function hangExecute($vArray = null)
$object->hangExecute() ==> execute the query, prepared by ->hang();
public function put($vArray = null, $id = null)
$object->put() ==> prepare the query to update the object in the database.
public function putExecute($vArray = null, $id = null)
$object->putExecute() ==> execute the query, prepared by ->put();
public function delete($id = null)
$object->delete() ==> prepare the query to delete the object in the database.
public function deleteExecute($id = null)
$object->deleteExecute() ==> execute the query, prepared by ->delete();
Questa LIB viene utilizzata dallo sviluppatore unicamente per il suo metodo Query(); che restituisce un oggetto da poter elaborare con gyural.
Viene quasi esclusivamente usata tramite Database() e vi è una sola istanza in esecuzione per ogni gyural
È la libreria standard di gestione dell'utente.
Non ha metodi particolari, non ha nulla di particolare ma viene utilizzata dalle FUNC standard, ad esempio tramite Me()
È consigliata l'estensione o la sovrascrittura mediante uso di /users/_/users.lib.php
- Documentazione Mancante -
Follow us
@federicoq
@mandarinoadv