X-Git-Url: https://git.cweiske.de/bdrem.git/blobdiff_plain/deb49c81c9d269708c6252647c1afb668b982d97..7e8bdb96bc0f2b1381fae9e9e29ce9773be0c2d5:/src/bdrem/UserInterface.php diff --git a/src/bdrem/UserInterface.php b/src/bdrem/UserInterface.php index c5e29b7..66b72e2 100644 --- a/src/bdrem/UserInterface.php +++ b/src/bdrem/UserInterface.php @@ -1,28 +1,60 @@ + * @copyright 2014 Christian Weiske + * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3 + * @link http://cweiske.de/bdrem.htm + */ namespace bdrem; +/** + * Generic user interface class + * + * @category Tools + * @package Bdrem + * @author Christian Weiske + * @copyright 2014 Christian Weiske + * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3 + * @version Release: @package_version@ + * @link http://cweiske.de/bdrem.htm + */ abstract class UserInterface { + /** + * Configuration + * @var Config + */ protected $config; + /** + * Start the user interface, load config, parse and render events. + * + * @return void + */ public function run() { try { $this->config = new Config(); - $this->config->load(); - setlocale(LC_TIME, $this->config->locale); - $parser = $this->loadParameters(); $res = $this->parseParameters($parser); - $this->handleCommands($res); + $this->config->load(); if (!$this->config->cfgFileExists) { throw new \Exception( "No config file found. Looked at the following places:\n" - . '- ' . implode ("\n- ", $this->config->cfgFiles) + . '- ' . implode("\n- ", $this->config->cfgFiles) ); } + setlocale(LC_TIME, $this->config->locale); + $this->handleCommands($res); + $source = $this->config->loadSource(); $arEvents = $source->getEvents( $this->config->date, @@ -37,6 +69,11 @@ abstract class UserInterface } } + /** + * Load parameters for the CLI option parser. + * + * @return \Console_CommandLine CLI option parser + */ protected function loadParameters() { $parser = new \Console_CommandLine(); @@ -47,22 +84,22 @@ abstract class UserInterface 'daysNext', array( 'short_name' => '-n', - 'long_name' => '--days-next', + 'long_name' => '--next', 'description' => 'Show NUM days after date', 'help_name' => 'NUM', 'action' => 'StoreInt', - 'default' => $this->config->daysNext, + 'default' => null, ) ); $parser->addOption( 'daysPrev', array( 'short_name' => '-p', - 'long_name' => '--previous', + 'long_name' => '--prev', 'description' => 'Show NUM days before date', 'help_name' => 'NUM', 'action' => 'StoreInt', - 'default' => $this->config->daysPrev, + 'default' => null, ) ); $parser->addOption( @@ -101,19 +138,44 @@ abstract class UserInterface 'action' => 'StoreString' ) ); + $parser->addOption( + 'configfile', + array( + 'short_name' => '-c', + 'long_name' => '--config', + 'help_name' => 'FILE', + 'description' => 'Path to configuration file', + 'action' => 'StoreString' + ) + ); + return $parser; } - protected function parseParameters($parser) + /** + * Let the CLI option parser parse the options. + * + * @param object $parser Option parser + * + * @return object Parsed command line parameters + */ + protected function parseParameters(\Console_CommandLine $parser) { try { $result = $parser->parse(); - // do something with the result object + + if ($result->options['configfile'] !== null) { + $this->config->cfgFiles = array($result->options['configfile']); + } + $this->config->daysNext = $result->options['daysNext']; $this->config->daysPrev = $result->options['daysPrev']; $this->config->renderer = $result->options['renderer']; $this->config->stopOnEmpty = $result->options['stopOnEmpty']; $this->config->setDate($result->options['date']); + if (isset($result->options['ansi'])) { + $this->config->ansi = $result->options['ansi']; + } return $result; } catch (\Exception $exc) { $this->preRenderParameterError(); @@ -121,6 +183,13 @@ abstract class UserInterface } } + /** + * Output the events + * + * @param array $arEvents Event objects to render + * + * @return void + */ protected function render($arEvents) { $r = $this->getRenderer(); @@ -133,6 +202,11 @@ abstract class UserInterface $r->renderAndOutput($arEvents); } + /** + * Load the configured renderer + * + * @return Renderer Renderer instance + */ protected function getRenderer() { $renderer = ucfirst($this->config->renderer); @@ -143,10 +217,22 @@ abstract class UserInterface return new $class(); } + /** + * Handle any commands given on the CLI + * + * @param object $res Command line parameters and options + * + * @return void + */ protected function handleCommands($res) { } + /** + * Do something before a parameter parsing error is shown + * + * @return void + */ protected function preRenderParameterError() { }