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();
+ $res = $this->parseParameters($parser);
+ $this->handleCommands($res);
- $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. Looked at the following places:\n"
+ . '- ' . implode ("\n- ", $this->config->cfgFiles)
+ );
+ }
+
+ $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()
$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(
)
);
$parser->addOption(
- 'quiet',
+ 'stopOnEmpty',
+ array(
+ 'short_name' => '-e',
+ 'long_name' => '--stoponempty',
+ 'description' => 'Output nothing when list is empty',
+ 'action' => 'StoreTrue',
+ 'default' => false
+ )
+ );
+ $parser->addOption(
+ 'date',
array(
- 'short_name' => '-q',
- 'long_name' => '--quiet',
- 'description' => "Don't print status messages to stdout",
- 'action' => 'StoreTrue'
+ 'short_name' => '-d',
+ 'long_name' => '--date',
+ 'description' => 'Date to show events for',
+ 'action' => 'StoreString'
)
);
return $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'];
+ $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']);
+ return $result;
} catch (\Exception $exc) {
$this->preRenderParameterError();
$parser->displayError($exc->getMessage());
{
$r = $this->getRenderer();
$r->config = $this->config;
+
+ if ($this->config->stopOnEmpty && count($arEvents) == 0) {
+ $r->handleStopOnEmpty();
+ return;
+ }
$r->renderAndOutput($arEvents);
}
return new $class();
}
+ protected function handleCommands($res)
+ {
+ }
+
protected function preRenderParameterError()
{
}