#!/usr/bin/perl
# ------------------- NoDeny ------------------
# Copyright (с) Volik Stanislav, 2008, 2009
# Copyright (с) smallcms, 2010
# Read license http://nodeny.com.ua/license.txt
# ---------------------------------------------
$VER=49.32;
sub PROMI_main
{
$promisepaylivedays = 1; #если 0 - не учитываем параметр, срок действия временного платежа в днях
$promisepaymaxinmonth = 2; #если 0 - не учитываем параметр, максимально допустимое количество пользования услогой в месяц (начиная с первого числа)
$promisepayforpay = 500; #если 0 - не учитываем параметр, сумма списания за пользование услугой
$promisepayminimumpay = 1000 + $promisepayforpay; #минимальная сумма временного платежа + сумма снятия за услугу
$promisepaymaximumpay = 20000; #максимальная сумма временного платежа
$prmpay=$F{prmpay};
$form=&div('cntr',
&form('!'=>1,
($promisepayforpay > 0 ? 'Если Ваш баланс близок к нулю, а пополнить счет возможности нет, воспользуйтесь услугой «Обещанный платеж». По Вашему запросу Вам будет зачислен временный платеж, и Вы сможете продолжать пользоваться нашими услугами. Не забудьте пополнить счет до истечения срока действия «обещанного платежа». Через ' . $promisepaylivedays . ' дней после активации, сумма «обещанного платежа» будет автоматически полностью списана с Вашего счета. ' . $br .
&bold('Введите сумму обещанного платежа (минимум ' . $promisepayminimumpay . ' ' . $gr . '): ').&input_t('prmpay',$prmpay,20,18,' autocomplete="off"')
.$br2 . 'Дополнительно за использование услуги «Обещанный платеж» с платежа будет списана сумма в размере ' . $promisepayforpay . ' ' . $gr :
'Если Ваш баланс близок к нулю, а пополнить счет возможности нет, воспользуйтесь услугой «Обещанный платеж». По Вашему запросу Вам будет зачислен временный платеж, и Вы сможете продолжать пользоваться нашими услугами. Не забудьте пополнить счет до истечения срока действия «обещанного платежа». Через ' . $promisepaylivedays . ' дней после активации, сумма «обещанного платежа» будет автоматически полностью списана с Вашего счета. ' . $br .
&bold('Введите сумму обещанного платежа (минимум ' . $promisepayminimumpay . ' ' . $gr . '): ').&input_t('prmpay',$prmpay,20,18,' autocomplete="off"')
).$br2.&submit_a('Пополнить')
)
);
#выборка количества использований услуги за последние promisepaylivedays дней
$countprmpaysql1=&sql_select_line($dbh,"SELECT COUNT(*) FROM pays WHERE `mid`=$Mid AND `type` =50 AND `category` =900 AND `time` > UNIX_TIMESTAMP( SUBDATE( NOW( ) , $promisepaylivedays ) )");
&Error('проблема с БД.') unless $countprmpaysql1;
#считаем количество использований услуги
$countprmpays1=$countprmpaysql1->{'COUNT(*)'};
#выводим сообщение пользователю, который вконец потерял совесть
&Error('Вы уже использовали услугу «Обещанный платеж» менее, чем ' . $promisepaylivedays . ' дней назад.') if $countprmpays1 > 0 && $promisepaylivedays != 0;
#выборка количества использований услуги в этом месяце
$countprmpaysql2=&sql_select_line($dbh,"SELECT COUNT(*) FROM pays WHERE `mid`=$Mid AND `type` =50 AND `category` =900 AND `time` > UNIX_TIMESTAMP( DATE_FORMAT( NOW( ) , '%Y-%m-01' ) )");
&Error('проблема с БД.') unless $countprmpaysql2;
#считаем количество использований услуги
$countprmpays2=$countprmpaysql2->{'COUNT(*)'};
#выводим сообщение пользователю, который вконец потерял совесть
&Error('Вы уже использовали услугу «Обещанный платеж» в этом месяце максимально допустимое количество раз.') if $countprmpays2 >= $promisepaymaxinmonth && $promisepaymaxinmonth != 0;
#если из браузера клиента не пришла сумма
unless (defined $F{prmpay})
{
#Показываем форму ввода клиенту
$OUT.=&MessX($form,1);
return;
}
#проверка на длину символов
&Error('Вы ввели неправильное количество символов в сумме обещанного платежа.',$EOUT) if length($prmpay)<1 || length($prmpay)>20;
#проверка на корректность (работаем только с цифрами)
&Error('Использованы недопостимые символы.',$EOUT) if $prmpay!~/^[0-9]+$/;
#проверка на минимальный платёж
&Error('Сумма обещанного платежа указана меньше минимально допустимой.',$EOUT) if $prmpay<$promisepayminimumpay;
#проверка на максимальный платёж
&Error('Сумма обещанного платежа указана больше максимально допустимой (' . $promisepaymaximumpay . ').',$EOUT) if $prmpay>$promisepaymaximumpay;
#всё нормально
#если указано списывать сумму за услугу
if ($promisepayforpay > 0)
{
#списываем сумму в размере promisepayforpay за услугу Обещанный платеж
$sql="INSERT INTO pays (mid,cash,type,bonus,category,admin_id,admin_ip,reason,coment,time) ".
"VALUES($Mid,$promisepayforpay,10,'',600,$Adm{id},INET_ATON('$RealIp'),'','За услугу Обещанный платеж',$t)";
$rows=&sql_do($dbh,$sql);
&ToLog("! mid $Mid использовал услугу Обещанный платеж (запись списания) $prmpay $gr, но произошла ошибка внесения платежа в таблицу платежей.") if $rows<1;
}
#начинаем формировать временный платёж
#создаём переменную времени окончания платежа (текущее время + количество суток из конфига)
#если нужно удвоить, утроить срок - цифры ниже. множте, плюсуйте
$time=$t+$promisepaylivedays*3600*24;
#отнимаем от суммы платежа стоимость услуги, т.к. сняли за услугу ранее
$prmpaytmp = $prmpay - $promisepayforpay;
$sql="INSERT INTO pays (mid,cash,type,bonus,category,admin_id,admin_ip,reason,coment,time) ".
"VALUES($Mid,$prmpaytmp,20,'y',1000,$Adm{id},INET_ATON('$RealIp'),'','Обещанный платеж',$time)";
$rows=&sql_do($dbh,$sql);
&ToLog("! mid $Mid использовал услугу Обещанный платеж $prmpay $gr, но произошла ошибка внесения платежа в таблицу платежей.") if $rows<1;
#начинаем формировать собитие 900, которое будет блокировать повторные злоупотребления модулем
$sql="INSERT INTO pays (mid,cash,type,bonus,category,admin_id,admin_ip,reason,coment,time) ".
"VALUES($Mid,'',50,'',900,$Adm{id},INET_ATON('$RealIp'),'','Обещанный платеж',$t)";
$rows=&sql_do($dbh,$sql);
&ToLog("! mid $Mid использовал услугу Обещанный платеж (блокирующая запись) $prmpay $gr, но произошла ошибка внесения платежа в таблицу платежей.") if $rows<1;
#начинаем формировать внесение в таблицу платежей
$rows=&sql_do($dbh,"UPDATE users SET balance=balance+($prmpay) WHERE id=$Mid LIMIT 1");
if ($rows<1)
{
&ToLog("! mid $Mid использовал услугу Обещанный платеж $prmpay $gr, но после внесения платежа в таблицу платежей произошла ошибка изменения баланса клиента");
&Error("Произошла ошибка пополнения счета. Обратитесь к администрации.",$EOUT);
}
#сообщаем клиенту, что всё нормально
&OkMess(&bold_br($promisepayforpay!=0 ? "Ваш счет пополнен на $prmpay $gr из них $promisepayforpay удержано на оплату услуги «Обещанный платеж»" : "Ваш счет пополнен на $prmpay $gr").'Если текущих средств достаточно для включения доступа в интернет - доступ будет включен в течение нескольких минут.'.$br2);
}
1;