Initial commit
[dbsrgits/DBIx-Class-Journal.git] / lib / DBIx / Class / Schema / Journal.pm
index f1a8a14..f4179c4 100644 (file)
@@ -9,21 +9,24 @@ __PACKAGE__->mk_classdata('journal_storage_type');
 __PACKAGE__->mk_classdata('journal_connection');
 __PACKAGE__->mk_classdata('journal_sources'); ## [ source names ]
 __PACKAGE__->mk_classdata('journal_user'); ## [ class, field for user id ]
-__PACKAGE__->mk_classdata('_journal_schema');
+__PACKAGE__->mk_classdata('_journal_schema'); ## schema object for journal
 
 our $VERSION = '0.01';
 
-sub throw_exception
-{
-}
+use strict;
+use warnings;
 
-sub exception_action
-{
-    my $self = shift;
-#    print STDERR Carp::longmess;
+# sub throw_exception
+# {
+# }
+
+# sub exception_action
+# {
+#     my $self = shift;
+# #    print STDERR Carp::longmess;
     
-    $self->next::method(@_);
-}
+#     $self->next::method(@_);
+# }
 
 # sub load_classes
 # {
@@ -37,7 +40,7 @@ sub exception_action
 sub connection
 {
     my $self = shift;
-    $self->next::method(@_);
+    my $schema = $self->next::method(@_);
 
 #   print STDERR join(":", $self->sources), "\n";
 
@@ -61,7 +64,9 @@ sub connection
    $self->_journal_schema($journal_schema->compose_namespace(blessed($self) . '::Journal'));
 
     ## Create auditlog+history per table
-    my %j_sources = @{$self->journal_sources} ? map { $_ => 1 } @{$self->journal_sources} : map { $_ => 1 } $self->sources;
+    my %j_sources = map { $_ => 1 } $self->journal_sources
+                                      ? @{$self->journal_sources}
+                                      : $self->sources;
     foreach my $s_name ($self->sources)
     {
         next unless($j_sources{$s_name});
@@ -80,6 +85,8 @@ sub connection
     $self->_journal_schema->deploy();
     $self->_journal_schema->class('ChangeSet')->belongs_to('user', @{$self->journal_user});
     $self->_journal_schema->storage->disconnect();
+
+    return $schema;
 }
 
 sub get_audit_log_class_name
@@ -126,13 +133,51 @@ sub txn_do
     my $cs = $self->_journal_schema->resultset('ChangeSet');
 
     $self->txn_begin;
-    my $changeset = $cs->create({ ( $self->_journal_schema->current_user() ? ( user_id => $self->_journal_schema->current_user()) : () ),
-#        user_id => $self->_journal_schema->current_user(),
-        session_id => $self->_journal_schema->current_session(),
-    });
+    my %changesetdata;
+    if( defined $self->_journal_schema->current_user() )
+    {
+        $changesetdata{user_id} = $self->_journal_schema->current_user();
+    }
+    if( defined $self->_journal_schema->current_session() )
+    {
+        $changesetdata{session_id} = $self->_journal_schema->current_session();
+    }
+
+#         ( 
+#           $self->_journal_schema->current_user() 
+#           ? ( user_id => $self->_journal_schema->current_user()) 
+#           : (),
+#           $self->_journal_schema->current_session() 
+#           ? ( session_id => $self->_journal_schema->current_session() ) 
+#           : () 
+#         );
+    if(!%changesetdata)
+    {
+        %changesetdata = ( ID => undef );
+    }
+    my $changeset = $cs->create({ %changesetdata });
     $self->_journal_schema->current_changeset($changeset->ID);
 
     $self->next::method($code);
 }
 
+sub changeset_user
+{
+    my ($self, $userid) = @_;
+
+    return $self->_journal_schema->current_user() if(@_ == 1);
+
+    $self->_journal_schema->current_user($userid);
+}
+
+sub changeset_session
+{
+    my ($self, $sessionid) = @_;
+
+    return $self->_journal_schema->current_session() if(@_ == 1);
+
+    $self->_journal_schema->current_session($sessionid);
+}
+
+
 1;