Revision 454 (by ahitrov, 2014/11/27 12:00:33) Session tab name
package session::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->{project}		= '@PROJECT@';
	$self->{debug}			= (lc('@DEBUG@') eq 'yes');
	$self->{contenido_notab}	= 0;
	$self->{tab_name}		= 'Сессии';
	$self->{project_name}		= '@PROJECT_NAME@';
	$self->{default_expire}		= '@DEFAULT_EXPIRE@' || 300;
	$self->{default_object_expire}	= '@DEFAULT_OBJECT_EXPIRE@' || 600;

	# зашитая конфигурация плагина
	$self->{db_type} =		'none';
	$self->{storage} =		'@SESSION_STORAGE@' || 'FILE'; ## Значения: FILE POSTGRES MEMCACHED
	$self->{session_dir} =		'@SESSIONS@';
	$self->{session_directory} =	'@SESSIONS@';

	$self->{domain}		= '@SESSION_DOMAIN@';
	$self->{cookie}		= '@SESSION_COOKIE_NAME@' || 'lsid';
	$self->{expires}	= '@SESSION_EXPIRES@' || '';

	$self->{lifetime}	= '@SESSION_LIFETIME@';
	$self->{lifetime}	*= 3600;
	$self->{checkout}	= $self->{lifetime} - int ($self->{lifetime} / 2);

	$self->{db_keepalive} =	0;
	$self->{db_host} =		'';
	$self->{db_name} =		'';
	$self->{db_user} =		'';
	$self->{db_password} =	'';
	$self->{db_port} =		'';

	$self->{data_directory} =	'';
	$self->{images_directory} =	'';
	$self->{binary_directory} =	'';
	$self->{preview} =		'';
	$self->{store_method} =		'';
	$self->{cascade} =		'';

        $self->{memcached_enable} =             lc( '@MEMCACHED_ENABLE@' ) eq 'yes' ? 1 : 0;
        $self->{memcached_backend} =            '@MEMCACHED_BACKEND@';
        $self->{memcached_select_timeout} =     '@MEMCACHED_SELECT_TIMEOUT@' || 0.2;
        $self->{memcached_servers} =            [qw(@MEMCACHED_SERVERS@)];
        $self->{memcached_enable_compress} =    lc( '@MEMCACHED_ENABLE_COMPRESS@' ) eq 'yes' ? 1 : 0;
        $self->{memcached_delayed} =            lc('@MEMCACHED_DELAYED@') eq 'yes' ? 1 : 0;
        $self->{memcached_set_mode} =           lc('@MEMCACHED_SET_MODE@') eq 'add' ? 'add' : 'set';
        $self->{memcached_busy_lock} =          60;
        $self->{memcached_namespace} =          lc( $self->{'project'} ).'|plugin_session|';

	$self->{memcached_object_expire} =	undef;

	$self->{storage} = 'FILE'		if $self->{storage} eq 'MEMCACHED' && !$self->{memcached_enable};

	$self->{facebook_app_id} =		'@FACEBOOK_APP_ID@';
	$self->{facebook_app_secret} =		'@FACEBOOK_APP_SECRET@';
	$self->{facebook_redirect_uri} =	'@FACEBOOK_REDIRECT_URL@';
	$self->{facebook_scope} =		'@FACEBOOK_SCOPE@';
	$self->{facebook_user_post_url} =	'@FACEBOOK_USER_POST_URL@';

	$self->{vk_app_id} =			'@VK_APP_ID@';
	$self->{vk_app_secret} =		'@VK_APP_SECRET@';
	$self->{vk_redirect_uri} =		'@VK_REDIRECT_URL@';
	$self->{vk_user_post_url} =		'@VK_USER_POST_URL@';

	$self->{mailru_app_id} =		'@MAILRU_APP_ID@';
	$self->{mailru_app_secret} =		'@MAILRU_APP_SECRET@';
	$self->{mailru_redirect_uri} =		'@MAILRU_REDIRECT_URL@';
	$self->{mailru_user_post_url} =		'@MAILRU_USER_POST_URL@';

	$self->{google_app_id} =		'@GOOGLE_APP_ID@';
	$self->{google_app_secret} =		'@GOOGLE_APP_SECRET@';
	$self->{google_redirect_uri} =		'@GOOGLE_REDIRECT_URL@';
	$self->{google_user_post_url} =		'@GOOGLE_USER_POST_URL@';
	$self->{google_scope} =			'@GOOGLE_SCOPE@';

	$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
		tab_name

		db_type
		session_dir
		session_directory
		domain
		cookie
		expires
		storage
		lifetime
		checkout
		db_keepalive
		db_host
		db_port
		db_name
		db_user
		db_password

		memcached_enable
		memcached_servers
		memcached_select_timeout
		memcached_backend
		memcached_enable_compress
		memcached_set_mode
		memcached_object_expire
		memcached_busy_lock
		memcached_delayed
		memcached_namespace

		data_directory
		images_directory
		binary_directory
		preview
		store_method
		cascade
	);
}

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

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

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

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

1;