Passed
Pull Request — master (#4)
by
unknown
12:24
created

ht_pagantis::keys()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 2
b 0
f 0
nc 1
nop 0
dl 0
loc 2
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') && defined('MODULE_PAYMENT_PAGANTIS_STATUS')) {
32
            $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...
33
                             (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...
34
        }
35
36
        $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...
37
        $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...
38
        $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...
39
    }
40
41
    /**
42
     * @return array
43
     */
44
    private function getExtraConfig()
45
    {
46
        $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

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

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

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

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

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

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

204
        /** @scrutinizer ignore-call */ 
205
        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...
205
206
    }
207
208
    /**
209
     * remove
210
     */
211
    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...
212
        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

212
        /** @scrutinizer ignore-call */ 
213
        tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
Loading history...
213
    }
214
215
    /**
216
     * @return array
217
     */
218
    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...
219
        return array('MODULE_HEADER_TAGS_PAGANTIS_STATUS');
220
    }
221
222
    /**
223
     * @param $productId
224
     *
225
     * @return bool
226
     */
227
    private function isPromoted($productId)
0 ignored issues
show
Unused Code introduced by
The parameter $productId is not used and could be removed. ( Ignorable by Annotation )

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

227
    private function isPromoted(/** @scrutinizer ignore-unused */ $productId)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
228
    {
229
        //HOOK WHILE PROMOTED AMOUNT IS NOT WORKING
230
        return false;
231
232
        if ($this->extraConfig['PAGANTIS_PROMOTION'] == '') {
0 ignored issues
show
Unused Code introduced by
IfNode is not reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
233
            $promotedProducts = array();
234
        } else {
235
            $promotedProducts = array_values((array)unserialize($this->extraConfig['PAGANTIS_PROMOTION']));
236
        }
237
238
        return (in_array($productId, $promotedProducts));
239
    }
240
}
241
?>
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...
242