156 lines
4.8 KiB
PHP
156 lines
4.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* The Legend of Z
|
|
*
|
|
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
|
* @copyright 2014 Heinrich-Heine-Universität Düsseldorf
|
|
* @license http://www.gnu.org/licenses/gpl.html
|
|
* @link https://bitbucket.org/coderkun/the-legend-of-z
|
|
*/
|
|
|
|
namespace hhu\z\agents\toplevel;
|
|
|
|
|
|
/**
|
|
* Agent to display a HTML-page.
|
|
*
|
|
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
|
*/
|
|
class HtmlAgent extends \hhu\z\agents\ToplevelAgent
|
|
{
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Construct a new HtmlAgent.
|
|
*
|
|
* @param \nre\core\Request $request Current request
|
|
* @param \nre\core\Response $response Current response
|
|
* @param \nre\core\Logger $log Logger instance
|
|
*/
|
|
protected function __construct(\nre\core\Request $request, \nre\core\Response $response, \nre\core\Logger $log=null)
|
|
{
|
|
parent::__construct($request, $response, $log);
|
|
|
|
|
|
$this->setLanguage($request);
|
|
}
|
|
|
|
|
|
/**
|
|
* Action: index.
|
|
*
|
|
* @param \nre\core\Request $request Current request
|
|
* @param \nre\core\Response $response Current response
|
|
*/
|
|
public function index(\nre\core\Request $request, \nre\core\Response $response)
|
|
{
|
|
// Add menu
|
|
$this->addSubAgent('Menu');
|
|
|
|
// Add Seminary sidebar
|
|
$this->addSubAgent('Seminarybar');
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Set requested language.
|
|
*
|
|
* @param \nre\core\Request $request Current request
|
|
*/
|
|
private function setLanguage(\nre\core\Request $request)
|
|
{
|
|
// Set domain
|
|
$domain = \nre\configs\AppConfig::$app['genericname'];
|
|
|
|
// Get language
|
|
$locale = $this->determineLanguage($request);
|
|
|
|
// Set Locale and Load translation
|
|
if(!is_null($locale))
|
|
{
|
|
putenv("LC_ALL=$locale");
|
|
setlocale(LC_ALL, $locale);
|
|
\Locale::setDefault($locale);
|
|
|
|
bindtextdomain($domain, ROOT.DS.\nre\configs\AppConfig::$dirs['locale']);
|
|
textdomain($domain);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Determine which language is either requested directly or by browser
|
|
* setting.
|
|
*
|
|
* @param \nre\core\Request $request Current request
|
|
* @return string Requested language or default one
|
|
*/
|
|
private function determineLanguage(\nre\core\Request $request)
|
|
{
|
|
// Get supported languages
|
|
$supportedLanguages = \nre\configs\AppConfig::$app['languages'];
|
|
if(empty($supportedLanguages)) {
|
|
return null;
|
|
}
|
|
|
|
// Get requested language
|
|
$language = $request->getGetParam('lang', 'language');
|
|
if(!is_null($language) && array_key_exists($language, $supportedLanguages)) {
|
|
return $supportedLanguages[$language];
|
|
}
|
|
|
|
// Negotiate language
|
|
return $this->negotiateLanguage($supportedLanguages, $request->getBrowserLanguages());
|
|
}
|
|
|
|
|
|
/**
|
|
* Negotiate which language the browser wants most out of the supported
|
|
* languages.
|
|
*
|
|
* @param array $supportedLanguages List of supported languages
|
|
* @param array $browserLanguages List of browser languages
|
|
* @return string Negotiated language or default one
|
|
*/
|
|
private function negotiateLanguage($supportedLanguages, $browserLanguages)
|
|
{
|
|
if(!is_null($browserLanguages))
|
|
{
|
|
// Create array with languages and their ratings
|
|
$parsedLanguages = array();
|
|
$languages = explode(',', $browserLanguages);
|
|
foreach($languages as &$language)
|
|
{
|
|
if(($pos = strpos($language, ';q=')) !== false) {
|
|
$parsedLanguages[substr($language, 1, min(2, $pos-1))] = floatval(substr($language, $pos+3));
|
|
}
|
|
else {
|
|
$parsedLanguages[$language] = 1.0;
|
|
}
|
|
}
|
|
|
|
// Sort languages by their ratings
|
|
arsort($parsedLanguages);
|
|
|
|
// Get highest supported language
|
|
foreach($parsedLanguages as $language => $rating) {
|
|
if(array_key_exists($language, $supportedLanguages)) {
|
|
return $supportedLanguages[$language];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Return default language
|
|
return $supportedLanguages[array_keys($supportedLanguages)[0]];
|
|
}
|
|
|
|
}
|
|
|
|
?>
|