Passed
Push — master ( bee4ae...fc5262 )
by Andreas
16:28
created

subscriber::on_view()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 5
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 8
ccs 6
cts 6
cp 1
crap 2
rs 10
1
<?php
2
/**
3
 * @package midcom.routing
4
 * @author CONTENT CONTROL http://www.contentcontrol-berlin.de/
5
 * @copyright CONTENT CONTROL http://www.contentcontrol-berlin.de/
6
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License
7
 */
8
9
namespace midcom\httpkernel;
10
11
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
12
use midcom_response_styled;
13
use midcom_baseclasses_components_handler;
14
use Symfony\Component\HttpKernel\KernelEvents;
15
use midcom\routing\resolver;
16
use Symfony\Component\HttpFoundation\Request;
17
use midcom;
18
use midcom_connection;
19
use midcom_core_context;
20
use Symfony\Component\HttpKernel\Event\RequestEvent;
21
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
22
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
23
use Symfony\Component\HttpKernel\Event\ViewEvent;
24
25
/**
26
 * @package midcom.httpkernel
27
 */
28
class subscriber implements EventSubscriberInterface
29
{
30
    private $initialized = false;
31
32
    public static function getSubscribedEvents()
33
    {
34
        return [
35
            KernelEvents::REQUEST => ['on_request'],
36
            KernelEvents::CONTROLLER_ARGUMENTS => ['on_arguments'],
37
            KernelEvents::VIEW => ['on_view'],
38
            KernelEvents::EXCEPTION => ['on_exception']
39
        ];
40
    }
41
42 1
    private function initialize(Request $request)
43
    {
44 1
        $midcom = midcom::get();
45 1
        $midcom->debug->log("Start of MidCOM run " . $request->server->get('REQUEST_URI', ''));
46 1
        $request->setSession($midcom->session);
47 1
        if ($response = $midcom->auth->check_for_login_session($request)) {
48
            return $response;
49
        }
50
51
        // This checks for the unittest case
52 1
        if (!$request->attributes->has('context')) {
53
            // Initialize Context Storage
54
            $context = midcom_core_context::enter(midcom_connection::get_url('uri'));
55
            $request->attributes->set('context', $context);
56
        }
57
        // Initialize the UI message stack from session
58 1
        $midcom->uimessages->initialize($request);
59
60 1
        $midcom->dispatcher->addListener(KernelEvents::REQUEST, [$midcom->cache->content, 'on_request'], 10);
61 1
        $midcom->dispatcher->addListener(KernelEvents::RESPONSE, [$midcom->cache->content, 'on_response'], -10);
62 1
    }
63
64
    /**
65
     * @param RequestEvent $event
66
     */
67 338
    public function on_request(RequestEvent $event)
68
    {
69 338
        $request = $event->getRequest();
70 338
        if (!$this->initialized) {
71 1
            $this->initialized = true;
72 1
            if ($response = $this->initialize($request)) {
73
                $event->setResponse($response);
74
                return;
75
            }
76
        }
77
78 338
        $resolver = new resolver($request);
79
80 338
        if ($resolver->process_midcom()) {
81
            return;
82
        }
83
84 338
        $resolver->process_component();
85 338
        $request->attributes->set('data', '__request_data__');
86 338
    }
87
88 338
    public function on_arguments(ControllerArgumentsEvent $event)
89
    {
90 338
        $arguments = $event->getArguments();
91 338
        foreach ($arguments as $i => $argument) {
92 325
            if ($argument === '__request_data__') {
93 232
                $context = $event->getRequest()->attributes->get('context');
94 232
                $arguments[$i] =& $context->get_custom_key('request_data');
95
            }
96
        }
97 338
        $event->setArguments($arguments);
98 338
    }
99
100 75
    public function on_view(ViewEvent $event)
101
    {
102 75
        $attributes = $event->getRequest()->attributes;
103 75
        $controller = $attributes->get('_controller');
104 75
        if ($controller[0] instanceof midcom_baseclasses_components_handler) {
105 75
            $controller[0]->populate_breadcrumb_line();
106
        }
107 75
        $event->setResponse(new midcom_response_styled($attributes->get('context')));
108 75
    }
109
110
    public function on_exception(ExceptionEvent $event)
111
    {
112
        $handler = new \midcom_exception_handler($event->getThrowable());
113
        $event->setResponse($handler->render());
114
    }
115
}