Passed
Push — develop ( 8daac1...a2b8ae )
by Mykola
04:44
created

Front::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
/* 	Divine CMS - Open source CMS for widespread use.
3
    Copyright (c) 2019 Mykola Burakov ([email protected])
4
5
    See SOURCE.txt for other and additional information.
6
7
    This file is part of Divine CMS.
8
9
    This program is free software: you can redistribute it and/or modify
10
    it under the terms of the GNU General Public License as published by
11
    the Free Software Foundation, either version 3 of the License, or
12
    (at your option) any later version.
13
14
    This program is distributed in the hope that it will be useful,
15
    but WITHOUT ANY WARRANTY; without even the implied warranty of
16
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
    GNU General Public License for more details.
18
19
    You should have received a copy of the GNU General Public License
20
    along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22
namespace Divine\Engine\Core;
23
24
final class Front
25
{
26
    private $registry;
27
    private $pre_action = array();
28
    private $error;
29
30
    public function __construct($registry)
0 ignored issues
show
Coding Style introduced by
Expected 2 blank lines before function; 1 found
Loading history...
31
    {
32
        $this->registry = $registry;
33
    }
34
35
    public function addPreAction(Action $pre_action)
36
    {
37
        $this->pre_action[] = $pre_action;
38
    }
39
40
    public function dispatch(Action $action, Action $error)
41
    {
42
        $this->error = $error;
43
44
        foreach ($this->pre_action as $pre_action) {
45
            $result = $this->execute($pre_action);
46
47
            if ($result instanceof Action) {
48
                $action = $result;
49
50
                break;
51
            }
52
        }
53
54
        while ($action instanceof Action) {
55
            $action = $this->execute($action);
56
        }
57
    }
58
59
    private function execute(Action $action)
60
    {
61
        $result = $action->execute($this->registry);
62
63
        if ($result instanceof Action) {
64
            return $result;
65
        }
66
67
        if ($result instanceof \Exception) {
68
            $action = $this->error;
69
70
            $this->error = null;
71
72
            return $action;
73
        }
74
    }
75
}
76