aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent6506b1ebe1ecaa6630d6d849c39b9e9d53603699 (diff)
downloadbdrem-f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e.tar.gz
bdrem-f4339edbbe92a1c4c104f6a58e9cfb4b2a93966e.zip
use console_commandline for parameter parsing
Diffstat (limited to 'src')
-rw-r--r--src/bdrem/Cli.php30
-rw-r--r--src/bdrem/Renderer.php18
-rw-r--r--src/bdrem/Renderer/Console.php12
-rw-r--r--src/bdrem/Renderer/Html.php4
-rw-r--r--src/bdrem/Renderer/HtmlTable.php4
-rw-r--r--src/bdrem/Renderer/Mail.php2
-rw-r--r--src/bdrem/UserInterface.php93
-rw-r--r--src/bdrem/Web.php18
-rw-r--r--src/bdrem/WebText.php10
9 files changed, 145 insertions, 46 deletions
diff --git a/src/bdrem/Cli.php b/src/bdrem/Cli.php
index 2199161..ec849f4 100644
--- a/src/bdrem/Cli.php
+++ b/src/bdrem/Cli.php
@@ -5,33 +5,11 @@ class Cli extends UserInterface
{
protected function loadParameters()
{
- $params = $GLOBALS['argv'];
- array_shift($params);
- $storeInto = null;
- foreach ($params as $param) {
- if ($storeInto !== null) {
- $this->config->$storeInto = (int)$param;
- $storeInto = null;
- continue;
- }
+ $parser = parent::loadParameters();
+ //set default renderer to console
+ $parser->options['renderer']->default = 'console';
- if ($param == '--days-after' || $param == '-a') {
- $storeInto = 'daysAfter';
- continue;
- } else if ($param == '--days-before' || $param == '-b') {
- $storeInto = 'daysBefore';
- continue;
- }
- $storeInto = null;
- }
- }
-
- protected function render($arEvents)
- {
- $r = new Renderer_Mail();
- $r->config = $this->config;
- $r->ansi = true;
- echo $r->render($arEvents);
+ return $parser;
}
}
?>
diff --git a/src/bdrem/Renderer.php b/src/bdrem/Renderer.php
new file mode 100644
index 0000000..a8da7a1
--- /dev/null
+++ b/src/bdrem/Renderer.php
@@ -0,0 +1,18 @@
+<?php
+namespace bdrem;
+
+abstract class Renderer
+{
+ protected $httpContentType = null;
+
+ public function renderAndOutput($arEvents)
+ {
+ if (PHP_SAPI != 'cli' && $this->httpContentType !== null) {
+ header('Content-type: ' . $this->httpContentType);
+ }
+ echo $this->render($arEvents);
+ }
+
+ abstract public function render($arEvents);
+}
+?>
diff --git a/src/bdrem/Renderer/Console.php b/src/bdrem/Renderer/Console.php
index fc2174f..b4ef8a8 100644
--- a/src/bdrem/Renderer/Console.php
+++ b/src/bdrem/Renderer/Console.php
@@ -1,8 +1,10 @@
<?php
namespace bdrem;
-class Renderer_Console
+class Renderer_Console extends Renderer
{
+ protected $httpContentType = 'text/plain; charset=utf-8';
+
/**
* Use ANSI color codes for output coloring
*
@@ -17,6 +19,7 @@ class Renderer_Console
public function render($arEvents)
{
+ $this->loadConfig();
if ($this->ansi) {
$this->cc = new \Console_Color2();
}
@@ -80,5 +83,12 @@ class Renderer_Console
}
return $data;
}
+
+ protected function loadConfig()
+ {
+ if (isset($this->config->ansi)) {
+ $this->ansi = $this->config->ansi;
+ }
+ }
}
?>
diff --git a/src/bdrem/Renderer/Html.php b/src/bdrem/Renderer/Html.php
index bb027d2..af48e0e 100644
--- a/src/bdrem/Renderer/Html.php
+++ b/src/bdrem/Renderer/Html.php
@@ -1,8 +1,10 @@
<?php
namespace bdrem;
-class Renderer_Html
+class Renderer_Html extends Renderer
{
+ protected $httpContentType = 'application/xhtml+xml; charset=utf-8';
+
public function render($arEvents)
{
$tr = new Renderer_HtmlTable();
diff --git a/src/bdrem/Renderer/HtmlTable.php b/src/bdrem/Renderer/HtmlTable.php
index 574036f..bcfa9fe 100644
--- a/src/bdrem/Renderer/HtmlTable.php
+++ b/src/bdrem/Renderer/HtmlTable.php
@@ -1,8 +1,10 @@
<?php
namespace bdrem;
-class Renderer_HtmlTable
+class Renderer_HtmlTable extends Renderer
{
+ protected $httpContentType = 'text/html; charset=utf-8';
+
public function render($arEvents)
{
$s = <<<HTM
diff --git a/src/bdrem/Renderer/Mail.php b/src/bdrem/Renderer/Mail.php
index eee8dec..4b1c8d7 100644
--- a/src/bdrem/Renderer/Mail.php
+++ b/src/bdrem/Renderer/Mail.php
@@ -3,7 +3,7 @@ namespace bdrem;
require_once 'Mail/mime.php';
-class Renderer_Mail
+class Renderer_Mail extends Renderer
{
public function render($arEvents)
{
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
diff --git a/src/bdrem/Web.php b/src/bdrem/Web.php
index b076520..10120ec 100644
--- a/src/bdrem/Web.php
+++ b/src/bdrem/Web.php
@@ -3,20 +3,18 @@ namespace bdrem;
class Web extends UserInterface
{
- protected function render($arEvents)
+ protected function loadParameters()
{
- $r = new Renderer_Html();
- echo $r->render($arEvents);
+ $parser = parent::loadParameters();
+ //set default renderer to html
+ $parser->options['renderer']->default = 'html';
+
+ return $parser;
}
- protected function loadParameters()
+ protected function preRenderParameterError()
{
- if (isset($_GET['daysBefore'])) {
- $this->config->daysBefore = (int) $_GET['daysBefore'];
- }
- if (isset($_GET['daysAfter'])) {
- $this->config->daysAfter = (int) $_GET['daysAfter'];
- }
+ header('Content-type: text/plain; charset=utf-8');
}
}
?>
diff --git a/src/bdrem/WebText.php b/src/bdrem/WebText.php
index aaace51..3587f70 100644
--- a/src/bdrem/WebText.php
+++ b/src/bdrem/WebText.php
@@ -3,11 +3,13 @@ namespace bdrem;
class WebText extends Web
{
- protected function render($arEvents)
+ protected function loadParameters()
{
- header('Content-type: text/plain; charset=utf-8');
- $r = new Renderer_Console();
- echo $r->render($arEvents);
+ $parser = parent::loadParameters();
+ //set default renderer to console
+ $parser->options['renderer']->default = 'console';
+
+ return $parser;
}
}
?>