X-Git-Url: https://git.cweiske.de/bdrem.git/blobdiff_plain/2e18a05a2cedf343b0d0f5fd3e4e6a8d65e2647e..95681cad57a3bb6198162d0e94dc8f700ced60af:/src/bdrem/UserInterface.php diff --git a/src/bdrem/UserInterface.php b/src/bdrem/UserInterface.php index 8fa001f..2827415 100644 --- a/src/bdrem/UserInterface.php +++ b/src/bdrem/UserInterface.php @@ -9,16 +9,20 @@ abstract class UserInterface { try { $this->config = new Config(); - $this->config->load(); - setlocale(LC_TIME, $this->config->locale); - $parser = $this->loadParameters(); - $this->parseParameters($parser); + $res = $this->parseParameters($parser); + $this->config->load(); if (!$this->config->cfgFileExists) { - throw new \Exception('No config file found'); + throw new \Exception( + "No config file found. Looked at the following places:\n" + . '- ' . implode ("\n- ", $this->config->cfgFiles) + ); } + setlocale(LC_TIME, $this->config->locale); + $this->handleCommands($res); + $source = $this->config->loadSource(); $arEvents = $source->getEvents( $this->config->date, @@ -28,7 +32,7 @@ abstract class UserInterface $this->render($arEvents); } catch (\Exception $e) { $this->preRenderParameterError(); - echo 'Exception: ' . $e->getCode() . ' - ' . $e->getMessage() . "\n"; + echo 'Error: ' . $e->getMessage() . "\n"; exit(1); } } @@ -47,7 +51,7 @@ abstract class UserInterface 'description' => 'Show NUM days after date', 'help_name' => 'NUM', 'action' => 'StoreInt', - 'default' => $this->config->daysNext, + 'default' => null, ) ); $parser->addOption( @@ -58,7 +62,7 @@ abstract class UserInterface 'description' => 'Show NUM days before date', 'help_name' => 'NUM', 'action' => 'StoreInt', - 'default' => $this->config->daysPrev, + 'default' => null, ) ); $parser->addOption( @@ -98,14 +102,16 @@ abstract class UserInterface ) ); $parser->addOption( - 'quiet', + 'configfile', array( - 'short_name' => '-q', - 'long_name' => '--quiet', - 'description' => "Don't print status messages to stdout", - 'action' => 'StoreTrue' + 'short_name' => '-c', + 'long_name' => '--config', + 'help_name' => 'FILE', + 'description' => 'Path to configuration file', + 'action' => 'StoreString' ) ); + return $parser; } @@ -113,13 +119,17 @@ abstract class UserInterface { try { $result = $parser->parse(); - // do something with the result object + + if ($result->options['configfile'] !== null) { + $this->config->cfgFiles = array($result->options['configfile']); + } + $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']); + return $result; } catch (\Exception $exc) { $this->preRenderParameterError(); $parser->displayError($exc->getMessage()); @@ -148,6 +158,10 @@ abstract class UserInterface return new $class(); } + protected function handleCommands($res) + { + } + protected function preRenderParameterError() { }