Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
16.67% covered (danger)
16.67%
1 / 6
CRAP
63.64% covered (warning)
63.64%
21 / 33
AuthenticatedViewController
0.00% covered (danger)
0.00%
0 / 1
16.67% covered (danger)
16.67%
1 / 6
28.31
63.64% covered (warning)
63.64%
21 / 33
 __construct( \aae\ui\TemplateInterface $template, \aae\app\User $user, \aae\app\Session $session, \aae\ui\Localizer $localizer = null, $signInRedirectURL = null)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
6 / 6
 __get($propertyName)
0.00% covered (danger)
0.00%
0 / 1
12.19
20.00% covered (danger)
20.00%
1 / 5
 __set($propertyName, $value)
0.00% covered (danger)
0.00%
0 / 1
3.07
80.00% covered (warning)
80.00%
4 / 5
 __call($functionName, $args)
0.00% covered (danger)
0.00%
0 / 1
7.33
66.67% covered (warning)
66.67%
10 / 15
 getActionEndings()
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 getUrlControllerName($controllerName)
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
<?php
/**
 *
 */
namespace aae\ui {
    use \aae\std\std as std;
    /**
     * @author Axel Ancona Esselmann
     * @package aae\ui
     */
    class AuthenticatedViewController extends ViewController {
        protected $_user, $_session, $_signInRedirectURL;
        public function __construct(
            \aae\ui\TemplateInterface $template,
            \aae\app\User     $user,
            \aae\app\Session  $session,
            \aae\ui\Localizer $localizer = null,
            $signInRedirectURL = null)
        {
            parent::__construct($template, $localizer);
            $this->_user    = $user;
            $this->_session = $session;
            $this->_signInRedirectURL = $signInRedirectURL;
        }
        public function __get($propertyName) {
            switch ($propertyName) {
                case 'session':   return $this->_session;
                case 'user':      return $this->_user;
                case 'localizer': return $this->_localizer;
                default: throw new \Exception("Property $propertyName is not accessible.", 1030141209);
            }
        }
        public function __set($propertyName, $value) {
            switch ($propertyName) {
                case 'session':
                case 'user':
                    throw new \Exception("Property $propertyName has to be set during instantiation.", 1030141210);
                default: return $this->$propertyName = $value;
            }
        }
        public function __call($functionName, $args) {
            $authenticatedFunctionName = $functionName."AuthenticatedAction";
            if (method_exists($this, $authenticatedFunctionName)) {
                if (!$this->_user->isLoggedIn()) {
                    $unauthenticatedFunctionName = $functionName."Action";
                    if (!method_exists($this, $unauthenticatedFunctionName)) {
                        if (is_null($this->_signInRedirectURL)) throw new AuthenticationException("Trying to perform action that requires being logged in.", 1107141659);
                        $from = "/".$this->getUrlControllerName(get_class($this))."/".$functionName."/".implode("/", $args);
                        $from = urlencode($from);
                        header("HTTP/1.1 401 Unauthorized");
                        header ("Location: {$this->_signInRedirectURL}?redirectFrom=$from");
                    }
                    return parent::__call($functionName, $args);
                }
                if (count($args) > 0) return call_user_func_array(array($this, $authenticatedFunctionName), $args);
                else                  return call_user_func(      array($this, $authenticatedFunctionName));
            }
            return parent::__call($functionName, $args);
        }
        public function getActionEndings() {
            return array("Action", "AuthenticatedAction");
        }
        private function getUrlControllerName($controllerName) {
            return strtolower(strstr($controllerName, 'TemplateController', true));
        }
    }
}