Completed
Push — trunk ( 34029c...0f5c9b )
by SuperNova.WS
03:54
created

metamatter.php (2 issues)

Labels
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::$gc->modules->getModulesActiveCount('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 = player_load_option($user, PLAYER_OPTION_CURRENCY_DEFAULT);
24
$player_currency_default = SN::$user_options[PLAYER_OPTION_CURRENCY_DEFAULT];
25
$player_currency = sys_get_param_str('player_currency', $player_currency_default);
26
empty(SN::$lang['pay_currency_list'][$player_currency]) ? ($player_currency = $player_currency_default ? $player_currency_default : SN::$config->payment_currency_default) : false;
27
// $player_currency_default != $player_currency ? player_save_option($user, PLAYER_OPTION_CURRENCY_DEFAULT, $player_currency) : false;
28
$player_currency_default != $player_currency ? SN::$user_options[PLAYER_OPTION_CURRENCY_DEFAULT] = $player_currency : false;
29
30
//// Конвертация ММ в ТМ
31
//if(sys_get_param('mm_convert_do')) {
32
//  try {
33
//    if(!($mm_convert = sys_get_param_id('mm_convert'))) {
34
//      throw new exception($lang['pay_msg_mm_convert_wrong_amount'], ERR_ERROR);
35
//    }
36
//
37
//    sn_db_transaction_start();
38
//    $user = db_user_by_id($user['id'], true);
39
//    if($mm_convert > mrc_get_level($user, null, RES_METAMATTER)) {
40
//      throw new exception($lang['pay_msg_mm_convert_not_enough'], ERR_ERROR);
41
//    }
42
//
43
//    $payment_comment = sprintf("Игрок сконвертировал %d Метаматерии в Тёмную Материю", $mm_convert);
44
//    if(!mm_points_change($user['id'], RPG_CONVERT_MM, -$mm_convert, $payment_comment)) {
45
//      throw new exception($lang['pay_msg_mm_convert_mm_error'], ERR_ERROR);
46
//    }
47
//    if(!rpg_points_change($user['id'], RPG_CONVERT_MM, $mm_convert, $payment_comment)) {
48
//      throw new exception($lang['pay_msg_mm_convert_dm_error'], ERR_ERROR);
49
//    }
50
//
51
//    $template->assign_block_vars('result', array(
52
//      'STATUS'  => ERR_NONE,
53
//      'MESSAGE' => sprintf('Конвертация %1$s единиц Метаматерии в %1$s единиц Тёмной Материи успешно произведена', pretty_number($mm_convert)),
54
//    ));
55
//
56
//    sn_db_transaction_commit();
57
//  } catch(exception $e) {
58
//    sn_db_transaction_rollback();
59
//    $template->assign_block_vars('result', $response = array(
60
//      'STATUS'  => $e->getCode(),
61
//      'MESSAGE' => $e->getMessage(),
62
//    ));
63
//  }
64
//}
65
66
// Таблица скидок
67
$prev_discount = 0;
68
if (isset(sn_module_payment::$bonus_table) && is_array(sn_module_payment::$bonus_table)) {
69
  foreach (sn_module_payment::$bonus_table as $sum => $discount) {
70
    if ($discount && $discount != $prev_discount) {
71
      $template->assign_block_vars('discount', array(
72
        'SUM'          => $sum,
73
        'DISCOUNT'     => $discount * 100,
74
        'DISCOUNT_ONE' => 1 + $discount,
75
        'TEXT'         => sprintf(SN::$lang['pay_mm_bonus_each'], HelperString::numberFloorAndFormat($sum), round($discount * 100)),
76
      ));
77
      $prev_discount = $discount;
78
    }
79
  }
80
}
81
82
// Результат платежа
83
if ($payment_id = sys_get_param_id('payment_id')) {
84
  $payment = doquery("SELECT * FROM {{payment}} WHERE `payment_id` = {$payment_id} LIMIT 1;", true);
85
  if ($payment && $payment['payment_user_id'] == $user['id']) {
86
    if ($payment['payment_status'] == PAYMENT_STATUS_COMPLETE) {
87
      $template->assign_block_vars('result', array('MESSAGE' => sprintf(SN::$lang['pay_msg_mm_purchase_complete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name'], $payment['payment_dark_matter_gained'])));
88
    }
89
    if ($payment['payment_status'] == PAYMENT_STATUS_NONE) {
90
      $template->assign_block_vars('result', array(
91
        'MESSAGE' => sprintf(SN::$lang['pay_msg_mm_purchase_incomplete'], $payment['payment_dark_matter_paid'], $payment['payment_module_name']),
92
        'STATUS'  => 1,
93
      ));
94
    }
95
    if ($payment['payment_test']) {
96
      $template->assign_block_vars('result', array(
97
        'MESSAGE' => sprintf(SN::$lang['pay_msg_mm_purchase_test']),
98
        'STATUS'  => -1,
99
      ));
100
    }
101
  }
102
}
103
104
$unit_available_amount_list = &sn_module_payment::$bonus_table;
105
106
$request = array(
107
  'metamatter' => sys_get_param_float('metamatter'),
108
);
109
110
if (!$request['metamatter']) {
111
  unset($_POST);
112
}
113
114
$payment_methods_available = array_combine(array_keys(sn_module_payment::$payment_methods), array_fill(0, count(sn_module_payment::$payment_methods), null));
115
array_walk($payment_methods_available, function (&$value, $index) {
116
  $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;
117
});
118
119
$payment_module_valid = false;
120
$payment_module_request = sys_get_param_str('payment_module');
121
foreach (SN::$gc->modules->getModulesActive('payment') as $module_name => $module) {
122
  /**
123
   * @var sn_module $module
124
   */
125
126
  if (!is_object($module) || !$module->isActive()) {
127
    continue;
128
  }
129
130
  lng_include($module_name, $module->getRootRelative());
131
132
  foreach (sn_module_payment::$payment_methods as $payment_type_id => $available_methods) {
133
    foreach ($available_methods as $payment_method => $payment_currency) {
134
      if (isset($module->manifest['payment_method'][$payment_method])) {
135
        $payment_methods_available[$payment_type_id][$payment_method][$module_name] = $module->manifest['payment_method'][$payment_method];
136
      }
137
    }
138
  }
139
140
  $payment_module_valid = $payment_module_valid || $module_name == $payment_module_request;
141
}
142
143
global $template_result;
144
// Доступные платежные методы
145
foreach ($payment_methods_available as $payment_type_id => $payment_methods) {
146
  if (empty($payment_methods)) {
147
    continue;
148
  }
149
150
  $template_result['.']['payment'][$payment_type_id] = array(
151
    'ID'   => $payment_type_id,
152
    'NAME' => SN::$lang['pay_methods'][$payment_type_id],
153
  );
154
  foreach ($payment_methods as $payment_method_id => $module_list) {
155
    if (empty($module_list)) {
156
      continue;
157
    }
158
    $template_result['.']['payment'][$payment_type_id]['.']['method'][$payment_method_id] = array(
159
      'ID'         => $payment_method_id,
160
      'NAME'       => SN::$lang['pay_methods'][$payment_method_id],
161
      'IMAGE'      => isset(sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['image'])
162
        ? sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['image'] : '',
163
      'NAME_FORCE' => isset(sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['name']),
164
      'BUTTON'     => isset(sn_module_payment::$payment_methods[$payment_type_id][$payment_method_id]['button']),
165
    );
166
    foreach ($module_list as $payment_module_name => $payment_module_method_details) {
167
      $template_result['.']['payment'][$payment_type_id]['.']['method'][$payment_method_id]['.']['module'][] = array(
168
        'MODULE' => $payment_module_name,
169
      );
170
    }
171
  }
172
173
  if (empty($template_result['.']['payment'][$payment_type_id]['.'])) {
174
    unset($template_result['.']['payment'][$payment_type_id]);
175
  }
176
}
177
178
$template->assign_recursive($template_result);
179
180
$payment_type_selected = sys_get_param_int('payment_type');
181
$payment_method_selected = sys_get_param_int('payment_method');
182
183
$payment_module_valid = $payment_module_valid && (!$payment_method_selected || isset($payment_methods_available[$payment_type_selected][$payment_method_selected][$module_name]));
184
185
// If payment_module invalid - making it empty OR if there is only one payment_module - selecting it
186
if ($payment_module_valid) {
187
  // $payment_module = $payment_module; // Really - do nothing
188
} elseif ($payment_type_selected && count($payment_methods_available[$payment_type_selected][$payment_method_selected]) == 1) {
189
  reset($payment_methods_available[$payment_type_selected][$payment_method_selected]);
190
  $payment_module_request = key($payment_methods_available[$payment_type_selected][$payment_method_selected]);
191
} elseif (SN::$gc->modules->getModulesActiveCount('payment') == 1) {
192
  $payment_module_request = $module_name;
193
} else {
194
  $payment_module_request = '';
195
}
196
197
if ($payment_type_selected && $payment_method_selected) {
198
  foreach ($payment_methods_available[$payment_type_selected][$payment_method_selected] as $module_name => $temp) {
199
    $template->assign_block_vars('payment_module', array(
200
      'ID'          => $module_name,
201
      'NAME'        => SN::$lang["module_{$module_name}_name"],
202
      'DESCRIPTION' => SN::$lang["module_{$module_name}_description"],
203
    ));
204
  }
205
}
206
207
foreach (SN::$lang['pay_currency_list'] as $key => $value) {
208
  $course = get_exchange_rate($key);
209
  if (!$course) {
210
    continue;
211
  }
212
  $template->assign_block_vars('exchange', array(
213
    'SYMBOL'          => $key,
214
    'TEXT'            => $value,
215
    'COURSE_DIRECT'   => HelperString::numberFormat($course, 4),
216
    'COURSE_REVERSE'  => HelperString::numberFormat(1 / $course, 4),
217
    'MM_PER_CURRENCY' => HelperString::numberFormat(sn_module_payment::currency_convert(1, $key, 'MM_'), 2),
218
    'LOT_PRICE'       => sn_module_payment::currency_convert(get_mm_cost(), 'MM_', $key),
219
    'DEFAULT'         => $key == SN::$config->payment_currency_default,
220
  ));
221
}
222
223
if ($request['metamatter'] && $payment_module_request) {
224
  try {
225
    $paymentModuleReal = SN::$gc->modules->getModule($payment_module_request);
226
    if(!is_object($paymentModuleReal)) {
227
      throw new Exception('{ Менеджер модулей вернул null вместо платёжного модуля для }' . $payment_module_request, ERR_ERROR);
228
    }
229
    /**
230
     * @var sn_module_payment $paymentModuleReal
231
     */
232
233
    // Any possible errors about generating paylink should be raised in module!
234
    $pay_link = $paymentModuleReal->compile_request($request);
0 ignored issues
show
Are you sure the assignment to $pay_link is correct as $paymentModuleReal->compile_request($request) targeting 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...
235
236
    // Поддержка дополнительной информации
237
    if (is_array($pay_link['RENDER'])) {
238
      foreach ($pay_link['RENDER'] as $html_data) {
239
        $template->assign_block_vars('render', $html_data);
240
        if (isset($html_data['VALUE']) && is_array($html_data['VALUE'])) {
241
          foreach ($html_data['VALUE'] as $value_id => $value_value) {
242
            $template->assign_block_vars('render.value', array(
243
              'FIELD' => $value_id,
244
              'VALUE' => $value_value,
245
            ));
246
          }
247
        }
248
      }
249
    }
250
251
    // Поддержка передачи данных для многошаговых платежных систем
252
    if (is_array($pay_link['DATA'])) {
253
      foreach ($pay_link['DATA'] as $key => $value) {
254
        $template->assign_block_vars('pay_link_data', array(
255
          'FIELD' => $key,
256
          'VALUE' => $value,
257
        ));
258
      }
259
    }
260
261
    if (is_array($pay_link) && in_array($pay_link['PAY_LINK_METHOD'], array('POST', 'GET', 'LINK', 'STEP'))) {
0 ignored issues
show
The condition is_array($pay_link) is always false.
Loading history...
262
      // TODO Переделать это под assign_vars_recursive и возвращать пустые строки если нет платежного метода - для унификации формы в темплейте
263
      $template->assign_vars(array(
264
        'PAY_LINK_METHOD' => $pay_link['PAY_LINK_METHOD'],
265
        'PAY_LINK_URL'    => $pay_link['PAY_LINK_URL'],
266
      ));
267
    } else {
268
      throw new exception(SN::$lang['pay_msg_request_paylink_unsupported'], ERR_ERROR);
269
    }
270
  } catch (exception $e) {
271
    $template->assign_block_vars('result', $response = array(
272
      'STATUS'  => $e->getCode(),
273
      'MESSAGE' => $e->getMessage(),
274
    ));
275
    $debug->warning('Результат операции: код ' . $e->getCode() . ' сообщение "' . $e->getMessage() . '"', 'Ошибка платежа', LOG_INFO_PAYMENT);
276
  }
277
}
278
279
// Прегенерированные пакеты
280
foreach ($unit_available_amount_list as $unit_amount => $discount) {
281
  $temp = sn_module_payment::currency_convert($unit_amount, 'MM_', $player_currency);
282
  $template->assign_block_vars('mm_amount', array(
283
    'VALUE'            => $unit_amount,
284
    // 'PRICE' => $temp,
285
    'PRICE_TEXT'       => HelperString::numberFormat($temp, 2),
286
    'CURRENCY'         => $player_currency,
287
    'DISCOUNT'         => $discount,
288
    'DISCOUNT_PERCENT' => $discount * 100,
289
    'DISCOUNTED'       => $unit_amount * (1 + $discount),
290
    'TEXT'             => HelperString::numberFloorAndFormat($unit_amount),
291
    'TEXT_DISCOUNTED'  => HelperString::numberFloorAndFormat($unit_amount * (1 + $discount)),
292
  ));
293
}
294
295
$currency = $payment_module_request ? sn_module_payment::$payment_methods[$payment_type_selected][$payment_method_selected]['currency'] : '';
296
$bonus_percent = round(sn_module_payment::bonus_calculate($request['metamatter'], true, true) * 100);
297
$income_metamatter_text = prettyNumberStyledDefault(sn_module_payment::bonus_calculate($request['metamatter']));
298
299
$template->assign_vars(array(
300
  'PAGE_HEADER' => SN::$lang['sys_metamatter'],
301
302
  'URL_PURCHASE' => SN::$config->url_purchase_metamatter,
303
304
  'PAYMENT_TYPE'        => $payment_type_selected,
305
  'PAYMENT_METHOD'      => $payment_method_selected,
306
  'PAYMENT_METHOD_NAME' => SN::$lang['pay_methods'][$payment_method_selected],
307
308
  'PAYMENT_MODULE'             => $payment_module_request,
309
  'PAYMENT_MODULE_NAME'        => SN::$lang["module_{$payment_module_request}_name"],
310
  'PAYMENT_MODULE_DESCRIPTION' => SN::$lang["module_{$payment_module_request}_description"],
311
312
  'PLAYER_CURRENCY'              => $player_currency,
313
  'PLAYER_CURRENCY_PRICE_PER_MM' => sn_module_payment::currency_convert(1, $player_currency, 'MM_', 10),
314
315
  'UNIT_AMOUNT'                 => (float)$request['metamatter'],
316
  'UNIT_AMOUNT_TEXT'            => HelperString::numberFloorAndFormat($request['metamatter']),
317
  'UNIT_AMOUNT_BONUS_PERCENT'   => $bonus_percent,
318
  'UNIT_AMOUNT_TEXT_DISCOUNTED' => $income_metamatter_text,
319
  'UNIT_AMOUNT_TEXT_COST_BASE'  => HelperString::numberFormat(sn_module_payment::currency_convert($request['metamatter'], 'MM_', $player_currency), 2),
320
321
  'PAYMENT_CURRENCY_EXCHANGE_DEFAULT' => prettyNumberStyledDefault(get_mm_cost()),
322
  'PAYMENT_CURRENCY_DEFAULT_TEXT'     => SN::$lang['pay_currency_list'][SN::$config->payment_currency_default],
323
324
  'METAMATTER' => mrc_get_level($user, '', RES_METAMATTER),
325
326
  'METAMATTER_COST_TEXT'       => sprintf(SN::$lang['pay_mm_buy_conversion_cost'],
327
    prettyNumberStyledDefault($request['metamatter']),
328
    number_format($mmWish = sn_module_payment::currency_convert($request['metamatter'], 'MM_', $currency), 2, ',', '.'),
329
    $currency,
330
    prettyNumberGetClass($mmWish, true)),
331
  'METAMATTER_COST_BONUS_TEXT' => $bonus_percent
332
    ? sprintf(SN::$lang['pay_mm_buy_real_income'], prettyNumberStyledDefault($bonus_percent), $income_metamatter_text)
333
    : '',
334
335
  'DARK_MATTER_DESCRIPTION' => SN::$lang['info'][RES_DARK_MATTER]['description'],
336
337
  'PAYMENT_AVAILABLE' => SN::$gc->modules->getModulesActiveCount('payment') && !defined('SN_GOOGLE'),
338
339
));
340
341
display($template, SN::$lang['sys_metamatter']);
342