Completed
Pull Request — master (#199)
by De Cramer
03:17
created

ActionFactory::destroyNotPermanentActions()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.2
c 0
b 0
f 0
ccs 0
cts 6
cp 0
cc 4
eloc 5
nc 4
nop 1
crap 20
1
<?php
2
3
namespace eXpansion\Framework\Core\Plugins\Gui;
4
5
use Doctrine\Bundle\DoctrineBundle\ManagerConfigurator;
6
use eXpansion\Framework\GameManiaplanet\DataProviders\Listener\ListenerInterfaceMpLegacyManialink;
7
use eXpansion\Framework\Core\Model\Gui\Action;
8
use eXpansion\Framework\Core\Model\Gui\ManialinkInterface;
9
10
/**
11
 * Class ActionFactory Handles available Gui Actions.
12
 *
13
 * @package eXpansion\Framework\Core\Plugins\Gui
14
 * @author Oliver de Cramer
15
 */
16
class ActionFactory implements ListenerInterfaceMpLegacyManialink
17
{
18
    protected $class;
19
20
    /** @var  Action[] */
21
    protected $actions = [];
22
23
    /** @var Action[][] */
24
    protected $actionsByManialink = [];
25
26
    /** @var ManialinkInterface[] */
27
    protected $manialinkByAction = [];
28
29
    /**
30
     * ActionFactory constructor.
31
     * @param $class
32
     */
33 7
    public function __construct($class)
34
    {
35 7
        $this->class = $class;
36 7
    }
37
38
39
    /**
40
     * Create a Manialink action for a manialink.
41
     *
42
     * @param ManialinkInterface $manialink
43
     * @param $callable
44
     * @param array $args
45
     * @param boolean $permanent
46
     *
47
     * @return string action Id
48
     */
49 7
    public function createManialinkAction(ManialinkInterface $manialink, $callable, $args, $permanent = false)
50
    {
51 7
        $class = $this->class;
52 7
        $action = new $class($callable, $args, $permanent);
53 7
        $this->actions[$action->getId()] = $action;
54 7
        $this->actionsByManialink[$manialink->getId()][$action->getId()] = $action;
55 7
        $this->manialinkByAction[$action->getId()] = $manialink;
56
57 7
        return $action->getId();
58
    }
59
60
    /**
61
     * Destroy all actions for a manialink.
62
     *
63
     * @param ManialinkInterface $manialink
64
     */
65 1
    public function destroyManialinkActions(ManialinkInterface $manialink)
66
    {
67 1
        if (isset($this->actionsByManialink[$manialink->getId()])) {
68 1
            foreach ($this->actionsByManialink[$manialink->getId()] as $actionId => $action) {
69 1
                unset($this->actions[$actionId]);
70 1
                unset($this->manialinkByAction[$actionId]);
71
            }
72
73 1
            unset($this->actionsByManialink[$manialink->getId()]);
74
        }
75 1
    }
76
77
    /**
78
     * Destroy actions that are not permanent actions.
79
     *
80
     * @param ManialinkInterface $manialink
81
     */
82
    public function destroyNotPermanentActions(ManialinkInterface $manialink)
83
    {
84
        if (isset($this->actionsByManialink[$manialink->getId()])) {
85
            foreach ($this->actionsByManialink[$manialink->getId()] as $actionId => $action) {
86
                if (!$action->isPermanent()) {
87
                    $this->destroyAction($actionId);
88
                }
89
            }
90
        }
91
    }
92
93
94
    /**
95
     * Destroy an individual action.
96
     *
97
     * @param $actionId
98
     */
99 3
    public function destroyAction($actionId)
100
    {
101 3
        if (isset($this->manialinkByAction[$actionId])) {
102 3
            unset($this->actionsByManialink[$this->manialinkByAction[$actionId]->getId()][$actionId]);
103 3
            unset($this->actions[$actionId]);
104
        }
105 3
    }
106
107
    /**
108
     * When a player uses an action dispatch information.
109
     *
110
     * @param $login
111
     * @param $actionId
112
     * @param array $entryValues
113
     *
114
     */
115 2
    public function onPlayerManialinkPageAnswer($login, $actionId, array $entryValues)
116
    {
117 2
        if (isset($this->actions[$actionId])) {
118 1
            $this->actions[$actionId]->execute($this->manialinkByAction[$actionId], $login, $entryValues);
119
        }
120 2
    }
121
}
122