Completed
Push — master ( 4d3539...c7b8f1 )
by Iurii
01:22
created

Mobile::setModuleAssets()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
3
/**
4
 * @package Mobile
5
 * @author Iurii Makukh <[email protected]>
6
 * @copyright Copyright (c) 2015, Iurii Makukh
7
 * @license https://www.gnu.org/licenses/gpl.html GNU/GPLv3
8
 */
9
10
namespace gplcart\modules\mobile;
11
12
use gplcart\core\Module;
13
14
/**
15
 * Main class for Mobile theme
16
 */
17
class Mobile extends Module
18
{
19
20
    /**
21
     * Implements hook "route.list"
22
     * @param array $routes
23
     */
24
    public function hookRouteList(array &$routes)
25
    {
26
        $routes['admin/module/settings/mobile'] = array(
27
            'access' => 'module_edit',
28
            'handlers' => array(
29
                'controller' => array('gplcart\\modules\\mobile\\controllers\\Settings', 'editSettings')
30
            )
31
        );
32
    }
33
34
    /**
35
     * Implements hook "template.data"
36
     * @param array $data
37
     * @param \gplcart\core\controllers\frontend\Controller $controller
38
     */
39
    public function hookTemplateData(array &$data, $controller)
40
    {
41
        $this->replaceJquery($data, $controller);
42
    }
43
44
    /**
45
     * Implements hook "theme"
46
     * @param \gplcart\core\Controller $controller
47
     */
48
    public function hookTheme($controller)
49
    {
50
        if ($controller->isCurrentTheme('mobile') && !$controller->isInternalRoute()) {
51
            $this->setModuleAssets($controller);
52
            $this->setModuleMetaTags($controller);
53
        }
54
    }
55
56
    /**
57
     * Sets module specific assets
58
     * @param \gplcart\core\Controller $controller
59
     */
60
    protected function setModuleAssets($controller)
61
    {
62
        $controller->addAssetLibrary('jquery_mobile');
63
        $controller->setJs($this->getAsset('mobile', 'common.js'));
64
        $controller->setCss($this->getAsset('mobile', 'common.css'));
65
    }
66
67
    /**
68
     * Sets meta tags
69
     * @param \gplcart\core\Controller $controller
70
     */
71
    protected function setModuleMetaTags($controller)
72
    {
73
        $controller->setMeta(array('charset' => 'utf-8'));
74
        $controller->setMeta(array('name' => 'viewport', 'content' => 'width=device-width, initial-scale=1'));
75
    }
76
77
    /**
78
     * Downgrade jQuery
79
     * Jquery Mobile 1.4.5 does not work correctly with Jquery 2.2.4
80
     * @link https://github.com/jquery/jquery/issues/2936
81
     * @param array $data
82
     * @param \gplcart\core\controllers\frontend\Controller $controller
83
     * @return bool
84
     */
85
    protected function replaceJquery(array &$data, $controller)
86
    {
87
        if (!$controller->isCurrentTheme('mobile') || empty($data['_js_top']) || $controller->isInternalRoute()) {
88
            return false;
89
        }
90
91
        $jquery = $this->getLibrary()->get('jquery');
92
93
        foreach ($data['_js_top'] as $key => $asset) {
94
95
            if (dirname($asset['file']) !== $jquery['basepath']) {
96
                continue;
97
            }
98
99
            $asset['file'] = $this->getAsset('mobile', 'jquery.js');
100
            $asset['key'] = $asset['asset'] = gplcart_path_normalize(gplcart_path_relative($asset['file']));
101
            $data['_js_top'][$asset['key']] = $asset;
102
103
            unset($data['_js_top'][$key]);
104
            return true;
105
        }
106
107
        return false;
108
    }
109
110
}
111