==== XML ==== URFA Credit Kayfolom ekorepov@ukhta-inform.ru authorUrl 2009 c license 1.0 description credit.php ==== 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 = '
'; if (isset($uri->_vars['urfa_credit_type'])) { unset($uri->_vars['urfa_credit_type']); } if (isset($uri->_vars['urfa_credit_accept'])) { unset($uri->_vars['urfa_credit_accept']); } $form_footer = '
'; $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 дней.

Баланс

2448.72 руб.

Кредит

3000.00 руб.

Кредит действителен до

Размер возможного кредита

0.00 руб.

Операции с кредитом

Удалить кредит (Бесплатная услуга)

Я уверен что хочу удалить кредит


Кредит позволяет получать доступ в интернет при отрицательном балансе. К примеру, при кредите размером 250руб. вы сможете пользоваться интернетом до баланса вашего счета -250руб. Услуга Кредит платная, стоимость услуги списывается со счета сразу, в момент активации услуги.

Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.

Баланс

2992.97 руб.

Кредит

0.00 руб.

Кредит действителен до

Размер возможного кредита

10.00 руб.

Операции с кредитом

На 1 неделю (стоимость услуги 20р.)
На 2 недели (стоимость услуги 50р.)
На 3 недели (стоимость услуги 120р.)
На месяц (30 дней) (стоимость услуги 250р.)

Я понимаю и принимаю условия установки кредита