remove quiet option; we do not use it anyway
[bdrem.git] / src / bdrem / UserInterface.php
index cd9f7024650c9707678d135c4de08f491b1fc154..1b8cb56c66d28768b0ff6e33f843ae3b35b2c16e 100644 (file)
@@ -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);
     }