Completed
Push — master ( ab8c9b...ba39fb )
by Andreas
18:26
created

subscriber::on_response()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 4.944

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 4
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 9
ccs 2
cts 5
cp 0.4
crap 4.944
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 Symfony\Component\HttpKernel\Event\GetResponseEvent;
16
use Symfony\Component\HttpKernel\Event\FilterControllerArgumentsEvent;
17
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
18
use midcom\routing\resolver;
19
use Symfony\Component\HttpFoundation\Request;
20
use midcom;
21
use midcom_connection;
22
use midcom_core_context;
23
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
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
        $midcom->componentloader->load_all_manifests();
48 1
        if ($response = $midcom->auth->check_for_login_session($request)) {
49
            return $response;
50
        }
51
52
        // This checks for the unittest case
53 1
        if (!$request->attributes->has('context')) {
54
            // Initialize Context Storage
55
            $context = midcom_core_context::enter(midcom_connection::get_url('uri'));
56
            $request->attributes->set('context', $context);
57
        }
58
        // Initialize the UI message stack from session
59 1
        $midcom->uimessages->initialize($request);
60
61 1
        $midcom->dispatcher->addListener(KernelEvents::REQUEST, [$midcom->cache->content, 'on_request'], 10);
62 1
        $midcom->dispatcher->addListener(KernelEvents::RESPONSE, [$midcom->cache->content, 'on_response'], -10);
63 1
    }
64
65
    /**
66
     * @param GetResponseEvent $event
67
     */
68 338
    public function on_request(GetResponseEvent $event)
69
    {
70 338
        $request = $event->getRequest();
71 338
        if (!$this->initialized) {
72 1
            $this->initialized = true;
73 1
            if ($response = $this->initialize($request)) {
74
                $event->setResponse($response);
75
                return;
76
            }
77
        }
78
79 338
        $resolver = new resolver($request);
80
81 338
        if ($resolver->process_midcom()) {
82
            return;
83
        }
84
85 338
        $resolver->process_component();
86 338
        $request->attributes->set('data', '__request_data__');
87 338
    }
88
89 338
    public function on_arguments(FilterControllerArgumentsEvent $event)
90
    {
91 338
        $arguments = $event->getArguments();
92 338
        foreach ($arguments as $i => $argument) {
93 325
            if ($argument === '__request_data__') {
94 232
                $context = $event->getRequest()->attributes->get('context');
95 232
                $arguments[$i] =& $context->get_custom_key('request_data');
96
            }
97
        }
98 338
        $event->setArguments($arguments);
99 338
    }
100
101 75
    public function on_view(GetResponseForControllerResultEvent $event)
102
    {
103 75
        $attributes = $event->getRequest()->attributes;
104 75
        $controller = $attributes->get('_controller');
105 75
        if ($controller[0] instanceof midcom_baseclasses_components_handler) {
106 75
            $controller[0]->populate_breadcrumb_line();
107
        }
108 75
        $event->setResponse(new midcom_response_styled($attributes->get('context')));
109 75
    }
110
111
    public function on_exception(GetResponseForExceptionEvent $event)
112
    {
113
        $handler = new \midcom_exception_handler();
114
        $event->setResponse($handler->render($event->getException()));
115
    }
116
}