Author: spadkins
Date: Thu Sep 13 13:04:57 2007
New Revision: 9943

Modified:
   p5ee/trunk/App-Context/lib/App/Context.pm

Log:
Changes for application login logoff

Modified: p5ee/trunk/App-Context/lib/App/Context.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context.pm   (original)
+++ p5ee/trunk/App-Context/lib/App/Context.pm   Thu Sep 13 13:04:57 2007
@@ -1701,19 +1701,63 @@
     my ($self, $session_id, @service_types) = @_;
     $session_id = "default" if (!defined $session_id || $session_id ne "");
     my $session = $self->{sessions}{$session_id};
-    if ($#service_types > -1) {
-        foreach my $service_type (@service_types) {
+    if ($#service_types == -1) {
+
+        my %service_type_seen;
+        foreach my $service_type (keys %{$session->{store}}) {
+            $service_type_seen{$service_type} = 1;
+            push (@service_types,  $service_type);
+        }
+
+        foreach my $service_type (keys %{$session->{cache}}) {
+            if (!$service_type_seen{$service_type}) {
+                push (@service_types,  $service_type);
+            }
+        }
+    }
+
+    foreach my $service_type (@service_types) {
+        if ($service_type ne "SessionObject") {
             delete $session->{store}{$service_type};
             delete $session->{cache}{$service_type};
         }
-    }
-    else {
-        delete $self->{sessions}{$session_id};
-        if ($session eq $self->{session}) {
-            delete $self->{session};
-            $self->{session} = $self->session($session_id);
+        else {
+            my $special_attrib = "ctype|cname|u|p|eu|theme";
+            my ($services, $default_session_object);
+            $services = $session->{store}{SessionObject};
+            if ($services) {
+                foreach my $so_name (keys %$services) {
+                    delete $services->{$so_name} if ($so_name ne "default");
+                }
+            }
+            $services = $session->{cache}{SessionObject};
+            if ($services) {
+                foreach my $so_name (keys %$services) {
+                    delete $services->{$so_name} if ($so_name ne "default");
+                }
+            }
+            $default_session_object = 
$session->{store}{SessionObject}{default};
+            if ($default_session_object) {
+                foreach my $attrib (keys %$default_session_object) {
+                    delete $default_session_object->{$attrib} if ($attrib !~ 
/^$special_attrib$/);
+                }
+            }
+            $default_session_object = 
$session->{cache}{SessionObject}{default};
+            if ($default_session_object) {
+                foreach my $attrib (keys %$default_session_object) {
+                    delete $default_session_object->{$attrib} if ($attrib !~ 
/^$special_attrib$/);
+                }
+            }
         }
     }
+
+    #else {
+    #    delete $self->{sessions}{$session_id};
+    #    if ($session eq $self->{session}) {
+    #        delete $self->{session};
+    #        $self->{session} = $self->session($session_id);
+    #    }
+    #}
     &App::sub_exit() if ($App::trace);
 }
 

Reply via email to