Completed
Push — work-fleets ( f5fbda...1bdd41 )
by SuperNova.WS
06:04
created

metamatter.php (1 issue)

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

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

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