Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php namespace Grav\Common\Language; use Grav\Common\Debugger; use Grav\Common\Grav; use..

Decoded Output download

<?php
 namespace Grav\Common\Language; use Grav\Common\Debugger; use Grav\Common\Grav; use Grav\Common\Config\Config; use Negotiation\AcceptLanguage; use Negotiation\LanguageNegotiator; use function array_key_exists; use function count; use function in_array; use function is_array; use function is_string; class Language { protected $grav; protected $config; protected $enabled = true; protected $languages = array(); protected $fallback_languages = array(); protected $fallback_extensions = array(); protected $page_extensions = array(); protected $default; protected $active; protected $http_accept_language; protected $lang_in_url = false; public function __construct(Grav $grav) { $this->grav = $grav; $this->config = $grav["config"]; $languages = $this->config->get("system.languages.supported", array()); foreach ($languages as &$language) { $language = (string) $language; } unset($language); $this->languages = $languages; $this->init(); } public function init() { $default = $this->config->get("system.languages.default_lang"); if (null !== $default) { $default = (string) $default; } $this->default = $default ?? reset($this->languages); $this->resetFallbackPageExtensions(); if (empty($this->languages)) { $this->enabled = false; } elseif ($default && !in_array($default, $this->languages, true)) { array_unshift($this->languages, $default); } } public function enabled() { return $this->enabled; } public function isDebug() : bool { return !$this->config->get("system.languages.translations", true); } public function getLanguages() { return $this->languages; } public function setLanguages($langs) { $this->languages = $langs; $this->init(); } public function getAvailable($delimiter = null) { $languagesArray = $this->languages; $languagesArray = array_map(static function ($value) use($delimiter) { return preg_quote($value, $delimiter); }, $languagesArray); sort($languagesArray); return implode("|", array_reverse($languagesArray)); } public function getLanguage() { return $this->active ?: $this->default; } public function getDefault() { return $this->default; } public function setDefault($lang) { $lang = (string) $lang; if ($this->validate($lang)) { $this->default = $lang; return $lang; } return false; } public function getActive() { return $this->active; } public function setActive($lang) { $lang = (string) $lang; if ($this->validate($lang)) { $debugger = $this->grav["debugger"]; $debugger->addMessage("Active language set to " . $lang, "debug"); $this->active = $lang; return $lang; } return false; } public function setActiveFromUri($uri) { $regex = "/(^\/(" . $this->getAvailable() . "))(?:\/|\?|$)/i"; if ($this->enabled()) { if (preg_match($regex, $uri, $matches)) { $this->lang_in_url = true; $this->setActive($matches[2]); $uri = preg_replace("/\" . $matches[1] . "/", '', $uri, 1); if (isset($this->grav["session"]) && $this->grav["session"]->isStarted() && $this->config->get("system.languages.session_store_active", true) && $this->grav["session"]->active_language != $this->active) { $this->grav["session"]->active_language = $this->active; } } else { if (isset($this->grav["session"]) && $this->grav["session"]->isStarted() && $this->config->get("system.languages.session_store_active", true)) { $this->setActive($this->grav["session"]->active_language ?: null); } if ($this->active === null && $this->config->get("system.languages.http_accept_language") && ($accept = $_SERVER["HTTP_ACCEPT_LANGUAGE"] ?? false)) { $negotiator = new LanguageNegotiator(); $best_language = $negotiator->getBest($accept, $this->languages); if ($best_language instanceof AcceptLanguage) { $this->setActive($best_language->getType()); } else { $this->setActive($this->getDefault()); } } } } return $uri; } public function getLanguageURLPrefix($lang = null) { if (!$this->enabled()) { return ''; } if (!$lang) { $lang = $this->getLanguage(); } return $this->isIncludeDefaultLanguage($lang) ? "/" . $lang : ''; } public function isIncludeDefaultLanguage($lang = null) { if (!$this->enabled()) { return false; } if (!$lang) { $lang = $this->getLanguage(); } return !($this->default === $lang && $this->config->get("system.languages.include_default_lang") === false); } public function isLanguageInUrl() { return (bool) $this->lang_in_url; } public function getPageExtensions($fileExtension = null) { $fileExtension = $fileExtension ?: CONTENT_EXT; if (!isset($this->fallback_extensions[$fileExtension])) { $extensions[''] = $fileExtension; foreach ($this->languages as $code) { $extensions[$code] = ".{$code}{$fileExtension}"; } $this->fallback_extensions[$fileExtension] = $extensions; } return $this->fallback_extensions[$fileExtension]; } public function getFallbackPageExtensions(string $fileExtension = null, string $languageCode = null, bool $assoc = false) { $fileExtension = $fileExtension ?: CONTENT_EXT; $key = $fileExtension . "-" . ($languageCode ?? "default") . "-" . (int) $assoc; if (!isset($this->fallback_extensions[$key])) { $all = $this->getPageExtensions($fileExtension); $list = array(); $fallback = $this->getFallbackLanguages($languageCode, true); foreach ($fallback as $code) { $ext = $all[$code] ?? null; if (null !== $ext) { $list[$code] = $ext; } } if (!$assoc) { $list = array_values($list); } $this->fallback_extensions[$key] = $list; } return $this->fallback_extensions[$key]; } public function resetFallbackPageExtensions() { $this->fallback_languages = array(); $this->fallback_extensions = array(); $this->page_extensions = array(); } public function getFallbackLanguages(string $languageCode = null, bool $includeDefault = false) { if ($languageCode === '' || !$this->enabled()) { return array(''); } $default = $this->getDefault() ?? "en"; $active = $languageCode ?? $this->getActive() ?? $default; $key = $active . "-" . (int) $includeDefault; if (!isset($this->fallback_languages[$key])) { $fallback = $this->config->get("system.languages.content_fallback." . $active); $fallback_languages = array(); if (null === $fallback && $this->config->get("system.languages.pages_fallback_only", false)) { user_error("Configuration option `system.languages.pages_fallback_only` is deprecated since Grav 1.7, use `system.languages.content_fallback` instead", E_USER_DEPRECATED); if ($includeDefault) { $fallback_languages[''] = ''; } foreach ($this->languages as $code) { $fallback_languages[$code] = $code; if ($code === $active) { break; } } $fallback_languages = array_reverse($fallback_languages); } else { if (null === $fallback) { $fallback = array($default); } elseif (!is_array($fallback)) { $fallback = is_string($fallback) && $fallback !== '' ? explode(",", $fallback) : array(); } array_unshift($fallback, $active); $fallback = array_unique($fallback); foreach ($fallback as $code) { $fallback_languages[$code] = $code; if ($includeDefault && $code === $default) { $fallback_languages[''] = ''; } } } $fallback_languages = array_values($fallback_languages); $this->fallback_languages[$key] = $fallback_languages; } return $this->fallback_languages[$key]; } public function validate($lang) { return in_array($lang, $this->languages, true); } public function translate($args, array $languages = null, $array_support = false, $html_out = false) { if (is_array($args)) { $lookup = array_shift($args); } else { $lookup = $args; $args = array(); } if (!$this->isDebug()) { if ($lookup && $this->enabled() && empty($languages)) { $languages = $this->getTranslatedLanguages(); } $languages = $languages ?: array("en"); foreach ((array) $languages as $lang) { $translation = $this->getTranslation($lang, $lookup, $array_support); if ($translation) { if (is_string($translation) && count($args) >= 1) { return vsprintf($translation, $args); } return $translation; } } } elseif ($array_support) { return array($lookup); } if ($html_out) { return "<span class="untranslated">" . $lookup . "</span>"; } return $lookup; } public function translateArray($key, $index, $languages = null, $html_out = false) { if ($this->isDebug()) { return $key . "[" . $index . "]"; } if ($key && empty($languages) && $this->enabled()) { $languages = $this->getTranslatedLanguages(); } $languages = $languages ?: array("en"); foreach ((array) $languages as $lang) { $translation_array = (array) Grav::instance()["languages"]->get($lang . "." . $key, null); if ($translation_array && array_key_exists($index, $translation_array)) { return $translation_array[$index]; } } if ($html_out) { return "<span class="untranslated">" . $key . "[" . $index . "]</span>"; } return $key . "[" . $index . "]"; } public function getTranslation($lang, $key, $array_support = false) { if ($this->isDebug()) { return $key; } $translation = Grav::instance()["languages"]->get($lang . "." . $key, null); if (!$array_support && is_array($translation)) { return (string) array_shift($translation); } return $translation; } public function getBrowserLanguages($accept_langs = array()) { user_error(__CLASS__ . "::" . __FUNCTION__ . "() is deprecated since Grav 1.6, no longer used", E_USER_DEPRECATED); if (empty($this->http_accept_language)) { if (empty($accept_langs) && isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { $accept_langs = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; } else { return $accept_langs; } $langs = array(); foreach (explode(",", $accept_langs) as $k => $pref) { if (false !== ($i = strpos($pref, ";q="))) { $langs[substr($pref, 0, $i)] = array((double) substr($pref, $i + 3), -$k); } else { $langs[$pref] = array(1, -$k); } } arsort($langs); $this->http_accept_language = array_keys($langs); } return $this->http_accept_language; } public function getLanguageCode($code, $type = "name") { return LanguageCodes::get($code, $type); } public function __debugInfo() { $vars = get_object_vars($this); unset($vars["grav"], $vars["config"]); return $vars; } protected function getTranslatedLanguages() : array { if ($this->config->get("system.languages.translations_fallback", true)) { $languages = $this->getFallbackLanguages(); } else { $languages = array($this->getLanguage()); } $languages[] = "en"; return array_values(array_unique($languages)); } } ?>

Did this file decode correctly?

Original Code

<?php
 namespace Grav\Common\Language; use Grav\Common\Debugger; use Grav\Common\Grav; use Grav\Common\Config\Config; use Negotiation\AcceptLanguage; use Negotiation\LanguageNegotiator; use function array_key_exists; use function count; use function in_array; use function is_array; use function is_string; class Language { protected $grav; protected $config; protected $enabled = true; protected $languages = array(); protected $fallback_languages = array(); protected $fallback_extensions = array(); protected $page_extensions = array(); protected $default; protected $active; protected $http_accept_language; protected $lang_in_url = false; public function __construct(Grav $grav) { $this->grav = $grav; $this->config = $grav["\143\157\x6e\x66\151\147"]; $languages = $this->config->get("\163\171\163\164\x65\155\56\x6c\x61\156\x67\165\x61\x67\x65\x73\x2e\x73\165\x70\160\x6f\162\164\x65\x64", array()); foreach ($languages as &$language) { $language = (string) $language; } unset($language); $this->languages = $languages; $this->init(); } public function init() { $default = $this->config->get("\163\x79\x73\x74\x65\x6d\x2e\154\x61\156\147\x75\x61\147\145\163\56\144\x65\x66\x61\165\154\x74\x5f\x6c\141\x6e\147"); if (null !== $default) { $default = (string) $default; } $this->default = $default ?? reset($this->languages); $this->resetFallbackPageExtensions(); if (empty($this->languages)) { $this->enabled = false; } elseif ($default && !in_array($default, $this->languages, true)) { array_unshift($this->languages, $default); } } public function enabled() { return $this->enabled; } public function isDebug() : bool { return !$this->config->get("\163\171\163\164\x65\x6d\x2e\154\x61\156\x67\165\x61\x67\145\163\56\x74\162\141\x6e\163\154\141\x74\x69\157\x6e\x73", true); } public function getLanguages() { return $this->languages; } public function setLanguages($langs) { $this->languages = $langs; $this->init(); } public function getAvailable($delimiter = null) { $languagesArray = $this->languages; $languagesArray = array_map(static function ($value) use($delimiter) { return preg_quote($value, $delimiter); }, $languagesArray); sort($languagesArray); return implode("\x7c", array_reverse($languagesArray)); } public function getLanguage() { return $this->active ?: $this->default; } public function getDefault() { return $this->default; } public function setDefault($lang) { $lang = (string) $lang; if ($this->validate($lang)) { $this->default = $lang; return $lang; } return false; } public function getActive() { return $this->active; } public function setActive($lang) { $lang = (string) $lang; if ($this->validate($lang)) { $debugger = $this->grav["\x64\145\x62\x75\147\147\145\162"]; $debugger->addMessage("\101\x63\164\151\x76\x65\40\x6c\141\156\x67\165\x61\147\x65\x20\163\x65\x74\40\164\x6f\40" . $lang, "\144\x65\x62\x75\x67"); $this->active = $lang; return $lang; } return false; } public function setActiveFromUri($uri) { $regex = "\x2f\x28\136\134\57\50" . $this->getAvailable() . "\51\51\x28\x3f\x3a\134\57\x7c\134\77\x7c\44\x29\x2f\151"; if ($this->enabled()) { if (preg_match($regex, $uri, $matches)) { $this->lang_in_url = true; $this->setActive($matches[2]); $uri = preg_replace("\57\134" . $matches[1] . "\x2f", '', $uri, 1); if (isset($this->grav["\163\145\x73\163\x69\157\156"]) && $this->grav["\163\x65\x73\163\x69\x6f\156"]->isStarted() && $this->config->get("\163\x79\x73\164\x65\x6d\x2e\x6c\x61\156\147\x75\141\147\x65\163\56\163\x65\163\x73\151\157\156\137\x73\164\157\x72\145\137\x61\143\x74\151\x76\x65", true) && $this->grav["\163\x65\163\x73\151\157\x6e"]->active_language != $this->active) { $this->grav["\x73\145\x73\163\151\x6f\156"]->active_language = $this->active; } } else { if (isset($this->grav["\x73\x65\x73\x73\x69\x6f\x6e"]) && $this->grav["\x73\145\x73\163\151\x6f\x6e"]->isStarted() && $this->config->get("\x73\171\163\x74\x65\155\56\154\x61\156\147\165\x61\x67\145\163\x2e\163\145\163\x73\x69\157\156\x5f\x73\x74\x6f\162\x65\x5f\141\143\164\151\x76\x65", true)) { $this->setActive($this->grav["\163\145\x73\163\x69\157\x6e"]->active_language ?: null); } if ($this->active === null && $this->config->get("\x73\171\163\x74\x65\x6d\x2e\154\x61\156\x67\x75\x61\147\x65\163\56\150\x74\164\x70\137\x61\143\x63\x65\160\x74\137\154\x61\x6e\147\x75\141\x67\x65") && ($accept = $_SERVER["\x48\x54\x54\x50\x5f\x41\x43\103\105\120\x54\137\x4c\101\116\x47\125\101\107\x45"] ?? false)) { $negotiator = new LanguageNegotiator(); $best_language = $negotiator->getBest($accept, $this->languages); if ($best_language instanceof AcceptLanguage) { $this->setActive($best_language->getType()); } else { $this->setActive($this->getDefault()); } } } } return $uri; } public function getLanguageURLPrefix($lang = null) { if (!$this->enabled()) { return ''; } if (!$lang) { $lang = $this->getLanguage(); } return $this->isIncludeDefaultLanguage($lang) ? "\x2f" . $lang : ''; } public function isIncludeDefaultLanguage($lang = null) { if (!$this->enabled()) { return false; } if (!$lang) { $lang = $this->getLanguage(); } return !($this->default === $lang && $this->config->get("\x73\171\x73\x74\145\x6d\56\x6c\x61\156\x67\165\x61\x67\145\163\56\x69\x6e\x63\x6c\x75\144\x65\x5f\144\145\x66\141\165\x6c\164\137\x6c\x61\156\147") === false); } public function isLanguageInUrl() { return (bool) $this->lang_in_url; } public function getPageExtensions($fileExtension = null) { $fileExtension = $fileExtension ?: CONTENT_EXT; if (!isset($this->fallback_extensions[$fileExtension])) { $extensions[''] = $fileExtension; foreach ($this->languages as $code) { $extensions[$code] = "\56{$code}{$fileExtension}"; } $this->fallback_extensions[$fileExtension] = $extensions; } return $this->fallback_extensions[$fileExtension]; } public function getFallbackPageExtensions(string $fileExtension = null, string $languageCode = null, bool $assoc = false) { $fileExtension = $fileExtension ?: CONTENT_EXT; $key = $fileExtension . "\55" . ($languageCode ?? "\x64\145\x66\x61\x75\154\164") . "\x2d" . (int) $assoc; if (!isset($this->fallback_extensions[$key])) { $all = $this->getPageExtensions($fileExtension); $list = array(); $fallback = $this->getFallbackLanguages($languageCode, true); foreach ($fallback as $code) { $ext = $all[$code] ?? null; if (null !== $ext) { $list[$code] = $ext; } } if (!$assoc) { $list = array_values($list); } $this->fallback_extensions[$key] = $list; } return $this->fallback_extensions[$key]; } public function resetFallbackPageExtensions() { $this->fallback_languages = array(); $this->fallback_extensions = array(); $this->page_extensions = array(); } public function getFallbackLanguages(string $languageCode = null, bool $includeDefault = false) { if ($languageCode === '' || !$this->enabled()) { return array(''); } $default = $this->getDefault() ?? "\145\x6e"; $active = $languageCode ?? $this->getActive() ?? $default; $key = $active . "\55" . (int) $includeDefault; if (!isset($this->fallback_languages[$key])) { $fallback = $this->config->get("\163\171\163\x74\145\x6d\56\x6c\141\156\x67\x75\141\147\x65\x73\x2e\x63\157\x6e\x74\x65\x6e\164\x5f\146\x61\154\154\x62\x61\x63\x6b\56" . $active); $fallback_languages = array(); if (null === $fallback && $this->config->get("\163\x79\163\164\x65\x6d\56\x6c\x61\156\x67\165\141\x67\145\x73\56\x70\x61\x67\145\163\x5f\x66\x61\154\154\142\x61\x63\x6b\x5f\157\156\x6c\x79", false)) { user_error("\x43\157\x6e\146\x69\147\x75\x72\x61\164\x69\157\x6e\40\x6f\x70\x74\x69\157\x6e\40\140\x73\x79\x73\164\145\155\56\154\x61\x6e\x67\x75\x61\147\145\x73\56\160\141\147\145\x73\137\146\x61\154\154\142\141\x63\153\x5f\157\x6e\154\171\140\x20\x69\163\40\144\x65\x70\x72\x65\x63\141\x74\145\x64\x20\x73\151\x6e\x63\x65\x20\107\162\x61\x76\40\x31\x2e\67\x2c\40\165\163\145\x20\x60\x73\171\163\164\145\155\x2e\x6c\141\156\x67\165\x61\147\145\163\56\x63\157\156\164\x65\156\x74\137\146\x61\154\x6c\142\x61\143\x6b\x60\x20\x69\x6e\x73\x74\x65\x61\x64", E_USER_DEPRECATED); if ($includeDefault) { $fallback_languages[''] = ''; } foreach ($this->languages as $code) { $fallback_languages[$code] = $code; if ($code === $active) { break; } } $fallback_languages = array_reverse($fallback_languages); } else { if (null === $fallback) { $fallback = array($default); } elseif (!is_array($fallback)) { $fallback = is_string($fallback) && $fallback !== '' ? explode("\54", $fallback) : array(); } array_unshift($fallback, $active); $fallback = array_unique($fallback); foreach ($fallback as $code) { $fallback_languages[$code] = $code; if ($includeDefault && $code === $default) { $fallback_languages[''] = ''; } } } $fallback_languages = array_values($fallback_languages); $this->fallback_languages[$key] = $fallback_languages; } return $this->fallback_languages[$key]; } public function validate($lang) { return in_array($lang, $this->languages, true); } public function translate($args, array $languages = null, $array_support = false, $html_out = false) { if (is_array($args)) { $lookup = array_shift($args); } else { $lookup = $args; $args = array(); } if (!$this->isDebug()) { if ($lookup && $this->enabled() && empty($languages)) { $languages = $this->getTranslatedLanguages(); } $languages = $languages ?: array("\x65\156"); foreach ((array) $languages as $lang) { $translation = $this->getTranslation($lang, $lookup, $array_support); if ($translation) { if (is_string($translation) && count($args) >= 1) { return vsprintf($translation, $args); } return $translation; } } } elseif ($array_support) { return array($lookup); } if ($html_out) { return "\x3c\x73\160\x61\x6e\x20\143\154\x61\163\x73\x3d\42\165\x6e\x74\x72\141\x6e\x73\x6c\x61\164\x65\x64\42\76" . $lookup . "\x3c\57\163\160\x61\x6e\x3e"; } return $lookup; } public function translateArray($key, $index, $languages = null, $html_out = false) { if ($this->isDebug()) { return $key . "\133" . $index . "\x5d"; } if ($key && empty($languages) && $this->enabled()) { $languages = $this->getTranslatedLanguages(); } $languages = $languages ?: array("\145\x6e"); foreach ((array) $languages as $lang) { $translation_array = (array) Grav::instance()["\154\141\156\x67\x75\141\147\145\x73"]->get($lang . "\x2e" . $key, null); if ($translation_array && array_key_exists($index, $translation_array)) { return $translation_array[$index]; } } if ($html_out) { return "\74\163\160\x61\x6e\x20\143\x6c\141\x73\163\x3d\x22\x75\156\x74\162\141\x6e\163\x6c\141\164\145\144\42\76" . $key . "\133" . $index . "\135\x3c\57\x73\160\141\156\76"; } return $key . "\133" . $index . "\x5d"; } public function getTranslation($lang, $key, $array_support = false) { if ($this->isDebug()) { return $key; } $translation = Grav::instance()["\154\141\156\x67\x75\141\x67\145\163"]->get($lang . "\x2e" . $key, null); if (!$array_support && is_array($translation)) { return (string) array_shift($translation); } return $translation; } public function getBrowserLanguages($accept_langs = array()) { user_error(__CLASS__ . "\x3a\x3a" . __FUNCTION__ . "\50\x29\x20\x69\163\40\x64\x65\160\x72\145\143\x61\x74\145\144\40\x73\151\156\143\x65\x20\107\162\141\166\40\61\x2e\x36\x2c\x20\156\157\40\154\157\156\147\x65\162\40\x75\x73\x65\144", E_USER_DEPRECATED); if (empty($this->http_accept_language)) { if (empty($accept_langs) && isset($_SERVER["\x48\124\x54\x50\x5f\x41\x43\103\x45\120\124\x5f\x4c\101\116\107\125\101\x47\x45"])) { $accept_langs = $_SERVER["\110\x54\124\x50\x5f\101\x43\x43\105\x50\x54\x5f\114\101\116\x47\125\x41\x47\x45"]; } else { return $accept_langs; } $langs = array(); foreach (explode("\54", $accept_langs) as $k => $pref) { if (false !== ($i = strpos($pref, "\73\x71\x3d"))) { $langs[substr($pref, 0, $i)] = array((double) substr($pref, $i + 3), -$k); } else { $langs[$pref] = array(1, -$k); } } arsort($langs); $this->http_accept_language = array_keys($langs); } return $this->http_accept_language; } public function getLanguageCode($code, $type = "\156\x61\x6d\x65") { return LanguageCodes::get($code, $type); } public function __debugInfo() { $vars = get_object_vars($this); unset($vars["\x67\162\141\166"], $vars["\x63\157\x6e\146\151\147"]); return $vars; } protected function getTranslatedLanguages() : array { if ($this->config->get("\163\171\163\164\145\x6d\56\154\x61\x6e\x67\x75\x61\x67\145\163\56\x74\162\x61\x6e\163\154\x61\164\151\x6f\156\x73\137\x66\141\154\x6c\142\x61\143\x6b", true)) { $languages = $this->getFallbackLanguages(); } else { $languages = array($this->getLanguage()); } $languages[] = "\145\156"; return array_values(array_unique($languages)); } }

Function Calls

None

Variables

None

Stats

MD5 7d0861f3e3eceae8ac6d1f76160df829
Eval Count 0
Decode Time 94 ms