Списание средств с баланса пользователя
Как реализовать списание средств с баланса msProfile при создании Tickets.
Я понял то что надо привязать плагин к событию OnDocFormSave
Я понял то что надо привязать плагин к событию OnDocFormSave
$user = $modx->getAuthenticatedUser('web');
$user_id = $user->get('id');
$user_money_profile = $modx->getObject('msCustomerProfile', $user_id);
$balance = $user_money_profile->get('account');
$balance = float($balance);
if ($modx->event->name == 'OnDocFormSave') {
$modx->log(1, 'Новый');
if($mode == 'new'){
if (!empty($_POST['pricetpl'])){
if ($balance >= 100) {
$new_balance = $balance - 100;
$user_money_profile->set('account', $new_balance);
$user_money_profile->save();
$modx->log(1, 'Списал баланс');
}else { $modx->log(1, 'Недостаточно средств');}
}
}
}
Проверял на ошибки $modx->log(1, 'Новый'); не доходит даже. При нажатие на кнопку Опубликовать(добавить тикет) зависает и не редиректит на другую страницу, но при этом тикет создается Комментарии: 2
как минимум переделать так
<?php
if ($modx->event->name === 'OnDocFormSave') {
if($mode == 'new'){
$modx->log(1, 'Новый');
if (!$user = $modx->getAuthenticatedUser('web')) {
// не получен пользователь
return;
}
$user_id = $user->get('id');
if (!$user_money_profile = $modx->getObject('msCustomerProfile', $user_id)) {
// не получе профиль пользователя
return;
}
$balance = (float)$user_money_profile->get('account');
if (!empty($_POST['pricetpl'])){
if ($balance >= 100) {
$new_balance = $balance - 100;
$user_money_profile->set('account', $new_balance);
$user_money_profile->save();
$modx->log(1, 'Списал баланс');
}else { $modx->log(1, 'Недостаточно средств');}
}
}
}
Спасибо большое боду пробовать
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.