package Bric::App::Event; =head1 NAME Bric::App::Event - Exports simple functions for managing events. =head1 VERSION $LastChangedRevision$ =cut # Grab the Version Number. require Bric; our $VERSION = Bric->VERSION; =head1 DATE $LastChangedDate: 2006-03-18 01:26:34 +0100 (Sat, 18 Mar 2006) $ =head1 SYNOPSIS use Bric::App::Event qw(:all); log_event($name, $obj, $init); commit_events(); =head1 DESCRIPTION =cut ################################################################################ # Dependencies ################################################################################ # Standard Dependencies use strict; ################################################################################ # Programmatic Dependences use Bric::App::Session qw(get_user_object); use Bric::Util::Event; use Bric::Util::Time qw(:all); ################################################################################ # Inheritance ################################################################################ use base qw(Exporter); our @EXPORT_OK = qw(log_event commit_events clear_events); our %EXPORT_TAGS = (all => \@EXPORT_OK); ################################################################################ # Function and Closure Prototypes ################################################################################ ################################################################################ # Constants ################################################################################ use constant DEBUG => 0; ################################################################################ # Fields ################################################################################ # Public Class Fields our $events = []; ################################################################################ # Private Class Fields #my $events = []; ################################################################################ ################################################################################ # Instance Fields ################################################################################ # Class Methods ################################################################################ =head1 INTERFACE =head2 Constructors NONE. =head2 Destructors =over 4 =item $p->DESTROY Dummy method to prevent wasting time trying to AUTOLOAD DESTROY. B NONE. B NONE. B NONE. =back =cut sub DESTROY {} ################################################################################ =head2 Public Class Methods NONE. =head2 Public Functions =over 4 =item my $bool = log_event($key_name, $obj, $init) Queues an event for logging. Pass in the following arguments: =over 4 =item $key_name The key name of the event to log. Required. =item $obj The object for which the event is being logged. Required. =item $init The attribute values for this event. Required for those event types that require them. See Bric::Util::EventType and Bric::Util::Event for more information. B NONE. B NONE. B NONE. =back =cut sub log_event { my ($key_name, $obj, $attr) = @_; push @$events, { key_name => $key_name, obj => $obj, attr => $attr, user => get_user_object, timestamp => strfdate(), }; } =item my $bool = commit_events() Goes through the queue of events created by calls to log_event() and actually logs them to the database. B See Bric::Util::Event::new(). B NONE. B NONE. =cut sub commit_events { # Commit in alphabetical order to prevent deadlocks. Bric::Util::Event->new($_) for sort { $a->{key_name} cmp $b->{key_name} } @$events; @$events = (); return 1; } =item my $bool = clear_events() Deletes queue of events so that they won't be logged. Used to prevent event logging when an error has occurred and all changes have been rolled back. B NONE. B NONE. B NONE. =cut sub clear_events { @$events = (); return 1; } =back =head1 PRIVATE =head2 Private Class Methods NONE. =head2 Private Instance Methods NONE. =head2 Private Functions NONE. =cut 1; __END__ =head1 NOTES NONE. =head1 AUTHOR David Wheeler =head1 SEE ALSO L, L =cut