Completed
Push — work-fleets ( 33857b...22a48f )
by SuperNova.WS
05:55
created

metamatter.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
// Придумать какой статус должен быть у глобальных ответов, что бы не перекрывать статусы платежных систем
4
// Может добавить спецстатус "Ответ системы платежа" и парсить дальше getMessage
5
// см constants.php
6
7
include_once('common.' . substr(strrchr(__FILE__, '.'), 1));
8
9
if(!sn_module_get_active_count('payment')) {
10
  sys_redirect('dark_matter.php');
11
  die();
12
}
13
14
lng_include('payment');
15
lng_include('infos');
16
17
$template = gettemplate('metamatter', true);
18
19
$player_currency_default = classSupernova::$user_options[PLAYER_OPTION_CURRENCY_DEFAULT];
20
$player_currency = sys_get_param_str('player_currency', $player_currency_default);
21
empty(classLocale::$lang['pay_currency_list'][$player_currency]) ? ($player_currency = $player_currency_default ? $player_currency_default : classSupernova::$config->payment_currency_default) : false;
22
$player_currency_default != $player_currency ? classSupernova::$user_options[PLAYER_OPTION_CURRENCY_DEFAULT] = $player_currency : false;
23
24
// Таблица скидок
25
$prev_discount = 0;
26
if(isset(sn_module_payment::$bonus_table) && is_array(sn_module_payment::$bonus_table)) {
27
  foreach(sn_module_payment::$bonus_table as $sum => $discount) {
28
    if($discount && $discount != $prev_discount) {
29
      $template->assign_block_vars('discount', array(
30
        'SUM'          => $sum,
31
        'DISCOUNT'     => $discount * 100,
32
        'DISCOUNT_ONE' => 1 + $discount,
33
        'TEXT'         => sprintf(classLocale::$lang['pay_mm_bonus_each'], pretty_number($sum), round($discount * 100)),
34
      ));
35
      $prev_discount = $discount;
36
    }
37
  }
38
}
39
40
// Результат платежа
41
if($payment_id = sys_get_param_id('payment_id')) {
42
  $payment = db_payment_get($payment_id);
43
  if($payment && $payment['payment_user_id'] == $user['id']) {
44 View Code Duplication
    if($payment['payment_status'] == PAYMENT_STATUS_COMPLETE) {
45
      $template->assign_block_vars('result', array('MESSAGE' => sprintf(classLocale::$lang['pay_msg_mm_purchase_complete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name'], $payment['payment_dark_matter_gained'])));
46
    }
47 View Code Duplication
    if($payment['payment_status'] == PAYMENT_STATUS_NONE) {
48
      $template->assign_block_vars('result', array(
49
        'MESSAGE' => sprintf(classLocale::$lang['pay_msg_mm_purchase_incomplete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name']),
50
        'STATUS'  => 1,
51
      ));
52
    }
53
    if($payment['payment_test']) {
54
      $template->assign_block_vars('result', array(
55
        'MESSAGE' => sprintf(classLocale::$lang['pay_msg_mm_purchase_test']),
56
        'STATUS'  => -1,
57
      ));
58
    }
59
  }
60
}
61
62
$unit_available_amount_list = &sn_module_payment::$bonus_table;
63
64
$request = array(
65
  'metamatter' => sys_get_param_float('metamatter'),
66
);
67
68
if(!$request['metamatter']) {
69
  unset($_POST);
70
}
71
72
$payment_methods_available = array_combine(array_keys(sn_module_payment::$payment_methods), array_fill(0, count(sn_module_payment::$payment_methods), null));
73
array_walk($payment_methods_available, function (&$value, $index) {
74
  $value = !empty(sn_module_payment::$payment_methods[$index]) ? array_combine(array_keys(sn_module_payment::$payment_methods[$index]), array_fill(0, count(sn_module_payment::$payment_methods[$index]), null)) : $value;
75
});
76
77
// pdump($payment_methods_available);
78
$payment_module_valid = false;
79
$payment_module = sys_get_param_str('payment_module');
80
foreach(sn_module::$sn_module_list['payment'] as $module_name => $module) {
81
  if(!is_object($module) || !$module->manifest['active']) {
82
    continue;
83
  }
84
85
  lng_include($module_name, $module->manifest['root_relative']);
86
87
  foreach(sn_module_payment::$payment_methods as $payment_type_id => $available_methods) {
88
    foreach($available_methods as $payment_method => $payment_currency) {
89
      if(isset($module->manifest['payment_method'][$payment_method])) {
90
        $payment_methods_available[$payment_type_id][$payment_method][$module_name] = $module->manifest['payment_method'][$payment_method];
91
      }
92
    }
93
  }
94
95
  $payment_module_valid = $payment_module_valid || $module_name == $payment_module;
96
}
97
98
global $template_result;
99
// Доступные платежные методы
100
foreach($payment_methods_available as $payment_type_id => $payment_methods) {
101
  if(empty($payment_methods)) {
102
    continue;
103
  }
104
105
  $template_result['.']['payment'][$payment_type_id] = array(
106
    'ID'   => $payment_type_id,
107
    'NAME' => classLocale::$lang['pay_methods'][$payment_type_id],
108
  );
109
  foreach($payment_methods as $payment_method_id => $module_list) {
110
    if(empty($module_list)) {
111
      continue;
112
    }
113
    $template_result['.']['payment'][$payment_type_id]['.']['method'][$payment_method_id] = array(
114
      'ID'         => $payment_method_id,
115
      'NAME'       => classLocale::$lang['pay_methods'][$payment_method_id],
116
      'IMAGE'      => isset(sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['image'])
117
        ? sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['image'] : '',
118
      'NAME_FORCE' => isset(sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['name']),
119
      'BUTTON'     => isset(sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['button']),
120
    );
121
    foreach($module_list as $payment_module_name => $payment_module_method_details) {
122
      $template_result['.']['payment'][$payment_type_id]['.']['method'][$payment_method_id]['.']['module'][] = array(
123
        'MODULE' => $payment_module_name,
124
      );
125
    }
126
  }
127
128
  if(empty($template_result['.']['payment'][$payment_type_id]['.'])) {
129
    unset($template_result['.']['payment'][$payment_type_id]);
130
  }
131
}
132
133
$template->assign_recursive($template_result);
134
135
$payment_type_selected = sys_get_param_int('payment_type');
136
$payment_method_selected = sys_get_param_int('payment_method');
137
138
$payment_module_valid = $payment_module_valid && (!$payment_method_selected || isset($payment_methods_available[$payment_type_selected][$payment_method_selected][$module_name]));
139
140
// If payment_module invalid - making it empty OR if there is only one payment_module - selecting it
141
if($payment_module_valid) {
142
  // $payment_module = $payment_module; // Really - do nothing
143
} elseif($payment_type_selected && count($payment_methods_available[$payment_type_selected][$payment_method_selected]) == 1) {
144
  reset($payment_methods_available[$payment_type_selected][$payment_method_selected]);
145
  $payment_module = key($payment_methods_available[$payment_type_selected][$payment_method_selected]);
146
} elseif(count(sn_module::$sn_module_list['payment']) == 1) {
147
  $payment_module = $module_name;
148
} else {
149
  $payment_module = '';
150
}
151
152
if($payment_type_selected && $payment_method_selected) {
153
  foreach($payment_methods_available[$payment_type_selected][$payment_method_selected] as $module_name => $temp) {
154
    $template->assign_block_vars('payment_module', array(
155
      'ID'          => $module_name,
156
      'NAME'        => classLocale::$lang["module_{$module_name}_name"],
157
      'DESCRIPTION' => classLocale::$lang["module_{$module_name}_description"],
158
    ));
159
  }
160
}
161
162
foreach(classLocale::$lang['pay_currency_list'] as $key => $value) {
163
  $course = get_exchange_rate($key);
164
  if(!$course) {
165
    continue;
166
  }
167
  $template->assign_block_vars('exchange', array(
168
    'SYMBOL'          => $key,
169
    'TEXT'            => $value,
170
    'COURSE_DIRECT'   => pretty_number($course, 4),
171
    'COURSE_REVERSE'  => pretty_number(1 / $course, 4),
172
    'MM_PER_CURRENCY' => pretty_number(sn_module_payment::currency_convert(1, $key, 'MM_')),
173
    'LOT_PRICE'       => sn_module_payment::currency_convert(get_mm_cost(), 'MM_', $key),
174
    'DEFAULT'         => $key == classSupernova::$config->payment_currency_default,
175
    // 'UNIT_PER_LOT' => sn_module_payment::currency_convert(2500, 'MM_', $key),
176
  ));
177
}
178
179
if($request['metamatter'] && $payment_module) {
180
  try {
181
    // Any possible errors about generating paylink should be raised in module!
182
    /**
183
     * @var sn_module_payment $module
184
     */
185
    $module = sn_module::getModule($payment_module);
186
    $pay_link = $module->compile_request($request);
0 ignored issues
show
Are you sure the assignment to $pay_link is correct as $module->compile_request($request) (which targets sn_module_payment::compile_request()) seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
187
188
    // Поддержка дополнительной информации
189
    if(is_array($pay_link['RENDER'])) {
190
      foreach($pay_link['RENDER'] as $html_data) {
191
        $template->assign_block_vars('render', $html_data);
192 View Code Duplication
        if(isset($html_data['VALUE']) && is_array($html_data['VALUE'])) {
193
          foreach($html_data['VALUE'] as $value_id => $value_value) {
194
            $template->assign_block_vars('render.value', array(
195
              'FIELD' => $value_id,
196
              'VALUE' => $value_value,
197
            ));
198
          }
199
        }
200
      }
201
    }
202
203
    // Поддержка передачи данных для многошаговых платежных систем
204 View Code Duplication
    if(is_array($pay_link['DATA'])) {
205
      foreach($pay_link['DATA'] as $key => $value) {
206
        $template->assign_block_vars('pay_link_data', array(
207
          'FIELD' => $key,
208
          'VALUE' => $value,
209
        ));
210
      }
211
    }
212
213
    if(is_array($pay_link) && in_array($pay_link['PAY_LINK_METHOD'], array('POST', 'GET', 'LINK', 'STEP'))) {
214
      // TODO Переделать это под assign_vars_recursive и возвращать пустые строки если нет платежного метода - для унификации формы в темплейте
215
      $template->assign_vars(array(
216
        'PAY_LINK_METHOD' => $pay_link['PAY_LINK_METHOD'],
217
        'PAY_LINK_URL'    => $pay_link['PAY_LINK_URL'],
218
      ));
219
    } else {
220
      throw new exception(classLocale::$lang['pay_msg_request_paylink_unsupported'], ERR_ERROR);
221
    }
222
  } catch(exception $e) {
223
    $template->assign_block_vars('result', $response = array(
224
      'STATUS'  => $e->getCode(),
225
      'MESSAGE' => $e->getMessage(),
226
    ));
227
    classSupernova::$debug->warning('Результат операции: код ' . $e->getCode() . ' сообщение "' . $e->getMessage() . '"', 'Ошибка платежа', LOG_INFO_PAYMENT);
228
  }
229
}
230
231
// Прегенерированные пакеты
232
foreach($unit_available_amount_list as $unit_amount => $discount) {
233
  $temp = sn_module_payment::currency_convert($unit_amount, 'MM_', $player_currency);
234
  $template->assign_block_vars('mm_amount', array(
235
    'VALUE'            => $unit_amount,
236
    // 'PRICE' => $temp,
237
    'PRICE_TEXT'       => pretty_number($temp, 2),
238
    'CURRENCY'         => $player_currency,
239
    'DISCOUNT'         => $discount,
240
    'DISCOUNT_PERCENT' => $discount * 100,
241
    'DISCOUNTED'       => $unit_amount * (1 + $discount),
242
    'TEXT'             => pretty_number($unit_amount),
243
    'TEXT_DISCOUNTED'  => pretty_number($unit_amount * (1 + $discount)),
244
  ));
245
}
246
247
$currency = $payment_module ? sn_module_payment::$payment_methods[$payment_type_selected][$payment_method_selected]['currency'] : '';
248
$bonus_percent = round(sn_module_payment::bonus_calculate($request['metamatter'], true, true) * 100);
249
$income_metamatter_text = pretty_number(sn_module_payment::bonus_calculate($request['metamatter']), true, true);
250
251
$template->assign_vars(array(
252
  'PAGE_HEADER' => classLocale::$lang['sys_metamatter'],
253
254
  'URL_PURCHASE' => classSupernova::$config->url_purchase_metamatter,
255
256
  'PAYMENT_TYPE'        => $payment_type_selected,
257
  'PAYMENT_METHOD'      => $payment_method_selected,
258
  'PAYMENT_METHOD_NAME' => classLocale::$lang['pay_methods'][$payment_method_selected],
259
260
  'PAYMENT_MODULE'             => $payment_module,
261
  'PAYMENT_MODULE_NAME'        => classLocale::$lang["module_{$payment_module}_name"],
262
  'PAYMENT_MODULE_DESCRIPTION' => classLocale::$lang["module_{$payment_module}_description"],
263
264
  'PLAYER_CURRENCY'              => $player_currency,
265
  'PLAYER_CURRENCY_PRICE_PER_MM' => sn_module_payment::currency_convert(1, $player_currency, 'MM_', 10),
266
267
  'UNIT_AMOUNT'                 => (float)$request['metamatter'],
268
  'UNIT_AMOUNT_TEXT'            => pretty_number($request['metamatter']),
269
  'UNIT_AMOUNT_BONUS_PERCENT'   => $bonus_percent,
270
  'UNIT_AMOUNT_TEXT_DISCOUNTED' => $income_metamatter_text,
271
  'UNIT_AMOUNT_TEXT_COST_BASE'  => pretty_number(sn_module_payment::currency_convert($request['metamatter'], 'MM_', $player_currency), 2),
272
273
  'PAYMENT_CURRENCY_EXCHANGE_DEFAULT' => pretty_number(get_mm_cost(), true, true),
274
  'PAYMENT_CURRENCY_DEFAULT_TEXT'     => classLocale::$lang['pay_currency_list'][classSupernova::$config->payment_currency_default],
275
276
  'METAMATTER' => mrc_get_level($user, null, RES_METAMATTER),
277
278
  'METAMATTER_COST_TEXT'       => sprintf(classLocale::$lang['pay_mm_buy_conversion_cost'],
279
    pretty_number($request['metamatter'], true, true),
280
    pretty_number(sn_module_payment::currency_convert($request['metamatter'], 'MM_', $currency), 2, true),
281
    $currency),
282
  'METAMATTER_COST_BONUS_TEXT' => $bonus_percent
283
    ? sprintf(classLocale::$lang['pay_mm_buy_real_income'], pretty_number($bonus_percent, true, true), $income_metamatter_text)
284
    : '',
285
286
  'DARK_MATTER_DESCRIPTION' => classLocale::$lang['info'][RES_DARK_MATTER]['description'],
287
288
  'PAYMENT_AVAILABLE' => sn_module_get_active_count('payment') && !defined('SN_GOOGLE'),
289
290
));
291
292
display($template, classLocale::$lang['sys_metamatter']);
293