Completed
Push — master ( 32ca2f...3d4ee7 )
by Andreas
16:33
created

subscriber::on_arguments()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 3
nop 1
dl 0
loc 10
ccs 7
cts 7
cp 1
crap 3
rs 10
c 0
b 0
f 0
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 Symfony\Component\HttpKernel\Event\FilterResponseEvent;
19
use midcom\routing\resolver;
20
use Symfony\Component\HttpFoundation\Request;
21
use midcom;
22
use midcom_connection;
23
use midcom_core_context;
24
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
25
26
/**
27
 * @package midcom.httpkernel
28
 */
29
class subscriber implements EventSubscriberInterface
30
{
31
    private $initialized = false;
32
33
    public static function getSubscribedEvents()
34
    {
35
        return [
36
            KernelEvents::REQUEST => ['on_request'],
37
            KernelEvents::CONTROLLER_ARGUMENTS => ['on_arguments'],
38
            KernelEvents::VIEW => ['on_view'],
39
            KernelEvents::RESPONSE => ['on_response'],
40
            KernelEvents::EXCEPTION => ['on_exception']
41
        ];
42
    }
43
44 1
    private function initialize(Request $request)
45
    {
46 1
        $midcom = midcom::get();
47 1
        $midcom->debug->log("Start of MidCOM run " . $request->server->get('REQUEST_URI', ''));
48 1
        $request->setSession($midcom->session);
49 1
        $midcom->componentloader->load_all_manifests();
50 1
        if ($response = $midcom->auth->check_for_login_session($request)) {
51
            return $response;
52
        }
53
54
        // This checks for the unittest case
55 1
        if (!$request->attributes->has('context')) {
56
            // Initialize Context Storage
57
            $context = midcom_core_context::enter(midcom_connection::get_url('uri'));
58
            $request->attributes->set('context', $context);
59
        }
60
        // Initialize the UI message stack from session
61 1
        $midcom->uimessages->initialize($request);
62
63 1
        $midcom->dispatcher->addListener(KernelEvents::REQUEST, [$midcom->cache->content, 'on_request'], 10);
64 1
        $midcom->dispatcher->addListener(KernelEvents::RESPONSE, [$midcom->cache->content, 'on_response'], -10);
65 1
    }
66
67
    /**
68
     * @param GetResponseEvent $event
69
     */
70 338
    public function on_request(GetResponseEvent $event)
71
    {
72 338
        $request = $event->getRequest();
73 338
        if (!$this->initialized) {
74 1
            $this->initialized = true;
75 1
            if ($response = $this->initialize($request)) {
76
                $event->setResponse($response);
77
                return;
78
            }
79
        }
80
81 338
        $resolver = new resolver($request);
82
83 338
        if ($resolver->process_midcom()) {
84
            return;
85
        }
86
87 338
        $resolver->process_component();
88 338
        $request->attributes->set('data', '__request_data__');
89 338
    }
90
91 338
    public function on_arguments(FilterControllerArgumentsEvent $event)
92
    {
93 338
        $arguments = $event->getArguments();
94 338
        foreach ($arguments as $i => $argument) {
95 327
            if ($argument === '__request_data__') {
96 233
                $context = $event->getRequest()->attributes->get('context');
97 327
                $arguments[$i] =& $context->get_custom_key('request_data');
98
            }
99
        }
100 338
        $event->setArguments($arguments);
101 338
    }
102
103 86
    public function on_view(GetResponseForControllerResultEvent $event)
104
    {
105 86
        $event->setResponse(new midcom_response_styled($event->getRequest()->attributes->get('context')));
106 86
    }
107
108 338
    public function on_response(FilterResponseEvent $event)
109
    {
110 338
        $controller = $event->getRequest()->attributes->get('_controller');
111 338
        if ($controller[0] instanceof midcom_baseclasses_components_handler) {
112 338
            $controller[0]->populate_breadcrumb_line();
113
        }
114 338
    }
115
116
    public function on_exception(GetResponseForExceptionEvent $event)
117
    {
118
        $handler = new \midcom_exception_handler();
119
        $event->setResponse($handler->render($event->getException()));
120
    }
121
}