Test Failed
Pull Request — master (#67)
by Abdul Malik
11:31
created

Module::onBootstrap()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 2

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 17
ccs 12
cts 12
cp 1
rs 9.4285
cc 2
eloc 11
nc 2
nop 1
crap 2
1
<?php
2
3
/**
4
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
8
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
9
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
10
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
12
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
13
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
14
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15
 *
16
 * This software consists of voluntary contributions made by many individuals
17
 * and is licensed under the MIT license.
18
 */
19
20
namespace SanSessionToolbar;
21
22
use Zend\EventManager\EventInterface;
23
use Zend\ModuleManager\Feature\ConfigProviderInterface;
24
use Zend\ModuleManager\Feature\DependencyIndicatorInterface;
25
use Zend\Mvc\Controller\AbstractActionController;
26
use Zend\Mvc\MvcEvent;
27
use Zend\Session\Container;
28
use Zend\Stdlib\SplQueue;
29
30
/**
31
 * @author Abdul Malik Ikhsan <[email protected]>
32
 */
33
class Module implements ConfigProviderInterface, DependencyIndicatorInterface
34
{
35
    /**
36
     * Bootstrap Handle FlashMessenger session show.
37
     *
38
     * @param MvcEvent $e
39
     */
40 15
    public function onBootstrap(MvcEvent $e)
41
    {
42 15
        $manager = Container::getDefaultManager();
43 15
        if (!$manager->sessionExists()) {
44 2
            return;
45
        }
46
47 13
        $app = $e->getApplication();
48 13
        $sharedEvm = $app->getEventManager()->getSharedManager();
49
50 13
        $sharedEvm->attach(
51 13
            AbstractActionController::class,
52 13
            'dispatch',
53 13
            [$this, 'flashMessengerHandler'],
54
            2
55 13
        );
56 13
    }
57
58
    /**
59
     * Used to duplicate flashMessenger data as it shown and gone.
60
     *
61
     * @param Container $container
62
     */
63 13
    private function duplicateFlashMessengerSessionData(Container $container)
64
    {
65 13
        $flashToolbarContainer = new Container('SanSessionToolbarFlashMessenger');
66 13
        foreach ($container->getArrayCopy() as $key => $row) {
67 1
            foreach ($row->toArray() as $keyArray => $rowArray) {
68 1
                if ($keyArray === 0) {
69 1
                    $flashToolbarContainer->$key = new SplQueue();
70 1
                }
71 1
                $flashToolbarContainer->$key->push($rowArray);
72 1
            }
73 13
        }
74 13
    }
75
76
    /**
77
     * Handle FlashMessenger data to be able to be seen in both "app" and toolbar parts.
78
     *
79
     * @param EventInterface $e
80
     */
81 13
    public function flashMessengerHandler(EventInterface $e)
82
    {
83 13
        $controller = $e->getTarget();
84 13
        if (!$controller->getPluginManager()->has('flashMessenger')) {
85
            return;
86
        }
87
88 13
        $flash = $controller->plugin('flashMessenger');
89 13
        $container = $flash->getContainer();
90 13
        $this->duplicateFlashMessengerSessionData($container);
91 13
    }
92
93
    /**
94
     * {@inheritdoc}
95
     */
96 13
    public function getConfig()
97
    {
98 13
        return include __DIR__.'/../config/module.config.php';
99
    }
100
101
    /**
102
     * {@inheritdoc}
103
     */
104 13
    public function getModuleDependencies()
105
    {
106 13
        return ['ZendDeveloperTools'];
107
    }
108
}
109