Index: Keeper.pm =================================================================== --- Keeper.pm (revision 280) +++ Keeper.pm (revision 281) @@ -54,7 +54,7 @@ sub logoff { my $self = shift; - my %opts = @_; + my (%opts) = @_; my $sid = _get_session_id (); my $session = _get_session_object ( $sid ); @@ -63,7 +63,7 @@ my $session_id = $session->{_session_id}; if (!$sid || $sid ne $session_id) { warn "LOGOFF: New or deprecated session. Old sid = '$sid', new sid = '$session_id'" if $DEBUG; - _store_session_id ($session_id) + _store_session_id ($session_id, %opts) } else { if ( exists $opts{clear} ) { my @clear = qw( id email login name nick type status ltime ); @@ -123,7 +123,7 @@ my $value = $session->{$name}; if (!$sid || $sid ne $session_id) { warn "GET_VALUE: New or deprecated session. Old sid = '$sid', new sid = '$session_id'" if $DEBUG; - _store_session_id ($session_id); + _store_session_id ($session_id, %opts); } untie %$session; return $value; @@ -133,6 +133,7 @@ sub store_value { my ($self, %opts) = @_; + my $domain = delete $opts{domain}; my $sid = delete $opts{_session_id} || _get_session_id (); my $session = _get_session_object ( $sid ); return unless ref $session; @@ -144,7 +145,7 @@ my $session_id = $session->{_session_id}; if (!$sid || $sid ne $session_id) { warn "STORE_VALUE: New or deprecated session. Old sid = '$sid', new sid = '$session_id'" if $DEBUG; - _store_session_id ($session_id); + _store_session_id ($session_id, domain => $domain); } untie %$session; return 1; @@ -163,7 +164,7 @@ my $session_id = $session->{_session_id}; if (!$sid || $sid ne $session_id) { warn "DELETE_VALUE: New or deprecated session. Old sid = '$sid', new sid = '$session_id'" if $DEBUG; - _store_session_id ($session_id); + _store_session_id ($session_id, %opts); } else { delete $session->{$key} if exists $session->{$key}; } @@ -175,6 +176,7 @@ sub get_session { my $self = shift; + my (%opts) = @_; my $sid = _get_session_id () || ''; my $session = _get_session_object ($sid); @@ -184,11 +186,12 @@ my %ret = %$session; if (!$sid || $sid ne $session_id) { warn "\nGET_SESSION: New or deprecated session. Old sid = '$sid', new sid = '$session_id'\n" if $DEBUG; - _store_session_id ($session_id); + _store_session_id ($session_id, %opts); } untie %$session; - return \%ret; + my $session_object = session::Session->new( %ret ); + return $session_object; } @@ -197,9 +200,10 @@ sub _store_session_id { my $sid = shift; + my (%opts) = @_; return unless $sid; my $cookie = Apache::Cookie->new ($request->r(), - -domain => $state->{session}->domain, + -domain => $opts{domain} || $state->{session}->domain, -name => $state->{session}->cookie, -expires=> $state->{session}->expires, -value => $sid, @@ -212,9 +216,11 @@ sub _get_session_id { + my $keyname = shift || $state->{session}->cookie; + my %cookies = Apache::Cookie->fetch; warn Dumper(\%cookies) if $DEBUG; - my $cookie = $cookies{$state->{session}->cookie}; + my $cookie = $cookies{$keyname}; # Вытаскиваем SID из куки my $sid = $cookie->value() || '' if $cookie; @@ -301,4 +307,27 @@ } +sub _get_hash_from_profile { + my $profile = shift; + return unless ref $profile; + + my %data = ( + id => $profile->id, + name => $profile->name, + email => $profile->email, + login => $profile->login, + status => $profile->status, + ltime => time, + ); + my ($type_prop) = grep { $_->{attr} eq 'type' } $profile->structure; + $data{type} = $profile->type if $type_prop; + my ($ava_prop) = grep { $_->{attr} eq 'avatar' } $profile->structure; + if ( $ava_prop ) { + my $avatar = $profile->get_image('avatar'); + $data{avatar} = $avatar->{mini}{filename} if ref $avatar && exists $avatar->{filename}; + } + + return %data; +} + 1;