Merge branch 'master' of git@vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / SL / Auth / SessionValue.pm
1 package SL::Auth::SessionValue;
2
3 use strict;
4
5 use Scalar::Util qw(weaken);
6 use YAML;
7
8 use SL::DBUtils;
9
10 sub new {
11   my ($class, %params) = @_;
12
13   my $self = bless {}, $class;
14
15   map { $self->{$_} = $params{$_} } qw(auth key value auto_restore);
16
17   $self->{fetched} =                  exists $params{value};
18   $self->{parsed}  = !$params{raw} && exists $params{value};
19
20   # delete $self->{auth};
21   # $::lxdebug->dump(0, "NEW", $self);
22   # $self->{auth} = $params{auth};
23
24   weaken $self->{auth};
25
26   return $self;
27 }
28
29 sub get {
30   my ($self) = @_;
31   return $self->_fetch->_parse->{value};
32 }
33
34 sub get_dumped {
35   my ($self) = @_;
36   return YAML::Dump($self->get);
37 }
38
39 sub _fetch {
40   my ($self) = @_;
41
42   return $self if $self->{fetched};
43
44   my $dbh          = $self->{auth}->dbconnect;
45   my $query        = qq|SELECT sess_value FROM auth.session_content WHERE (session_id = ?) AND (sess_key = ?)|;
46   ($self->{value}) = selectfirst_array_query($::form, $dbh, $query, $self->{auth}->get_session_id, $self->{key});
47   $self->{fetched} = 1;
48
49   return $self;
50 }
51
52 sub _parse {
53   my ($self) = @_;
54
55   $self->{value}  = YAML::Load($self->{value}) unless $self->{parsed};
56   $self->{parsed} = 1;
57
58   return $self;
59 }
60
61 sub _load_value {
62   my ($self, $value) = @_;
63
64   return { simple => 1, data => $value } if $value !~ m/^---/;
65
66   my %params = ( simple => 1 );
67   eval {
68     my $data = YAML::Load($value);
69
70     if (ref $data eq 'HASH') {
71       map { $params{$_} = $data->{$_} } keys %{ $data };
72       $params{simple} = 0;
73
74     } else {
75       $params{data}   = $data;
76     }
77
78     1;
79   } or $params{data} = $value;
80
81   return \%params;
82 }
83
84 1;