ActionFactory::destroyManialinkActions()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 7
cts 7
cp 1
rs 9.9
c 0
b 0
f 0
cc 3
nc 3
nop 1
crap 3
1
<?php
2
3
namespace eXpansion\Framework\Core\Plugins\Gui;
4
5
use eXpansion\Framework\Core\Model\Gui\Action;
6
use eXpansion\Framework\Core\Model\Gui\ManialinkInterface;
7
use eXpansion\Framework\GameManiaplanet\DataProviders\Listener\ListenerInterfaceMpLegacyManialink;
8
9
/**
10
 * Class ActionFactory Handles available Gui Actions.
11
 *
12
 * @package eXpansion\Framework\Core\Plugins\Gui
13
 * @author Oliver de Cramer
14
 */
15
class ActionFactory implements ListenerInterfaceMpLegacyManialink
16
{
17
    protected $class;
18
19
    /** @var  Action[] */
20
    protected $actions = [];
21
22
    /** @var Action[][] */
23
    protected $actionsByManialink = [];
24
25
    /** @var ManialinkInterface[] */
26
    protected $manialinkByAction = [];
27
28
    /**
29
     * ActionFactory constructor.
30
     * @param $class
31
     */
32 7
    public function __construct($class)
33
    {
34 7
        $this->class = $class;
35 7
    }
36
37
38
    /**
39
     * Create a Manialink action for a manialink.
40
     *
41
     * @param ManialinkInterface $manialink
42
     * @param                    $callable
43
     * @param array              $args
44
     * @param boolean            $permanent
45
     *
46
     * @return string action Id
47
     */
48 7
    public function createManialinkAction(ManialinkInterface $manialink, $callable, $args, $permanent = false)
49
    {
50 7
        $class = $this->class;
51
        /** @var Action $action */
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