Completed
Push — master ( 188bc3...1f1d6f )
by De Cramer
9s
created

ActionFactory::createManialinkAction()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 9
c 0
b 0
f 0
rs 9.6666
ccs 6
cts 6
cp 1
cc 1
eloc 6
nc 1
nop 3
crap 1
1
<?php
2
3
namespace eXpansion\Core\Plugins\Gui;
4
5
use eXpansion\Core\DataProviders\Listener\ManialinkPageAnswerDataListenerInterface;
6
use eXpansion\Core\Model\Gui\Action;
7
use eXpansion\Core\Model\Gui\Manialink;
8
use eXpansion\Core\Model\Gui\ManialinkInerface;
9
10
/**
11
 * Class ActionFactory Handles available Gui Actions.
12
 *
13
 * @package eXpansion\Core\Plugins\Gui
14
 * @author Oliver de Cramer
15
 */
16
class ActionFactory implements ManialinkPageAnswerDataListenerInterface
17
{
18
    protected $class;
19
20
    /** @var  Action[] */
21
    protected $actions;
22
23
    /** @var Action[][] */
24
    protected $actionsByManialink;
25
26
    /**
27
     * ActionFactory constructor.
28
     * @param $class
29
     */
30 2
    public function __construct($class)
31
    {
32 2
        $this->class = $class;
33 2
    }
34
35
36
    /**
37
     * Create a Manialink action for a manialink.
38
     *
39
     * @param Manialink $manialink
40
     * @param $callable
41
     * @param array $args
42
     *
43
     * @return string action Id
44
     */
45 2
    public function createManialinkAction(ManialinkInerface $manialink, $callable, $args)
46
    {
47 2
        $class = $this->class;
48 2
        $action = new $class($callable, $args);
49 2
        $this->actions[$action->getId()] = $action;
50 2
        $this->actionsByManialink[$manialink->getId()][$action->getId()] = $action;
51
52 2
        return $action->getId();
53
    }
54
55
    /**
56
     * Destroy all actions for a manialink.
57
     *
58
     * @param Manialink $manialink
59
     */
60 1
    public function destroyManialinkActions(ManialinkInerface $manialink)
61
    {
62 1
        if (isset($this->actionsByManialink[$manialink->getId()])) {
63 1
            foreach ($this->actionsByManialink[$manialink->getId()] as $actionId => $action) {
64 1
                unset($this->actions[$actionId]);
65
            }
66
67 1
            unset($this->actionsByManialink[$manialink->getId()]);
68
        }
69 1
    }
70
71
    /**
72
     * When a player uses an action dispatch information.
73
     *
74
     * @param $login
75
     * @param $actionId
76
     * @param array $entryValues
77
     *
78
     */
79 2
    public function onPlayerManialinkPageAnswer($login, $actionId, array $entryValues)
80
    {
81 2
        if(isset($this->actions[$actionId]))
82
        {
83 1
            $this->actions[$actionId]->execute($login, $entryValues);
84
        }
85
    }
86
}