<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/plugin-install.dtd"> <install version="1.5" type="plugin" group="content"> <name>URFA Credit</name> <author>Kayfolom</author> <authorEmail>ekorepov@ukhta-inform.ru</authorEmail> <authorUrl>authorUrl</authorUrl> <creationDate>2009</creationDate> <copyright>c</copyright> <license>license</license> <version>1.0</version> <description>description</description> <files> <filename plugin="credit">credit.php</filename> </files> <params /> </install>
<?php defined( '_JEXEC' ) or die( 'Restricted access' ); @ini_set("display_errors", "1"); error_reporting(E_ALL); jimport( 'joomla.plugin.plugin' ); jimport( 'joomla.database.database' ); require_once("./urfa/URFAClient.php"); //require_once("./urfa/URFAConfig.php"); $mainframe->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.'<BR>'; //*************************** Получение суииы платежей за месяц конец 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.'<BR>'; $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.'<BR>'; $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 METHOD="POST">'; 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>'; $form_body = ''; if ($current_credit['credit']==0) { $form_body = $form_body.'<input name="urfa_credit_type" type="radio" value="1" checked> На 1 неделю (стоимость услуги 20р.) <BR>'; $form_body = $form_body.'<input name="urfa_credit_type" type="radio" value="2" align=left> На 2 недели (стоимость услуги 50р.) <BR>'; $form_body = $form_body.'<input name="urfa_credit_type" type="radio" value="3"> На 3 недели (стоимость услуги 120р.) <BR>'; $form_body = $form_body.'<input name="urfa_credit_type" type="radio" value="4"> На месяц (30 дней) (стоимость услуги 250р.) <BR>'; $form_body = $form_body.'<BR>'; $form_body = $form_body.'<input name="urfa_credit_accept" type="checkbox" value="accepted">Я понимаю и принимаю условия установки кредита</input>'; } else { $form_body = $form_body.'<input name="urfa_credit_type" type="radio" value="0"> Удалить кредит (Бесплатная услуга) <BR>'; $form_body = $form_body.'<BR>'; $form_body = $form_body.'<input name="urfa_credit_accept" type="checkbox" value="accepted">Я уверен что хочу удалить кредит</input>'; } $form_body = $form_body.'<BR> <BR> <input type="submit" value="Выполнить">'; $form_change_credit = $form_title.$form_body.$form_footer; if ($max_credit_sum==0 && $current_credit['credit']==0) { $form_change_credit='Вы не можете установить кредит. <BR> Нет платежей за последние 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); } }
Скрипт удаления просроченных кредитов (ставим запуск по крону к примеру раз в час)
<?php // @ini_set("display_errors", "1"); // error_reporting(E_ALL); require_once("/var/www/html/stat/urfa/URFAClient.php"); $UTMCore_Login='lalal'; $UTMCore_Password='ldllslsla'; $db_host='127.0.0.1:3306'; $db_base='joomla'; $db_user='sfsfsfesr'; $db_password='sfsdgsdgbdfgbdf'; $db_connect=mysql_connect($db_host,$db_user,$db_password) or die ("Connect failed"); mysql_select_db($db_base,$db_connect); try { $urfa_admin = new URFAClient_Admin($UTMCore_Login, $UTMCore_Password); } catch (Exception $exception) { echo "Error in line ", $exception->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); } ?>
Небольшая поправка : так как в плагине, для доступа к базе, используется родной механизм жумлы, то таблица 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;
Кредит позволяет получать доступ в интернет при отрицательном балансе. К примеру, при кредите размером 250руб. вы сможете пользоваться интернетом до баланса вашего счета -250руб. Услуга Кредит платная, стоимость услуги списывается со счета сразу, в момент активации услуги.
Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.
{user_credit}{change_credit_message}
Баланс | {balance} |
Кредит | {current_credit} |
Кредит действителен до | {current_credit_date} |
Размер возможного кредита | {max_credit_sum} |
Операции с кредитом
|
{form_change_credit}
|
Кредит позволяет получать доступ в интернет при отрицательном балансе. К примеру, при кредите размером 250руб. вы сможете пользоваться интернетом до баланса вашего счета -250руб. Услуга Кредит платная, стоимость услуги списывается со счета сразу, в момент активации услуги. Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.
|
Кредит позволяет получать доступ в интернет при отрицательном балансе. К примеру, при кредите размером 250руб. вы сможете пользоваться интернетом до баланса вашего счета -250руб. Услуга Кредит платная, стоимость услуги списывается со счета сразу, в момент активации услуги.
Размер возможного кредита определяется суммой ваших платежей за последние 30 дней.
Баланс | 2992.97 руб. |
Кредит | 0.00 руб. |
Кредит действителен до |
|
Размер возможного кредита | 10.00 руб. |
Операции с кредитом
|
|