X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FActsAsList.pm;h=ee49f4aed2251e62d61d3c10e697e886c74ab98b;hb=2fd17923352490ab2c797c641a9c1fd19f8320f4;hp=8f3333ef41513fdf4b1820ac21d9d5ec8856531a;hpb=3dc3b056259f35b6fcf6656da6a652c024fee3b5;p=kivitendo-erp.git diff --git a/SL/DB/Helper/ActsAsList.pm b/SL/DB/Helper/ActsAsList.pm index 8f3333ef4..ee49f4aed 100644 --- a/SL/DB/Helper/ActsAsList.pm +++ b/SL/DB/Helper/ActsAsList.pm @@ -14,12 +14,13 @@ sub import { my ($class, @params) = @_; my $importing = caller(); + configure_acts_as_list($importing, @params); + $importing->before_save( sub { SL::DB::Helper::ActsAsList::set_position(@_) }); $importing->before_delete(sub { SL::DB::Helper::ActsAsList::remove_position(@_) }); - # Use 'goto' so that Exporter knows which module to import into via - # 'caller()'. - goto &Exporter::import; + # Don't 'goto' to Exporters import, it would try to parse @params + __PACKAGE__->export_to_level(1, $class, @EXPORT); } # @@ -39,7 +40,7 @@ sub move_position_down { sub remove_from_list { my ($self) = @_; - my $worker = sub { + return $self->db->with_transaction(sub { remove_position($self); # Set to -1 manually because $self->update_attributes() would @@ -55,9 +56,7 @@ sub remove_from_list { SQL $self->db->dbh->do($sql, undef, $self->$primary_key_col); $self->$column(undef); - }; - - return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker); + }); } sub add_to_list { @@ -108,12 +107,10 @@ sub add_to_list { ${group_by} SQL - my $worker = sub { + return $self->db->with_transaction(sub { $self->db->dbh->do($query, undef, $new_position - 1, @values); $self->update_attributes($column => $new_position); - }; - - return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker); + }); } sub get_next_in_list { @@ -143,7 +140,7 @@ sub reorder_list { my $self = ref($class_or_self) ? $class_or_self : $class_or_self->new; my $column = column_name($self); - my $result = $self->db->do_transaction(sub { + my $result = $self->db->with_transaction(sub { my $query = qq|UPDATE | . $self->meta->table . qq| SET ${column} = ? WHERE id = ?|; my $sth = $self->db->dbh->prepare($query) || die $self->db->dbh->errstr; @@ -152,6 +149,8 @@ sub reorder_list { } $sth->finish; + + 1; }); return $result; @@ -322,7 +321,7 @@ column =head1 SYNOPSIS package SL::DB::SomeObject; - use SL::DB::Helper::ActsAsList; + use SL::DB::Helper::ActsAsList [ PARAMS ]; package SL::Controller::SomeController; ... @@ -347,7 +346,8 @@ in the table plus one. When the object is deleted all positions greater than the object's old position are decreased by one. -The column name to use can be configured via L. +C will be given to L and can be used to +set the column name. =head1 CLASS FUNCTIONS @@ -355,8 +355,8 @@ The column name to use can be configured via L. =item C -Configures the mixin's behaviour. C<%params> can contain the following -values: +Configures the mixin's behaviour. Will get called automatically with the +include parameters. C<%params> can contain the following values: =over 2