X-Git-Url: https://git.cweiske.de/bdrem.git/blobdiff_plain/f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e..6d5b4b8a1a8e598350bb03282a89d13946e93e99:/src/bdrem/UserInterface.php diff --git a/src/bdrem/UserInterface.php b/src/bdrem/UserInterface.php index cd9f702..1b8cb56 100644 --- a/src/bdrem/UserInterface.php +++ b/src/bdrem/UserInterface.php @@ -7,21 +7,30 @@ abstract class UserInterface public function run() { - $this->config = new Config(); - $this->config->load(); - $this->config->date = date('Y-m-d'); - setlocale(LC_TIME, $this->config->locale); - $source = $this->config->loadSource(); + try { + $this->config = new Config(); + $this->config->load(); + setlocale(LC_TIME, $this->config->locale); - $parser = $this->loadParameters(); - $this->parseParameters($parser); + $parser = $this->loadParameters(); + $this->parseParameters($parser); - $arEvents = $source->getEvents( - $this->config->date, - $this->config->daysBefore, $this->config->daysAfter - ); - usort($arEvents, '\\bdrem\\Event::compare'); - $this->render($arEvents); + if (!$this->config->cfgFileExists) { + throw new \Exception('No config file found'); + } + + $source = $this->config->loadSource(); + $arEvents = $source->getEvents( + $this->config->date, + $this->config->daysPrev, $this->config->daysNext + ); + usort($arEvents, '\\bdrem\\Event::compare'); + $this->render($arEvents); + } catch (\Exception $e) { + $this->preRenderParameterError(); + echo 'Exception: ' . $e->getCode() . ' - ' . $e->getMessage() . "\n"; + exit(1); + } } protected function loadParameters() @@ -31,25 +40,25 @@ abstract class UserInterface $parser->version = '0.1.0'; $parser->addOption( - 'daysAfter', + 'daysNext', array( - 'short_name' => '-a', - 'long_name' => '--days-after', + 'short_name' => '-n', + 'long_name' => '--days-next', 'description' => 'Show NUM days after date', 'help_name' => 'NUM', 'action' => 'StoreInt', - 'default' => $this->config->daysAfter, + 'default' => $this->config->daysNext, ) ); $parser->addOption( - 'daysBefore', + 'daysPrev', array( - 'short_name' => '-b', - 'long_name' => '--days-before', + 'short_name' => '-p', + 'long_name' => '--previous', 'description' => 'Show NUM days before date', 'help_name' => 'NUM', 'action' => 'StoreInt', - 'default' => $this->config->daysBefore, + 'default' => $this->config->daysPrev, ) ); $parser->addOption( @@ -70,12 +79,22 @@ abstract class UserInterface ) ); $parser->addOption( - 'quiet', + 'stopOnEmpty', array( - 'short_name' => '-q', - 'long_name' => '--quiet', - 'description' => "Don't print status messages to stdout", - 'action' => 'StoreTrue' + 'short_name' => '-e', + 'long_name' => '--stoponempty', + 'description' => 'Output nothing when list is empty', + 'action' => 'StoreTrue', + 'default' => false + ) + ); + $parser->addOption( + 'date', + array( + 'short_name' => '-d', + 'long_name' => '--date', + 'description' => 'Date to show events for', + 'action' => 'StoreString' ) ); return $parser; @@ -86,10 +105,11 @@ abstract class UserInterface 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']; + $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']); } catch (\Exception $exc) { $this->preRenderParameterError(); $parser->displayError($exc->getMessage()); @@ -100,6 +120,11 @@ abstract class UserInterface { $r = $this->getRenderer(); $r->config = $this->config; + + if ($this->config->stopOnEmpty && count($arEvents) == 0) { + $r->handleStopOnEmpty(); + return; + } $r->renderAndOutput($arEvents); }