]> Frank Brehm's Git Trees - books.git/commitdiff
Weiter mit Umlagern der Module
authorFrank Brehm <frank@brehm-online.com>
Tue, 16 Feb 2010 15:42:54 +0000 (15:42 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 16 Feb 2010 15:42:54 +0000 (15:42 +0000)
lib/FrBr/Books.pm
lib/FrBr/Books/Controller/Books.pm
lib/FrBr/Books/Controller/Login.pm
lib/FrBr/Books/Controller/Logout.pm
lib/FrBr/Books/Controller/Serie.pm
lib/FrBr/Books/Controller/SessionOpts.pm
lib/FrBr/Books/Plugin/Ort.pm
lib/FrBr/Books/Plugin/Serie.pm [new file with mode: 0644]
lib/FrBr/Books/Plugin/User.pm [new file with mode: 0644]
lib/FrBr/Books/Util/Serie.pm [deleted file]
lib/FrBr/Books/Util/User.pm [deleted file]

index 2fad0ede4db98260c5dcf6bb232da93f2a0b34ab..983e1e071a4efea657128bb3ea3086821039d833 100644 (file)
@@ -39,12 +39,14 @@ use Catalyst qw/
     Session::State::Cookie
 
     +FrBr::Books::Plugin::Ort
+    +FrBr::Books::Plugin::Serie
+    +FrBr::Books::Plugin::User
     +FrBr::Books::Plugin::Verlag
     +FrBr::Books::Plugin::Waehrung
 
 /;
 
-our $VERSION = '0.03';
+our $VERSION = '0.3';
 {
     my ($rev) = '$Revision$' =~ /(\d+)/;
     $VERSION = sprintf( $VERSION . ".%d", $rev );
index 08c244937106699f402d7d75109ece24103d1111..ea9d380974937cb3becc75d12c8b3db2bb3ef241 100644 (file)
@@ -12,8 +12,6 @@ use FrBr::Books::Util::Author;
 use FrBr::Books::Util::Book;
 use FrBr::Books::Util::Bindungsart;
 use FrBr::Books::Util::Category;
-use FrBr::Books::Util::Serie;
-use FrBr::Books::Util::User;
 
 =head1 NAME
 
@@ -389,7 +387,7 @@ sub sorting : Local {
     if ( $c->request->params->{'restore_defaults'} ) {
         $c->session->{'book_order_criteria'} = [ 'autoren', 'title' ];
         $c->session->{'book_list_page'} = 1;
-        save_user_prefs($c) if $c->user_exists;
+        $c->b_save_user_prefs() if $c->user_exists;
         $c->detach("/books/list");
         return 1;
     }
@@ -421,7 +419,7 @@ sub sorting : Local {
 
         $c->session->{'book_order_criteria'} = $sort_order;
         $c->session->{'book_list_page'} = 1;
-        save_user_prefs($c) if $c->user_exists;
+        $c->b_save_user_prefs() if $c->user_exists;
 
     }
 
@@ -1325,7 +1323,7 @@ sub prepare_data_structures : Private {
     $c->log->debug( get_output_string( $K . "Bindungsarten: ", $c->stash->{'bindungsartenliste'} ) );
 
     # Buchserien zusamensammeln
-    my $serienliste = get_serienliste($c);
+    my $serienliste = $c->b_get_serienliste();
     $c->log->debug( get_output_string( $K . "Serien gesamt: ", $serienliste ) );
     $c->stash->{'serienliste'} = {};
     $c->stash->{'serien_ids'}  = [];
index 6443c00ea819d18cd2bda43b925108b716c25586..c5bb1310a26c0bfdf19b6059f60196e04fa17d65 100644 (file)
@@ -7,7 +7,6 @@ use strict;
 use warnings;
 use base 'Catalyst::Controller';
 use FrBr::Common;
-use FrBr::Books::Util::User;
 
 =head1 NAME
 
@@ -49,7 +48,7 @@ sub index : Private {
         # Attempt to log the user in
         my $rs = $c->model('Schema::Users')->search({ 'login' => $username, 'deleted' => 'n', 'enabled' => 'y' });
         if ($c->authenticate({ 'password' => $password, 'dbix_class' => {  resultset => $rs } })) {
-            restore_user_prefs($c);
+            $c->b_restore_user_prefs();
             $c->response->redirect( $c->web_path('/') );
             return 1;
         } ## end if ( $c->login( $username, $password ) )
index 8d4f8a3d1860805d747faffb0cd5f11c36415e1a..54448ab2c5363a9e7d265e56d7d1d804b256e0ce 100644 (file)
@@ -7,7 +7,6 @@ use strict;
 use warnings;
 use base 'Catalyst::Controller';
 use FrBr::Common;
-use FrBr::Books::Util::User;
 
 =head1 NAME
 
@@ -32,7 +31,7 @@ sub index : Private {
     my $K = ( caller(0) )[3] . "(): ";
 
     if ( $c->user_exists ) {
-        save_user_prefs($c);
+        $c->b_save_user_prefs();
         # Clear the user's state
         $c->logout;
     }
index dd7164970e1b85711a43276368c3830a2672a76d..17f21ef253f239e92c290051bf247c399591ff7b 100644 (file)
@@ -8,7 +8,6 @@ use warnings;
 use base 'Catalyst::Controller';
 
 use FrBr::Common;
-use FrBr::Books::Util::Serie;
 use FrBr::Books::Util::Book;
 
 =head1 NAME
@@ -127,7 +126,7 @@ sub list : Local {
         $c->session->{'serie_list_page'} = $page;
     }
 
-    my ( $liste, $anzahl ) = get_serienliste( $c, 'get_books' => 1, 'page' => $page );
+    my ( $liste, $anzahl ) = $c->b_get_serienliste( 'get_books' => 1, 'page' => $page );
     $c->log->debug( get_output_string( $K, "Erhaltene Liste der Buchserien: ", $liste ) ) if $c->stash->{'debug_level'} >= 2;
     $c->stash->{'serien'} = $liste;
 
@@ -243,7 +242,7 @@ sub form_view : Path('view') {
     }
 
     # Angaben zur Buchserie aus der Datenbank holen
-    my $sliste = get_serienliste( $c, 'get_books' => 1, 'serien_id' => $sid );
+    my $sliste = $c->b_get_serienliste( 'get_books' => 1, 'serien_id' => $sid );
     $c->log->debug( get_output_string( $K, "Erhaltene Serienliste: ", $sliste ) ) if $c->stash->{'debug_level'} >= 2;
 
     unless ( $sliste and scalar( @$sliste ) ) {
@@ -299,7 +298,7 @@ sub delete_serie_form : Path('delete') {
     $c->session->{'delete_serie_id'} = $sid;
 
     # Angaben zur Buchserie aus der Datenbank holen
-    my $sliste = get_serienliste( $c, 'serien_id' => $sid );
+    my $sliste = $c->b_get_serienliste( 'serien_id' => $sid );
     $c->log->debug( get_output_string( $K, "Erhaltene Serienliste: ", $sliste ) ) if $c->stash->{'debug_level'} >= 2;
 
     unless ( $sliste and scalar( @$sliste ) ) {
@@ -329,7 +328,7 @@ sub delete_serie_form : Path('delete') {
 
     if ( $c->request->params->{'really_delete_serie'} and $c->request->params->{'really_delete_serie'} eq 'yes' and $c->request->params->{'do_delete'} ) {
         eval {
-            delete_serie( $c, $sid );
+            $c->b_delete_serie( $sid );
         };
         if ( $@ ) {
             $c->stash->{'error_message'} = $@;
@@ -383,7 +382,7 @@ sub form_edit : Path('edit') {
         return 1;
     }
 
-    my $sliste = get_serienliste( $c, 'get_books' => 1, 'serien_id' => $sid );
+    my $sliste = $c->b_get_serienliste( 'get_books' => 1, 'serien_id' => $sid );
     $c->log->debug( get_output_string( $K, "Erhaltene Serienliste: ", $sliste ) ) if $c->stash->{'debug_level'} >= 2;
 
     unless ( $sliste and scalar( @$sliste ) ) {
@@ -466,7 +465,7 @@ sub do_save_serie : Private {
     my $sid  = undef;
 
     eval {
-               $sid = save_serie( $c, $c->stash->{'serie_edit'} );
+               $sid = $c->b_save_serie( $c->stash->{'serie_edit'} );
         die "Speichern der Buchserie mißlungen." unless $sid;
     };
     if ( $@ ) {
index eb62870a2c5530c2ad4de6bc0f19d816d58fb5a6..543288129c57c4497ff8b955547a8dbd19af8c3f 100644 (file)
@@ -7,7 +7,6 @@ use strict;
 use warnings;
 use base 'Catalyst::Controller';
 use FrBr::Common;
-use FrBr::Books::Util::User;
 
 =head1 NAME
 
@@ -83,7 +82,7 @@ sub index : Private {
         $c->stash->{'books_in_other_list'} = $length;
     }
 
-    save_user_prefs($c) if $c->user_exists();
+    $c->b_save_user_prefs() if $c->user_exists();
 
 }
 
index db946cd0d78a39526a808d625f15274e8abbc442..bb4366aa9b5fcb60d0ec90b0f8d6ca3d790ef924 100644 (file)
@@ -9,7 +9,7 @@ use warnings;
 use Carp qw/croak/;
 use FrBr::Common;
 
-our $VERSION = '0.02';
+our $VERSION = '0.2';
 {
     my ($rev) = '$Revision$' =~ /(\d+)/;
     $VERSION = sprintf( $VERSION . ".%d", $rev );
diff --git a/lib/FrBr/Books/Plugin/Serie.pm b/lib/FrBr/Books/Plugin/Serie.pm
new file mode 100644 (file)
index 0000000..af5064f
--- /dev/null
@@ -0,0 +1,528 @@
+package FrBr::Books::Plugin::Serie;
+
+# $Id$
+# $URL$
+
+use strict;
+use warnings;
+
+use Carp qw/croak/;
+use FrBr::Common;
+
+our $VERSION = '0.2';
+{
+    my ($rev) = '$Revision$' =~ /(\d+)/;
+    $VERSION = sprintf( $VERSION . ".%d", $rev );
+}
+
+#        &get_serienliste
+#        &save_serie
+#        &delete_serie
+
+=head1 NAME
+
+FrBr::Books::Plugin::Serie - Modul fuer Funktionen rund um Buchserien
+
+=head1 METHODS
+
+=cut
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_get_serienliste( $params )
+
+Sammelt alle Buchserien zusammen.
+
+Folgende benannte Parameter koennen ueber $params uebergeben werden:
+
+=over 4
+
+=item B<get_books>
+
+Boolscher Parameter, der aussagt, dass auch die Buecher der Buchserie mit zuammengesammelt werden sollen.
+
+=item I<serien_id>: Die ID einer konkreten Buchserie
+
+=item B<page>
+
+Integer: Zeigt an, welche Seite von Verlagen dargestellt werden soll.
+
+Wenn nicht angegeben, werden alle Verlage zurückgegeben.
+
+=item B<list_length>
+
+Listenlänge einer Seite (wenn seitenweise gewünscht wird).
+
+=back
+
+Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Buchserien, die den uebergebenen Suchkriterien entsprechen, sowie im Listenkontext die Anzahl der Buchserien, die den uebergebenen Suchkriterien entsprechen.
+
+Die zurueckgegebene Array-Ref hat folgenden Aufbau:
+
+  $res = [
+    {
+        'id'                   => 1,
+        'name'                 => 'Perry Rhodan',
+        'descr'                        => 'Abenteuer des Weltraumspezis',
+        'count_books'       => 60,
+        'book_ids'          => [
+            2,
+            22,
+            ...
+        ],
+        'books'             => [
+                 {
+                       'id'                 => 2,
+            'serien_ord_num'     => 60,
+                       'title'              => 'Perry Rhodan - Die Cynos',
+                       'title_original'     => undef,
+                       'untertitel'         => undef,
+                       'bindungsart_id'     => 1,
+                       'bindungsart'        => 'Hartcover',
+                       'orts_id'            => 4,
+                       'isbn'               => undef,
+            'verlags_id'         => 2,
+            'verlags_name'       => 'Bertelsmann',
+                       'buch_nr'            => '0820 4',
+                       'ausgabejahr'        => '1997',
+                       'druckjahr'          => '2007',
+                       'seiten'             => 402,
+                       'preis'              => 18,
+                       'waehrungs_id'       => 1,
+                       'waehrungs_kuerzel'  => '€',
+                       'waehrungs_name'     => 'Euro',
+                       'umrechnung_in_euro' => 1,
+                       'ortsname'           => 'Dachboden',
+                       'ort_beschreibung'   => '',
+                       'ort_ist_statisch'   => 'n',
+                       'autoren'            => [ 'Verschiedene Autoren' ];
+                       'autor_ids'          => [ 2 ];
+          },
+                 {
+                       'id'    => 22,
+            ...
+                 },
+          ...
+               ],
+    },
+    { 'id'     => 2,
+      ...
+    },
+    ...
+  ];
+
+Die Liste ist nach den Serien-Namen alphabetisch sortiert.
+
+Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Buchserien zurueckgegeben.
+
+=cut
+
+sub b_get_serienliste {
+
+    my $c = shift;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    my $params = {};
+    if ( ref($_[0]) and ref($_[0]) eq 'HASH' ) {
+        $params = $_[0];
+    }
+    else {
+        %$params = @_;
+    }
+    $c->log->debug(  get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
+
+    my $list = [];
+       my $anzahl_serien = 0;
+
+       my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
+       my $rows = to_int( $params->{'list_length'} ) ? to_int( $params->{'list_length'} ) : undef;
+    unless ( defined $rows ) {
+           $rows = $c->stash->{'list_length'} || 20 if defined $page;
+    }
+
+    my $search_params = undef;
+       if ( $params->{'serien_id'} ) {
+               $search_params = {
+                       'me.id' => $params->{'serien_id'},
+               };
+       }
+
+       $anzahl_serien = $c->model('Schema::Serien')->count( $search_params );
+    $c->log->debug(  get_output_string( $K, "Anzahl gefundene Serien: ", $anzahl_serien ) ) if $c->stash->{'debug_level'} >= 2;
+
+    my $other_params = {};
+    $other_params->{'order_by'} = [ 'serien_name' ];
+    $other_params->{'select'} = [
+        'me.id',
+        'me.serien_name',
+        'me.descr',
+               { 'count' => 'buch_serie.id' }
+    ];
+    $other_params->{'as'} = [
+        'id',
+        'serien_name',
+        'descr',
+               'count_books',
+    ];
+       $other_params->{'join'} = [ 'buch_serie'];
+       $other_params->{'group_by'} = [ 'id' ];
+
+       if ( $page ) {
+               $other_params->{'rows'} = $rows;
+               $other_params->{'page'} = $page;
+       }
+    for my $serie_rs ( $c->model('Schema::Serien')->search( $search_params, $other_params )->all() ) {
+        my $serie = {};
+        $serie->{'id'}    = $serie_rs->id();
+        $serie->{'name'}  = $serie_rs->serien_name();
+        $serie->{'descr'} = $serie_rs->descr();
+        $serie->{'count_books'} = $serie_rs->get_column('count_books');
+        push @$list, $serie;
+    }
+
+    return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
+    return ( wantarray ? ( $list, $anzahl_serien ) : $list ) unless $params->{'get_books'};
+
+    for my $serie ( @$list ) {
+
+        $serie->{'books'} = [];
+        $serie->{'book_ids'} = [];
+
+        my $sid = $serie->{'id'};
+
+        $search_params = {
+            'buch_serie.serien_id' => $sid,
+        };
+
+        $other_params = {};
+        $other_params->{'join'} = [ 'waehrung', 'ort', 'bindungsart', 'buch_serie', 'verlag', ];
+
+        $other_params->{'order_by'} = [ 'buch_serie.ord_num', 'me.title', ];
+
+               $other_params->{'select'} = [
+                       'me.id',
+            'buch_serie.ord_num',
+                       'me.title',
+                       'me.title_original',
+                       'me.untertitel',
+                       'me.bindungsart_id',
+                       'bindungsart.art_name',
+                       'me.orts_id',
+                       'me.isbn',
+            'me.verlags_id',
+            'verlag.name_short',
+                       'me.buch_nr',
+                       'me.ausgabejahr',
+                       'me.druckjahr',
+                       'me.seiten',
+                       'me.preis',
+                       'me.waehrungs_id',
+                       'waehrung.waehrungs_kuerzel',
+                       'waehrung.waehrungs_name',
+                       'waehrung.umrechnung_in_euro',
+                       'ort.name',
+                       'ort.descr',
+                       'ort.statisch',
+               ];
+
+               $other_params->{'as'} = [
+                       'id',
+            'serien_ord_num',
+                       'title',
+                       'title_original',
+                       'untertitel',
+                       'bindungsart_id',
+                       'bindungsart',
+                       'orts_id',
+                       'isbn',
+            'verlags_id',
+            'verlagsname',
+                       'buch_nr',
+                       'ausgabejahr',
+                       'druckjahr',
+                       'seiten',
+                       'preis',
+                       'waehrungs_id',
+                       'waehrungs_kuerzel',
+                       'waehrungs_name',
+                       'umrechnung_in_euro',
+                       'ortsname',
+                       'ort_beschreibung',
+                       'ort_ist_statisch',
+               ];
+
+               for my $book ( $c->model('Schema::Buecher')->search( $search_params, $other_params )->all() ) {
+
+                       push @{ $serie->{'book_ids'} }, $book->id();
+
+                       my $buch = {};
+                       $buch->{'id'}                 = $book->id();
+                       $buch->{'serien_ord_num'}     = $book->get_column('serien_ord_num');
+                       $buch->{'title'}              = $book->title();
+                       $buch->{'title_original'}     = $book->title_original();
+                       $buch->{'untertitel'}         = $book->untertitel();
+                       $buch->{'bindungsart_id'}     = $book->bindungsart_id();
+                       $buch->{'bindungsart'}        = $book->get_column('bindungsart');
+                       $buch->{'orts_id'}            = $book->orts_id();
+                       $buch->{'isbn'}               = $book->isbn();
+            $buch->{'verlags_id'}         = $book->verlags_id();
+            $buch->{'verlags_name'}       = $book->get_column('verlagsname');
+                       $buch->{'buch_nr'}            = $book->buch_nr();
+                       $buch->{'ausgabejahr'}        = $book->ausgabejahr();
+                       $buch->{'druckjahr'}          = $book->druckjahr();
+                       $buch->{'seiten'}             = $book->seiten();
+                       $buch->{'preis'}              = $book->preis();
+                       $buch->{'waehrungs_id'}       = $book->waehrungs_id();
+                       $buch->{'waehrungs_kuerzel'}  = $book->get_column('waehrungs_kuerzel');
+                       $buch->{'waehrungs_name'}     = $book->get_column('waehrungs_name');
+                       $buch->{'umrechnung_in_euro'} = $book->get_column('umrechnung_in_euro');
+                       $buch->{'ortsname'}           = $book->get_column('ortsname');
+                       $buch->{'ort_beschreibung'}   = $book->get_column('ort_beschreibung');
+                       $buch->{'ort_ist_statisch'}   = $book->get_column('ort_ist_statisch');
+                       $buch->{'autoren'}            = [];
+                       $buch->{'autor_ids'}          = [];
+
+                       my $a_search_params = {};
+                       $a_search_params->{'buch_id'} = $buch->{'id'};
+                       $other_params = {};
+                       $other_params->{'order_by'} = [ 'ord_num' ];
+                       $other_params->{'join'}     = [ 'autor' ];
+                       $other_params->{'select'} = [
+                               'me.buch_id',
+                               'autor.id',
+                               'autor.titel',
+                               'autor.vorname',
+                               'autor.mittelname',
+                               'autor.nachname',
+                               'autor.name_suffix',
+                       ];
+                       $other_params->{'as'} = [
+                               'buch_id',
+                               'autor_id',
+                               'titel',
+                               'vorname',
+                               'mittelname',
+                               'nachname',
+                               'name_suffix',
+                       ];
+                       for my $ref ( $c->model('Schema::Autor2buch')->search( $a_search_params, $other_params )->all() ) {
+                               my $aid = $ref->get_column('autor_id');
+                               my @N;
+                               push @N, $ref->get_column('titel') if $ref->get_column('titel');
+                               push @N, $ref->get_column('vorname') if $ref->get_column('vorname');
+                               push @N, $ref->get_column('mittelname') if $ref->get_column('mittelname');
+                               push @N, $ref->get_column('nachname');
+                               push @N, $ref->get_column('name_suffix') if $ref->get_column('name_suffix');
+                               my $autor = join( " ", @N );
+                               push @{ $buch->{'autoren'} },   $autor;
+                               push @{ $buch->{'autor_ids'} }, $aid;
+                       }
+
+                       push @{ $serie->{'books'} }, $buch;
+
+               }
+    }
+
+    return ( wantarray ? ( $list, $anzahl_serien ) : $list );
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_save_serie( $serie )
+
+=cut
+
+sub b_save_serie {
+
+    my $c     = shift;
+    my $serie = shift;
+    my $K     = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+    $c->log->debug( get_output_string( $K, "Zu speichernde Serie: ", $serie ) ) if $c->stash->{'debug_level'} >= 2;
+
+    my $storage = $c->model('Schema')->storage;
+    my $save_books = ( $serie->{'id'} and $serie->{'book_ids'} and ref($serie->{'book_ids'}) and ref($serie->{'book_ids'}) eq 'ARRAY') ? 1 : 0;
+    $c->log->debug( $K . "Speichern der Bücher erforderlich: " . ( $save_books ? 'ja' : 'nein' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+    my $save_func = sub {
+        my ( $storage, $dbh, $serien_id, $serien_name, $serien_desc ) = @_;
+        my $sql = <<ENDE;
+INSERT INTO `serien` (
+    `id`, `serien_name`, `descr` )
+  VALUES (
+    ?, ?, ? )
+  ON DUPLICATE KEY UPDATE
+    `id` = LAST_INSERT_ID(`id`), `serien_name` = ?, `descr` = ?
+ENDE
+
+        if ( $storage->debug() ) {
+            my $text = $sql;
+            $text =~ s/\s+$//;
+            $text .= ": " . join( ", ", map { $dbh->quote($_) } ( $serien_id, $serien_name, $serien_desc, $serien_name, $serien_desc ) ) . "\n";
+            warn $text;
+        }
+
+        my $sth = $dbh->prepare($sql);
+        $sth->execute( $serien_id, $serien_name, $serien_desc, $serien_name, $serien_desc );
+    };
+
+    $storage->dbh_do( $save_func, $serie->{'id'}, $serie->{'name'}, $serie->{'descr'}  );
+    my $serien_id = $storage->last_insert_id();
+    return $serien_id unless $serien_id;
+
+    $c->b_save_serien_buecher( $c, $serien_id, $serie->{'book_ids'} ) if $save_books;
+
+    return $serien_id;
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_save_serien_buecher( $serien_id, @$book_ids )
+
+=cut
+
+sub b_save_serien_buecher {
+
+    my $c         = shift;
+    my $serien_id = shift;
+    my $book_ids  = shift;
+
+    my $K    = ( caller(0) )[3] . "(): ";
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    my $storage = $c->model('Schema')->storage;
+    my $dbh = $storage->dbh();
+
+    my $anzahl = 0;
+    $anzahl = scalar( @$book_ids );
+
+    my $in = '';
+    $in = '(' . join( ", ", map { $dbh->quote($_) } @$book_ids ) . ")" if $anzahl;
+
+    my $sql;
+    $sql = <<ENDE;
+DELETE FROM `buch2serie`
+ WHERE `serien_id` = ?
+ENDE
+    $sql .= "   AND `buch_id` NOT IN " . $in . "\n" if $anzahl;
+
+    my $qparams = [];
+    push @$qparams, $serien_id;
+
+    if ( $storage->debug() ) {
+        my $text = $sql;
+        $text =~ s/\s+$//;
+        $text .= ": " . join( ", ", map { $dbh->quote($_) } @$qparams ) . "\n";
+        warn $text;
+    }
+
+    my $sth = $dbh->prepare($sql);
+    $sth->execute( @$qparams );
+
+    return 1 unless $anzahl;
+
+    my $i = 0;
+
+    $sql = <<ENDE;
+INSERT INTO `buch2serie` (
+    `buch_id`, `serien_id`, `ord_num`
+  ) VALUES (
+    ?, ?, ? )
+  ON DUPLICATE KEY UPDATE
+    `ord_num` = ?
+ENDE
+
+    $sth = $dbh->prepare($sql);
+
+    for my $buch_id ( @$book_ids ) {
+
+        $qparams = [];
+        push @$qparams, $buch_id;
+        push @$qparams, $serien_id;
+        push @$qparams, $i;
+        push @$qparams, $i;
+
+        if ( $storage->debug() ) {
+            my $text = $sql;
+            $text =~ s/\s+$//;
+            $text .= ": " . join( ", ", map { $dbh->quote($_) } @$qparams ) . "\n";
+            warn $text;
+        }
+
+        $sth->execute( @$qparams );
+
+        $i++;
+    }
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_delete_serie( $serien_id )
+
+Loescht die Buchserie mit der uebergebenen Serien-Id
+
+=cut
+
+sub b_delete_serie {
+
+    my $c         = shift;
+    my $serien_id = shift;
+    my $K         = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen fuer Serien-Id " . ( defined $serien_id ? $serien_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+    return undef unless $serien_id and to_int($serien_id);
+    $serien_id = to_int($serien_id);
+
+    my $schema =  $c->model('Schema')->{'schema'};
+
+       # Raus, wenn in der Serie noch Buecher sind ...
+       if ( $c->model('Schema::Buch2serie')->count( { 'serien_id' => $serien_id, } ) ) {
+               my $msg = 'In der Buchserie sind noch Bücher enthalten.';
+               die $msg . "\n";
+       }
+
+       # Das eigentliche Löschen
+    my $coderef = sub {
+        $c->model('Schema::Serien')->search( { 'id' => $serien_id } )->delete();
+    };
+
+    my $rs;
+    eval {
+        $rs = $schema->txn_do($coderef);
+    };
+
+    if ($@) {                             # Transaction failed
+               my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
+               die $msg . "\n";
+               return undef;
+    }
+       return 1;
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head1 AUTHOR
+
+Frank Brehm
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
+
+__END__
+
+# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
diff --git a/lib/FrBr/Books/Plugin/User.pm b/lib/FrBr/Books/Plugin/User.pm
new file mode 100644 (file)
index 0000000..a5742d2
--- /dev/null
@@ -0,0 +1,146 @@
+package FrBr::Books::Plugin::User;
+
+# $Id$
+# $URL$
+
+use strict;
+use warnings;
+
+use FrBr::Common;
+use YAML;
+
+our $VERSION = '0.2';
+{
+    my ($rev) = '$Revision$' =~ /(\d+)/;
+    $VERSION = sprintf( $VERSION . ".%d", $rev );
+}
+
+=head1 NAME
+
+FrBr::Books::Plugin::User - Modul fuer Funktionen rund um benutzer
+
+=head1 METHODS
+
+=cut
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_save_user_prefs()
+
+Sichert die Einstellungen eines angemeldeten Benutzers
+
+=cut
+
+sub b_save_user_prefs {
+
+    my $c = shift;
+    my $K = ( caller(0) )[3] . "(): ";
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    return undef unless $c->user_exists();
+    my $user_id = $c->user->get('user_id');
+    $c->log->debug( $K . "Suche User-ID: ", ( defined $user_id ? $user_id : '<undef>' ) ) if $c->stash->{'debug_level'} > 2;
+
+    my $prefs = {};
+
+    # allgemeine Listenlänge
+    $prefs->{'list_length'} = $c->stash->{'list_length'};
+
+    # Sortierkriterien der Buchliste
+    $prefs->{'book_order_criteria'} = $c->session->{'book_order_criteria'} if $c->session->{'book_order_criteria'};
+
+    # Filter für Buchliste speichern
+    $prefs->{'booklist_filter'} = $c->session->{'booklist_filter'} if $c->session->{'booklist_filter'};
+
+    # Anzahl der angezeigten zugeordneten Bücher in einer anderen Liste
+    $prefs->{'books_in_other_list'} = $c->stash->{'books_in_other_list'};
+
+    my $dump = Dump($prefs);
+    $c->model('Schema::UserAdd')->search( { 'user_id' => $user_id } )->update( { 'prefs' => $dump } ) ;
+
+    return 1;
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head2 $c->b_restore_user_prefs()
+
+Holt die Einstellungen aus der Nutzertablle raus und beamt diese in die aktuelle Session
+
+=cut
+
+sub b_restore_user_prefs {
+
+    my $c = shift;
+    my $K = ( caller(0) )[3] . "(): ";
+    my $k = $c->stash->{'debug_level'} ? $K : '';
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    return undef unless $c->user_exists();
+    my $user_id = $c->user->get('user_id');
+    $c->log->debug( $K . "Suche User-ID: ", ( defined $user_id ? $user_id : '<undef>' ) ) if $c->stash->{'debug_level'} > 2;
+
+    my $prefs = undef;
+    my $dump  = undef;
+
+    $dump = $c->model('Schema::UserAdd')->search( { 'user_id' => $user_id } )->first()->prefs();
+
+    return unless $dump;
+    eval {
+        $prefs = Load($dump);
+    };
+    if ( $@ ) {
+        $c->log->warn( $k . "Fehler beim Restore der Nutzereinstellungen: " . $@ );
+        return; 
+    }
+    return unless $prefs;
+
+    if ( $prefs->{'list_length'} ) {
+
+        # Seite der Buchliste
+        delete $c->session->{'book_list_page'} if exists $c->session->{'book_list_page'};
+
+        # allgemeine Listenlänge
+        if ( $prefs->{'list_length'} ) {
+            $c->stash->{'list_length'} = $prefs->{'list_length'};
+            $c->session->{'list_length'} = $prefs->{'list_length'};
+        }
+
+        # Anzahl der angezeigten zugeordneten Bücher in einer anderen Liste
+        if ( $prefs->{'books_in_other_list'} ) {
+            $c->stash->{'books_in_other_list'} = $prefs->{'books_in_other_list'};
+            $c->session->{'books_in_other_list'} = $prefs->{'books_in_other_list'};
+        }
+
+    }
+
+    # Sortierkriterien der Buchliste
+    $c->session->{'book_order_criteria'} = $prefs->{'book_order_criteria'} if $prefs->{'book_order_criteria'};
+
+    # Filter für Buchliste speichern
+    $c->session->{'booklist_filter'} = undef;
+    $c->session->{'booklist_filter'} = $prefs->{'booklist_filter'} if $prefs->{'booklist_filter'};
+
+    return 1;
+
+}
+
+#-----------------------------------------------------------------------------------
+
+=head1 AUTHOR
+
+Frank Brehm
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
+1;
+
+__END__
+
+# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
diff --git a/lib/FrBr/Books/Util/Serie.pm b/lib/FrBr/Books/Util/Serie.pm
deleted file mode 100644 (file)
index a11bb03..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-package FrBr::Books::Util::Serie;
-
-# $Id$
-# $URL$
-
-use strict;
-use warnings;
-
-use FrBr::Common;
-
-# Export-Deklarationen
-
-BEGIN {
-
-    use Exporter();
-    our ( $VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS );
-
-    # set the version for version checking
-    $VERSION = 0.1;
-    my ($rev) = '$Revision$' =~ /(\d+)/;
-    $VERSION = sprintf( $VERSION . ".%d", $rev );
-
-    @ISA    = qw(Exporter);
-    @EXPORT = qw(
-        &get_serienliste
-        &save_serie
-        &delete_serie
-    );
-
-    #%EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
-
-    # your exported package globals go here,
-    # as well as any optionally exported functions
-    #@EXPORT_OK   = qw($Var1 %Hashit &func3);
-} ## end BEGIN
-
-our @EXPORT_OK;
-
-=head1 NAME
-
-FrBr::Books::Util::Serie - Modul fuer Funktionen rund um Buchserien
-
-=head1 METHODS
-
-=cut
-
-#-----------------------------------------------------------------------------------
-
-=head2 get_serienliste( $c, $params )
-
-Sammelt alle Buchserien zusammen.
-
-Folgende benannte Parameter koennen ueber $params uebergeben werden:
-
-=over 4
-
-=item B<get_books>
-
-Boolscher Parameter, der aussagt, dass auch die Buecher der Buchserie mit zuammengesammelt werden sollen.
-
-=item I<serien_id>: Die ID einer konkreten Buchserie
-
-=item B<page>
-
-Integer: Zeigt an, welche Seite von Verlagen dargestellt werden soll.
-
-Wenn nicht angegeben, werden alle Verlage zurückgegeben.
-
-=back
-
-Rueckgabe: Eine Array-Ref von Hash-Refs mit allen Buchserien, die den uebergebenen Suchkriterien entsprechen, sowie im Listenkontext die Anzahl der Buchserien, die den uebergebenen Suchkriterien entsprechen.
-
-Die zurueckgegebene Array-Ref hat folgenden Aufbau:
-
-  $res = [
-    {
-        'id'                   => 1,
-        'name'                 => 'Perry Rhodan',
-        'descr'                        => 'Abenteuer des Weltraumspezis',
-        'count_books'       => 60,
-        'book_ids'          => [
-            2,
-            22,
-            ...
-        ],
-        'books'             => [
-                 {
-                       'id'                 => 2,
-            'serien_ord_num'     => 60,
-                       'title'              => 'Perry Rhodan - Die Cynos',
-                       'title_original'     => undef,
-                       'untertitel'         => undef,
-                       'bindungsart_id'     => 1,
-                       'bindungsart'        => 'Hartcover',
-                       'orts_id'            => 4,
-                       'isbn'               => undef,
-            'verlags_id'         => 2,
-            'verlags_name'       => 'Bertelsmann',
-                       'buch_nr'            => '0820 4',
-                       'ausgabejahr'        => '1997',
-                       'druckjahr'          => '2007',
-                       'seiten'             => 402,
-                       'preis'              => 18,
-                       'waehrungs_id'       => 1,
-                       'waehrungs_kuerzel'  => '€',
-                       'waehrungs_name'     => 'Euro',
-                       'umrechnung_in_euro' => 1,
-                       'ortsname'           => 'Dachboden',
-                       'ort_beschreibung'   => '',
-                       'ort_ist_statisch'   => 'n',
-                       'autoren'            => [ 'Verschiedene Autoren' ];
-                       'autor_ids'          => [ 2 ];
-          },
-                 {
-                       'id'    => 22,
-            ...
-                 },
-          ...
-               ],
-    },
-    { 'id'     => 2,
-      ...
-    },
-    ...
-  ];
-
-Die Liste ist nach den Serien-Namen alphabetisch sortiert.
-
-Im Listenkontext wird als zweiter Rückgabewert die Gesamtzahl aller Buchserien zurueckgegeben.
-
-=cut
-
-sub get_serienliste {
-
-    my $c = shift;
-    my $K = ( caller(0) )[3] . "(): ";
-
-    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
-    my $params = {};
-    if ( ref($_[0]) and ref($_[0]) eq 'HASH' ) {
-        $params = $_[0];
-    }
-    else {
-        %$params = @_;
-    }
-    $c->log->debug(  get_output_string( $K, "Uebergebene Parameter: ", $params ) ) if $c->stash->{'debug_level'} >= 2;
-
-    my $list = [];
-       my $anzahl_serien = 0;
-
-       my $page = to_int( $params->{'page'} ) ? to_int( $params->{'page'} ) : undef;
-       my $rows = undef;
-       $rows = $c->stash->{'list_length'} || 20 if defined $page;
-
-    my $search_params = undef;
-       if ( $params->{'serien_id'} ) {
-               $search_params = {
-                       'me.id' => $params->{'serien_id'},
-               };
-       }
-
-       $anzahl_serien = $c->model('Schema::Serien')->count( $search_params );
-    $c->log->debug(  get_output_string( $K, "Anzahl gefundene Serien: ", $anzahl_serien ) ) if $c->stash->{'debug_level'} >= 2;
-
-    my $other_params = {};
-    $other_params->{'order_by'} = [ 'serien_name' ];
-    $other_params->{'select'} = [
-        'me.id',
-        'me.serien_name',
-        'me.descr',
-               { 'count' => 'buch_serie.id' }
-    ];
-    $other_params->{'as'} = [
-        'id',
-        'serien_name',
-        'descr',
-               'count_books',
-    ];
-       $other_params->{'join'} = [ 'buch_serie'];
-       $other_params->{'group_by'} = [ 'id' ];
-
-       if ( $page ) {
-               $other_params->{'rows'} = $rows;
-               $other_params->{'page'} = $page;
-       }
-    for my $serie_rs ( $c->model('Schema::Serien')->search( $search_params, $other_params )->all() ) {
-        my $serie = {};
-        $serie->{'id'}    = $serie_rs->id();
-        $serie->{'name'}  = $serie_rs->serien_name();
-        $serie->{'descr'} = $serie_rs->descr();
-        $serie->{'count_books'} = $serie_rs->get_column('count_books');
-        push @$list, $serie;
-    }
-
-    return ( wantarray ? ( $list, 0 ) : $list ) unless scalar @$list;
-    return ( wantarray ? ( $list, $anzahl_serien ) : $list ) unless $params->{'get_books'};
-
-    for my $serie ( @$list ) {
-
-        $serie->{'books'} = [];
-        $serie->{'book_ids'} = [];
-
-        my $sid = $serie->{'id'};
-
-        $search_params = {
-            'buch_serie.serien_id' => $sid,
-        };
-
-        $other_params = {};
-        $other_params->{'join'} = [ 'waehrung', 'ort', 'bindungsart', 'buch_serie', 'verlag', ];
-
-        $other_params->{'order_by'} = [ 'buch_serie.ord_num', 'me.title', ];
-
-               $other_params->{'select'} = [
-                       'me.id',
-            'buch_serie.ord_num',
-                       'me.title',
-                       'me.title_original',
-                       'me.untertitel',
-                       'me.bindungsart_id',
-                       'bindungsart.art_name',
-                       'me.orts_id',
-                       'me.isbn',
-            'me.verlags_id',
-            'verlag.name_short',
-                       'me.buch_nr',
-                       'me.ausgabejahr',
-                       'me.druckjahr',
-                       'me.seiten',
-                       'me.preis',
-                       'me.waehrungs_id',
-                       'waehrung.waehrungs_kuerzel',
-                       'waehrung.waehrungs_name',
-                       'waehrung.umrechnung_in_euro',
-                       'ort.name',
-                       'ort.descr',
-                       'ort.statisch',
-               ];
-
-               $other_params->{'as'} = [
-                       'id',
-            'serien_ord_num',
-                       'title',
-                       'title_original',
-                       'untertitel',
-                       'bindungsart_id',
-                       'bindungsart',
-                       'orts_id',
-                       'isbn',
-            'verlags_id',
-            'verlagsname',
-                       'buch_nr',
-                       'ausgabejahr',
-                       'druckjahr',
-                       'seiten',
-                       'preis',
-                       'waehrungs_id',
-                       'waehrungs_kuerzel',
-                       'waehrungs_name',
-                       'umrechnung_in_euro',
-                       'ortsname',
-                       'ort_beschreibung',
-                       'ort_ist_statisch',
-               ];
-
-               for my $book ( $c->model('Schema::Buecher')->search( $search_params, $other_params )->all() ) {
-
-                       push @{ $serie->{'book_ids'} }, $book->id();
-
-                       my $buch = {};
-                       $buch->{'id'}                 = $book->id();
-                       $buch->{'serien_ord_num'}     = $book->get_column('serien_ord_num');
-                       $buch->{'title'}              = $book->title();
-                       $buch->{'title_original'}     = $book->title_original();
-                       $buch->{'untertitel'}         = $book->untertitel();
-                       $buch->{'bindungsart_id'}     = $book->bindungsart_id();
-                       $buch->{'bindungsart'}        = $book->get_column('bindungsart');
-                       $buch->{'orts_id'}            = $book->orts_id();
-                       $buch->{'isbn'}               = $book->isbn();
-            $buch->{'verlags_id'}         = $book->verlags_id();
-            $buch->{'verlags_name'}       = $book->get_column('verlagsname');
-                       $buch->{'buch_nr'}            = $book->buch_nr();
-                       $buch->{'ausgabejahr'}        = $book->ausgabejahr();
-                       $buch->{'druckjahr'}          = $book->druckjahr();
-                       $buch->{'seiten'}             = $book->seiten();
-                       $buch->{'preis'}              = $book->preis();
-                       $buch->{'waehrungs_id'}       = $book->waehrungs_id();
-                       $buch->{'waehrungs_kuerzel'}  = $book->get_column('waehrungs_kuerzel');
-                       $buch->{'waehrungs_name'}     = $book->get_column('waehrungs_name');
-                       $buch->{'umrechnung_in_euro'} = $book->get_column('umrechnung_in_euro');
-                       $buch->{'ortsname'}           = $book->get_column('ortsname');
-                       $buch->{'ort_beschreibung'}   = $book->get_column('ort_beschreibung');
-                       $buch->{'ort_ist_statisch'}   = $book->get_column('ort_ist_statisch');
-                       $buch->{'autoren'}            = [];
-                       $buch->{'autor_ids'}          = [];
-
-                       my $a_search_params = {};
-                       $a_search_params->{'buch_id'} = $buch->{'id'};
-                       $other_params = {};
-                       $other_params->{'order_by'} = [ 'ord_num' ];
-                       $other_params->{'join'}     = [ 'autor' ];
-                       $other_params->{'select'} = [
-                               'me.buch_id',
-                               'autor.id',
-                               'autor.titel',
-                               'autor.vorname',
-                               'autor.mittelname',
-                               'autor.nachname',
-                               'autor.name_suffix',
-                       ];
-                       $other_params->{'as'} = [
-                               'buch_id',
-                               'autor_id',
-                               'titel',
-                               'vorname',
-                               'mittelname',
-                               'nachname',
-                               'name_suffix',
-                       ];
-                       for my $ref ( $c->model('Schema::Autor2buch')->search( $a_search_params, $other_params )->all() ) {
-                               my $aid = $ref->get_column('autor_id');
-                               my @N;
-                               push @N, $ref->get_column('titel') if $ref->get_column('titel');
-                               push @N, $ref->get_column('vorname') if $ref->get_column('vorname');
-                               push @N, $ref->get_column('mittelname') if $ref->get_column('mittelname');
-                               push @N, $ref->get_column('nachname');
-                               push @N, $ref->get_column('name_suffix') if $ref->get_column('name_suffix');
-                               my $autor = join( " ", @N );
-                               push @{ $buch->{'autoren'} },   $autor;
-                               push @{ $buch->{'autor_ids'} }, $aid;
-                       }
-
-                       push @{ $serie->{'books'} }, $buch;
-
-               }
-    }
-
-    return ( wantarray ? ( $list, $anzahl_serien ) : $list );
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head2 save_serie( $c, $serie )
-
-=cut
-
-sub save_serie {
-
-    my $c     = shift;
-    my $serie = shift;
-    my $K     = ( caller(0) )[3] . "(): ";
-
-    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-    $c->log->debug( get_output_string( $K, "Zu speichernde Serie: ", $serie ) ) if $c->stash->{'debug_level'} >= 2;
-
-    my $storage = $c->stash->{'storage'};
-    my $save_books = ( $serie->{'id'} and $serie->{'book_ids'} and ref($serie->{'book_ids'}) and ref($serie->{'book_ids'}) eq 'ARRAY') ? 1 : 0;
-    $c->log->debug( $K . "Speichern der Bücher erforderlich: " . ( $save_books ? 'ja' : 'nein' ) . "." ) if $c->stash->{'debug_level'} > 2;
-
-    my $save_func = sub {
-        my ( $storage, $dbh, $serien_id, $serien_name, $serien_desc ) = @_;
-        my $sql = <<ENDE;
-INSERT INTO `serien` (
-    `id`, `serien_name`, `descr` )
-  VALUES (
-    ?, ?, ? )
-  ON DUPLICATE KEY UPDATE
-    `id` = LAST_INSERT_ID(`id`), `serien_name` = ?, `descr` = ?
-ENDE
-
-        if ( $storage->debug() ) {
-            my $text = $sql;
-            $text =~ s/\s+$//;
-            $text .= ": " . join( ", ", map { $dbh->quote($_) } ( $serien_id, $serien_name, $serien_desc, $serien_name, $serien_desc ) ) . "\n";
-            warn $text;
-        }
-
-        my $sth = $dbh->prepare($sql);
-        $sth->execute( $serien_id, $serien_name, $serien_desc, $serien_name, $serien_desc );
-    };
-
-    $storage->dbh_do( $save_func, $serie->{'id'}, $serie->{'name'}, $serie->{'descr'}  );
-    my $serien_id = $storage->last_insert_id();
-    return $serien_id unless $serien_id;
-
-    save_serien_buecher( $c, $serien_id, $serie->{'book_ids'} ) if $save_books;
-
-    return $serien_id;
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head2 save_serien_buecher( $c, $serien_id, @$book_ids )
-
-=cut
-
-sub save_serien_buecher {
-
-    my $c         = shift;
-    my $serien_id = shift;
-    my $book_ids  = shift;
-
-    my $K    = ( caller(0) )[3] . "(): ";
-    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
-    my $storage = $c->stash->{'storage'};
-    my $dbh = $storage->dbh();
-
-    my $anzahl = 0;
-    $anzahl = scalar( @$book_ids );
-
-    my $in = '';
-    $in = '(' . join( ", ", map { $dbh->quote($_) } @$book_ids ) . ")" if $anzahl;
-
-    my $sql;
-    $sql = <<ENDE;
-DELETE FROM `buch2serie`
- WHERE `serien_id` = ?
-ENDE
-    $sql .= "   AND `buch_id` NOT IN " . $in . "\n" if $anzahl;
-
-    my $qparams = [];
-    push @$qparams, $serien_id;
-
-    if ( $storage->debug() ) {
-        my $text = $sql;
-        $text =~ s/\s+$//;
-        $text .= ": " . join( ", ", map { $dbh->quote($_) } @$qparams ) . "\n";
-        warn $text;
-    }
-
-    my $sth = $dbh->prepare($sql);
-    $sth->execute( @$qparams );
-
-    return 1 unless $anzahl;
-
-    my $i = 0;
-
-    $sql = <<ENDE;
-INSERT INTO `buch2serie` (
-    `buch_id`, `serien_id`, `ord_num`
-  ) VALUES (
-    ?, ?, ? )
-  ON DUPLICATE KEY UPDATE
-    `ord_num` = ?
-ENDE
-
-    $sth = $dbh->prepare($sql);
-
-    for my $buch_id ( @$book_ids ) {
-
-        $qparams = [];
-        push @$qparams, $buch_id;
-        push @$qparams, $serien_id;
-        push @$qparams, $i;
-        push @$qparams, $i;
-
-        if ( $storage->debug() ) {
-            my $text = $sql;
-            $text =~ s/\s+$//;
-            $text .= ": " . join( ", ", map { $dbh->quote($_) } @$qparams ) . "\n";
-            warn $text;
-        }
-
-        $sth->execute( @$qparams );
-
-        $i++;
-    }
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head2 delete_serie( $c, $serien_id )
-
-Loescht die Buchserie mit der uebergebenen Serien-Id
-
-=cut
-
-sub delete_serie {
-
-    my $c         = shift;
-    my $serien_id = shift;
-    my $K         = ( caller(0) )[3] . "(): ";
-
-    $c->log->debug( $K . "aufgerufen fuer Serien-Id " . ( defined $serien_id ? $serien_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
-
-    return undef unless $serien_id and to_int($serien_id);
-    $serien_id = to_int($serien_id);
-
-    my $schema =  $c->model('Schema')->{'schema'};
-
-       # Raus, wenn in der Serie noch Buecher sind ...
-       if ( $c->model('Schema::Buch2serie')->count( { 'serien_id' => $serien_id, } ) ) {
-               my $msg = 'In der Buchserie sind noch Bücher enthalten.';
-               die $msg . "\n";
-       }
-
-       # Das eigentliche Löschen
-    my $coderef = sub {
-        $c->model('Schema::Serien')->search( { 'id' => $serien_id } )->delete();
-    };
-
-    my $rs;
-    eval {
-        $rs = $schema->txn_do($coderef);
-    };
-
-    if ($@) {                             # Transaction failed
-               my $msg = $@ =~ /Rollback failed/i ? "Rollback nicht erfolgreich!" : $@;
-               die $msg . "\n";
-               return undef;
-    }
-       return 1;
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head1 AUTHOR
-
-Frank Brehm
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
-
-__END__
-
-# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :
diff --git a/lib/FrBr/Books/Util/User.pm b/lib/FrBr/Books/Util/User.pm
deleted file mode 100644 (file)
index aa890a2..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-package FrBr::Books::Util::User;
-
-# $Id$
-# $URL$
-
-use strict;
-use warnings;
-
-use FrBr::Common;
-use YAML;
-
-# Export-Deklarationen
-
-BEGIN {
-
-    use Exporter();
-    our ( $VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS );
-
-    # set the version for version checking
-    $VERSION = 0.1;
-    my ($rev) = '$Revision$' =~ /(\d+)/;
-    $VERSION = sprintf( $VERSION . ".%d", $rev );
-
-    @ISA    = qw(Exporter);
-    @EXPORT = qw(
-        &save_user_prefs
-        &restore_user_prefs
-    );
-
-    #%EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
-
-    # your exported package globals go here,
-    # as well as any optionally exported functions
-    #@EXPORT_OK   = qw($Var1 %Hashit &func3);
-} ## end BEGIN
-
-our @EXPORT_OK;
-
-=head1 NAME
-
-FrBr::Books::Util::User - Modul fuer Funktionen rund um benutzer
-
-=head1 METHODS
-
-=cut
-
-#-----------------------------------------------------------------------------------
-
-=head2 save_user_prefs( $c )
-
-Sichert die Einstellungen eines angemeldeten Benutzers
-
-=cut
-
-sub save_user_prefs {
-
-    my $c = shift;
-    my $K = ( caller(0) )[3] . "(): ";
-    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
-    return undef unless $c->user_exists();
-    my $user_id = $c->user->get('user_id');
-    $c->log->debug( $K . "Suche User-ID: ", ( defined $user_id ? $user_id : '<undef>' ) ) if $c->stash->{'debug_level'} > 2;
-
-    my $prefs = {};
-
-    # allgemeine Listenlänge
-    $prefs->{'list_length'} = $c->stash->{'list_length'};
-
-    # Sortierkriterien der Buchliste
-    $prefs->{'book_order_criteria'} = $c->session->{'book_order_criteria'} if $c->session->{'book_order_criteria'};
-
-    # Filter für Buchliste speichern
-    $prefs->{'booklist_filter'} = $c->session->{'booklist_filter'} if $c->session->{'booklist_filter'};
-
-    # Anzahl der angezeigten zugeordneten Bücher in einer anderen Liste
-    $prefs->{'books_in_other_list'} = $c->stash->{'books_in_other_list'};
-
-    my $dump = Dump($prefs);
-    $c->model('Schema::UserAdd')->search( { 'user_id' => $user_id } )->update( { 'prefs' => $dump } ) ;
-
-    return 1;
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head2 restore_user_prefs( $c )
-
-Holt die Einstellungen aus der Nutzertablle raus und beamt diese in die aktuelle Session
-
-=cut
-
-sub restore_user_prefs {
-
-    my $c = shift;
-    my $K = ( caller(0) )[3] . "(): ";
-    my $k = $c->stash->{'debug_level'} ? $K : '';
-    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
-
-    return undef unless $c->user_exists();
-    my $user_id = $c->user->get('user_id');
-    $c->log->debug( $K . "Suche User-ID: ", ( defined $user_id ? $user_id : '<undef>' ) ) if $c->stash->{'debug_level'} > 2;
-
-    my $prefs = undef;
-    my $dump  = undef;
-
-    $dump = $c->model('Schema::UserAdd')->search( { 'user_id' => $user_id } )->first()->prefs();
-
-    return unless $dump;
-    eval {
-        $prefs = Load($dump);
-    };
-    if ( $@ ) {
-        $c->log->warn( $k . "Fehler beim Restore der Nutzereinstellungen: " . $@ );
-        return; 
-    }
-    return unless $prefs;
-
-    if ( $prefs->{'list_length'} ) {
-
-        # Seite der Buchliste
-        delete $c->session->{'book_list_page'} if exists $c->session->{'book_list_page'};
-
-        # allgemeine Listenlänge
-        if ( $prefs->{'list_length'} ) {
-            $c->stash->{'list_length'} = $prefs->{'list_length'};
-            $c->session->{'list_length'} = $prefs->{'list_length'};
-        }
-
-        # Anzahl der angezeigten zugeordneten Bücher in einer anderen Liste
-        if ( $prefs->{'books_in_other_list'} ) {
-            $c->stash->{'books_in_other_list'} = $prefs->{'books_in_other_list'};
-            $c->session->{'books_in_other_list'} = $prefs->{'books_in_other_list'};
-        }
-
-    }
-
-    # Sortierkriterien der Buchliste
-    $c->session->{'book_order_criteria'} = $prefs->{'book_order_criteria'} if $prefs->{'book_order_criteria'};
-
-    # Filter für Buchliste speichern
-    $c->session->{'booklist_filter'} = undef;
-    $c->session->{'booklist_filter'} = $prefs->{'booklist_filter'} if $prefs->{'booklist_filter'};
-
-    return 1;
-
-}
-
-#-----------------------------------------------------------------------------------
-
-=head1 AUTHOR
-
-Frank Brehm
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
-1;
-
-__END__
-
-# vim: noai : ts=4 fenc=utf-8 filetype=perl expandtab :