add stopOnEmpty and date parameters
authorChristian Weiske <cweiske@cweiske.de>
Tue, 18 Feb 2014 19:55:43 +0000 (20:55 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Tue, 18 Feb 2014 19:55:43 +0000 (20:55 +0100)
src/bdrem/Config.php
src/bdrem/Renderer.php
src/bdrem/Renderer/Html.php
src/bdrem/UserInterface.php

index 04cf888..37c4c64 100644 (file)
@@ -8,6 +8,7 @@ class Config
     public $daysPrev;
     public $daysNext;
     public $locale;
+    public $stopOnEmpty;
 
     public function load()
     {
@@ -40,6 +41,16 @@ class Config
         return new $class($settings[0]);
     }
 
+    public function setDate($date)
+    {
+        if ($date === null) {
+            $this->date = date('Y-m-d');
+        } else {
+            $dt = new \DateTime($date);
+            $this->date = $dt->format('Y-m-d');
+        }
+    }
+
     public function get($varname, $default = '')
     {
         if (!isset($this->$varname) || $this->$varname == '') {
index a8da7a1..e6f633b 100644 (file)
@@ -13,6 +13,10 @@ abstract class Renderer
         echo $this->render($arEvents);
     }
 
+    public function handleStopOnEmpty()
+    {
+    }
+
     abstract public function render($arEvents);
 }
 ?>
index af48e0e..637a838 100644 (file)
@@ -5,6 +5,11 @@ class Renderer_Html extends Renderer
 {
     protected $httpContentType = 'application/xhtml+xml; charset=utf-8';
 
+    public function handleStopOnEmpty()
+    {
+        header('HTTP/1.0 204 No Content');
+    }
+
     public function render($arEvents)
     {
         $tr = new Renderer_HtmlTable();
index da5e9a3..7e6bf9a 100644 (file)
@@ -10,7 +10,6 @@ abstract class UserInterface
         try {
             $this->config = new Config();
             $this->config->load();
-            $this->config->date = date('Y-m-d');
             setlocale(LC_TIME, $this->config->locale);
             $source = $this->config->loadSource();
 
@@ -76,6 +75,25 @@ abstract class UserInterface
             )
         );
         $parser->addOption(
+            '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'  => '-d',
+                'long_name'   => '--date',
+                'description' => 'Date to show events for',
+                'action'      => 'StoreString'
+            )
+        );
+        $parser->addOption(
             'quiet',
             array(
                 'short_name'  => '-q',
@@ -92,10 +110,12 @@ abstract class UserInterface
         try {
             $result = $parser->parse();
             // do something with the result object
-            $this->config->daysNext = $result->options['daysNext'];
-            $this->config->daysPrev = $result->options['daysPrev'];
-            $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->quiet       = $result->options['quiet'];
+            $this->config->stopOnEmpty = $result->options['stopOnEmpty'];
+            $this->config->setDate($result->options['date']);
         } catch (\Exception $exc) {
             $this->preRenderParameterError();
             $parser->displayError($exc->getMessage());
@@ -106,6 +126,11 @@ abstract class UserInterface
     {
         $r = $this->getRenderer();
         $r->config = $this->config;
+
+        if ($this->config->stopOnEmpty && count($arEvents) == 0) {
+            $r->handleStopOnEmpty();
+            return;
+        }
         $r->renderAndOutput($arEvents);
     }