epic-s6ts
[kivitendo-erp.git] / SL / SessionFile.pm
index 69997e9..8392640 100644 (file)
@@ -13,6 +13,7 @@ use POSIX qw(strftime);
 use Rose::Object::MakeMethods::Generic
 (
  scalar => [ qw(fh file_name) ],
+ 'scalar --get_set_init' => [ qw(session_id) ],
 );
 
 sub new {
@@ -20,10 +21,16 @@ sub new {
 
   my $self   = $class->SUPER::new;
 
+  if ($params{session_id}) {
+    $self->session_id($params{session_id})
+  }
+
   my $path   = $self->prepare_path;
-  $file_name =~ s:.*/::g;
+  $file_name =~ s{.*/}{}g;
   $file_name =  "${path}/${file_name}";
 
+  $self->file_name($file_name);
+
   if ($params{mode}) {
     my $mode = $params{mode};
 
@@ -35,11 +42,14 @@ sub new {
     $self->fh(IO::File->new($file_name, $mode));
   }
 
-  $self->file_name($file_name);
-
   return $self;
 }
 
+sub open {
+  my ($self, $mode) = @_;
+  return $self->fh(IO::File->new($self->file_name, $mode));
+}
+
 sub exists {
   my ($self) = @_;
   return -f $self->file_name;
@@ -59,18 +69,22 @@ sub displayable_mtime {
 }
 
 sub get_path {
-  die "No session ID" unless $::auth->get_session_id;
-  return "users/session_files/" . $::auth->get_session_id;
+  die "No session ID" unless $_[0]->session_id;
+  return "users/session_files/" . $_[0]->session_id;
 }
 
 sub prepare_path {
-  my $path = get_path();
+  my $path = $_[0]->get_path;
   return $path if -d $path;
   mkpath $path;
   die "Creating ${path} failed" unless -d $path;
   return $path;
 }
 
+sub init_session_id {
+  $::auth->get_session_id;
+}
+
 sub destroy_session {
   my ($class, $session_id) = @_;
 
@@ -139,6 +153,10 @@ Returns the full relative file name associated with this instance. If
 it has been created for "customer.csv" then the value returned might
 be C<users/session_files/e8789b98721347/customer.csv>.
 
+=item C<open [%params]>
+
+Opens the file_name given at creation with the given parameters.
+
 =item C<exists>
 
 Returns trueish if the file exists.
@@ -162,7 +180,7 @@ C<22.01.2011 14:12:22>.
 =item C<get_path>
 
 Returns the name of the session-specific directory used for file
-storage relative to the Lx-Office installation folder.
+storage relative to the kivitendo installation folder.
 
 =item C<prepare_path>