diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ab72cce6..45444998e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ # v1.6.0-beta.4 ## mm/dd/2018 +1. [](#new) + * Added `Utils::arrayFlattenDotNotation()` and `Utils::arrayUnflattenDotNotation()` helper methods 1. [](#improved) * Added apcu autoloader optimization + * Additional helper methods in `Language`, `Languages`, and `LanguageCodes` classes 1. [](#bugfix) * Use login provider User avatar if set diff --git a/system/src/Grav/Common/Config/Languages.php b/system/src/Grav/Common/Config/Languages.php index aa97cdbf7..56f67804b 100644 --- a/system/src/Grav/Common/Config/Languages.php +++ b/system/src/Grav/Common/Config/Languages.php @@ -52,4 +52,15 @@ class Languages extends Data { $this->items = Utils::arrayMergeRecursiveUnique($this->items, $data); } + + public function flattenByLang($lang) + { + $language = $this->items[$lang]; + return Utils::arrayFlattenDotNotation($language); + } + + public function unflatten($array) + { + return Utils::arrayUnflattenDotNotation($array); + } } diff --git a/system/src/Grav/Common/Language/Language.php b/system/src/Grav/Common/Language/Language.php index 076d1033d..c581ecf08 100644 --- a/system/src/Grav/Common/Language/Language.php +++ b/system/src/Grav/Common/Language/Language.php @@ -504,4 +504,16 @@ class Language return $this->http_accept_language; } + /** + * Accessible wrapper to LanguageCodes + * + * @param $code + * @param string $type + * @return bool + */ + public function getLanguageCode($code, $type = 'name') + { + return LanguageCodes::get($code, $type); + } + } diff --git a/system/src/Grav/Common/Language/LanguageCodes.php b/system/src/Grav/Common/Language/LanguageCodes.php index 063d41d25..a411ae43d 100644 --- a/system/src/Grav/Common/Language/LanguageCodes.php +++ b/system/src/Grav/Common/Language/LanguageCodes.php @@ -196,7 +196,7 @@ class LanguageCodes return $results; } - protected static function get($code, $type) + public static function get($code, $type) { if (isset(static::$codes[$code][$type])) { return static::$codes[$code][$type]; diff --git a/system/src/Grav/Common/Utils.php b/system/src/Grav/Common/Utils.php index ec6993be9..a85148804 100644 --- a/system/src/Grav/Common/Utils.php +++ b/system/src/Grav/Common/Utils.php @@ -708,6 +708,55 @@ abstract class Utils return $flatten; } + /** + * Flatten a multi-dimensional associative array into dot notation + * + * @param array $array + * @param string $prepend + * @return array + */ + public static function arrayFlattenDotNotation($array, $prepend = '') + { + $results = array(); + foreach ($array as $key => $value) + { + if (is_array($value)) + { + $results = array_merge($results, static::arrayFlattenDotNotation($value, $prepend.$key.'.')); + } + else + { + $results[$prepend.$key] = $value; + } + } + return $results; + } + + /** + * Opposite of flatten, convert flat dot notation array to multi dimensional array + * + * @param $array + * @param string $separator + * @return array + */ + public static function arrayUnflattenDotNotation($array, $separator = '.') { + $newArray = array(); + foreach($array as $key => $value) { + $dots = explode($separator, $key); + if(count($dots) > 1) { + $last = &$newArray[ $dots[0] ]; + foreach($dots as $k => $dot) { + if($k == 0) continue; + $last = &$last[$dot]; + } + $last = $value; + } else { + $newArray[$key] = $value; + } + } + return $newArray; + } + /** * Checks if the passed path contains the language code prefix *