Projekt

Allgemein

Profil

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

use strict;

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

e0ba33ff Moritz Bunkus
use Scalar::Util qw(weaken);

use SL::DBUtils;
65b2387a Moritz Bunkus
use SL::YAML;
e0ba33ff Moritz Bunkus
sub new {
my ($class, %params) = @_;

my $self = bless {}, $class;

9b294bec Sven Schöling
map { $self->{$_} = $params{$_} } qw(auth key value auto_restore modified);
e0ba33ff Moritz Bunkus
$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) = @_;
5fed92b8 Sven Schöling
no warnings 'once';
e50a9622 Moritz Bunkus
local $YAML::Stringify = 1;
65b2387a Moritz Bunkus
return SL::YAML::Dump($self->get);
e0ba33ff Moritz Bunkus
}

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

return $self if $self->{fetched};
caa629de Moritz Bunkus
return $self if !$self->{auth}->session_tables_present;
e0ba33ff Moritz Bunkus
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) = @_;

65b2387a Moritz Bunkus
$self->{value} = SL::YAML::Load($self->{value}) unless $self->{parsed};
e0ba33ff Moritz Bunkus
$self->{parsed} = 1;

return $self;
}

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

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

my %params = ( simple => 1 );
eval {
65b2387a Moritz Bunkus
my $data = SL::YAML::Load($value);
e0ba33ff Moritz Bunkus
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;