From: Christian Weiske Date: Thu, 23 Jan 2014 16:05:49 +0000 (+0100) Subject: html renderer, console renderer uses pear's Console_Table X-Git-Tag: v0.5.0~51 X-Git-Url: https://git.cweiske.de/bdrem.git/commitdiff_plain/e86787a8eb6a31fbe95f1a3854d66e25e5e63c67?hp=441c72bbf3d29be5c7f5eb0fd43ac267fe059c2f html renderer, console renderer uses pear's Console_Table --- diff --git a/data/bdrem.config.php.dist b/data/bdrem.config.php.dist index 522a477..87d01fc 100644 --- a/data/bdrem.config.php.dist +++ b/data/bdrem.config.php.dist @@ -2,4 +2,5 @@ $source = array('Bdf', '/path/to/birthday.bdf'); $daysBefore = 3; $daysAfter = 14; +$locale = 'de_DE.UTF-8'; ?> diff --git a/src/bdrem/Cli.php b/src/bdrem/Cli.php index 5ab5ec8..196ca18 100644 --- a/src/bdrem/Cli.php +++ b/src/bdrem/Cli.php @@ -7,6 +7,7 @@ class Cli { $cfg = new Config(); $cfg->load(); + setlocale(LC_TIME, $cfg->locale); $source = $cfg->loadSource(); $arEvents = $source->getEvents( diff --git a/src/bdrem/Config.php b/src/bdrem/Config.php index 076cd04..5d34f76 100644 --- a/src/bdrem/Config.php +++ b/src/bdrem/Config.php @@ -6,6 +6,7 @@ class Config public $source; public $daysBefore; public $daysAfter; + public $locale; public function load() { @@ -23,6 +24,9 @@ class Config $this->source = $source; $this->daysBefore = $daysBefore; $this->daysAfter = $daysAfter; + if (isset($locale)) { + $this->locale = $locale; + } } public function loadSource() @@ -35,9 +39,6 @@ class Config $class = '\\bdrem\\Source_' . array_shift($settings); return new $class($settings[0]); - //$rm = new \ReflectionMethod($class, '__construct'); - //return $rm->invokeArgs(null, $settings); - //return call_user_func_array($class . '::__construct', $settings); } } ?> diff --git a/src/bdrem/Event.php b/src/bdrem/Event.php index 65e4b9b..43b9c92 100644 --- a/src/bdrem/Event.php +++ b/src/bdrem/Event.php @@ -21,6 +21,22 @@ class Event */ public $date; + /** + * Reference date against which $age and $days are calculated + * (often today) + * + * @var string YYYY-MM-DD + */ + public $refDate; + + /** + * "Localized" $date used for calculations against $refDate. + * Month and day are the same as in $date, year is near $refDate's year. + * + * @var string YYYY-MM-DD + */ + public $localDate; + /** * Which repetition this is * @@ -52,10 +68,12 @@ class Event */ public function isWithin($strDate, $nDaysBefore, $nDaysAfter) { + $this->refDate = $strDate; list($rYear, $rMonth, $rDay) = explode('-', $strDate); list($eYear, $eMonth, $eDay) = explode('-', $this->date); if ($rMonth == $eMonth && $rDay == $eDay) { + $this->localDate = $strDate; $this->days = 0; if ($eYear == '????') { $this->age = null; @@ -72,8 +90,9 @@ class Event $yearOffset = -1; } + $this->localDate = ($rYear + $yearOffset) . '-' . $eMonth . '-' . $eDay; $rD = new \DateTime($strDate); - $eD = new \DateTime(($rYear + $yearOffset) . '-' . $eMonth . '-' . $eDay); + $eD = new \DateTime($this->localDate); $nDiff = (int) $rD->diff($eD)->format('%r%a'); diff --git a/src/bdrem/Renderer/Console.php b/src/bdrem/Renderer/Console.php index 2cd185f..01d6eb2 100644 --- a/src/bdrem/Renderer/Console.php +++ b/src/bdrem/Renderer/Console.php @@ -5,35 +5,30 @@ class Renderer_Console { public function render($arEvents) { - $s = "Days Age Name Event Date\n"; - $s .= "---- --- ---------------------------------------- -------------------- ----------\n"; - foreach ($arEvents as $event) { - $s .= sprintf( - "%3d %4s %s %s %s\n", - $event->days, - $event->age, - $this->str_pad($event->title, 40), - $this->str_pad($event->type, 20), - $event->date - ); - } - return $s; - } + $tbl = new \Console_Table( + CONSOLE_TABLE_ALIGN_LEFT, + array('sect' => '', 'rule' => '-', 'vert' => '') + ); + $tbl->setAlign(0, CONSOLE_TABLE_ALIGN_RIGHT); + $tbl->setAlign(1, CONSOLE_TABLE_ALIGN_RIGHT); - public function str_pad( - $input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT - ) { - $l = mb_strlen($input, 'utf-8'); - if ($l >= $pad_length) { - return $input; - } + $tbl->setHeaders( + array('Days', 'Age', 'Name', 'Event', 'Date', 'Day') + ); - $p = str_repeat($pad_string, $pad_length - $l); - if ($pad_type == STR_PAD_RIGHT) { - return $input . $p; - } else { - return $p . $input; + foreach ($arEvents as $event) { + $tbl->addRow( + array( + $event->days, + $event->age, + wordwrap($event->title, 30, "\n", true), + wordwrap($event->type, 20, "\n", true), + $event->date, + strftime('%a', strtotime($event->localDate)) + ) + ); } + return $tbl->getTable(); } } ?> diff --git a/src/bdrem/Renderer/Html.php b/src/bdrem/Renderer/Html.php new file mode 100644 index 0000000..bb027d2 --- /dev/null +++ b/src/bdrem/Renderer/Html.php @@ -0,0 +1,93 @@ +render($arEvents); + $s = << + + + + bdrem + + + + +$table + + +HTM; + return $s; + } +} +?> diff --git a/src/bdrem/Renderer/HtmlTable.php b/src/bdrem/Renderer/HtmlTable.php new file mode 100644 index 0000000..574036f --- /dev/null +++ b/src/bdrem/Renderer/HtmlTable.php @@ -0,0 +1,58 @@ + + + + Days + Age + Event + Name + Date + Day + + + + +HTM; + foreach ($arEvents as $event) { + $class = 'd' . $event->days; + if ($event->days < 0) { + $class .= ' prev'; + } else if ($event->days == 0) { + $class .= ' today'; + } else { + $class .= ' next'; + } + $s .= sprintf( + '' + . '' + . '%d' + . '%s' + . '%s' + . '%s' + . '%s' + . '%s' + . "\n", + $event->days, + $event->age, + $event->title, + $event->type, + $event->date, + strftime('%a', strtotime($event->localDate)) + ); + } + $s .= << + + +HTM; + return $s; + } +} +?> diff --git a/src/bdrem/Web.php b/src/bdrem/Web.php new file mode 100644 index 0000000..4222551 --- /dev/null +++ b/src/bdrem/Web.php @@ -0,0 +1,22 @@ +load(); + setlocale(LC_TIME, $cfg->locale); + $source = $cfg->loadSource(); + + $arEvents = $source->getEvents( + date('Y-m-d'), $cfg->daysBefore, $cfg->daysAfter + ); + usort($arEvents, '\\bdrem\\Event::compare'); + + $r = new Renderer_Html(); + echo $r->render($arEvents); + } +} +?> diff --git a/www/index.php b/www/index.php new file mode 100644 index 0000000..14defde --- /dev/null +++ b/www/index.php @@ -0,0 +1,10 @@ +run(); +?>