/**
  * sets a specific parameter
  *
  * @param $key
  * @param $val
  *
  * @return mixed
  */
 public function set(string $key, $val)
 {
     // set the variable
     if (empty($key)) {
         return $this;
     }
     $node = $this->mainNode->getLastByKey($key);
     if (!$node || !$node->getParent()) {
         $newNode = new Node($this->mainNode, $key, $val);
         $this->mainNode->addChild($newNode);
     } else {
         $newNode = new Node($node->getParent(), $key, $val);
         $node->getParent()->addChild($newNode);
     }
     $this->lastNewNode = $newNode;
     return $this;
 }
 /**
  * @test
  */
 public function testGraphCollectionGetSpecificUnambigousChildNode()
 {
     $node1 = new Node(null, '*', null);
     $node2 = new Node(null, '.', null);
     $node1->addChild($node2);
     $collection = new Collection($node1->children->idList, $node1->children->keyList);
     $collection->addNode($node1);
     $retNode = $collection->getLastByKey('.');
     self::assertEquals($node2, $retNode);
 }
예제 #3
0
 /**
  * @param null $param
  *
  * @throws ExceptionConfig
  * @throws \Exception
  *
  * @return void
  */
 public function load($param = null)
 {
     try {
         if (empty($param[self::FILE_INDEX])) {
             throw new ExceptionConfig(_('No config file was given, please make sure one is provided in the param array'), 0, 1, __METHOD__, __LINE__);
         }
         if (is_dir($param[self::FILE_INDEX])) {
             $path = $param[self::FILE_INDEX];
             $this->configFileSet = array_map(function ($fileName) use($path) {
                 return $path . DIRECTORY_SEPARATOR . $fileName;
             }, array_filter(scandir($param[self::FILE_INDEX]), function ($file) {
                 if (strpos($file, '.ini') !== false) {
                     return true;
                 }
                 return false;
             }));
         } else {
             $this->configFileSet[] = $param[self::FILE_INDEX];
         }
         if (isset($param[self::PROCESS_SECTION_INDEX])) {
             $this->processSections = (bool) $param[self::PROCESS_SECTION_INDEX];
         }
         if (isset($param[self::SCANNER_MODE_INDEX])) {
             $this->scannerMode = (int) $param[self::SCANNER_MODE_INDEX];
         }
         $data = [];
         if ($this->configFileSet) {
             foreach ($this->configFileSet as $fileName) {
                 $data = array_merge_recursive(parse_ini_file($fileName, $this->processSections, $this->scannerMode));
             }
         }
         $this->mainNode = new Node(null, IConfig::MAIN_NODE_KEY, 'main node');
         foreach ($data as $key => $group) {
             if (!is_array($group)) {
                 $newNode = new Node($this->mainNode, $key, $group);
                 $this->mainNode->addChild($newNode);
                 continue;
             }
             $newNode = new Node($this->mainNode, $key, $key);
             foreach ($group as $name => $value) {
                 $childNode = new Node($newNode, $name, $value);
                 $newNode->addChild($childNode);
             }
             $this->mainNode->addChild($newNode);
         }
     } catch (ExceptionConfig $e) {
         throw $e;
     }
 }