From cae1efd552ed0618b13120e07c346cbe28cbd00a Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sat, 2 Mar 2013 00:36:12 +0100 Subject: [PATCH] =?UTF-8?q?Corrections=20quelques=20bugs=20+=20modif=20fic?= =?UTF-8?q?hier=20config=20BDD=20+=20ajout=20fichier=20build.sh=20pour=20g?= =?UTF-8?q?=C3=A9n=C3=A9rer=20la=20lib=20Minz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README | 1 + app/configuration/application.ini | 2 +- app/configuration/routes.php | 136 ---------------- app/controllers/feedController.php | 18 ++- app/models/Feed.php | 27 ++-- app/views/configure/feed.phtml | 2 +- build.sh | 50 ++++++ freshrss.sql | 13 +- lib/ActionController.php | 42 ----- lib/Cache.php | 116 -------------- lib/Configuration.php | 219 -------------------------- lib/Dispatcher.php | 144 ----------------- lib/Error.php | 87 ---------- lib/FrontController.php | 104 ------------ lib/Helper.php | 22 --- lib/Log.php | 78 --------- lib/Model.php | 12 -- lib/Paginator.php | 196 ----------------------- lib/Request.php | 189 ---------------------- lib/Response.php | 60 ------- lib/Router.php | 244 ----------------------------- lib/Session.php | 73 --------- lib/Translate.php | 68 -------- lib/Url.php | 102 ------------ lib/View.php | 188 ---------------------- lib/dao/Model_array.php | 122 --------------- lib/dao/Model_pdo.php | 39 ----- lib/dao/Model_txt.php | 77 --------- lib/exceptions/MinzException.php | 94 ----------- public/.htaccess | 6 - public/index.php | 2 + 32 files changed, 95 insertions(+), 2439 deletions(-) delete mode 100644 app/configuration/routes.php create mode 100755 build.sh delete mode 100755 lib/ActionController.php delete mode 100644 lib/Cache.php delete mode 100755 lib/Configuration.php delete mode 100644 lib/Dispatcher.php delete mode 100755 lib/Error.php delete mode 100755 lib/FrontController.php delete mode 100755 lib/Helper.php delete mode 100755 lib/Log.php delete mode 100755 lib/Model.php delete mode 100755 lib/Paginator.php delete mode 100644 lib/Request.php delete mode 100644 lib/Response.php delete mode 100755 lib/Router.php delete mode 100755 lib/Session.php delete mode 100644 lib/Translate.php delete mode 100755 lib/Url.php delete mode 100755 lib/View.php delete mode 100755 lib/dao/Model_array.php delete mode 100755 lib/dao/Model_pdo.php delete mode 100755 lib/dao/Model_txt.php delete mode 100644 lib/exceptions/MinzException.php delete mode 100644 public/.htaccess diff --git a/.gitignore b/.gitignore index d03e4a7ee..760271230 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +lib/minz log/application.log cache diff --git a/README b/README index 7afefc386..265b519ca 100644 --- a/README +++ b/README @@ -23,6 +23,7 @@ PRE-REQUIS ========== - Serveur Apache (pas testé sur aucun autre) - PHP 5.3 (il me faudrait des retours sur d'autres versions) +- libxml pour PHP - MySQL INSTALLATION diff --git a/app/configuration/application.ini b/app/configuration/application.ini index 149bc6c5b..2beb60324 100644 --- a/app/configuration/application.ini +++ b/app/configuration/application.ini @@ -1,6 +1,6 @@ [general] environment = "development" -use_url_rewriting = true +use_url_rewriting = false sel_application = "flux rss lalala ~~~" base_url = "/~marien/rss/public" ; pas de slash à la fin /!\ diff --git a/app/configuration/routes.php b/app/configuration/routes.php deleted file mode 100644 index d32dca3ee..000000000 --- a/app/configuration/routes.php +++ /dev/null @@ -1,136 +0,0 @@ - '/\?q=([\w\d\-_]+)&p=([\d]+)', - 'controller' => 'index', - 'action' => 'index', - 'params' => array ('get', 'page') - ), - array ( - 'route' => '/\?q=([\w\d\-_]+)', - 'controller' => 'index', - 'action' => 'index', - 'params' => array ('get') - ), - array ( - 'route' => '/\?p=([\d]+)', - 'controller' => 'index', - 'action' => 'index', - 'params' => array ('page') - ), - array ( - 'route' => '/login.php', - 'controller' => 'index', - 'action' => 'login' - ), - array ( - 'route' => '/logout.php', - 'controller' => 'index', - 'action' => 'logout' - ), - array ( - 'route' => '/mode.php\?m=([\w_]+)', - 'controller' => 'index', - 'action' => 'changeMode', - 'params' => array ('mode') - ), - - // Scripts - array ( - 'route' => '/scripts/main.js', - 'controller' => 'javascript', - 'action' => 'main' - ), - - // API - array ( - 'route' => '/api/get_favorites', - 'controller' => 'api', - 'action' => 'getFavorites' - ), - array ( - 'route' => '/api/get_nb_not_read', - 'controller' => 'api', - 'action' => 'getNbNotRead' - ), - - // Entry - array ( - 'route' => '/articles/marquer.php\?id=([\w\d\-_]{6})&lu=([\d]{1})', - 'controller' => 'entry', - 'action' => 'read', - 'params' => array ('id', 'is_read') - ), - array ( - 'route' => '/articles/marquer.php\?lu=([\d]{1})', - 'controller' => 'entry', - 'action' => 'read', - 'params' => array ('is_read') - ), - array ( - 'route' => '/articles/marquer.php\?id=([\w\d\-_]{6})&favori=([\d]{1})', - 'controller' => 'entry', - 'action' => 'bookmark', - 'params' => array ('id', 'is_favorite') - ), - - - // Feed - array ( - 'route' => '/flux/ajouter.php', - 'controller' => 'feed', - 'action' => 'add' - ), - array ( - 'route' => '/flux/actualiser.php', - 'controller' => 'feed', - 'action' => 'actualize' - ), - array ( - 'route' => '/flux/supprimer.php\?id=([\w\d\-_]{6})', - 'controller' => 'feed', - 'action' => 'delete', - 'params' => array ('id') - ), - - // Configure - array ( - 'route' => '/configuration/flux.php', - 'controller' => 'configure', - 'action' => 'feed' - ), - array ( - 'route' => '/configuration/flux.php\?id=([\w\d\-_]{6})', - 'controller' => 'configure', - 'action' => 'feed', - 'params' => array ('id') - ), - array ( - 'route' => '/configuration/categories.php', - 'controller' => 'configure', - 'action' => 'categorize' - ), - array ( - 'route' => '/configuration/global.php', - 'controller' => 'configure', - 'action' => 'display' - ), - array ( - 'route' => '/configuration/import_export.php', - 'controller' => 'configure', - 'action' => 'importExport' - ), - array ( - 'route' => '/configuration/import_export.php\?q=([\w]{6})', - 'controller' => 'configure', - 'action' => 'importExport', - 'params' => array ('q') - ), - array ( - 'route' => '/configuration/raccourcis.php', - 'controller' => 'configure', - 'action' => 'shortcut' - ), -); diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php index 9a56e97cf..585405ee7 100755 --- a/app/controllers/feedController.php +++ b/app/controllers/feedController.php @@ -10,11 +10,11 @@ class feedController extends ActionController { } else { if (Request::isPost ()) { $url = Request::param ('url_rss'); - + try { $feed = new Feed ($url); $feed->load (); - + $feedDAO = new FeedDAO (); $values = array ( 'id' => $feed->id (), @@ -26,7 +26,7 @@ class feedController extends ActionController { 'lastUpdate' => time () ); $feedDAO->addFeed ($values); - + $entryDAO = new EntryDAO (); $entries = $feed->entries (); foreach ($entries as $entry) { @@ -44,13 +44,21 @@ class feedController extends ActionController { ); $entryDAO->addEntry ($values); } - + // notif $notif = array ( 'type' => 'good', 'content' => 'Le flux ' . $feed->url () . ' a bien été ajouté' ); Session::_param ('notification', $notif); + } catch (FileNotExistException $e) { + Log::record ($e->getMessage (), Log::ERROR); + // notif + $notif = array ( + 'type' => 'bad', + 'content' => 'Un problème de configuration a empêché l\'ajout du flux. Voir les logs pour plus d\'informations' + ); + Session::_param ('notification', $notif); } catch (Exception $e) { // notif $notif = array ( @@ -59,7 +67,7 @@ class feedController extends ActionController { ); Session::_param ('notification', $notif); } - + Request::forward (array (), true); } } diff --git a/app/models/Feed.php b/app/models/Feed.php index 2db9af40d..67874925f 100644 --- a/app/models/Feed.php +++ b/app/models/Feed.php @@ -84,16 +84,23 @@ class Feed extends Model { public function load () { if (!is_null ($this->url)) { - $feed = new SimplePie (); - $feed->set_feed_url ($this->url); - $feed->set_cache_location (CACHE_PATH); - $feed->init (); - - $title = $feed->get_title (); - $this->_name (!is_null ($title) ? $title : $this->url); - $this->_website ($feed->get_link ()); - $this->_description ($feed->get_description ()); - $this->loadEntries ($feed); + if (CACHE_PATH === false) { + throw new FileNotExistException ( + 'CACHE_PATH', + MinzException::ERROR + ); + } else { + $feed = new SimplePie (); + $feed->set_feed_url ($this->url); + $feed->set_cache_location (CACHE_PATH); + $feed->init (); + + $title = $feed->get_title (); + $this->_name (!is_null ($title) ? $title : $this->url); + $this->_website ($feed->get_link ()); + $this->_description ($feed->get_description ()); + $this->loadEntries ($feed); + } } } private function loadEntries ($feed) { diff --git a/app/views/configure/feed.phtml b/app/views/configure/feed.phtml index 54867ba9a..0acec1872 100644 --- a/app/views/configure/feed.phtml +++ b/app/views/configure/feed.phtml @@ -38,9 +38,9 @@ + -
Aucun flux sélectionné
diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..e6c563b83 --- /dev/null +++ b/build.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +MINZ_REPO_URL="https://github.com/marienfressinaud/MINZ.git" +MINZ_CLONE_PATH="./minz_tmp" +LIB_MINZ_PATH="./minz_tmp/lib/*" +LIB_PATH="./lib/minz" +LOG_PATH="./log" +CACHE_PATH="./cache" + +git_check() { + printf "Vérification de la présence de git... " + + EXE_PATH=$(which "git" 2>/dev/null) + if [ $? -ne 0 ]; then + printf "git n'est pas présent sur votre système. Veuillez l'installer avant de continuer\n"; + exit 1 + else + printf "git a été trouvé\n" + fi +} + +dir_check() { + test -d $LOG_PATH + if [ $? -ne 0 ]; then + mkdir $LOG_PATH + fi + + test -d $CACHE_PATH + if [ $? -ne 0 ]; then + mkdir $CACHE_PATH + fi +} + +clone_minz() { + printf "Récupération de Minz...\n" + + git clone $MINZ_REPO_URL $MINZ_CLONE_PATH + test -d $LIB_PATH + if [ $? -ne 0 ]; then + mkdir -p $LIB_PATH + fi + mv $LIB_MINZ_PATH $LIB_PATH + rm -rf $MINZ_CLONE_PATH + + printf "Récupération de Minz terminée...\n" +} + +git_check +dir_check +clone_minz diff --git a/freshrss.sql b/freshrss.sql index 5be4da1c6..34ef29aa4 100644 --- a/freshrss.sql +++ b/freshrss.sql @@ -1,11 +1,11 @@ -- phpMyAdmin SQL Dump --- version 3.5.3 +-- version 3.5.5 -- http://www.phpmyadmin.net -- -- Client: localhost --- Généré le: Dim 28 Octobre 2012 à 10:58 --- Version du serveur: 5.5.28-log --- Version de PHP: 5.4.8 +-- Généré le: Sam 02 Mars 2013 à 00:09 +-- Version du serveur: 5.1.68-cll +-- Version de PHP: 5.3.17 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; @@ -67,6 +67,7 @@ CREATE TABLE IF NOT EXISTS `feed` ( `name` varchar(255) NOT NULL, `website` text NOT NULL, `description` text NOT NULL, + `lastUpdate` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `category` (`category`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -86,3 +87,7 @@ ALTER TABLE `entry` -- ALTER TABLE `feed` ADD CONSTRAINT `feed_ibfk_4` FOREIGN KEY (`category`) REFERENCES `category` (`id`) ON DELETE SET NULL ON UPDATE CASCADE; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/lib/ActionController.php b/lib/ActionController.php deleted file mode 100755 index ab9389dbd..000000000 --- a/lib/ActionController.php +++ /dev/null @@ -1,42 +0,0 @@ - -*/ - -/** - * La classe ActionController représente le contrôleur de l'application - */ -class ActionController { - protected $router; - protected $view; - - /** - * Constructeur - * @param $controller nom du controller - * @param $action nom de l'action à lancer - */ - public function __construct ($router) { - $this->router = $router; - $this->view = new View (); - $this->view->attributeParams (); - } - - /** - * Getteur - */ - public function view () { - return $this->view; - } - - /** - * Méthodes à redéfinir (ou non) par héritage - * firstAction est la première méthode exécutée par le Dispatcher - * lastAction est la dernière - */ - public function init () { } - public function firstAction () { } - public function lastAction () { } -} - - diff --git a/lib/Cache.php b/lib/Cache.php deleted file mode 100644 index 2fe0693d8..000000000 --- a/lib/Cache.php +++ /dev/null @@ -1,116 +0,0 @@ - -*/ - -/** - * La classe Cache permet de gérer facilement les pages en cache - */ -class Cache { - /** - * $expire timestamp auquel expire le cache de $url - */ - private $expire = 0; - - /** - * $file est le nom du fichier de cache - */ - private $file = ''; - - /** - * $enabled permet de déterminer si le cache est activé - */ - private static $enabled = true; - - /** - * Constructeur - */ - public function __construct () { - $this->_fileName (); - $this->_expire (); - } - - /** - * Setteurs - */ - public function _fileName () { - $file = md5 (Request::getURI ()); - - $this->file = CACHE_PATH . '/'.$file; - } - - public function _expire () { - if ($this->exist ()) { - $this->expire = filemtime ($this->file) - + Configuration::delayCache (); - } - } - - /** - * Permet de savoir si le cache est activé - * @return true si activé, false sinon - */ - public static function isEnabled () { - return Configuration::cacheEnabled () && self::$enabled; - } - - /** - * Active / désactive le cache - */ - public static function switchOn () { - self::$enabled = true; - } - public static function switchOff () { - self::$enabled = false; - } - - /** - * Détermine si le cache de $url a expiré ou non - * @return true si il a expiré, false sinon - */ - public function expired () { - return time () > $this->expire; - } - - /** - * Affiche le contenu du cache - * @print le code html du cache - */ - public function render () { - if ($this->exist ()) { - include ($this->file); - } - } - - /** - * Enregistre $html en cache - * @param $html le html à mettre en cache - */ - public function cache ($html) { - file_put_contents ($this->file, $html); - } - - /** - * Permet de savoir si le cache existence - * @return true si il existe, false sinon - */ - public function exist () { - return file_exists ($this->file); - } - - /** - * Nettoie le cache en supprimant tous les fichiers - */ - public static function clean () { - $files = opendir (CACHE_PATH); - - while ($fic = readdir ($files)) { - if ($fic != '.' && $fic != '..') { - unlink (CACHE_PATH.'/'.$fic); - } - } - - closedir ($files); - } -} diff --git a/lib/Configuration.php b/lib/Configuration.php deleted file mode 100755 index 90caa26b5..000000000 --- a/lib/Configuration.php +++ /dev/null @@ -1,219 +0,0 @@ - -*/ - -/** - * La classe Configuration permet de gérer la configuration de l'application - */ -class Configuration { - const CONF_PATH_NAME = '/configuration/application.ini'; - - /** - * VERSION est la version actuelle de MINZ - */ - const VERSION = '1.1.0'; - - /** - * valeurs possibles pour l'"environment" - * SILENT rend l'application muette (pas de log) - * PRODUCTION est recommandée pour une appli en production - * (log les erreurs critiques) - * DEVELOPMENT log toutes les erreurs - */ - const SILENT = 0; - const PRODUCTION = 1; - const DEVELOPMENT = 2; - - /** - * définition des variables de configuration - * $sel_application une chaîne de caractères aléatoires (obligatoire) - * $environment gère le niveau d'affichage pour log et erreurs - * $use_url_rewriting indique si on utilise l'url_rewriting - * $base_url le chemin de base pour accéder à l'application - * $title le nom de l'application - * $language la langue par défaut de l'application - * $cacheEnabled permet de savoir si le cache doit être activé - * $delayCache la limite de cache - * $db paramètres pour la base de données (tableau) - * - host le serveur de la base - * - user nom d'utilisateur - * - password mot de passe de l'utilisateur - * - base le nom de la base de données - */ - private static $sel_application = ''; - private static $environment = Configuration::PRODUCTION; - private static $base_url = ''; - private static $use_url_rewriting = false; - private static $title = ''; - private static $language = 'en'; - private static $cache_enabled = true; - private static $delay_cache = 3600; - - private static $db = array ( - 'host' => false, - 'user' => false, - 'password' => false, - 'base' => false - ); - - /* - * Getteurs - */ - public static function selApplication () { - return self::$sel_application; - } - public static function environment () { - return self::$environment; - } - public static function baseUrl () { - return self::$base_url; - } - public static function useUrlRewriting () { - return self::$use_url_rewriting; - } - public static function title () { - return self::$title; - } - public static function language () { - return self::$language; - } - public static function cacheEnabled () { - return self::$cache_enabled; - } - public static function delayCache () { - return self::$delay_cache; - } - public static function dataBase () { - return self::$db; - } - - /** - * Initialise les variables de configuration - * @exception FileNotExistException si le CONF_PATH_NAME n'existe pas - * @exception BadConfigurationException si CONF_PATH_NAME mal formaté - */ - public static function init () { - try { - self::parseFile (); - } catch (BadConfigurationException $e) { - throw $e; - } catch (FileNotExistException $e) { - throw $e; - } - } - - /** - * Parse un fichier de configuration de type ".ini" - * @exception FileNotExistException si le CONF_PATH_NAME n'existe pas - * @exception BadConfigurationException si CONF_PATH_NAME mal formaté - */ - private static function parseFile () { - if (!file_exists (APP_PATH . self::CONF_PATH_NAME)) { - throw new FileNotExistException ( - APP_PATH . self::CONF_PATH_NAME, - MinzException::ERROR - ); - } - $ini_array = parse_ini_file ( - APP_PATH . self::CONF_PATH_NAME, - true - ); - - // [general] est obligatoire - if (!isset ($ini_array['general'])) { - throw new BadConfigurationException ( - '[general]', - MinzException::ERROR - ); - } - $general = $ini_array['general']; - - - // sel_application est obligatoire - if (!isset ($general['sel_application'])) { - throw new BadConfigurationException ( - 'sel_application', - MinzException::ERROR - ); - } - self::$sel_application = $general['sel_application']; - - if (isset ($general['environment'])) { - switch ($general['environment']) { - case 'silent': - self::$environment = Configuration::SILENT; - break; - case 'development': - self::$environment = Configuration::DEVELOPMENT; - break; - case 'production': - self::$environment = Configuration::PRODUCTION; - break; - default: - throw new BadConfigurationException ( - 'environment', - MinzException::ERROR - ); - } - - } - if (isset ($general['base_url'])) { - self::$base_url = $general['base_url']; - } - if (isset ($general['use_url_rewriting'])) { - self::$use_url_rewriting = $general['use_url_rewriting']; - } - - if (isset ($general['title'])) { - self::$title = $general['title']; - } - if (isset ($general['language'])) { - self::$language = $general['language']; - } - if (isset ($general['cache_enabled'])) { - self::$cache_enabled = $general['cache_enabled']; - } - if (isset ($general['delay_cache'])) { - self::$delay_cache = $general['delay_cache']; - } - - // Base de données - $db = false; - if (isset ($ini_array['db'])) { - $db = $ini_array['db']; - } - if ($db) { - if (!isset ($db['host'])) { - throw new BadConfigurationException ( - 'host', - MinzException::ERROR - ); - } - if (!isset ($db['user'])) { - throw new BadConfigurationException ( - 'user', - MinzException::ERROR - ); - } - if (!isset ($db['password'])) { - throw new BadConfigurationException ( - 'password', - MinzException::ERROR - ); - } - if (!isset ($db['base'])) { - throw new BadConfigurationException ( - 'base', - MinzException::ERROR - ); - } - - self::$db['host'] = $db['host']; - self::$db['user'] = $db['user']; - self::$db['password'] = $db['password']; - self::$db['base'] = $db['base']; - } - } -} diff --git a/lib/Dispatcher.php b/lib/Dispatcher.php deleted file mode 100644 index 6b87be3a9..000000000 --- a/lib/Dispatcher.php +++ /dev/null @@ -1,144 +0,0 @@ - -*/ - -/** - * Le Dispatcher s'occupe d'initialiser le Controller et d'executer l'action - * déterminée dans la Request - * C'est un singleton - */ -class Dispatcher { - const CONTROLLERS_PATH_NAME = '/controllers'; - - /* singleton */ - private static $instance = null; - - private $router; - private $controller; - - /** - * Récupère l'instance du Dispatcher - */ - public static function getInstance ($router) { - if (is_null (self::$instance)) { - self::$instance = new Dispatcher ($router); - } - return self::$instance; - } - - /** - * Constructeur - */ - private function __construct ($router) { - $this->router = $router; - } - - /** - * Lance le controller indiqué dans Request - * Remplit le body de Response à partir de la Vue - * @exception MinzException - */ - public function run () { - $cache = new Cache(); - - if (Cache::isEnabled () && !$cache->expired ()) { - ob_start (); - $cache->render (); - $text = ob_get_clean(); - } else { - while (Request::$reseted) { - Request::$reseted = false; - - try { - $this->createController ( - Request::controllerName () - . 'Controller' - ); - - $this->controller->init (); - $this->controller->firstAction (); - $this->launchAction ( - Request::actionName () - . 'Action' - ); - $this->controller->lastAction (); - - if (!Request::$reseted) { - ob_start (); - $this->controller->view ()->build (); - $text = ob_get_clean(); - } - } catch (MinzException $e) { - throw $e; - } - } - } - - Response::setBody ($text); - } - - - /** - * Instancie le Controller - * @param $controller_name le nom du controller à instancier - * @exception FileNotExistException le fichier correspondant au - * > controller n'existe pas - * @exception ControllerNotExistException le controller n'existe pas - * @exception ControllerNotActionControllerException controller n'est - * > pas une instance de ActionController - */ - private function createController ($controller_name) { - $filename = APP_PATH . self::CONTROLLERS_PATH_NAME . '/' - . $controller_name . '.php'; - - if (!file_exists ($filename)) { - throw new FileNotExistException ( - $filename, - MinzException::ERROR - ); - } - require_once ($filename); - - if (!class_exists ($controller_name)) { - throw new ControllerNotExistException ( - $controller_name, - MinzException::ERROR - ); - } - $this->controller = new $controller_name ($this->router); - - if (! ($this->controller instanceof ActionController)) { - throw new ControllerNotActionControllerException ( - $controller_name, - MinzException::ERROR - ); - } - } - - /** - * Lance l'action sur le controller du dispatcher - * @param $action_name le nom de l'action - * @exception ActionException si on ne peut pas exécuter l'action sur - * > le controller - */ - private function launchAction ($action_name) { - if (!Request::$reseted) { - if (!is_callable (array ( - $this->controller, - $action_name - ))) { - throw new ActionException ( - get_class ($this->controller), - $action_name, - MinzException::ERROR - ); - } - call_user_func (array ( - $this->controller, - $action_name - )); - } - } -} diff --git a/lib/Error.php b/lib/Error.php deleted file mode 100755 index d7c163872..000000000 --- a/lib/Error.php +++ /dev/null @@ -1,87 +0,0 @@ - -*/ - -/** - * La classe Error permet de lancer des erreurs HTTP - */ -class Error { - public function __construct () { } - - /** - * Permet de lancer une erreur - * @param $code le type de l'erreur, par défaut 404 (page not found) - * @param $logs logs d'erreurs découpés de la forme - * > $logs['error'] - * > $logs['warning'] - * > $logs['notice'] - */ - public static function error ($code = 404, $logs = array ()) { - $logs = self::processLogs ($logs); - $error_filename = APP_PATH . '/controllers/errorController.php'; - - if (file_exists ($error_filename)) { - $params = array ( - 'code' => $code, - 'logs' => $logs - ); - - Response::setHeader ($code); - Request::forward (array ( - 'c' => 'error', - 'params' => $params - )); - } else { - $text = '

An error occured

'."\n"; - - if (!empty ($logs)) { - $text .= ''."\n"; - } - - Response::setHeader ($code); - Response::setBody ($text); - Response::send (); - exit (); - } - } - - /** - * Permet de retourner les logs de façon à n'avoir que - * ceux que l'on veut réellement - * @param $logs les logs rangés par catégories (error, warning, notice) - * @return la liste des logs, sans catégorie, - * > en fonction de l'environment - */ - private static function processLogs ($logs) { - $env = Configuration::environment (); - $logs_ok = array (); - $error = array (); - $warning = array (); - $notice = array (); - - if (isset ($logs['error'])) { - $error = $logs['error']; - } - if (isset ($logs['warning'])) { - $warning = $logs['warning']; - } - if (isset ($logs['notice'])) { - $notice = $logs['notice']; - } - - if ($env == Configuration::PRODUCTION) { - $logs_ok = $error; - } - if ($env == Configuration::DEVELOPMENT) { - $logs_ok = array_merge ($error, $warning, $notice); - } - - return $logs_ok; - } -} diff --git a/lib/FrontController.php b/lib/FrontController.php deleted file mode 100755 index e424c6714..000000000 --- a/lib/FrontController.php +++ /dev/null @@ -1,104 +0,0 @@ -. -# -# ***** END LICENSE BLOCK ***** - -/** - * La classe FrontController est le noyau du framework, elle lance l'application - * Elle est appelée en général dans le fichier index.php à la racine du serveur - */ -class FrontController { - protected $dispatcher; - protected $router; - - /** - * Constructeur - * Initialise le router et le dispatcher - */ - public function __construct () { - $this->loadLib (); - - try { - Configuration::init (); - Request::init (); - - $this->router = new Router (); - $this->router->init (); - } catch (RouteNotFoundException $e) { - Log::record ($e->getMessage (), Log::ERROR); - Error::error ( - 404, - array ('error' => array ($e->getMessage ())) - ); - } catch (MinzException $e) { - Log::record ($e->getMessage (), Log::ERROR); - $this->killApp (); - } - - $this->dispatcher = Dispatcher::getInstance ($this->router); - } - - /** - * Inclue les fichiers de la librairie - */ - private function loadLib () { - require ('ActionController.php'); - require ('Cache.php'); - require ('Configuration.php'); - require ('Dispatcher.php'); - require ('Error.php'); - require ('Helper.php'); - require ('Log.php'); - require ('Model.php'); - require ('Paginator.php'); - require ('Request.php'); - require ('Response.php'); - require ('Router.php'); - require ('Session.php'); - require ('Translate.php'); - require ('Url.php'); - require ('View.php'); - - require ('dao/Model_pdo.php'); - require ('dao/Model_txt.php'); - require ('dao/Model_array.php'); - - require ('exceptions/MinzException.php'); - } - - /** - * Démarre l'application (lance le dispatcher et renvoie la réponse - */ - public function run () { - try { - $this->dispatcher->run (); - Response::send (); - } catch (MinzException $e) { - Log::record ($e->getMessage (), Log::ERROR); - $this->killApp (); - } - } - - /** - * Permet d'arrêter le programme en urgence - */ - private function killApp () { - exit ('### Application problem ###'."\n". - 'See logs files'); - } -} diff --git a/lib/Helper.php b/lib/Helper.php deleted file mode 100755 index 4f64ba218..000000000 --- a/lib/Helper.php +++ /dev/null @@ -1,22 +0,0 @@ - -*/ - -/** - * La classe Helper représente une aide pour des tâches récurrentes - */ -class Helper { - /** - * Annule les effets des magic_quotes pour une variable donnée - * @param $var variable à traiter (tableau ou simple variable) - */ - public static function stripslashes_r ($var) { - if (is_array ($var)){ - return array_map (array ('Helper', 'stripslashes_r'), $var); - } else { - return stripslashes($var); - } - } -} diff --git a/lib/Log.php b/lib/Log.php deleted file mode 100755 index 7fb3f9dcf..000000000 --- a/lib/Log.php +++ /dev/null @@ -1,78 +0,0 @@ - -*/ - -/** - * La classe Log permet de logger des erreurs - */ -class Log { - /** - * Les différents niveau de log - * ERROR erreurs bloquantes de l'application - * WARNING erreurs pouvant géner le bon fonctionnement, mais non bloquantes - * NOTICE messages d'informations, affichés pour le déboggage - */ - const ERROR = 0; - const WARNING = 10; - const NOTICE = 20; - - /** - * Enregistre un message dans un fichier de log spécifique - * Message non loggué si - * - environment = SILENT - * - level = WARNING et environment = PRODUCTION - * - level = NOTICE et environment = PRODUCTION - * @param $information message d'erreur / information à enregistrer - * @param $level niveau d'erreur - * @param $file_name fichier de log, par défaut LOG_PATH/application.log - */ - public static function record ($information, $level, $file_name = null) { - $env = Configuration::environment (); - - if (! ($env == Configuration::SILENT - || ($env == Configuration::PRODUCTION - && ($level == Log::WARNING || $level == Log::NOTICE)))) { - if (is_null ($file_name)) { - $file_name = LOG_PATH . '/application.log'; - } - - switch ($level) { - case Log::ERROR : - $level_label = 'error'; - break; - case Log::WARNING : - $level_label = 'warning'; - break; - case Log::NOTICE : - $level_label = 'notice'; - break; - default : - $level_label = 'unknown'; - } - - if ($env == Configuration::PRODUCTION) { - $file = fopen ($file_name, 'a'); - } else { - $file = @fopen ($file_name, 'a'); - } - - if ($file !== false) { - $log = '[' . date('r') . ']'; - $log .= ' [' . $level_label . ']'; - $log .= ' ' . $information . "\n"; - fwrite ($file, $log); - fclose ($file); - } else { - Error::error ( - 500, - array ('error' => array ( - 'Permission is denied for `' - . $file_name . '`') - ) - ); - } - } - } -} diff --git a/lib/Model.php b/lib/Model.php deleted file mode 100755 index 37fc19ed1..000000000 --- a/lib/Model.php +++ /dev/null @@ -1,12 +0,0 @@ - -*/ - -/** - * La classe Model représente un modèle de l'application (représentation MVC) - */ -class Model { - -} diff --git a/lib/Paginator.php b/lib/Paginator.php deleted file mode 100755 index 1a8376e75..000000000 --- a/lib/Paginator.php +++ /dev/null @@ -1,196 +0,0 @@ - -*/ - -/** - * La classe Paginator permet de gérer la pagination de l'application facilement - */ -class Paginator { - /** - * $items tableau des éléments à afficher/gérer - */ - private $items = array (); - - /** - * $nbItemsPerPage le nombre d'éléments par page - */ - private $nbItemsPerPage = 10; - - /** - * $currentPage page actuelle à gérer - */ - private $currentPage = 1; - - /** - * $nbPage le nombre de pages de pagination - */ - private $nbPage = 1; - - /** - * $nbItems le nombre d'éléments - */ - private $nbItems = 0; - - /** - * Constructeur - * @param $items les éléments à gérer - */ - public function __construct ($items) { - $this->_items ($items); - $this->_nbItems (count ($this->items (true))); - $this->_nbItemsPerPage ($this->nbItemsPerPage); - $this->_currentPage ($this->currentPage); - } - - /** - * Permet d'afficher la pagination - * @param $view nom du fichier de vue situé dans /app/views/helpers/ - * @param $getteur variable de type $_GET[] permettant de retrouver la page - */ - public function render ($view, $getteur) { - $view = APP_PATH . '/views/helpers/'.$view; - - if (file_exists ($view)) { - include ($view); - } - } - - /** - * Permet de retrouver la page d'un élément donné - * @param $item l'élément à retrouver - * @return la page à laquelle se trouve l'élément (false si non trouvé) - */ - public function pageByItem ($item) { - $page = false; - $i = 0; - - do { - if ($item == $this->items[$i]) { - $page = ceil (($i + 1) / $this->nbItemsPerPage); - } - - $i++; - } while (!$page && $i < $this->nbItems ()); - - return $page; - } - - /** - * Permet de retrouver la position d'un élément donné (à partir de 0) - * @param $item l'élément à retrouver - * @return la position à laquelle se trouve l'élément (false si non trouvé) - */ - public function positionByItem ($item) { - $find = false; - $i = 0; - - do { - if ($item == $this->items[$i]) { - $find = true; - } else { - $i++; - } - } while (!$find && $i < $this->nbItems ()); - - return $i; - } - - /** - * Permet de récupérer un item par sa position - * @param $pos la position de l'élément - * @return l'item situé à $pos (dernier item si $pos<0, 1er si $pos>=count($items)) - */ - public function itemByPosition ($pos) { - if ($pos < 0) { - $pos = $this->nbItems () - 1; - } - if ($pos >= count($this->items)) { - $pos = 0; - } - - return $this->items[$pos]; - } - - /** - * GETTEURS - */ - /** - * @param $all si à true, retourne tous les éléments sans prendre en compte la pagination - */ - public function items ($all = false) { - $array = array (); - $nbItems = $this->nbItems (); - - if ($nbItems <= $this->nbItemsPerPage || $all) { - $array = $this->items; - } else { - $begin = ($this->currentPage - 1) * $this->nbItemsPerPage; - $counter = 0; - $i = 0; - - foreach ($this->items as $key => $item) { - if ($i >= $begin) { - $array[$key] = $item; - $counter++; - } - if ($counter >= $this->nbItemsPerPage) { - break; - } - $i++; - } - } - - return $array; - } - public function nbItemsPerPage () { - return $this->nbItemsPerPage; - } - public function currentPage () { - return $this->currentPage; - } - public function nbPage () { - return $this->nbPage; - } - public function nbItems () { - return $this->nbItems; - } - - /** - * SETTEURS - */ - public function _items ($items) { - if (is_array ($items)) { - $this->items = $items; - } - - $this->_nbPage (); - } - public function _nbItemsPerPage ($nbItemsPerPage) { - if ($nbItemsPerPage > $this->nbItems ()) { - $nbItemsPerPage = $this->nbItems (); - } - if ($nbItemsPerPage < 0) { - $nbItemsPerPage = 0; - } - - $this->nbItemsPerPage = $nbItemsPerPage; - $this->_nbPage (); - } - public function _currentPage ($page) { - if($page < 1 || ($page > $this->nbPage && $this->nbPage > 0)) { - throw new CurrentPagePaginationException ($page); - } - - $this->currentPage = $page; - } - private function _nbPage () { - if ($this->nbItemsPerPage > 0) { - $this->nbPage = ceil ($this->nbItems () / $this->nbItemsPerPage); - } - } - public function _nbItems ($value) { - $this->nbItems = $value; - } -} diff --git a/lib/Request.php b/lib/Request.php deleted file mode 100644 index fe168b05f..000000000 --- a/lib/Request.php +++ /dev/null @@ -1,189 +0,0 @@ - -*/ - -/** - * Request représente la requête http - */ -class Request { - private static $controller_name = ''; - private static $action_name = ''; - private static $params = array (); - - private static $default_controller_name = 'index'; - private static $default_action_name = 'index'; - - public static $reseted = true; - - /** - * Getteurs - */ - public static function controllerName () { - return self::$controller_name; - } - public static function actionName () { - return self::$action_name; - } - public static function params () { - return self::$params; - } - public static function param ($key, $default = false) { - if (isset (self::$params[$key])) { - return self::$params[$key]; - } else { - return $default; - } - } - public static function defaultControllerName () { - return self::$default_controller_name; - } - public static function defaultActionName () { - return self::$default_action_name; - } - - /** - * Setteurs - */ - public static function _controllerName ($controller_name) { - self::$controller_name = $controller_name; - } - public static function _actionName ($action_name) { - self::$action_name = $action_name; - } - public static function _params ($params) { - if (!is_array($params)) { - $params = array ($params); - } - - self::$params = $params; - } - public static function _param ($key, $value = false) { - if ($value === false) { - unset (self::$params[$key]); - } else { - self::$params[$key] = $value; - } - } - - /** - * Initialise la Request - */ - public static function init () { - self::magicQuotesOff (); - } - - /** - * Retourn le nom de domaine du site - */ - public static function getDomainName () { - return $_SERVER['HTTP_HOST']; - } - - /** - * Détermine la base de l'url - * @return la base de l'url - */ - public static function getBaseUrl () { - return Configuration::baseUrl (); - } - - /** - * Récupère l'URI de la requête - * @return l'URI - */ - public static function getURI () { - if (isset ($_SERVER['REQUEST_URI'])) { - $base_url = self::getBaseUrl (); - $uri = $_SERVER['REQUEST_URI']; - - $len_base_url = strlen ($base_url); - $real_uri = substr ($uri, $len_base_url); - } else { - $real_uri = ''; - } - - return $real_uri; - } - - /** - * Relance une requête - * @param $url l'url vers laquelle est relancée la requête - * @param $redirect si vrai, force la redirection http - * > sinon, le dispatcher recharge en interne - */ - public static function forward ($url = array (), $redirect = false) { - $url = Url::checkUrl ($url); - - if ($redirect) { - header ('Location: ' . Url::display ($url)); - exit (); - } else { - self::$reseted = true; - - self::_controllerName ($url['c']); - self::_actionName ($url['a']); - self::_params (array_merge ( - self::$params, - $url['params'] - )); - } - } - - /** - * Permet de récupérer une variable de type $_GET - * @param $param nom de la variable - * @param $default valeur par défaut à attribuer à la variable - * @return $_GET[$param] - * $_GET si $param = false - * $default si $_GET[$param] n'existe pas - */ - public static function fetchGET ($param = false, $default = false) { - if ($param === false) { - return $_GET; - } elseif (isset ($_GET[$param])) { - return $_GET[$param]; - } else { - return $default; - } - } - - /** - * Permet de récupérer une variable de type $_POST - * @param $param nom de la variable - * @param $default valeur par défaut à attribuer à la variable - * @return $_POST[$param] - * $_POST si $param = false - * $default si $_POST[$param] n'existe pas - */ - public static function fetchPOST ($param = false, $default = false) { - if ($param === false) { - return $_POST; - } elseif (isset ($_POST[$param])) { - return $_POST[$param]; - } else { - return $default; - } - } - - /** - * Méthode désactivant les magic_quotes pour les variables - * $_GET - * $_POST - * $_COOKIE - */ - private static function magicQuotesOff () { - if (get_magic_quotes_gpc ()) { - $_GET = Helper::stripslashes_r ($_GET); - $_POST = Helper::stripslashes_r ($_POST); - $_COOKIE = Helper::stripslashes_r ($_COOKIE); - } - } - - public static function isPost () { - return !empty ($_POST) || !empty ($_FILES); - } -} - - diff --git a/lib/Response.php b/lib/Response.php deleted file mode 100644 index fcf53c5b1..000000000 --- a/lib/Response.php +++ /dev/null @@ -1,60 +0,0 @@ - -*/ - -/** - * Response représente la requête http renvoyée à l'utilisateur - */ -class Response { - private static $header = 'HTTP/1.0 200 OK'; - private static $body = ''; - - /** - * Mets à jour le body de la Response - * @param $text le texte à incorporer dans le body - */ - public static function setBody ($text) { - self::$body = $text; - } - - /** - * Mets à jour le header de la Response - * @param $code le code HTTP, valeurs possibles - * - 200 (OK) - * - 403 (Forbidden) - * - 404 (Forbidden) - * - 500 (Forbidden) -> par défaut si $code erroné - * - 503 (Forbidden) - */ - public static function setHeader ($code) { - switch ($code) { - case 200 : - self::$header = 'HTTP/1.0 200 OK'; - break; - case 403 : - self::$header = 'HTTP/1.0 403 Forbidden'; - break; - case 404 : - self::$header = 'HTTP/1.0 404 Not Found'; - break; - case 500 : - self::$header = 'HTTP/1.0 500 Internal Server Error'; - break; - case 503 : - self::$header = 'HTTP/1.0 503 Service Unavailable'; - break; - default : - self::$header = 'HTTP/1.0 500 Internal Server Error'; - } - } - - /** - * Envoie la Response à l'utilisateur - */ - public static function send () { - header (self::$header); - echo self::$body; - } -} diff --git a/lib/Router.php b/lib/Router.php deleted file mode 100755 index 1dcc5afbb..000000000 --- a/lib/Router.php +++ /dev/null @@ -1,244 +0,0 @@ - -*/ - -/** - * La classe Router gère le routage de l'application - * Les routes sont définies dans APP_PATH.'/configuration/routes.php' - */ -class Router { - const ROUTES_PATH_NAME = '/configuration/routes.php'; - - private $routes = array (); - - /** - * Constructeur - * @exception FileNotExistException si ROUTES_PATH_NAME n'existe pas - * et que l'on utilise l'url rewriting - */ - public function __construct () { - if (Configuration::useUrlRewriting ()) { - if (file_exists (APP_PATH . self::ROUTES_PATH_NAME)) { - $routes = include ( - APP_PATH . self::ROUTES_PATH_NAME - ); - - if (!is_array ($routes)) { - $routes = array (); - } - - $this->routes = array_map ( - array ('Url', 'checkUrl'), - $routes - ); - } else { - throw new FileNotExistException ( - self::ROUTES_PATH_NAME, - MinzException::ERROR - ); - } - } - } - - /** - * Initialise le Router en déterminant le couple Controller / Action - * Mets à jour la Request - * @exception RouteNotFoundException si l'uri n'est pas présente dans - * > la table de routage - */ - public function init () { - $url = array (); - - if (Configuration::useUrlRewriting ()) { - try { - $url = $this->buildWithRewriting (); - } catch (RouteNotFoundException $e) { - throw $e; - } - } else { - $url = $this->buildWithoutRewriting (); - } - - $url['params'] = array_merge ( - $url['params'], - Request::fetchPOST () - ); - - Request::forward ($url); - } - - /** - * Retourne un tableau représentant l'url passée par la barre d'adresses - * Ne se base PAS sur la table de routage - * @return tableau représentant l'url - */ - public function buildWithoutRewriting () { - $url = array (); - - $url['c'] = Request::fetchGET ( - 'c', - Request::defaultControllerName () - ); - $url['a'] = Request::fetchGET ( - 'a', - Request::defaultActionName () - ); - $url['params'] = Request::fetchGET (); - - // post-traitement - unset ($url['params']['c']); - unset ($url['params']['a']); - - return $url; - } - - /** - * Retourne un tableau représentant l'url passée par la barre d'adresses - * Se base sur la table de routage - * @return tableau représentant l'url - * @exception RouteNotFoundException si l'uri n'est pas présente dans - * > la table de routage - */ - public function buildWithRewriting () { - $url = array (); - $uri = Request::getURI (); - $find = false; - - foreach ($this->routes as $route) { - $regex = '*^' . $route['route'] . '$*'; - if (preg_match ($regex, $uri, $matches)) { - $url['c'] = $route['controller']; - $url['a'] = $route['action']; - $url['params'] = $this->getParams ( - $route['params'], - $matches - ); - $find = true; - break; - } - } - - if (!$find && $uri != '/') { - throw new RouteNotFoundException ( - $uri, - MinzException::ERROR - ); - } - - // post-traitement - $url = Url::checkUrl ($url); - - return $url; - } - - /** - * Retourne l'uri d'une url en se basant sur la table de routage - * @param l'url sous forme de tableau - * @return l'uri formatée (string) selon une route trouvée - */ - public function printUriRewrited ($url) { - $route = $this->searchRoute ($url); - - if ($route !== false) { - return $this->replaceParams ($route, $url); - } - - return ''; - } - - /** - * Recherche la route correspondante à une url - * @param l'url sous forme de tableau - * @return la route telle que spécifiée dans la table de routage, - * false si pas trouvée - */ - public function searchRoute ($url) { - foreach ($this->routes as $route) { - if ($route['controller'] == $url['c'] - && $route['action'] == $url['a']) { - // calcule la différence des tableaux de params - $params = array_flip ($route['params']); - $difference_params = array_diff_key ( - $params, - $url['params'] - ); - - // vérifie que pas de différence - // et le cas où $params est vide et pas $url['params'] - if (empty ($difference_params) - && (!empty ($params) || empty ($url['params']))) { - return $route; - } - } - } - - return false; - } - - /** - * Récupère un tableau dont - * - les clés sont définies dans $params_route - * - les valeurs sont situées dans $matches - * Le tableau $matches est décalé de +1 par rapport à $params_route - */ - private function getParams($params_route, $matches) { - $params = array (); - - for ($i = 0; $i < count ($params_route); $i++) { - $param = $params_route[$i]; - $params[$param] = $matches[$i + 1]; - } - - return $params; - } - - /** - * Remplace les éléments de la route par les valeurs contenues dans $url - * TODO Fonction très sale ! À revoir (preg_replace ?) - */ - private function replaceParams ($route, $url) { - $uri = ''; - $in_brackets = false; - $backslash = false; - $num_param = 0; - - // parcourt caractère par caractère - for ($i = 0; $i < strlen ($route['route']); $i++) { - // on détecte qu'on rentre dans des parenthèses - // on va devoir changer par la valeur d'un paramètre - if ($route['route'][$i] == '(' && !$backslash) { - $in_brackets = true; - } - // on sort des parenthèses - // ok, on change le paramètre maintenant - if ($route['route'][$i] == ')' && !$backslash) { - $in_brackets = false; - $param = $route['params'][$num_param]; - $uri .= $url['params'][$param]; - $num_param++; - } - - if (!$in_brackets - && ($route['route'][$i] != '\\' || $backslash) - && ($route['route'][$i] != '(' || $backslash) - && ($route['route'][$i] != ')' || $backslash) - && ($route['route'][$i] != '?' || $backslash)) { - // on est pas dans les parenthèses - // on recopie simplement le caractère - $uri .= $route['route'][$i]; - } - - // on détecte un backslash, on n'en veut pas - // sauf si on en avait déjà un juste avant - if ($route['route'][$i] == '\\' && !$backslash) { - $backslash = true; - } else { - $backslash = false; - } - } - - return str_replace ('&', '&', $uri); - } -} diff --git a/lib/Session.php b/lib/Session.php deleted file mode 100755 index f2ec04aef..000000000 --- a/lib/Session.php +++ /dev/null @@ -1,73 +0,0 @@ - - */ - -/** - * La classe Translate se charge de la traduction - * Utilise les fichiers du répertoire /app/i18n/ - */ -class Translate { - /** - * $language est la langue à afficher - */ - private static $language; - - /** - * $translates est le tableau de correspondance - * $key => $traduction - */ - private static $translates = array (); - - /** - * Inclus le fichier de langue qui va bien - * l'enregistre dans $translates - */ - public static function init () { - $l = Configuration::language (); - self::$language = Session::param ('language', $l); - - $l_path = APP_PATH . '/i18n/' . self::$language . '.php'; - - if (file_exists ($l_path)) { - self::$translates = include ($l_path); - } - } - - /** - * Alias de init - */ - public static function reset () { - self::init (); - } - - /** - * Traduit une clé en sa valeur du tableau $translates - * @param $key la clé à traduire - * @return la valeur correspondante à la clé - * > si non présente dans le tableau, on retourne la clé elle-même - */ - public static function t ($key) { - $translate = $key; - - if (isset (self::$translates[$key])) { - $translate = self::$translates[$key]; - } - - return $translate; - } - - /** - * Retourne la langue utilisée actuellement - * @return la langue - */ - public static function language () { - return self::$language; - } -} diff --git a/lib/Url.php b/lib/Url.php deleted file mode 100755 index f8d75a07f..000000000 --- a/lib/Url.php +++ /dev/null @@ -1,102 +0,0 @@ -printUriRewrited ($url); - } else { - $url_string .= self::printUri ($url); - } - } else { - $url_string .= $url; - } - - return $url_string; - } - - /** - * Construit l'URI d'une URL sans url rewriting - * @param l'url sous forme de tableau - * @return l'uri sous la forme ?key=value&key2=value2 - */ - private static function printUri ($url) { - $uri = ''; - $separator = '/?'; - - if (isset ($url['c']) - && $url['c'] != Request::defaultControllerName ()) { - $uri .= $separator . 'c=' . $url['c']; - $separator = '&'; - } - - if (isset ($url['a']) - && $url['a'] != Request::defaultActionName ()) { - $uri .= $separator . 'a=' . $url['a']; - $separator = '&'; - } - - if (isset ($url['params'])) { - foreach ($url['params'] as $key => $param) { - $uri .= $separator . $key . '=' . $param; - $separator = '&'; - } - } - - return $uri; - } - - /** - * Vérifie que les éléments du tableau représentant une url soit ok - * @param l'url sous forme de tableau (sinon renverra directement $url) - * @return l'url vérifié - */ - public static function checkUrl ($url) { - $url_checked = $url; - - if (is_array ($url)) { - if (!isset ($url['c'])) { - $url_checked['c'] = Request::defaultControllerName (); - } - if (!isset ($url['a'])) { - $url_checked['a'] = Request::defaultActionName (); - } - if (!isset ($url['params'])) { - $url_checked['params'] = array (); - } - } - - return $url_checked; - } -} diff --git a/lib/View.php b/lib/View.php deleted file mode 100755 index 333772aa3..000000000 --- a/lib/View.php +++ /dev/null @@ -1,188 +0,0 @@ - -*/ - -/** - * La classe View représente la vue de l'application - */ -class View { - const VIEWS_PATH_NAME = '/views'; - const LAYOUT_PATH_NAME = '/layout'; - const LAYOUT_FILENAME = '/layout.phtml'; - - private $view_filename = ''; - private $use_layout = false; - - private static $title = ''; - private static $styles = array (); - private static $scripts = array (); - - private static $params = array (); - - /** - * Constructeur - * Détermine si on utilise un layout ou non - */ - public function __construct () { - $this->view_filename = APP_PATH - . self::VIEWS_PATH_NAME . '/' - . Request::controllerName () . '/' - . Request::actionName () . '.phtml'; - - if (file_exists (APP_PATH - . self::LAYOUT_PATH_NAME - . self::LAYOUT_FILENAME)) { - $this->use_layout = true; - } - - self::$title = Configuration::title (); - } - - /** - * Construit la vue - */ - public function build () { - if ($this->use_layout) { - $this->buildLayout (); - } else { - $this->render (); - } - } - - /** - * Construit le layout - */ - public function buildLayout () { - include ( - APP_PATH - . self::LAYOUT_PATH_NAME - . self::LAYOUT_FILENAME - ); - } - - /** - * Affiche la Vue en elle-même - */ - public function render () { - if (file_exists ($this->view_filename)) { - include ($this->view_filename); - } else { - Log::record ('File doesn\'t exist : `' - . $this->view_filename . '`', - Log::WARNING); - } - } - - /** - * Ajoute un élément du layout - * @param $part l'élément partial à ajouter - */ - public function partial ($part) { - $fic_partial = APP_PATH - . self::LAYOUT_PATH_NAME . '/' - . $part . '.phtml'; - - if (file_exists ($fic_partial)) { - include ($fic_partial); - } else { - Log::record ('File doesn\'t exist : `' - . $fic_partial . '`', - Log::WARNING); - } - } - - /** - * Permet de choisir si on souhaite utiliser le layout - * @param $use true si on souhaite utiliser le layout, false sinon - */ - public function _useLayout ($use) { - $this->use_layout = $use; - } - - /** - * Gestion du titre - */ - public static function title () { - return self::$title; - } - public static function headTitle () { - return '' . self::$title . '' . "\n"; - } - public static function _title ($title) { - self::$title = $title; - } - public static function prependTitle ($title) { - self::$title = $title . self::$title; - } - public static function appendTitle ($title) { - self::$title = self::$title . $title; - } - - /** - * Gestion des feuilles de style - */ - public static function headStyle () { - $styles = ''; - - foreach(self::$styles as $style) { - $styles .= '' . "\n"; - } - - return $styles; - } - public static function prependStyle ($url, $media = 'all') { - array_unshift (self::$styles, array ( - 'url' => $url, - 'media' => $media - )); - } - public static function appendStyle ($url, $media = 'all') { - self::$styles[] = array ( - 'url' => $url, - 'media' => $media - ); - } - - /** - * Gestion des scripts JS - */ - public static function headScript () { - $scripts = ''; - - foreach (self::$scripts as $script) { - $scripts .= '' . "\n"; - } - - return $scripts; - } - public static function prependScript ($url) { - array_unshift(self::$scripts, array ( - 'url' => $url - )); - } - public static function appendScript ($url) { - self::$scripts[] = array ( - 'url' => $url - ); - } - - /** - * Gestion des paramètres ajoutés à la vue - */ - public static function _param ($key, $value) { - self::$params[$key] = $value; - } - public function attributeParams () { - foreach (View::$params as $key => $value) { - $this->$key = $value; - } - } -} - - diff --git a/lib/dao/Model_array.php b/lib/dao/Model_array.php deleted file mode 100755 index 0b9ccf071..000000000 --- a/lib/dao/Model_array.php +++ /dev/null @@ -1,122 +0,0 @@ - -*/ - -/** - * La classe Model_array représente le modèle interragissant avec les fichiers de type texte gérant des tableaux php - */ -class Model_array extends Model_txt { - /** - * $array Le tableau php contenu dans le fichier $nameFile - */ - protected $array = array (); - - /** - * Ouvre le fichier indiqué, charge le tableau dans $array et le $nameFile - * @param $nameFile le nom du fichier à ouvrir contenant un tableau - * Remarque : $array sera obligatoirement un tableau - */ - public function __construct ($nameFile) { - parent::__construct ($nameFile); - - if (!$this->getLock ('read')) { - throw new PermissionDeniedException ($this->filename); - } else { - $this->array = include ($this->filename); - $this->releaseLock (); - - if (!is_array ($this->array)) { - $this->array = array (); - } - - $this->array = $this->decodeArray ($this->array); - } - } - - /** - * Écrit un tableau dans le fichier $nameFile - * @param $array le tableau php à enregistrer - **/ - public function writeFile ($array) { - if (!$this->getLock ('write')) { - throw new PermissionDeniedException ($this->namefile); - } else { - $this->erase (); - - $this->writeLine ('writeLine ('return ', false); - $this->writeArray ($array); - $this->writeLine (';'); - - $this->releaseLock (); - } - } - - private function writeArray ($array, $profondeur = 0) { - $tab = ''; - for ($i = 0; $i < $profondeur; $i++) { - $tab .= "\t"; - } - $this->writeLine ('array ('); - - foreach ($array as $key => $value) { - if (is_int ($key)) { - $this->writeLine ($tab . "\t" . $key . ' => ', false); - } else { - $this->writeLine ($tab . "\t" . '\'' . $key . '\'' . ' => ', false); - } - - if (is_array ($value)) { - $this->writeArray ($value, $profondeur + 1); - $this->writeLine (','); - } else { - if (is_numeric ($value)) { - $this->writeLine ($value . ','); - } else { - $this->writeLine ('\'' . addslashes ($value) . '\','); - } - } - } - - $this->writeLine ($tab . ')', false); - } - - private function decodeArray ($array) { - $new_array = array (); - - foreach ($array as $key => $value) { - if (is_array ($value)) { - $new_array[$key] = $this->decodeArray ($value); - } else { - $new_array[$key] = stripslashes ($value); - } - } - - return $new_array; - } - - private function getLock ($type) { - if ($type == 'write') { - $lock = LOCK_EX; - } else { - $lock = LOCK_SH; - } - - $count = 1; - while (!flock ($this->file, $lock) && $count <= 50) { - $count++; - } - - if ($count >= 50) { - return false; - } else { - return true; - } - } - - private function releaseLock () { - flock ($this->file, LOCK_UN); - } -} diff --git a/lib/dao/Model_pdo.php b/lib/dao/Model_pdo.php deleted file mode 100755 index 6114de127..000000000 --- a/lib/dao/Model_pdo.php +++ /dev/null @@ -1,39 +0,0 @@ - -*/ - -/** - * La classe Model_sql représente le modèle interragissant avec les bases de données - * Seul la connexion MySQL est prise en charge pour le moment - */ -class Model_pdo { - /** - * $bd variable représentant la base de données - */ - protected $bd; - - /** - * Créé la connexion à la base de données à l'aide des variables - * HOST, BASE, USER et PASS définies dans le fichier de configuration - */ - public function __construct ($type = 'mysql') { - $db = Configuration::dataBase (); - try { - $string = $type - . ':host=' . $db['host'] - . ';dbname=' . $db['base']; - $this->bd = new PDO ( - $string, - $db['user'], - $db['password'] - ); - } catch (Exception $e) { - throw new PDOConnectionException ( - $string, - $db['user'], MinzException::WARNING - ); - } - } -} diff --git a/lib/dao/Model_txt.php b/lib/dao/Model_txt.php deleted file mode 100755 index ad15c8b36..000000000 --- a/lib/dao/Model_txt.php +++ /dev/null @@ -1,77 +0,0 @@ - -*/ - -/** - * La classe Model_txt représente le modèle interragissant avec les fichiers de type texte - */ -class Model_txt { - /** - * $file représente le fichier à ouvrir - */ - protected $file; - - /** - * $filename est le nom du fichier - */ - protected $filename; - - /** - * Ouvre un fichier dans $file - * @param $nameFile nom du fichier à ouvrir - * @param $mode mode d'ouverture du fichier ('a+' par défaut) - * @exception FileNotExistException si le fichier n'existe pas - * > ou ne peux pas être ouvert - */ - public function __construct ($nameFile, $mode = 'a+') { - $this->filename = $nameFile; - $this->file = fopen ($this->filename, $mode); - - if (!$this->file) { - throw new FileNotExistException ( - $this->filename, - MinzException::WARNING - ); - } - } - - /** - * Lit une ligne de $file - * @return une ligne du fichier - */ - public function readLine () { - return fgets ($this->file); - } - - /** - * Écrit une ligne dans $file - * @param $line la ligne à écrire - */ - public function writeLine ($line, $newLine = true) { - $char = ''; - if ($newLine) { - $char = "\n"; - } - - fwrite ($this->file, $line . $char); - } - - /** - * Efface le fichier $file - * @return true en cas de succès, false sinon - */ - public function erase () { - return ftruncate ($this->file, 0); - } - - /** - * Ferme $file - */ - public function __destruct () { - if (isset ($this->file)) { - fclose ($this->file); - } - } -} diff --git a/lib/exceptions/MinzException.php b/lib/exceptions/MinzException.php deleted file mode 100644 index 8fca5ec16..000000000 --- a/lib/exceptions/MinzException.php +++ /dev/null @@ -1,94 +0,0 @@ -route = $route; - - $message = 'Route `' . $route . '` not found'; - - parent::__construct ($message, $code); - } - - public function route () { - return $this->route; - } -} -class PDOConnectionException extends MinzException { - public function __construct ($string_connection, $user, $code = self::ERROR) { - $message = 'Access to database is denied for `' . $user . '`' - . ' (`' . $string_connection . '`)'; - - parent::__construct ($message, $code); - } -} -class CurrentPagePaginationException extends MinzException { - public function __construct ($page) { - $message = 'Page number `' . $page . '` doesn\'t exist'; - - parent::__construct ($message, self::ERROR); - } -} diff --git a/public/.htaccess b/public/.htaccess deleted file mode 100644 index 7a9766d5e..000000000 --- a/public/.htaccess +++ /dev/null @@ -1,6 +0,0 @@ -RewriteEngine On -RewriteCond %{REQUEST_FILENAME} -s [OR] -RewriteCond %{REQUEST_FILENAME} -l [OR] -RewriteCond %{REQUEST_FILENAME} -d -RewriteRule ^.*$ - [NC,L] -RewriteRule ^.*$ index.php [NC,L] diff --git a/public/index.php b/public/index.php index 91146dc14..330843719 100755 --- a/public/index.php +++ b/public/index.php @@ -29,6 +29,8 @@ set_include_path (get_include_path () . PATH_SEPARATOR . LIB_PATH . PATH_SEPARATOR + . LIB_PATH . '/minz' + . PATH_SEPARATOR . APP_PATH); require (APP_PATH . '/App_FrontController.php');