Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
18 / 18
Translate\View\Helper\FlagNavigation
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
8
100.00% covered (success)
100.00%
18 / 18
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 render
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
8 / 8
 getUpdatedUrl
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
8 / 8
<?php
/**
 * Class FlagNavigation
 *
 * @package     Translate\View\Helper
 * @author      Nigel Hurnell
 * @version     v.1.0.0
 * @license     BSD
 * @copyright   Copyright (c) 2017, Nigel Hurnell
 */
namespace Translate\View\Helper;
use Zend\View\Helper\AbstractHelper;
use Translate\Service\LanguageManager;
use Zend\Router\Http\RouteMatch;
/**
 * This view helper class displays language navigation on all pages
 *
 * @package     Translate\View\Helper
 * @author      Nigel Hurnell
 * @version     v.1.0.0
 * @license     BSD
 * @copyright   Copyright (c) 2017, Nigel Hurnell
 */
class FlagNavigation extends AbstractHelper
{
    /**
     * Service that handles translation logic (model)
     * 
     * @var TranslationManager
     */
    protected $h;
    /**
     * The locations of the enabled language flag images
     * 
     * @var array
     */
    protected $flagDir;
    /**
     * Instantiate class and inject TranslationManager service
     * 
     * @param TranslationManager $languageManager
     */
    public function __construct(LanguageManager $languageManager)
    {
        $this->languageManager = $languageManager;
    }
    /**
     * Renders the flag based navigation.
     * 
     * @param view $view
     * @return string HTML code of the flag navigation.
     */
    public function render($view)
    {
        $links = '';
        $languages = $this->languageManager->getEnabledLanguages();
        foreach ($languages as $language) {
            $updatedUrl = $this->getUpdatedUrl($language['locale'], $view);
            if ($updatedUrl) {
                $title = ' title="' . $language['language'] . '" ';
                $links .= '<a href="' . $updatedUrl . '"><img  src="' . $language['src'] . '" ' . $title . ' /></a>';
            }
        }
        return $links;
    }
    /**
     * Get new URL with updated language locale 
     * 
     * @param string $locale
     * @param view $view
     * @return string the URL of the page rendered into the locale language requested
     */
    protected function getUpdatedUrl($locale, $view)
    {
        $updatedUrl = false;
        $routeMatch = $this->languageManager->getRouteMatch();
        if (isset($routeMatch)) {
            $params = $routeMatch->getParams();
            if ($locale !== $params['locale'] && array_key_exists('locale', $params)) {
                $params['locale'] = $locale;
                $updatedUrl = $view->url($routeMatch->getMatchedRouteName(), $params);
            }
        }
        return $updatedUrl;
    }
}