diff options
Diffstat (limited to 'app/Core')
-rw-r--r-- | app/Core/Cli.php | 75 | ||||
-rw-r--r-- | app/Core/Registry.php | 1 | ||||
-rw-r--r-- | app/Core/Response.php | 21 | ||||
-rw-r--r-- | app/Core/Tool.php | 34 | ||||
-rw-r--r-- | app/Core/Translator.php | 26 |
5 files changed, 150 insertions, 7 deletions
diff --git a/app/Core/Cli.php b/app/Core/Cli.php new file mode 100644 index 00000000..13533b9a --- /dev/null +++ b/app/Core/Cli.php @@ -0,0 +1,75 @@ +<?php + +namespace Core; + +use Closure; + +/** + * CLI class + * + * @package core + * @author Frederic Guillot + */ +class Cli +{ + /** + * Default command name + * + * @access public + * @var string + */ + public $default_command = 'help'; + + /** + * List of registered commands + * + * @access private + * @var array + */ + private $commands = array(); + + /** + * + * + * @access public + * @param string $command Command name + * @param Closure $callback Command callback + */ + public function register($command, Closure $callback) + { + $this->commands[$command] = $callback; + } + + /** + * Execute a command + * + * @access public + * @param string $command Command name + */ + public function call($command) + { + if (isset($this->commands[$command])) { + $this->commands[$command](); + exit; + } + } + + /** + * Determine which command to execute + * + * @access public + */ + public function execute() + { + if (php_sapi_name() !== 'cli') { + die('This script work only from the command line.'); + } + + if ($GLOBALS['argc'] === 1) { + $this->call($this->default_command); + } + + $this->call($GLOBALS['argv'][1]); + $this->call($this->default_command); + } +} diff --git a/app/Core/Registry.php b/app/Core/Registry.php index 0311dc62..d8b9063e 100644 --- a/app/Core/Registry.php +++ b/app/Core/Registry.php @@ -1,6 +1,7 @@ <?php namespace Core; + use RuntimeException; /** diff --git a/app/Core/Response.php b/app/Core/Response.php index aee029af..1ccf9f5e 100644 --- a/app/Core/Response.php +++ b/app/Core/Response.php @@ -71,6 +71,22 @@ class Response } /** + * Send a CSV response + * + * @access public + * @param array $data Data to serialize in csv + * @param integer $status_code HTTP status code + */ + public function csv(array $data, $status_code = 200) + { + $this->status($status_code); + $this->nocache(); + header('Content-Type: text/csv'); + Tool::csv($data); + exit; + } + + /** * Send a Json response * * @access public @@ -83,7 +99,6 @@ class Response $this->nocache(); header('Content-Type: application/json'); echo json_encode($data); - exit; } @@ -100,7 +115,6 @@ class Response $this->nocache(); header('Content-Type: text/plain; charset=utf-8'); echo $data; - exit; } @@ -117,7 +131,6 @@ class Response $this->nocache(); header('Content-Type: text/html; charset=utf-8'); echo $data; - exit; } @@ -134,7 +147,6 @@ class Response $this->nocache(); header('Content-Type: text/xml; charset=utf-8'); echo $data; - exit; } @@ -169,7 +181,6 @@ class Response header('Content-Transfer-Encoding: binary'); header('Content-Type: application/octet-stream'); echo $data; - exit; } diff --git a/app/Core/Tool.php b/app/Core/Tool.php new file mode 100644 index 00000000..ade99cad --- /dev/null +++ b/app/Core/Tool.php @@ -0,0 +1,34 @@ +<?php + +namespace Core; + +/** + * Tool class + * + * @package core + * @author Frederic Guillot + */ +class Tool +{ + /** + * Write a CSV file + * + * @static + * @access public + * @param array $rows Array of rows + * @param string $filename Output filename + */ + public static function csv(array $rows, $filename = 'php://output') + { + $fp = fopen($filename, 'w'); + + if (is_resource($fp)) { + + foreach ($rows as $fields) { + fputcsv($fp, $fields); + } + + fclose($fp); + } + } +} diff --git a/app/Core/Translator.php b/app/Core/Translator.php index 7cd3cc4f..43015e48 100644 --- a/app/Core/Translator.php +++ b/app/Core/Translator.php @@ -27,6 +27,26 @@ class Translator private static $locales = array(); /** + * Flag to enable HTML escaping + * + * @static + * @access private + * @var boolean + */ + private static $enable_escaping = true; + + /** + * Disable HTML escaping for translations + * + * @static + * @access public + */ + public static function disableEscaping() + { + self::$enable_escaping = false; + } + + /** * Get a translation * * $translator->translate('I have %d kids', 5); @@ -42,8 +62,10 @@ class Translator array_shift($args); array_unshift($args, $this->get($identifier, $identifier)); - foreach ($args as &$arg) { - $arg = htmlspecialchars($arg, ENT_QUOTES, 'UTF-8', false); + if (self::$enable_escaping) { + foreach ($args as &$arg) { + $arg = htmlspecialchars($arg, ENT_QUOTES, 'UTF-8', false); + } } return call_user_func_array( |