Содержание

XML

<?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

<?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);
	}
 
?>

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р.)

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


 

 
/home/u18456/wiki.flintnet.ru/www/data/pages/joomla_plugin/credit.txt · Последние изменения: 2010/01/05 17:21 От 82.209.239.137
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki