X-Git-Url: https://git.cweiske.de/bdrem.git/blobdiff_plain/6506b1ebe1ecaa6630d6d849c39b9e9d53603699..f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e:/src/bdrem/UserInterface.php diff --git a/src/bdrem/UserInterface.php b/src/bdrem/UserInterface.php index cd1b7cc..cd9f702 100644 --- a/src/bdrem/UserInterface.php +++ b/src/bdrem/UserInterface.php @@ -13,7 +13,9 @@ abstract class UserInterface setlocale(LC_TIME, $this->config->locale); $source = $this->config->loadSource(); - $this->loadParameters($this->config); + $parser = $this->loadParameters(); + $this->parseParameters($parser); + $arEvents = $source->getEvents( $this->config->date, $this->config->daysBefore, $this->config->daysAfter @@ -24,8 +26,95 @@ abstract class UserInterface protected function loadParameters() { + $parser = new \Console_CommandLine(); + $parser->description = 'Birthday reminder'; + $parser->version = '0.1.0'; + + $parser->addOption( + 'daysAfter', + array( + 'short_name' => '-a', + 'long_name' => '--days-after', + 'description' => 'Show NUM days after date', + 'help_name' => 'NUM', + 'action' => 'StoreInt', + 'default' => $this->config->daysAfter, + ) + ); + $parser->addOption( + 'daysBefore', + array( + 'short_name' => '-b', + 'long_name' => '--days-before', + 'description' => 'Show NUM days before date', + 'help_name' => 'NUM', + 'action' => 'StoreInt', + 'default' => $this->config->daysBefore, + ) + ); + $parser->addOption( + 'renderer', + array( + 'short_name' => '-r', + 'long_name' => '--renderer', + 'description' => 'Output mode', + 'action' => 'StoreString', + 'choices' => array( + 'console', + 'html', + 'htmltable', + 'mail', + ), + 'default' => 'console', + 'add_list_option' => true, + ) + ); + $parser->addOption( + 'quiet', + array( + 'short_name' => '-q', + 'long_name' => '--quiet', + 'description' => "Don't print status messages to stdout", + 'action' => 'StoreTrue' + ) + ); + return $parser; + } + + protected function parseParameters($parser) + { + try { + $result = $parser->parse(); + // do something with the result object + $this->config->daysAfter = $result->options['daysAfter']; + $this->config->daysBefore = $result->options['daysBefore']; + $this->config->renderer = $result->options['renderer']; + $this->config->quiet = $result->options['quiet']; + } catch (\Exception $exc) { + $this->preRenderParameterError(); + $parser->displayError($exc->getMessage()); + } } - abstract protected function render($arEvents); + protected function render($arEvents) + { + $r = $this->getRenderer(); + $r->config = $this->config; + $r->renderAndOutput($arEvents); + } + + protected function getRenderer() + { + $renderer = ucfirst($this->config->renderer); + if ($renderer == 'Htmltable') { + $renderer = 'HtmlTable'; + } + $class = '\\bdrem\\Renderer_' . $renderer; + return new $class(); + } + + protected function preRenderParameterError() + { + } } ?> \ No newline at end of file