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