Revision 525 (by ahitrov, 2015/11/24 12:45:58) Payture, the beginning

package payments::State;

use strict;
use warnings 'all';
use vars qw($AUTOLOAD);


sub new {
	my ($proto) = @_;
	my $class = ref($proto) || $proto;
	my $self = {};
	bless $self, $class;

	# configured
	$self->{debug} =		(lc('') eq 'yes');
	$self->{project} =		'';

	# зашитая конфигурация плагина
	$self->{db_type} =		'none';		### For REAL database use 'remote'
	$self->{db_keepalive} =	0;
	$self->{db_host} =		'';
	$self->{db_name} =		'';
	$self->{db_user} =		'';
	$self->{db_password} =	'';
	$self->{db_port} =		'';
	$self->{store_method} =		'toast';
	$self->{cascade} =		1;
	$self->{db_prepare} =		0;

	$self->{memcached_enable} =	lc( '' ) eq 'yes' ? 1 : 0;
	$self->{memcached_enable_compress} = 1;
	$self->{memcached_backend} =	'';
	$self->{memcached_servers} =	[qw()];
	$self->{memcached_busy_lock} =	60;
	$self->{memcached_delayed} =	lc('') eq 'yes' ? 1 : 0;

	$self->{serialize_with} =	'json';		### or 'dumper'

	# not implemented really (core compatibility)
	$self->{binary_directory} =	'/nonexistent';
	$self->{data_directory} =	'/nonexistent';
	$self->{images_directory} =	'/nonexistent';
	$self->{preview} =		'0';

	$self->{moneta_app_id} =		'@MNT_ID@';
	$self->{moneta_app_secret} =		'@MNT_SECRET@';
	$self->{moneta_currency_code} =		'@MNT_CURRENCY_CODE@';
	$self->{moneta_test_mode} =		int('@MNT_TEST_MODE@' || 0);
	$self->{moneta_sig_code} =		'@MNT_SIG_CODE@';

	my @valid_ips_default =			qw(
							94.103.26.178	94.103.26.179	94.103.26.180	94.103.26.181
							94.103.26.182	159.255.220.247	159.255.220.248	159.255.220.249
							159.255.220.250	159.255.220.251	159.255.220.252	159.255.220.253
							159.255.220.254
						);

	$self->{xsolla_app_id} =		'@XSO_ID@';
	$self->{xsolla_app_secret} =		'@XSO_SECRET@';
	$self->{xsolla_currency_code} =		'@XSO_CURRENCY_CODE@';
	$self->{xsolla_test_mode} =		int('@XSO_TEST_MODE@' || 0);
	if ( '@XSO_VALID_IPS@' ) {
		$self->{xsolla_valid_ips} =	[qw(@XSO_VALID_IPS@)];
	} else {
		$self->{xsolla_valid_ips} =	\@valid_ips_default;
	}

	$self->{payture_app_id} =		'@PTR_ID@';
	$self->{payture_app_secret} =		'@PTR_SECRET@';
	$self->{payture_backend_secret} =	'@PTR_BACKEND_SECRET@';
	$self->{payture_currency_code} =	'@PTR_CURRENCY_CODE@';
	$self->{payture_test_mode} =		int('@PTR_TEST_MODE@' || 0);
	$self->{payture_sig_code} =		'@PTR_SIG_CODE@';

	$self->_init_();
	$self;	
}

sub info {
	my $self = shift;
	return unless ref $self;

	for (sort keys %{$self->{attributes}}) {
		my $la = length $_;
		warn "\t$_".("\t" x (2-int($la/8))).": $self->{$_}\n";
	}
}

sub _init_ {
	my $self = shift;

	# зашитая конфигурация плагина
	$self->{attributes}->{$_} = 'SCALAR' for qw(
                debug
                project

		db_type
		db_keepalive
		db_host
		db_port
		db_name
		db_user
		db_password
		store_method
		cascade
		db_prepare
		db_client_encoding

		memcached_enable
		memcached_enable_compress
		memcached_backend
		memcached_servers
		memcached_busy_lock
		memcached_delayed

		binary_directory
		data_directory
		images_directory
		preview
	);
}

sub AUTOLOAD {
	my $self = shift;
	my $attribute = $AUTOLOAD;

	$attribute =~ s/.*:://;
	return unless $attribute =~ /[^A-Z]/;  # Отключаем методы типа DESTROY

	if (!exists $self->{attributes}->{$attribute}) {
		warn "Contenido Error (payments::State): Вызов метода, для которого не существует обрабатываемого свойства: ->$attribute()\n";
		return;
	}

	$self->{$attribute} = shift @_ if $#_>=0;
	$self->{$attribute};
}

1;