==== XML ====
==== PHP ====
registerEvent( 'onPrepareContent', 'plgUserCreditModify' );
function plgUserCreditModify(&$row, &$params, $page=0){
$pos = strpos($row->text, '{user_credit}');
if ($pos!==false) {
$row->text = preg_replace('/{user_credit}/', '', $row->text);
include ("./urfa/URFAConfig.php");
try {
$urfa_admin = new URFAClient_Admin($UTMCore_Login,$UTMCore_Password);
$urfa_user5 = new URFAClient_User5($_SESSION['URFA']['login'], $_SESSION['URFA']['password']);
} catch (Exception $exception) {
echo "Error in line ", $exception->getLine();
echo $exception->getMessage();
}
//*************************** Получение суммы платежей за месяц начало
function get_max_credit_sum($urfa_user5) {
$report = $urfa_user5->rpcf_user5_payments_report(strtotime("-30 day"),strtotime("now")); //-0x4012
$summa = 0;
// print_r($report);
if ($report['atr_size']>0) {
for ($i=0;$i<$report['atr_size'];$i++) {
if (($report['payment'][$i]['payment']>0) and ($report['payment'][$i]['payment_method_id']==10)) {
$summa = $summa + $report['payment'][$i]['payment'];
}
}
}
return $summa;
}
$max_credit_sum = get_max_credit_sum($urfa_user5);
$max_credit_sum = round($max_credit_sum);
// print 'Максимальный кредит = '.$max_credit_sum.'
Скрипт удаления просроченных кредитов (ставим запуск по крону к примеру раз в час)
';
//*************************** Получение суииы платежей за месяц конец
function set_credit($user_id,$account_id,$credit,$urfa_credit_type,$urfa_admin) {
$length_credit = 0;
switch ($urfa_credit_type) {
case 0 : // Удаляем кредит
$length_credit = 0;
$credit = 0;
break;
case 1:
$length_credit = 7;
$urfa_admin->rpcf_add_once_service_to_user($user_id,$account_id,139,0,0,time(),1,0); //0x2555
break;
case 2:
$length_credit = 14;
$urfa_admin->rpcf_add_once_service_to_user($user_id,$account_id,140,0,0,time(),1,0); //0x2555
break;
case 3:
$length_credit = 21;
$urfa_admin->rpcf_add_once_service_to_user($user_id,$account_id,141,0,0,time(),1,0); //0x2555
break;
case 4:
$length_credit = 30;
$urfa_admin->rpcf_add_once_service_to_user($user_id,$account_id,142,0,0,time(),1,0); //0x2555
break;
}
$accountinfo = $urfa_admin->rpcf_get_accountinfo($account_id); //0x2030
$accountinfo['credit']=$credit;
$urfa_admin->rpcf_save_account($account_id,$accountinfo, 0, 0, 0); //0x2032
if ($urfa_credit_type>0) {
// $query_add_credit = "INSERT INTO utmtray_credits (account, summa, startdate, stopdate, is_deleted, startdate_human, stopdate_human) VALUES ($account_id, $credit, UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL $length_credit DAY)),0, NOW(),DATE_ADD(NOW(),INTERVAL $length_credit DAY))";
$query_add_credit = "INSERT INTO utmtray_credits (account, summa, is_deleted, startdate_human, stopdate_human) VALUES ($account_id, $credit, 0, NOW(),DATE_ADD(NOW(),INTERVAL $length_credit DAY))";
// print $query_add_credit.'
';
$db =& JFactory::getDBO();
$db_result = $db->setQuery($query_add_credit);
$db_result = $db->Query($query_add_credit);
} else {
$query_del_credit = "UPDATE utmtray_credits SET is_deleted=1 Where is_deleted<>1 AND account=$account_id";
// print $query_del_credit.'
';
$db =& JFactory::getDBO();
$db_result = $db->setQuery($query_del_credit);
$db_result = $db->Query($query_del_credit);
}
}
//***************** Обработка смены тарифа
$change_credit_message = '';
$urfa_credit_type = JRequest::getVar('urfa_credit_type');
$urfa_credit_accept = JRequest::getVar('urfa_credit_accept');
if (isset($urfa_credit_type) && isset($urfa_credit_accept)) {
$user_id = $_SESSION['URFA']['user_id'];
$account_id = $_SESSION['URFA']['basic_account'];
set_credit($user_id,$account_id,$max_credit_sum,$urfa_credit_type,$urfa_admin);
if ($urfa_credit_type>0) {
$change_credit_message = 'Кредит в размере '.sprintf("%01.2f руб.",$max_credit_sum).' успешно установлен';
}
}
//***************** Обработка смены тарифа конец
function get_credit($account_id,$urfa_admin) {
$ret = array();
$accountinfo = $urfa_admin->rpcf_get_accountinfo($account_id); //0x2030
$ret['credit'] = $accountinfo['credit'];
$query = "SELECT UNIX_TIMESTAMP(stopdate_human) FROM utmtray_credits WHERE is_deleted<>1 AND account=$account_id AND summa=".$ret['credit'];
$db =& JFactory::getDBO();
$db->setQuery($query);
$stopdate = $db->loadResult();
if (isset($stopdate)) {
$ret['stopdate'] = date("d.m.Y H:i",$stopdate);
} else {
$ret['stopdate'] = '';
}
return $ret;
}
$current_credit = get_credit($_SESSION['URFA']['basic_account'],$urfa_admin);
//******************************* Форма смены тарифа начало
$form_title = '';
$form_body = '';
if ($current_credit['credit']==0) {
$form_body = $form_body.' На 1 неделю (стоимость услуги 20р.)
';
$form_body = $form_body.' На 2 недели (стоимость услуги 50р.)
';
$form_body = $form_body.' На 3 недели (стоимость услуги 120р.)
';
$form_body = $form_body.' На месяц (30 дней) (стоимость услуги 250р.)
';
$form_body = $form_body.'
';
$form_body = $form_body.'Я понимаю и принимаю условия установки кредита';
} else {
$form_body = $form_body.' Удалить кредит (Бесплатная услуга)
';
$form_body = $form_body.'
';
$form_body = $form_body.'Я уверен что хочу удалить кредит';
}
$form_body = $form_body.'
';
$form_change_credit = $form_title.$form_body.$form_footer;
if ($max_credit_sum==0 && $current_credit['credit']==0) {
$form_change_credit='Вы не можете установить кредит.
Нет платежей за последние 30 дней.';
}
//******************************* Форма смены тарифа конец
$accountinfo = $urfa_admin->rpcf_get_accountinfo($_SESSION['URFA']['basic_account']); //0x2030
$balance = $accountinfo['balance'];
$row->text = preg_replace('/{current_credit}/', sprintf ("%01.2f руб.",$current_credit['credit']), $row->text);
$row->text = preg_replace('/{current_credit_date}/', $current_credit['stopdate'], $row->text);
$row->text = preg_replace('/{max_credit_sum}/', sprintf ("%01.2f руб.",$max_credit_sum), $row->text);
$row->text = preg_replace('/{balance}/', sprintf ("%01.2f руб.",$balance), $row->text);
$row->text = preg_replace('/{form_change_credit}/', $form_change_credit, $row->text);
$row->text = preg_replace('/{change_credit_message}/', $change_credit_message, $row->text);
}
}
getLine();
echo $exception->getMessage();
}
function reset_credit($account_id,$urfa_admin) {
$accountinfo = $urfa_admin->rpcf_get_accountinfo($account_id); //0x2030
$accountinfo['credit']= 0 ;
$urfa_admin->rpcf_save_account($account_id,$accountinfo, 0, 0, 0); //0x2032
}
$query="Select id, account From utmtray_credits Where (stopdate_human <= Now()) and (is_deleted<>1)";
$result=@mysql_query($query);
$counter=0;
while ($row=mysql_fetch_array($result)) {
print date("d.m.Y H:i",time())." CreditCanceledForAccount=".$row["account"]."\r\n";
$query="UPDATE utmtray_credits SET is_deleted=1 Where id=".$row["id"];
@mysql_query($query);
reset_credit($row["account"],$urfa_admin);
}
?>
==== SQL ====
Небольшая поправка : так как в плагине, для доступа к базе, используется родной механизм жумлы, то таблица utmtray_credits должна лежать в той же базе что и джумла. Если этот вариант не приемлем, то все обращения к таблице utmtray_credits в коде скрипта надо переписать на родной php механизм.
CREATE TABLE `utmtray_credits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account` int(11) DEFAULT NULL,
`summa` double DEFAULT NULL,
`is_deleted` tinyint(4) DEFAULT '0',
`startdate_human` datetime DEFAULT NULL,
`stopdate_human` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
==== HTML ====
Кредит позволяет получать доступ в интернет при отрицательном балансе. К примеру, при кредите размером 250руб. вы сможете пользоваться интернетом до баланса вашего счета -250руб. Услуга Кредит платная, стоимость услуги списывается со счета сразу, в момент активации услуги.
Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.
{user_credit}{change_credit_message}
Баланс | {balance} |
Кредит | {current_credit} |
Кредит действителен до | {current_credit_date} |
Размер возможного кредита | {max_credit_sum} |
Операции с кредитом
|
{form_change_credit}
|
==== Пример ====
Кредит позволяет получать доступ в интернет при отрицательном балансе. К примеру, при кредите размером 250руб. вы сможете пользоваться интернетом до баланса вашего счета -250руб. Услуга Кредит платная, стоимость услуги списывается со счета сразу, в момент активации услуги. Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.
|
Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.
Баланс | 2992.97 руб. |
Кредит | 0.00 руб. |
Кредит действителен до |
|
Размер возможного кредита | 10.00 руб. |
Операции с кредитом
|
|