add option to specify config file
authorChristian Weiske <cweiske@cweiske.de>
Tue, 25 Feb 2014 17:08:23 +0000 (18:08 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Tue, 25 Feb 2014 17:08:23 +0000 (18:08 +0100)
.gitignore
src/bdrem/Config.php
src/bdrem/UserInterface.php

index bb3b29388c7c90c13330afb5256dcfb1a882fc0f..fc7cfcc69f2f7f004aad175cb40df3e847ee8176 100644 (file)
@@ -1 +1,2 @@
 /data/bdrem.config.php
+/dist/
index a79b1b3c5b53ec21799689f9903d057a1189d448..57d0cfd7d1995527cb8163b3bb0355756071e417 100644 (file)
@@ -3,19 +3,26 @@ namespace bdrem;
 
 class Config
 {
-    public $source;
     public $date;
-    public $daysPrev = 3;
-    public $daysNext = 7;
+    public $daysPrev;
+    public $daysNext;
     public $locale;
-    public $stopOnEmpty = false;
+    public $renderer;
+    public $source;
+    public $stopOnEmpty;
 
     public $cfgFiles = array();
     public $cfgFileExists;
 
-    public function load()
+
+
+    public function __construct()
     {
         $this->loadConfigFilePaths();
+    }
+
+    public function load()
+    {
         foreach ($this->cfgFiles as $file) {
             if (file_exists($file)) {
                 $this->cfgFileExists = true;
@@ -45,7 +52,9 @@ class Config
         include $filename;
         $vars = get_defined_vars();
         foreach ($vars as $k => $value) {
-            $this->$k = $value;
+            if (!isset($this->$k) || $this->$k === null) {
+                $this->$k = $value;
+            }
         }
     }
 
index c5e29b765ad4b73691c4f86bd70d0b7a95e1f34c..2827415ca6c146f70a1348d21d8015fb32bdf2d8 100644 (file)
@@ -9,13 +9,10 @@ abstract class UserInterface
     {
         try {
             $this->config = new Config();
-            $this->config->load();
-            setlocale(LC_TIME, $this->config->locale);
-
             $parser = $this->loadParameters();
             $res = $this->parseParameters($parser);
-            $this->handleCommands($res);
 
+            $this->config->load();
             if (!$this->config->cfgFileExists) {
                 throw new \Exception(
                     "No config file found. Looked at the following places:\n"
@@ -23,6 +20,9 @@ abstract class UserInterface
                 );
             }
 
+            setlocale(LC_TIME, $this->config->locale);
+            $this->handleCommands($res);
+
             $source = $this->config->loadSource();
             $arEvents = $source->getEvents(
                 $this->config->date,
@@ -51,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(
@@ -62,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(
@@ -101,6 +101,17 @@ abstract class UserInterface
                 'action'      => 'StoreString'
             )
         );
+        $parser->addOption(
+            'configfile',
+            array(
+                'short_name'  => '-c',
+                'long_name'   => '--config',
+                'help_name'   => 'FILE',
+                'description' => 'Path to configuration file',
+                'action'      => 'StoreString'
+            )
+        );
+
         return $parser;
     }
 
@@ -108,7 +119,11 @@ 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'];