Projekt

Allgemein

Profil

Herunterladen (1,82 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::Auth::SessionValue;

use strict;

# Classes that overload stringification must be known before
# YAML::Load() is called.
use SL::Locale::String ();

use Scalar::Util qw(weaken);

use SL::DBUtils;
use SL::YAML;

sub new {
my ($class, %params) = @_;

my $self = bless {}, $class;

map { $self->{$_} = $params{$_} } qw(auth key value auto_restore modified);

$self->{fetched} = exists $params{value};
$self->{parsed} = !$params{raw} && exists $params{value};

# delete $self->{auth};
# $::lxdebug->dump(0, "NEW", $self);
# $self->{auth} = $params{auth};

weaken $self->{auth};

return $self;
}

sub get {
my ($self) = @_;
return $self->_fetch->_parse->{value};
}

sub get_dumped {
my ($self) = @_;
no warnings 'once';
local $YAML::Stringify = 1;
return SL::YAML::Dump($self->get);
}

sub _fetch {
my ($self) = @_;

return $self if $self->{fetched};
return $self if !$self->{auth}->session_tables_present;

my $dbh = $self->{auth}->dbconnect;
my $query = qq|SELECT sess_value FROM auth.session_content WHERE (session_id = ?) AND (sess_key = ?)|;
($self->{value}) = selectfirst_array_query($::form, $dbh, $query, $self->{auth}->get_session_id, $self->{key});
$self->{fetched} = 1;

return $self;
}

sub _parse {
my ($self) = @_;

$self->{value} = SL::YAML::Load($self->{value}) unless $self->{parsed};
$self->{parsed} = 1;

return $self;
}

sub _load_value {
my ($self, $value) = @_;

return { simple => 1, data => $value } if $value !~ m/^---/;

my %params = ( simple => 1 );
eval {
my $data = SL::YAML::Load($value);

if (ref $data eq 'HASH') {
map { $params{$_} = $data->{$_} } keys %{ $data };
$params{simple} = 0;

} else {
$params{data} = $data;
}

1;
} or $params{data} = $value;

return \%params;
}

1;
(8-8/8)