+package SL::Auth::SessionValue;
+
+use strict;
+
+use Scalar::Util qw(weaken);
+use YAML;
+
+use SL::DBUtils;
+
+sub new {
+ my ($class, %params) = @_;
+
+ my $self = bless {}, $class;
+
+ map { $self->{$_} = $params{$_} } qw(auth key value auto_restore);
+
+ $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) = @_;
+ return YAML::Dump($self->get);
+}
+
+sub _fetch {
+ my ($self) = @_;
+
+ return $self if $self->{fetched};
+
+ 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} = 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 = 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;