Questo framework ha alcune vulnerabilità. Usalo a tuo rischio e pericolo. Le sistemerò quando avrò tempo per farlo.
- Stack LAMP.
- PHP > 5.2.10
- zlib è richiesta per la compressione/decompressione degli archivi ffa.
- zip è richiesta dalla classe ZipArchive.
- gd è richiesta per il ridimensionamento delle immagini.
- mcrypt è utilizzata per vari digest.
- session è richiesta per l'utilizzo delle sessioni.
-
classloader : il classloader carica tutte le classi che terminano con estensione .class.php e .interface.php, ma solo quando utilizzate dall'utente. Esso cerca la classi scansionando alcune cartelle predefinite. Esso inoltre modifica i percorsi dell'include_path includendo la root del progetto.
-
file tipizzati. Questo framework utilizza alcune convenzioni per identificare i vari tipi di file in base a delle estensioni predefinite.
- .block.php
- .layout.php
- .config.php
- .class.php
- .interface.php Alcuni di essi sono cercati solo in specifiche cartelle.
-
configurazione per host : la configurazione si basa sul nome dell'host ed è salvata all'interno di '/include/config/mio_nome_host' (ad esempio i parametri per l'accesso al database che sono salvati dentro db.config.php). I file di configurazione comuni a tutti gli host sono salvati nella cartella speciale '__common'.
-
supporto al database : questo framework offre 2 livelli di supporto per l'accesso al database. Il primo è un insieme di classi helper per la creazione delle query, il secondo è un layer ActiveRecord. Le classi ActiveRecord non hanno bisogno di alcun tipo di mapping. È sufficiente creare 2 classi, una che estende AbstractPeer e una che estende AbstractDO, utilizzando una particolare convenzione di nomi e il tutto funziona automaticamente. Al momento solo il database MySql è supportato, ma altri layer possono essere implementati.
-
gestione di file e cartelle : sono presenti alcune classi per aiutare nella gestione dei files (File) e cartelle (Dir). Sono inoltre presenti classi per aiutare nella gestione di archivi zip, file csv (lavori in corso), file di properties, archivi del framework e storage sicuro.
-
immagini : sono presenti alcune classi che aiutano a gestire il ridimensionamento delle immagini.
-
pdf : è presente una classe che aiuta nella generazione dei pdf.
-
controller : È presente il supporto ai controller. Crea classi che estendono la classe AbstractController, aggiungi metodi che sono automaticamente collegati a degli eventi ed essi saranno invocati quando il browser caricherà gli indirizzi nella forma '/actions/[nome_controller]/[nome_azione].[estensione]'. Non è richiesta alcuna configurazione per fare il mapping. Sono presenti alcuni helper che aiutano nella formattazione dell'output per le estensioni più comuni.
-
viste : il framework ha un supporto per le viste basato su layout+sezioni+blocchi. Praticamente ogni layout è un template, con all'interno alcune sezioni che variano da pagina a pagina. Un blocco è un pezzo di html, ma potrebbe essere anche un pezzo di php. Le sezioni sono specificate con dei segnaposto all'interno dei layout e poi definite all'interno delle pagine utilizzando le funzioni 'start_section' e 'end_section'. Esse sono un po' come delle variabili all'interno dei layout renderizzate in un punto ben preciso.
-
supporto ai moduli : il framework supporta la presenza di moduli in modo molto simile a quello di composer. In pratica un modulo è un insieme di file che possono essere agganciati/sganciati (installati e disinstallati) dalla root del progetto. La differenza principale rispetto a Composer è che in composer i file vengono copiati nella cartella '/vendor', mentre in Frozen, i file sono installati/disinstallati direttamente nella root. Il comportamento adottato in fase di installazione/disinstallazione è definito nel file 'module.xml' obbligatoriamente presente all'interno del modulo. Il framework inoltre definisce un formato da utilizzare per specificare i moduli. La sintassi dei file xml è validabile in base al file '/framework/modules/module.rnc'. Inoltre un formato xml per gli aggiornamenti al database era in fase di sviluppo. La specifica è presente nel file '/framework/modules/data-updates.rnc'.
-
sessione ad albero : la sessione ha una struttura ad albero, e tutti i dati salvati al suo interno hanno una struttura ad albero.
-
collezioni : sono presenti alcune classi helper per la gestione dei dati come DataHolder e Tree.
-
xml : sono presenti alcune classi che aiutano nella generazione di xml.
-
utilities : sono presenti alcune classi di aiuto per l'invio delle email.
Alcune parti sono vecchie || incomplete || non testate.
È necessario creare nella cartella in cui è presente la cartella 'framework' una cartella 'tmp' coi permessi di scrittura, e una cartella '/include/storage/NOME_CASUALE' con i permessi di scrittura. Il file '.htaccess' deve essere presente nella root del progetto.
Inoltre la cartella '/framework/core/tests' deve avere i permessi di scrittura.
I test sono implementati utilizzando il framework simpletest, incluso all'interno del framework. È possibile lanciare i test puntando il browser all'indiritto :
http://virtual_host_name/framework/core/tests/all_tests.php
Alcuni test non sono abilitati se alcuni parametri non sono configurati (test col database).
Si possono abilitare seguendo queste istruzioni :
Creare un file .config.php in una directory col nome dell'host virtuale nella cartella 'include/config/', per esempio è possibile chiamarlo db_tests.config.php, e definire alcune configurazioni al suo interno :
Config::instance()->TEST_DB_NAME = 'test_db_name'; //put your own Config::instance()->TEST_DB_HOST = 'test_db_hostname'; //put your own Config::instance()->TEST_DB_USERNAME = 'test_db_username'; //put your own Config::instance()->TEST_DB_PASSWORD = 'test_db_password'; //put your own
Il database deve esistere prima di lanciare i test.
Inoltre alcune utilities sono presenti nella cartella '/framework/utilities/'.
Alcuni moduli sono inclusi nella distribuzione del framework.
C'è una demo funzionante presente nella cartella 'demos'. È possibile trovare le istruzioni per la configurazione della demo nella cartella 'setup' della demo, con il dump del database necessario a farla funzionare. È un sito web che utilizza alcuni moduli per la visualizzazione dei prodotti (le immagini reali sono state sostituite) e che utilizza alcuni layout. La parte di SuperAdmin è inoltre funzionante.
- rimuovere dipendenze dalla classe BasicObject (fatto)
- integrare una nuova classe Logger (work in progress)
- valutare lo sviluppo di classi per velocizzare lo sviluppo di siti web
- implementare chiamate di metodo data-driven utilizzando istanze delle classi DataHolder e Tree
- rinominare alcune cartelle come 'contenuti' e 'immagini' utilizzando nomi inglesi.
- aggiungere classi di supporto alle immagini e alla grafica
- effettuare test di vulnerabilità e tappare le falle di sicurezza
- rinominare la classe che gestisce gli archivi del framework e tutte le occorrenze (fatto - 14/Apr/2015)
- migliorare la documentazione aggiungendo le traduzioni in italiano (fatto - 14/Apr/2015)
-
web : MBCRAFT
-
mail : info [ at ] mbcraft [ dot ] it
- Marco Bagnaresi
This framework has some vulnerabilities. Use at your own risk. I'll fix it if i have time for.
- LAMP stack.
- PHP > 5.2.10
- zlib is required for compressing/uncompressing ffa archives.
- zip is required for ZipArchive class.
- gd is required for image resizing.
- mcrypt is required for message digests.
- session is required for sessions.
apache must have mod_rewrite enabled.
-
classloader : the classloader loads all classes that ends with .class.php and .interface.php, but only when used. It finds the class scanning some defined folders. It also fixes the include_path adding the project root.
-
typed files. This framework uses by convention files with defined extension in order to identify them:
- .block.php
- .layout.php
- .config.php
- .class.php
- .interface.php Some of them are scanned only in defined folders.
-
host based configuration : configuration is based on hostname and placed inside '/include/config/my_host_name/' (for example, for db configuration it uses the file 'db.config.php'). Common configuration goes to special '__common' folder.
-
database support (model) : this framework has a builtin 2-level database access layer. The first level is a raw query helper, the second is an ActiveRecord one. This classes do not need any kind of mapping. Simply create a class extending AbstractPeer and one extending AbstractDO, using a special naming scheme, and you're done. It works automatically. Only MySql database is supported by now, but other db layers can be developed if needed.
-
file/folder management : some classes are implemented for helping working with files (File) and directiories (Dir). There are also classes for zip archives, csv (work in progress), properties, framework archives and secure storage.
-
images : there are some helper classes for resizing images.
-
pdf : there is a class for pdf generation.
-
controller : framework has support for controllers. Extend the 'AbstractController', create methods that are linked to actions and called when the user points to '/actions/[controller_name]/[action_name].[extension]'. No mapping configuration is required. Automatic output generation with default formatters is included.
-
views : this framework has a system based on layouts+blocks+sections. Basically, a layout is a template with sections that are defined differently on each page. A block is a piece of html, but it can also be a piece of php. A section is defined using placeholders inside the layout, and specified in pages with the 'start_section' and 'end_section' functions. They are like variables inside layouts rendered in a specific place.
-
module support : This framework has an installable/uninstallable module system, similar to Composer. Modules also have folders that are copied/removed from your project root. The main difference from Composer (as far as i know) is that in Composer all files goes to '/vendor'. In Frozen (previously Charme-Crabs), files and folders are added and removed from/to the root project. All modules has a module.xml inside that defines its install/uninstall behaviour. This framework also defines an xml format for modules. Syntax is validable against '/framework/modules/module.rnc'. Also, an xml format for database updates was in development. See '/framework/modules/data-updates.rnc'.
-
tree session : session has a tree structure.
-
collections : common DataHolder and Tree classes for working with data.
-
xml : xml build support classes.
-
utilities : helper classes for email, custom format for framework distributable archives, browser information and other.
Other parts are old || incomplete || untested.
You need to create in the root folder a writable 'tmp' folder and also an 'include/storage/RANDOM_FOLDER_NAME' folder. The '.htaccess' file must be present in the project root.
Also, the folder /framework/core/tests/ should be writable too.
Tests are implemented using simpletest framework, included with this framework. You can run/check the unit tests pointing your browser to :
http://virtual_host_name/framework/core/tests/all_tests.php
Some tests are not enabled if some additional things are not set up (db tests).
If you want to enable them you should :
Create a .config.php file in a directory named as your virtual host in 'include/config/', you can call it eg. db_tests.config.php, and define some configs inside :
Config::instance()->TEST_DB_NAME = 'test_db_name'; //put your own Config::instance()->TEST_DB_HOST = 'test_db_hostname'; //put your own Config::instance()->TEST_DB_USERNAME = 'test_db_username'; //put your own Config::instance()->TEST_DB_PASSWORD = 'test_db_password'; //put your own
The db must exist prior test running.
Also various utilities are present in the framework/utilities folder.
Some sample modules are also provider.
- remove dependency from BasicObject class (done)
- integrate a new logger class. (work in progress)
- evaluate development of classes to speedup accessible website development
- implement data driven method call with Tree and DataHolder objects.
- rename folders 'contenuti' and 'immagini' to with english names.
- do security checks and close some security related issues.
- rename the class of the framework archives and all the occurrencies (done - 14/Apr/2015)
- improve the documentation adding italian translations (done - 14/Apr/2015)
-
web : MBCRAFT
-
mail : info [ at ] mbcraft [ dot ] it
- Marco Bagnaresi