/**
  * Returns extension configuration.
  * @param  array default values.
  * @param  bool  perform %parameters% expansion?
  * @return array
  */
 public function getConfig(array $defaults = NULL, $expand = TRUE)
 {
     $config = $this->compiler->getConfig();
     $config = isset($config[$this->name]) ? $config[$this->name] : array();
     unset($config['services'], $config['factories']);
     $config = Helpers::merge($config, $defaults);
     return $expand ? $this->compiler->getContainerBuilder()->expand($config) : $config;
 }
Exemplo n.º 2
0
 private function getSection(array $data, $key, $file)
 {
     Validators::assertField($data, $key, 'array|null', "section '%' in file '{$file}'");
     $item = $data[$key];
     if ($parent = Helpers::takeParent($item)) {
         $item = Helpers::merge($item, $this->getSection($data, $parent, $file));
     }
     return $item;
 }
Exemplo n.º 3
0
 /**
  * Reads configuration from INI file.
  * @param  string  file name
  * @return array
  * @throws Nette\InvalidStateException
  */
 public function load($file)
 {
     set_error_handler(function ($severity, $message) {
         // parse_ini_file returns FALSE on failure since PHP 5.2.7
         restore_error_handler();
         throw new Nette\InvalidStateException("parse_ini_file(): {$message}");
     });
     $ini = parse_ini_file($file, TRUE);
     restore_error_handler();
     $data = array();
     foreach ($ini as $secName => $secData) {
         if (is_array($secData)) {
             // is section?
             if (substr($secName, -1) === self::RAW_SECTION) {
                 $secName = substr($secName, 0, -1);
             } else {
                 // process key nesting separator (key1.key2.key3)
                 $tmp = array();
                 foreach ($secData as $key => $val) {
                     $cursor =& $tmp;
                     $key = str_replace(self::ESCAPED_KEY_SEPARATOR, "ÿ", $key);
                     foreach (explode(self::KEY_SEPARATOR, $key) as $part) {
                         $part = str_replace("ÿ", self::KEY_SEPARATOR, $part);
                         if (!isset($cursor[$part]) || is_array($cursor[$part])) {
                             $cursor =& $cursor[$part];
                         } else {
                             throw new Nette\InvalidStateException("Invalid key '{$key}' in section [{$secName}] in file '{$file}'.");
                         }
                     }
                     $cursor = $val;
                 }
                 $secData = $tmp;
             }
             $parts = explode(self::INHERITING_SEPARATOR, $secName);
             if (count($parts) > 1) {
                 $secName = trim($parts[0]);
                 $secData[Helpers::EXTENDS_KEY] = trim($parts[1]);
             }
         }
         $cursor =& $data;
         // nesting separator in section name
         foreach (explode(self::KEY_SEPARATOR, $secName) as $part) {
             if (!isset($cursor[$part]) || is_array($cursor[$part])) {
                 $cursor =& $cursor[$part];
             } else {
                 throw new Nette\InvalidStateException("Invalid section [{$secName}] in file '{$file}'.");
             }
         }
         if (is_array($secData) && is_array($cursor)) {
             $secData = Helpers::merge($secData, $cursor);
         }
         $cursor = $secData;
     }
     return $data;
 }
Exemplo n.º 4
0
 /**
  * Reads configuration from INI file.
  *
  * @param  string  file name
  *
  * @return array
  * @throws Nette\InvalidStateException
  */
 public function load($file)
 {
     Nette\Diagnostics\Debugger::tryError();
     $ini = parse_ini_file($file, true);
     if (Nette\Diagnostics\Debugger::catchError($e)) {
         throw new Nette\InvalidStateException('parse_ini_file(): ' . $e->getMessage(), 0, $e);
     }
     $data = array();
     foreach ($ini as $secName => $secData) {
         if (is_array($secData)) {
             // is section?
             if (substr($secName, -1) === self::RAW_SECTION) {
                 $secName = substr($secName, 0, -1);
             } else {
                 // process key nesting separator (key1.key2.key3)
                 $tmp = array();
                 foreach ($secData as $key => $val) {
                     $cursor =& $tmp;
                     $key = str_replace(self::ESCAPED_KEY_SEPARATOR, "ÿ", $key);
                     foreach (explode(self::KEY_SEPARATOR, $key) as $part) {
                         $part = str_replace("ÿ", self::KEY_SEPARATOR, $part);
                         if (!isset($cursor[$part]) || is_array($cursor[$part])) {
                             $cursor =& $cursor[$part];
                         } else {
                             throw new Nette\InvalidStateException("Invalid key '{$key}' in section [{$secName}] in file '{$file}'.");
                         }
                     }
                     $cursor = $val;
                 }
                 $secData = $tmp;
             }
             $parts = explode(self::INHERITING_SEPARATOR, $secName);
             if (count($parts) > 1) {
                 $secName = trim($parts[0]);
                 $secData[Helpers::EXTENDS_KEY] = trim($parts[1]);
             }
         }
         $cursor =& $data;
         // nesting separator in section name
         foreach (explode(self::KEY_SEPARATOR, $secName) as $part) {
             if (!isset($cursor[$part]) || is_array($cursor[$part])) {
                 $cursor =& $cursor[$part];
             } else {
                 throw new Nette\InvalidStateException("Invalid section [{$secName}] in file '{$file}'.");
             }
         }
         if (is_array($secData) && is_array($cursor)) {
             $secData = Helpers::merge($secData, $cursor);
         }
         $cursor = $secData;
     }
     return $data;
 }
 /**
  * Build system container class.
  * @return string
  */
 protected function buildContainer(&$dependencies = NULL)
 {
     $loader = $this->createLoader();
     $config = array();
     $code = "<?php\n";
     foreach ($this->files as $tmp) {
         list($file, $section) = $tmp;
         $config = Helpers::merge($loader->load($file, $section), $config);
         $code .= "// source: {$file} {$section}\n";
     }
     $code .= "\n";
     $this->checkCompatibility($config);
     if (!isset($config['parameters'])) {
         $config['parameters'] = array();
     }
     $config['parameters'] = Helpers::merge($config['parameters'], $this->parameters);
     $compiler = $this->createCompiler();
     $this->onCompile($this, $compiler);
     $code .= $compiler->compile($config, $this->parameters['container']['class'], $config['parameters']['container']['parent']);
     $dependencies = array_merge($loader->getDependencies(), $this->isDebugMode() ? $compiler->getContainerBuilder()->getDependencies() : array());
     return $code;
 }
Exemplo n.º 6
0
 protected function loadNativeSessionHandler(array $session)
 {
     $builder = $this->getContainerBuilder();
     $params = array_intersect_key($session, array_flip(array('weight', 'timeout', 'database', 'prefix', 'auth', 'persistent')));
     if (substr($session['host'], 0, 1) === '/') {
         $savePath = $session['host'];
     } else {
         $savePath = sprintf('tcp://%s:%d', $session['host'], $session['port']);
     }
     if (!$params['persistent']) {
         unset($params['persistent']);
     }
     if (!$params['auth']) {
         unset($params['auth']);
     }
     $options = array('saveHandler' => 'redis', 'savePath' => $savePath . ($params ? '?' . http_build_query($params, '', '&') : ''));
     foreach ($builder->getDefinition('session')->setup as $statement) {
         if ($statement->entity === 'setOptions') {
             $statement->arguments[0] = Nette\Config\Helpers::merge($options, $statement->arguments[0]);
             unset($options);
             break;
         }
     }
     if (isset($options)) {
         $builder->getDefinition('session')->addSetup('setOptions', array($options));
     }
 }
Exemplo n.º 7
0
is_object($this->adapters[$extension])?$this->adapters[$extension]:new$this->adapters[$extension];}private
function
getSection(array$data,$key,$file){Validators::assertField($data,$key,'array|null',"section '%' in file '$file'");$item=$data[$key];if($parent=Helpers::takeParent($item)){$item=Helpers::merge($item,$this->getSection($data,$parent,$file));}return$item;}}}namespace Nette\Database{use
Exemplo n.º 8
0
INHERITING_SEPARATOR='<',KEY_SEPARATOR='.',ESCAPED_KEY_SEPARATOR='..',RAW_SECTION='!';function
load($file){Nette\Diagnostics\Debugger::tryError();$ini=parse_ini_file($file,TRUE);if(Nette\Diagnostics\Debugger::catchError($e)){throw
new
Nette\InvalidStateException('parse_ini_file(): '.$e->getMessage(),0,$e);}$data=array();foreach($ini
as$secName=>$secData){if(is_array($secData)){if(substr($secName,-1)===self::RAW_SECTION){$secName=substr($secName,0,-1);}else{$tmp=array();foreach($secData
as$key=>$val){$cursor=&$tmp;$key=str_replace(self::ESCAPED_KEY_SEPARATOR,"\xFF",$key);foreach(explode(self::KEY_SEPARATOR,$key)as$part){$part=str_replace("\xFF",self::KEY_SEPARATOR,$part);if(!isset($cursor[$part])||is_array($cursor[$part])){$cursor=&$cursor[$part];}else{throw
new
Nette\InvalidStateException("Invalid key '$key' in section [$secName] in file '$file'.");}}$cursor=$val;}$secData=$tmp;}$parts=explode(self::INHERITING_SEPARATOR,$secName);if(count($parts)>1){$secName=trim($parts[0]);$secData[Helpers::EXTENDS_KEY]=trim($parts[1]);}}$cursor=&$data;foreach(explode(self::KEY_SEPARATOR,$secName)as$part){if(!isset($cursor[$part])||is_array($cursor[$part])){$cursor=&$cursor[$part];}else{throw
new
Nette\InvalidStateException("Invalid section [$secName] in file '$file'.");}}if(is_array($secData)&&is_array($cursor)){$secData=Helpers::merge($secData,$cursor);}$cursor=$secData;}return$data;}function