Passed
Pull Request — master (#4)
by
unknown
02:09
created

ht_pagantis::ht_pagantis()   A

Complexity

Conditions 6
Paths 4

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 6
eloc 12
c 2
b 0
f 0
nc 4
nop 0
dl 0
loc 17
rs 9.2222
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
    }
44
45
    /**
46
     * @return array
47
     */
48
    private function getExtraConfig()
49
    {
50
        $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

50
        $checkTable = /** @scrutinizer ignore-call */ tep_db_query("SHOW TABLES LIKE '".TABLE_PAGANTIS_CONFIG."'");
Loading history...
51
        $response = array();
52
        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

52
        if (/** @scrutinizer ignore-call */ tep_db_num_rows($checkTable) > 0) {
Loading history...
53
            $query       = "select * from ".TABLE_PAGANTIS_CONFIG;
54
            $result      = tep_db_query($query);
55
            $response    = array();
56
            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

56
            while ($resultArray = /** @scrutinizer ignore-call */ tep_db_fetch_array($result)) {
Loading history...
57
                $response[$resultArray['config']] = $resultArray['value'];
58
            }
59
        }
60
        return $response;
61
    }
62
63
    /**
64
     * @param string $config
65
     * @return array
66
     */
67
    private function getConfig($config = '')
68
    {
69
            $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...
70
            $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

70
            $result      = /** @scrutinizer ignore-call */ tep_db_query($query);
Loading history...
71
            $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

71
            $resultArray = /** @scrutinizer ignore-call */ tep_db_fetch_array($result);
Loading history...
72
            return $resultArray['configuration_value'];
73
    }
74
75
    /**
76
     * Execute function
77
     */
78
    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...
79
    {
80
        global $languages_id;
81
        $productId = $GLOBALS["HTTP_GET_VARS"]["products_id"];
82
        $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...
83
        if (isset($productId) || $checkoutPage) {
84
            $simulatorCode = 'pgSDK';
85
            if ($languages_id == '2' || $languages_id == null) {
86
                $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...
87
                $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_TYPE'] = 'pmtSDK.simulator.types.SIMPLE';
88
                $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_SKIN'] = 'pmtSDK.simulator.skins.BLUE';
89
                $simulatorCode = 'pmtSDK';
90
            }
91
            echo "<script src='".$this->sdkFile."'></script>". PHP_EOL;
92
            echo '<script>'. PHP_EOL;
93
            echo '        function loadSimulator()'. PHP_EOL;
94
            echo '        {'. PHP_EOL;
95
            echo '           if (typeof '.$simulatorCode.' != \'undefined\') {'. PHP_EOL;
96
            echo '               var positionSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_POSITION_SELECTOR']. '\';'. PHP_EOL;
97
            echo '               var priceSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_PRICE_SELECTOR']. '\';'. PHP_EOL;
98
            echo '               var checkoutPriceSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_PRICE_SELECTOR']. '\';'. PHP_EOL;
99
            echo '               var quantitySelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_QUANTITY_SELECTOR']. '\';'. PHP_EOL;
100
            echo '               var checkoutPage =     \'' . $checkoutPage.'\';'. PHP_EOL;
101
102
            echo '               if (positionSelector === \'default\') {'. PHP_EOL;
103
            echo '                   positionSelector = \'.buttonSet\''. PHP_EOL;
104
            echo '               }'. PHP_EOL;
105
106
            echo '               if (priceSelector === \'default\') {'. PHP_EOL;
107
            echo '                   priceSelector = \'#bodyContent>form>div>h1\''. PHP_EOL;
108
            echo '               }'. PHP_EOL;
109
110
            echo '               if (checkoutPriceSelector == \'default\' && checkoutPage == \'1\')  {'. PHP_EOL;
111
            echo '                   priceSelector = \'#columnRight > .infoBoxContainer > .infoBoxContents > tbody > tr:last-child > td\';'. PHP_EOL;
112
            echo '               }'. PHP_EOL;
113
            echo '               '.$simulatorCode.'.product_simulator = {};'. PHP_EOL;
114
            echo '               '.$simulatorCode.'.product_simulator.id = \'product-simulator\';'. PHP_EOL;
115
            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

115
            echo '               '.$simulatorCode.'.product_simulator.publicKey = \'' . /** @scrutinizer ignore-type */ $this->pk . '\';'. PHP_EOL;
Loading history...
116
            echo '               '.$simulatorCode.'.product_simulator.selector = positionSelector;'. PHP_EOL;
117
            echo '               '.$simulatorCode.'.product_simulator.numInstalments = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_START_INSTALLMENTS'] . '\';'. PHP_EOL;
118
            echo '               '.$simulatorCode.'.product_simulator.type = ' . $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_TYPE'] . ';'. PHP_EOL;
119
            echo '               '.$simulatorCode.'.product_simulator.skin = ' . $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_SKIN'] . ';'. PHP_EOL;
120
            echo '               '.$simulatorCode.'.product_simulator.position = ' . $this->extraConfig['PAGANTIS_SIMULATOR_DISPLAY_CSS_POSITION'] . ';'. PHP_EOL;
121
            echo '               '.$simulatorCode.'.product_simulator.itemAmountSelector = priceSelector;'. PHP_EOL;
122
            echo '               var promotedProduct =     \'' . $this->isPromoted($productId) .'\';'. PHP_EOL;
123
            echo '               if(promotedProduct == true) { ' . PHP_EOL;
124
            echo '               '.$simulatorCode.'.product_simulator.itemPromotedAmountSelector = priceSelector;'. PHP_EOL;
125
            echo '               }' . PHP_EOL;
126
            echo '               '.$simulatorCode.'.simulator.init('.$simulatorCode.'.product_simulator);'. PHP_EOL;
127
            echo '               clearInterval(window.OSSimulatorId);'. PHP_EOL;
128
            echo '               return true;'. PHP_EOL;
129
            echo '           }'. PHP_EOL;
130
            echo '           return false;'. PHP_EOL;
131
            echo '       }'. PHP_EOL;
132
            echo '       window.OSSimulatorId = setInterval(function () {'. PHP_EOL;
133
            echo '          loadSimulator();'. PHP_EOL;
134
            echo '       }, 2000);'. PHP_EOL;
135
            echo '</script>'. PHP_EOL;
136
137
            //Show promoted html
138
            if (isset($productId) && $this->isPromoted($productId)) {
139
                echo "<div id='promotedText' style='display:none'><br/>".$this->extraConfig['PAGANTIS_PROMOTED_PRODUCT_CODE']."</div>";
140
                echo '<script>'. PHP_EOL;
141
                echo '        function loadPromoted()'. PHP_EOL;
142
                echo '        {'. PHP_EOL;
143
                echo 'var positionSelector = \'' . $this->extraConfig['PAGANTIS_SIMULATOR_CSS_POSITION_SELECTOR']. '\';'. PHP_EOL;
144
                echo 'if (positionSelector === \'default\') {'. PHP_EOL;
145
                echo 'positionSelector = \'.buttonSet\''. PHP_EOL;
146
                echo '}'. PHP_EOL;
147
                echo 'var docFather = document.querySelector(positionSelector);'.PHP_EOL;
148
                echo 'if (typeof docFather != \'undefined\') {'. PHP_EOL;
149
                echo 'var promotedNode = document.getElementById("promotedText");'.PHP_EOL;
150
                echo 'docFather.appendChild(promotedNode);'.PHP_EOL;
151
                echo 'promotedNode.style.display=""' . PHP_EOL;
152
                echo '               clearInterval(window.OSPromotedId);'. PHP_EOL;
153
                echo '               return true;'. PHP_EOL;
154
                echo '       }'. PHP_EOL;
155
                echo '               return false;'. PHP_EOL;
156
                echo '       }'. PHP_EOL;
157
                echo '       window.OSPromotedId = setInterval(function () {'. PHP_EOL;
158
                echo '          loadPromoted();'. PHP_EOL;
159
                echo '       }, 2000);'. PHP_EOL;
160
                echo '</script>'. PHP_EOL;
161
            }
162
163
            if ($checkoutPage) {
164
                echo '<script>' . PHP_EOL;
165
                echo 'function checkSelected(value)'. PHP_EOL;
166
                echo '{'. PHP_EOL;
167
                echo 'var simulator = document.getElementsByClassName("buttonSet");'  . PHP_EOL;
168
                echo ' if(simulator == "undefined") { return false;  } '. PHP_EOL;
169
                echo 'if(value==\'pagantis\') { var status="" } else { var status="none";} simulator[0].style.display=status; ' . PHP_EOL;
170
                echo '}'. PHP_EOL;
171
172
                echo 'function showSimulator()'. PHP_EOL;
173
                echo '{'. PHP_EOL;
174
                echo 'var elements = document.querySelectorAll("input[name=\'payment\']");' . PHP_EOL;
175
                echo 'if(elements == null) { return false };' . PHP_EOL;
176
177
                echo 'for(var i = 0, max = elements.length; i < max; i++) { elements[i].onclick = function() {
178
                        checkSelected(this.value);
179
                    } }' . PHP_EOL;
180
                echo 'clearInterval(window.OSdisplayId);';
181
                echo 'return true;'. PHP_EOL;
182
                echo '};'. PHP_EOL;
183
184
                echo '       window.OSdisplayId = setInterval(function () {'. PHP_EOL;
185
                echo '          showSimulator();'. PHP_EOL;
186
                echo '       }, 2000);'. PHP_EOL;
187
188
189
                echo '</script>'. PHP_EOL;
190
            }
191
        }
192
    }
193
194
    /**
195
     * @return bool
196
     */
197
    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...
198
        return $this->enabled;
199
    }
200
201
    /**
202
     * @return bool
203
     */
204
    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...
205
        return defined('MODULE_HEADER_TAGS_PAGANTIS_STATUS');
206
    }
207
208
    /**
209
     * install
210
     */
211
    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...
212
        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 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

212
        /** @scrutinizer ignore-call */ 
213
        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...
213
214
    }
215
216
    /**
217
     * remove
218
     */
219
    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...
220
        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

220
        /** @scrutinizer ignore-call */ 
221
        tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
Loading history...
221
    }
222
223
    /**
224
     * @return array
225
     */
226
    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...
227
        return array('MODULE_HEADER_TAGS_PAGANTIS_STATUS');
228
    }
229
230
    /**
231
     * @param $productId
232
     *
233
     * @return bool
234
     */
235
    private function isPromoted($productId)
236
    {
237
        //HOOK WHILE PROMOTED AMOUNT IS NOT WORKING
238
        //return false;
239
240
        if (!isset($productId)) {
241
            return false;
242
        }
243
244
        if ($this->extraConfig['PAGANTIS_PROMOTION'] == '') {
245
            $promotedProducts = array();
246
        } else {
247
            $promotedProducts = array_values((array)unserialize($this->extraConfig['PAGANTIS_PROMOTION']));
248
        }
249
250
        return (in_array($productId, $promotedProducts));
251
    }
252
}
253
?>
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...
254