aboutsummaryrefslogtreecommitdiff
path: root/src/bdrem/UserInterface.php
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2014-02-05 20:16:30 +0100
committerChristian Weiske <cweiske@cweiske.de>2014-02-05 20:16:30 +0100
commitf4339edbbe92a1c4c104f6a58e9cfb4b2a93966e (patch)
treef0090cdf43e04f4c8a59ff44c836a9ce424014a1 /src/bdrem/UserInterface.php
parent6506b1ebe1ecaa6630d6d849c39b9e9d53603699 (diff)
downloadbdrem-f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e.tar.gz
bdrem-f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e.zip
use console_commandline for parameter parsing
Diffstat (limited to 'src/bdrem/UserInterface.php')
-rw-r--r--src/bdrem/UserInterface.php93
1 files changed, 91 insertions, 2 deletions
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