Xbanners::adminAutoload()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
(defined('BASEPATH')) OR exit('No direct script access allowed');
4
5
use CMSFactory\assetManager;
6
use CMSFactory\Events;
7
use template_manager\classes\Template;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Template.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
8
use xbanners\models\BannersQuery;
9
use xbanners\src\Installers\BannersModuleManager;
10
use xbanners\src\Installers\TemplatePlacesInstaller;
11
use xbanners\src\Statistic\ClickStatistic;
12
13
/**
14
 * -----------------------------------------------------------------------------
15
 *                      USAGE(Interface):
16
 * -----------------------------------------------------------------------------
17
 *  1. Helper:    { echo getBanner('main_top') }               (front-end only!)
18
 *      get rendered tpl of Banner translated into current locale
19
 *          - string|null   getBanner(string $place, 'view'); default
20
 *      get translated into current Banner locale with all relations inside:
21
 *          - object|null   getBanner(string $place, 'object');
22
 *          - array|null    getBanner(string $place, 'array');
23
 * -----------------------------------------------------------------------------
24
 *  2. Queries:
25
 *      get Banner with all relations inside translated into passed lang or defaultLocale as defautl:
26
 *          - Banner BannersQuery::create()->setComment(__METHOD__)->getTranslatedByPlace(string $place, string $lang = null)
27
 * -----------------------------------------------------------------------------
28
 *  3. Banner object Methods:
29
 *      get array from concrete object with only initialized relations:
30
 *          - Banner $banner->asArray()
31
 *      get rendered tpl of concrete Banner object
32
 *          - Banner $banner->show()
33
 * -----------------------------------------------------------------------------
34
 *  4. Controller Methods:
35
 *      same functionality as p.1
36
 *          - Banner CI::$APP->load->module('xbanners')->getBanner(string $place)
37
 *          - string CI::$APP->load->module('xbanners')->getBanner(string $place)->show()
38
 *          - array  CI::$APP->load->module('xbanners')->gerBanner(string $place)->asArray()
39
 * -----------------------------------------------------------------------------
40
 */
41
class Xbanners extends MY_Controller
42
{
43
44
    protected $moduleName = 'xbanners';
45
46
    public function __construct() {
47
48
        parent::__construct();
49
        $lang = new MY_Lang();
50
        $lang->load($this->moduleName);
51
    }
52
53
    /**
54
     * Uninstall Module
55
     */
56
    public function _deinstall() {
57
58
        try {
59
            (new BannersModuleManager())->deinstall();
60
        } catch (Exception $exc) {
61
            if ('development' === ENVIRONMENT) {
62
                echo $exc->getMessage();
63
            }
64
        }
65
    }
66
67
    /**
68
     * Install Module
69
     */
70
    public function _install() {
71
72
        $man = new BannersModuleManager();
73
        try {
74
            $man->install();
75
            $man->installTemplatePlaces();
76
        } catch (Exception $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
77
78
        }
79
    }
80
81
    /**
82
     * Admin Autoload Method
83
     *
84
     * Register Event Listener
85
     *      self::postTemplateInstallListener()
86
     */
87
    public static function adminAutoload() {
88
89
        Events::create()
90
            ->on('postTemplateInstall')
91
            ->setListener('postTemplateInstallListener');
92
    }
93
94
    /**
95
     * Front End Autoload
96
     */
97
    public function autoload() {
98
99
        $this->load->helper($this->moduleName);
100
    }
101
102
    /**
103
     * @uses xbanners_helper.php getBanner()
104
     * @param string $place
105
     * @return BannersQuery
0 ignored issues
show
Documentation introduced by
Should the return type not be xbanners\models\Banners?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
106
     */
107
    public function getBanner($place) {
108
109
        $locale = MY_Controller::getCurrentLocale();
110
        $pageId = \CI::$APP->core->core_data['id'];
111
        return BannersQuery::create()
112
            ->getTranslatedByPlace($place, $locale, $pageId);
113
    }
114
115
    /**
116
     * Go to banner url and run click statistic
117
     * @param integer $imageId - banner image Id
118
     */
119
    public function go($imageId) {
120
121
        if ($imageId) {
122
            $click = new ClickStatistic($imageId);
123
            $click->run();
124
        } else {
125
            $this->core->error_404();
126
        }
127
    }
128
129
    public function index() {
130
131
        $this->core->error_404();
132
    }
133
134
    /**
135
     * Event listener
136
     *
137
     * Listen TemplateManager::setTemplate() "postTemplateInstall" event
138
     * @param Template $template
139
     * @uses BannersInstaller
140
     */
141
    public static function postTemplateInstallListener(Template $template) {
142
143
        try {
144
            $installer = new TemplatePlacesInstaller($template->name);
145
            $installer->install();
146
        } catch (Exception $exc) {
147
            if ('development' === ENVIRONMENT) {
148
                showMessage($exc->getMessage(), lang('Error', 'xbanners'), 'r');
149
            }
150
        }
151
    }
152
153
    /**
154
     * @param array $data
155
     * @return string
156
     */
157
    public function show($data) {
158
159
        return assetManager::create()
160
            ->setData($data)
161
            ->registerScript('slick.min')
162
            ->fetchTemplate('banner');
163
    }
164
165
}