Passed
Pull Request — master (#4)
by Raúl
02:59
created

ht_pagantis::isPromoted()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 7
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 16
rs 10
1
<?php
2
/*
3
  $Id$
4
5
  osCommerce, Open Source E-Commerce Solutions
6
  http://www.oscommerce.com
7
8
  Copyright (c) 2010 osCommerce
9
10
  Released under the GNU General Public License
11
*/
12
13
define('TABLE_PAGANTIS_CONFIG', 'pagantis_config');
14
define('MODULE_HEADER_TAGS_PAGANTIS_SDK', 'https://cdn.pagantis.com/js/pg-v2/sdk.js');
15
16
class ht_pagantis {
17
    var $code = 'ht_pagantis';
18
    var $group = 'header_tags';
19
    var $title;
20
    var $description;
21
    var $enabled = false;
22
23
    /**
24
     * ht_pagantis constructor.
25
     */
26
    function ht_pagantis() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
27
        $this->title = MODULE_HEADER_TAGS_PAGANTIS_TITLE;
28
        $this->description = MODULE_HEADER_TAGS_PAGANTIS_DESCRIPTION;
29
        $this->sort_order = 0;
0 ignored issues
show
Bug Best Practice introduced by
The property sort_order does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
30
31
        if (defined('MODULE_HEADER_TAGS_PAGANTIS_STATUS')
32
            && defined('MODULE_PAYMENT_PAGANTIS_STATUS')
33
            && defined('MODULE_PAYMENT_PAGANTIS_SIMULATOR')
34
        ) {
35
            $this->enabled = ((MODULE_HEADER_TAGS_PAGANTIS_STATUS == 'True') &&
0 ignored issues
show
introduced by
The condition MODULE_HEADER_TAGS_PAGANTIS_STATUS == 'True' is always false.
Loading history...
36
                              (MODULE_PAYMENT_PAGANTIS_STATUS == 'True') &&
0 ignored issues
show
Bug introduced by
The constant MODULE_PAYMENT_PAGANTIS_STATUS was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
37
                              (MODULE_PAYMENT_PAGANTIS_SIMULATOR == 'True'));
0 ignored issues
show
Bug introduced by
The constant MODULE_PAYMENT_PAGANTIS_SIMULATOR was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
38
        }
39
40
        $this->extraConfig = $this->getExtraConfig();
0 ignored issues
show
Bug Best Practice introduced by
The property extraConfig does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
41
        $this->pk = $this->getConfig('MODULE_PAYMENT_PAGANTIS_PK');
0 ignored issues
show
Bug Best Practice introduced by
The property pk does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
42
        $this->sdkFile = MODULE_HEADER_TAGS_PAGANTIS_SDK;
0 ignored issues
show
Bug Best Practice introduced by
The property sdkFile does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
43
        $this->simulatorEnabled = $this->getConfig('MODULE_HEADER_TAGS_PAGANTIS_STATUS');
0 ignored issues
show
Bug Best Practice introduced by
The property simulatorEnabled does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
44
    }
45
46
    /**
47
     * @return array
48
     */
49
    private function getExtraConfig()
50
    {
51
        $checkTable = tep_db_query("SHOW TABLES LIKE '".TABLE_PAGANTIS_CONFIG."'");
0 ignored issues
show
Bug introduced by
The function tep_db_query was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

51
        $checkTable = /** @scrutinizer ignore-call */ tep_db_query("SHOW TABLES LIKE '".TABLE_PAGANTIS_CONFIG."'");
Loading history...
52
        $response = array();
53
        if (tep_db_num_rows($checkTable) > 0) {
0 ignored issues
show
Bug introduced by
The function tep_db_num_rows was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

53
        if (/** @scrutinizer ignore-call */ tep_db_num_rows($checkTable) > 0) {
Loading history...
54
            $query       = "select * from ".TABLE_PAGANTIS_CONFIG;
55
            $result      = tep_db_query($query);
56
            $response    = array();
57
            while ($resultArray = tep_db_fetch_array($result)) {
0 ignored issues
show
Bug introduced by
The function tep_db_fetch_array was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

57
            while ($resultArray = /** @scrutinizer ignore-call */ tep_db_fetch_array($result)) {
Loading history...
58
                $response[$resultArray['config']] = $resultArray['value'];
59
            }
60
        }
61
        return $response;
62
    }
63
64
    /**
65
     * @param string $config
66
     * @return array
67
     */
68
    private function getConfig($config = '')
69
    {
70
            $query       = "select * from ".TABLE_CONFIGURATION . " where configuration_key ='" . $config . "'";
0 ignored issues
show
Bug introduced by
The constant TABLE_CONFIGURATION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
71
            $result      = tep_db_query($query);
0 ignored issues
show
Bug introduced by
The function tep_db_query was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

71
            $result      = /** @scrutinizer ignore-call */ tep_db_query($query);
Loading history...
72
            $resultArray = tep_db_fetch_array($result);
0 ignored issues
show
Bug introduced by
The function tep_db_fetch_array was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

72
            $resultArray = /** @scrutinizer ignore-call */ tep_db_fetch_array($result);
Loading history...
73
            return $resultArray['configuration_value'];
74
    }
75
76
    /**
77
     * Execute function
78
     */
79
    function execute()
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
80
    {
81
        global $languages_id;
82
        $productId = $GLOBALS["HTTP_GET_VARS"]["products_id"];
83
        $checkoutPage = strpos($_SERVER[REQUEST_URI], "checkout_payment.php") > 0;
0 ignored issues
show
Bug introduced by
The constant REQUEST_URI was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
84
85
        //Show promoted html
86
        if (isset($productId) && $this->isPromoted($productId)) {
87
            echo "<div id='promotedText' style='display:none'><br/>".$this->extraConfig['PAGANTIS_PROMOTED_PRODUCT_CODE']."</div>";
88
            echo '<script>'. PHP_EOL;
89
            echo '        function loadPromoted()'. PHP_EOL;
90
            echo '        {'. PHP_EOL;
91
            echo 'var positionSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_POSITION_SELECTOR']. '\';'. PHP_EOL;
92
            echo 'if (positionSelector === \'default\') {'. PHP_EOL;
93
            echo 'positionSelector = \'.buttonSet\''. PHP_EOL;
94
            echo '}'. PHP_EOL;
95
            echo 'var docFather = document.querySelector(positionSelector);'.PHP_EOL;
96
            echo 'if (typeof docFather != \'undefined\') {'. PHP_EOL;
97
            echo 'var promotedNode = document.getElementById("promotedText");'.PHP_EOL;
98
            echo 'docFather.appendChild(promotedNode);'.PHP_EOL;
99
            echo 'promotedNode.style.display=""' . PHP_EOL;
100
            echo '               clearInterval(window.OSPromotedId);'. PHP_EOL;
101
            echo '               return true;'. PHP_EOL;
102
            echo '       }'. PHP_EOL;
103
            echo '               return false;'. PHP_EOL;
104
            echo '       }'. PHP_EOL;
105
            echo '       window.OSPromotedId = setInterval(function () {'. PHP_EOL;
106
            echo '          loadPromoted();'. PHP_EOL;
107
            echo '       }, 2000);'. PHP_EOL;
108
            echo '</script>'. PHP_EOL;
109
        }
110
111
        if (isset($productId) || $checkoutPage) {
112
            $simulatorCode = 'pgSDK';
113
            if ($languages_id == '2' || $languages_id == null) {
114
                $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_CSS_POSITION'] = 'pmtSDK.simulator.positions.INNER';
0 ignored issues
show
Bug Best Practice introduced by
The property extraConfig does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
115
                $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_TYPE'] = 'pmtSDK.simulator.types.SIMPLE';
116
                $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_SKIN'] = 'pmtSDK.simulator.skins.BLUE';
117
                $simulatorCode = 'pmtSDK';
118
            }
119
            echo "<script src='".$this->sdkFile."'></script>". PHP_EOL;
120
            echo '<script>'. PHP_EOL;
121
            echo '        function loadSimulator()'. PHP_EOL;
122
            echo '        {'. PHP_EOL;
123
            echo '           if (typeof '.$simulatorCode.' != \'undefined\') {'. PHP_EOL;
124
            echo '               var positionSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_POSITION_SELECTOR']. '\';'. PHP_EOL;
125
            echo '               var priceSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_PRICE_SELECTOR']. '\';'. PHP_EOL;
126
            echo '               var checkoutPriceSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_PRICE_SELECTOR']. '\';'. PHP_EOL;
127
            echo '               var quantitySelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_QUANTITY_SELECTOR']. '\';'. PHP_EOL;
128
            echo '               var checkoutPage =     \'' . $checkoutPage.'\';'. PHP_EOL;
129
130
            echo '               if (positionSelector === \'default\') {'. PHP_EOL;
131
            echo '                   positionSelector = \'.buttonSet\''. PHP_EOL;
132
            echo '               }'. PHP_EOL;
133
134
            echo '               if (priceSelector === \'default\') {'. PHP_EOL;
135
            echo '                   priceSelector = \'#bodyContent>form>div>h1\''. PHP_EOL;
136
            echo '               }'. PHP_EOL;
137
138
            echo '               if (checkoutPriceSelector == \'default\' && checkoutPage == \'1\')  {'. PHP_EOL;
139
            echo '                   priceSelector = \'#columnRight > .infoBoxContainer > .infoBoxContents > tbody > tr:last-child > td\';'. PHP_EOL;
140
            echo '               }'. PHP_EOL;
141
            echo '               '.$simulatorCode.'.product_simulator = {};'. PHP_EOL;
142
            echo '               '.$simulatorCode.'.product_simulator.id = \'product-simulator\';'. PHP_EOL;
143
            echo '               '.$simulatorCode.'.product_simulator.publicKey = \'' . $this->pk . '\';'. PHP_EOL;
0 ignored issues
show
Bug introduced by
Are you sure $this->pk of type array can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

143
            echo '               '.$simulatorCode.'.product_simulator.publicKey = \'' . /** @scrutinizer ignore-type */ $this->pk . '\';'. PHP_EOL;
Loading history...
144
            echo '               '.$simulatorCode.'.product_simulator.selector = positionSelector;'. PHP_EOL;
145
            echo '               '.$simulatorCode.'.product_simulator.numInstalments = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_START_INSTALLMENTS'] . '\';'. PHP_EOL;
146
            echo '               '.$simulatorCode.'.product_simulator.type = ' . $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_TYPE'] . ';'. PHP_EOL;
147
            echo '               '.$simulatorCode.'.product_simulator.skin = ' . $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_SKIN'] . ';'. PHP_EOL;
148
            echo '               '.$simulatorCode.'.product_simulator.position = ' . $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_CSS_POSITION'] . ';'. PHP_EOL;
149
            echo '               '.$simulatorCode.'.product_simulator.itemAmountSelector = priceSelector;'. PHP_EOL;
150
            echo '               var promotedProduct =     \'' . $this->isPromoted($productId) .'\';'. PHP_EOL;
151
            echo '               if(promotedProduct == true) { ' . PHP_EOL;
152
            echo '               '.$simulatorCode.'.product_simulator.itemPromotedAmountSelector = priceSelector;'. PHP_EOL;
153
            echo '               }' . PHP_EOL;
154
            echo '               '.$simulatorCode.'.simulator.init('.$simulatorCode.'.product_simulator);'. PHP_EOL;
155
            echo '               clearInterval(window.OSSimulatorId);'. PHP_EOL;
156
            echo '               return true;'. PHP_EOL;
157
            echo '           }'. PHP_EOL;
158
            echo '           return false;'. PHP_EOL;
159
            echo '       }'. PHP_EOL;
160
            echo '       window.OSSimulatorId = setInterval(function () {'. PHP_EOL;
161
            echo '          loadSimulator();'. PHP_EOL;
162
            echo '       }, 2000);'. PHP_EOL;
163
            echo '</script>'. PHP_EOL;
164
165
            if ($checkoutPage) {
166
                echo '<script>' . PHP_EOL;
167
                echo 'function checkSelected(value)'. PHP_EOL;
168
                echo '{'. PHP_EOL;
169
                echo 'var simulator = document.getElementsByClassName("buttonSet");'  . PHP_EOL;
170
                echo ' if(simulator == "undefined") { return false;  } '. PHP_EOL;
171
                echo 'if(value==\'pagantis\') { var status="" } else { var status="none";} simulator[0].style.display=status; ' . PHP_EOL;
172
                echo '}'. PHP_EOL;
173
174
                echo 'function showSimulator()'. PHP_EOL;
175
                echo '{'. PHP_EOL;
176
                echo 'var elements = document.querySelectorAll("input[name=\'payment\']");' . PHP_EOL;
177
                echo 'if(elements == null) { return false };' . PHP_EOL;
178
179
                echo 'for(var i = 0, max = elements.length; i < max; i++) { elements[i].onclick = function() {
180
                        checkSelected(this.value);
181
                    } }' . PHP_EOL;
182
                echo 'clearInterval(window.OSdisplayId);';
183
                echo 'return true;'. PHP_EOL;
184
                echo '};'. PHP_EOL;
185
186
                echo '       window.OSdisplayId = setInterval(function () {'. PHP_EOL;
187
                echo '          showSimulator();'. PHP_EOL;
188
                echo '       }, 2000);'. PHP_EOL;
189
190
191
                echo '</script>'. PHP_EOL;
192
            }
193
        }
194
    }
195
196
    /**
197
     * @return bool
198
     */
199
    function isEnabled() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
200
        return $this->enabled;
201
    }
202
203
    /**
204
     * @return bool
205
     */
206
    function check() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
207
        return defined('MODULE_HEADER_TAGS_PAGANTIS_STATUS');
208
    }
209
210
    /**
211
     * install
212
     */
213
    function install() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
214
        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Pagantis Module', 'MODULE_HEADER_TAGS_PAGANTIS_STATUS', 'True', '', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
0 ignored issues
show
Bug introduced by
The function tep_db_query was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

214
        /** @scrutinizer ignore-call */ 
215
        tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Pagantis Module', 'MODULE_HEADER_TAGS_PAGANTIS_STATUS', 'True', '', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
Loading history...
Bug introduced by
The constant TABLE_CONFIGURATION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
215
216
    }
217
218
    /**
219
     * remove
220
     */
221
    function remove() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
222
        tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
0 ignored issues
show
Bug introduced by
The constant TABLE_CONFIGURATION was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
Bug introduced by
The function tep_db_query was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

222
        /** @scrutinizer ignore-call */ 
223
        tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
Loading history...
223
    }
224
225
    /**
226
     * @return array
227
     */
228
    function keys() {
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
229
        return array('MODULE_HEADER_TAGS_PAGANTIS_STATUS');
230
    }
231
232
    /**
233
     * @param $productId
234
     *
235
     * @return bool
236
     */
237
    private function isPromoted($productId)
238
    {
239
        //HOOK WHILE PROMOTED AMOUNT IS NOT WORKING
240
        //return false;
241
242
        if (!isset($productId)) {
243
            return false;
244
        }
245
246
        if ($this->extraConfig['PAGANTIS_PROMOTION'] == '') {
247
            $promotedProducts = array();
248
        } else {
249
            $promotedProducts = array_values((array)unserialize($this->extraConfig['PAGANTIS_PROMOTION']));
250
        }
251
252
        return (in_array($productId, $promotedProducts));
253
    }
254
}
255
?>
0 ignored issues
show
Best Practice introduced by
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...
256