load($overwrite, ! $reload); } catch (\ConfigException $e) { $config = array(); } $group = $group === true ? $file->group() : $group; } if ($group === null) { static::$items = $reload ? $config : ($overwrite ? array_merge(static::$items, $config) : \Arr::merge(static::$items, $config)); static::$itemcache = array(); } else { $group = ($group === true) ? $file : $group; if ( ! isset(static::$items[$group]) or $reload) { static::$items[$group] = array(); } static::$items[$group] = $overwrite ? array_merge(static::$items[$group], $config) : \Arr::merge(static::$items[$group], $config); $group .= '.'; foreach (static::$itemcache as $key => $value) { if (strpos($key, $group) === 0) { unset(static::$itemcache[$key]); } } } return $config; } /** * Save a config array to disc. * * @param string $file desired file name * @param string|array $config master config array key or config array * @return bool false when config is empty or invalid else \File::update result * @throws \FuelException */ public static function save($file, $config) { if ( ! is_array($config)) { if ( ! isset(static::$items[$config])) { return false; } $config = static::$items[$config]; } $info = pathinfo($file); $type = 'php'; if (isset($info['extension'])) { $type = $info['extension']; // Keep extension when it's an absolute path, because the finder won't add it if ($file[0] !== '/' and $file[1] !== ':') { $file = substr($file, 0, -(strlen($type) + 1)); } } $class = '\\Config_'.ucfirst($type); if ( ! class_exists($class)) { throw new \FuelException(sprintf('Invalid config type "%s".', $type)); } $driver = new $class($file); return $driver->save($config); } /** * Returns a (dot notated) config setting * * @param string $item name of the config item, can be dot notated * @param mixed $default the return value if the item isn't found * @return mixed the config setting or default if not found */ public static function get($item, $default = null) { if (array_key_exists($item, static::$items)) { return static::$items[$item]; } elseif ( ! array_key_exists($item, static::$itemcache)) { // cook up something unique $miss = new \stdClass(); $val = \Arr::get(static::$items, $item, $miss); // so we can detect a miss here... if ($val === $miss) { return $default; } static::$itemcache[$item] = $val; } return \Fuel::value(static::$itemcache[$item]); } /** * Sets a (dot notated) config item * * @param string $item a (dot notated) config key * @param mixed $value the config value */ public static function set($item, $value) { strpos($item, '.') === false or static::$itemcache[$item] = $value; \Arr::set(static::$items, $item, $value); } /** * Deletes a (dot notated) config item * * @param string $item a (dot notated) config key * @return array|bool the \Arr::delete result, success boolean or array of success booleans */ public static function delete($item) { if (isset(static::$itemcache[$item])) { unset(static::$itemcache[$item]); } return \Arr::delete(static::$items, $item); } }