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;