]> Frank Brehm's Git Trees - books.git/commitdiff
Kategorien + Verlage vervollständigt
authorFrank Brehm <frank@brehm-online.com>
Tue, 27 Oct 2009 22:24:14 +0000 (22:24 +0000)
committerFrank Brehm <frank@brehm-online.com>
Tue, 27 Oct 2009 22:24:14 +0000 (22:24 +0000)
lib/FrBr/Books/Controller/Kategorie.pm
lib/FrBr/Books/Controller/Verlag.pm
lib/FrBr/Books/Util/Category.pm
root/src/category/cat_form.tt2
root/src/category/delete.tt2 [new file with mode: 0644]
root/src/category/delete_success.tt2 [new file with mode: 0644]
root/src/category/edit.tt2 [new file with mode: 0644]
root/src/category/form.css
root/src/category/new.tt2
root/src/verlag/delete.tt2 [new file with mode: 0644]
root/src/verlag/delete_success.tt2 [new file with mode: 0644]

index 240689d483404aecd5936da65693e8d1109aa40e..3105b13a0658fa68f9ab024e12cb0585bb7bf1b7 100644 (file)
@@ -245,7 +245,7 @@ sub form_new : Path('new') {
 
     $self->category_cgi2session($c);
 
-    $c->stash->{'verlag_edit'} = {} unless $c->stash->{'verlag_edit'};
+    $c->stash->{'category_edit'} = {} unless $c->stash->{'category_edit'};
     $self->category_session2stash($c);
     $c->stash->{'category_edit'}{'name'} = "Neue Kategorie" unless $c->stash->{'category_edit'}{'name'};
 
@@ -257,6 +257,173 @@ sub form_new : Path('new') {
 
 #-------------------------------------------------------
 
+=head2 form_edit( )
+
+Aendern einer vorhandenen Kategorie.
+
+=cut
+
+sub form_edit : Path('edit') {
+
+    my ( $self, $c ) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    unless ( $c->user_exists() ) {
+        $c->detach('/not_allowed');
+        return;
+    }
+
+    $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+       $self->add_verlaglist_menu($c) if $c->session->{'from_verlag_list'};
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/kategorie/edit"),
+        'name' => "&Auml;ndern"
+    };
+
+    $c->stash->{'error_message'} = '';
+
+    # Zu bearbeitende Kategorie-Id ermitteln
+    my $cid = to_int( $c->request->params->{'edit_category_id'} || 0 );
+
+    unless ( $cid ) {
+        if ( $c->session->{'category_data_edit'} and $c->session->{'category_data_edit'}{'id'} ) {
+            $cid = $c->session->{'category_data_edit'}{'id'};
+        }
+    }
+
+    # Keine Kategorie-Id da?
+    unless ( $cid ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Keine oder ung&uuml;ltige Kategorie-Id &uuml;bergeben.';
+        return 1;
+    }
+
+    # Angaben zur Kategorie aus der Datenbank holen
+       my $cliste = get_category_list( $c, 'category_id' => $cid, );
+
+    unless ( $cliste and scalar( @$cliste ) ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Zur &uuml;bergebenen Kategorie-Id wurde keine Kategorie gefunden.';
+        return 1;
+    }
+
+    my $category = $cliste->[0];
+
+    $c->log->debug( get_output_string( $K, "Kategorie aus Datenbank: ", $category ) ) if $c->stash->{'debug_level'} >= 2;
+
+    # Ruecksprung-URL bestimmen
+    $c->stash->{'return_target'} = $c->session->{'return_target_category_save'} or $c->web_path("/kategorie/list");
+
+    # Sitzungsdaten vorbelegen, falls noch nicht geschehen
+    if ( $c->session->{'category_data_edit'} ) {
+        if ( ! $c->session->{'category_data_edit'}{'id'} or $c->session->{'category_data_edit'}{'id'} != $cid ) {
+            $c->session->{'category_data_edit'} = $category;
+        }
+    }
+    else {
+        $c->session->{'category_data_edit'} = $category;
+    }
+    $cliste = undef;
+
+       $self->category_cgi2session($c);
+
+    $c->stash->{'template'} = 'category/edit.tt2';
+    push @{$c->stash->{'cssfiles'}}, 'category/form.css';
+
+    $self->category_session2stash($c);
+
+    unless ( $c->request->params->{'category_form_sent'} and $c->request->params->{'do_save'} ) {
+        return 1;
+    }
+
+    $c->stash->{'return_target_action'} = $c->session->{'return_target_edit'};
+    return $self->do_save_category($c);
+
+}
+
+#-------------------------------------------------------
+
+=head2 delete_category_form( )
+
+Loescht eine vorhandene Kategorie.
+
+=cut
+
+sub delete_category_form : Path('delete') {
+
+    my ( $self, $c ) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    unless ( $c->user_exists() ) {
+        $c->detach('/not_allowed');
+        return;
+    }
+
+    $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+       $self->add_verlaglist_menu($c) if $c->session->{'from_verlag_list'};
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/kategorie/delete"),
+        'name' => "Löschen"
+    };
+
+    $c->stash->{'error_message'} = '';
+
+    my $cid = to_int( $c->request->params->{'delete_category_id'} || $c->session->{'delete_category_id'} || 0 );
+    unless ( $cid ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Keine oder ung&uuml;ltige Kategorie-Id &uuml;bergeben.';
+        return 1;
+    }
+    $c->session->{'delete_category_id'} = $cid;
+
+    # Angaben zur Kategorie aus der Datenbank holen
+    my $cliste = get_category_list( $c, 'category_id' => $cid );
+
+    unless ( $cliste and scalar( @$cliste ) ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Zur &uuml;bergebenen Kategorie-Id wurde keine Kategorie gefunden.';
+        return 1;
+    }
+
+    my $category = $cliste->[0];
+    $c->log->debug( get_output_string( $K, "Kategorie aus Datenbank: ", $category ) ) if $c->stash->{'debug_level'} >= 2;
+
+       my $anzahl_buecher = $c->model('Schema::Buch2kategorie')->count( { 'kategorie_id' => $cid, } );
+
+       if ( $anzahl_buecher ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Der &uuml;bergebenen Kategorie sind noch Bücher zugeordnet.';
+        return 1;
+       }
+
+    $c->stash->{'return_target'} = $c->session->{'return_target_category_save'} or $c->web_path("/kategorie/list");
+
+    $c->stash->{'kategorie'} = $category;
+    $cliste = undef;
+
+    $c->stash->{'template'} = 'category/delete.tt2';
+    push @{$c->stash->{'cssfiles'}}, 'category/view.css';
+
+    if ( $c->request->params->{'really_delete_category'} and $c->request->params->{'really_delete_category'} eq 'yes' and $c->request->params->{'do_delete'} ) {
+        eval {
+            delete_category( $c, $cid );
+        };
+        if ( $@ ) {
+            $c->stash->{'error_message'} = $@;
+            $c->log->warn( "Fehler beim Löschen der Kategorie: " . $@ );
+            return undef;
+        }
+        $c->stash->{'template'} = 'category/delete_success.tt2';
+    }
+
+}
+
+#-------------------------------------------------------
+
 sub do_save_category : Private {
 
     my ( $self, $c ) = @_;
index db48ee1df8594ce7e02b402112f8998034725348..b22a66381ea0608bd275865cea11d0d796875d18 100644 (file)
@@ -278,7 +278,7 @@ sub form_edit : Path('edit') {
     $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
        $self->add_verlaglist_menu($c) if $c->session->{'from_verlag_list'};
     push @{ $c->stash->{'menu_path'} }, {
-        'path' => $c->web_path("/autor/edit"),
+        'path' => $c->web_path("/verlag/edit"),
         'name' => "&Auml;ndern"
     };
 
@@ -345,6 +345,85 @@ sub form_edit : Path('edit') {
 
 #-------------------------------------------------------
 
+=head2 delete_verlag_form( )
+
+Loescht einen vorhandenen Verlag.
+
+=cut
+
+sub delete_verlag_form : Path('delete') {
+
+    my ( $self, $c ) = @_;
+    my $K = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen." ) if $c->stash->{'debug_level'} > 2;
+
+    unless ( $c->user_exists() ) {
+        $c->detach('/not_allowed');
+        return;
+    }
+
+    $c->stash->{'menu_path'} = [] unless $c->stash->{'menu_path'};
+       $self->add_verlaglist_menu($c) if $c->session->{'from_verlag_list'};
+    push @{ $c->stash->{'menu_path'} }, {
+        'path' => $c->web_path("/verlag/delete"),
+        'name' => "Löschen"
+    };
+
+    $c->stash->{'error_message'} = '';
+
+    my $vid = to_int( $c->request->params->{'delete_verlags_id'} || $c->session->{'delete_verlags_id'} || 0 );
+    unless ( $vid ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Keine oder ung&uuml;ltige Verlags-Id &uuml;bergeben.';
+        return 1;
+    }
+    $c->session->{'delete_verlags_id'} = $vid;
+
+    # Angaben zum Verlag aus der Datenbank holen
+    my $vliste = get_verlagsliste( $c, 'verlags_id' => $vid );
+
+    unless ( $vliste and scalar( @$vliste ) ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Zur &uuml;bergebenen Verlags-Id wurde kein Verlag gefunden.';
+        return 1;
+    }
+
+    my $verlag = $vliste->[0];
+    $c->log->debug( get_output_string( $K, "Verlag aus Datenbank: ", $verlag ) ) if $c->stash->{'debug_level'} >= 2;
+
+       my $anzahl_buecher = $c->model('Schema::Buecher')->count( { 'verlags_id' => $vid, } );
+
+       if ( $anzahl_buecher ) {
+        $c->stash->{'template'} = 'error.tt2';
+        $c->stash->{'error'}    = 'Dem &uuml;bergebenen Verlag sind noch Bücher zugeordnet.';
+        return 1;
+       }
+
+    $c->stash->{'return_target'} = $c->session->{'return_target_verlag_save'} or $c->web_path("/verlag/list");
+
+    $c->stash->{'verlag'} = $verlag;
+    $vliste = undef;
+
+    $c->stash->{'template'} = 'verlag/delete.tt2';
+    push @{$c->stash->{'cssfiles'}}, 'verlag/view.css';
+
+    if ( $c->request->params->{'really_delete_verlag'} and $c->request->params->{'really_delete_verlag'} eq 'yes' and $c->request->params->{'do_delete'} ) {
+        eval {
+            delete_verlag( $c, $vid );
+        };
+        if ( $@ ) {
+            $c->stash->{'error_message'} = $@;
+            $c->log->warn( "Fehler beim Löschen des Verlags: " . $@ );
+            return undef;
+        }
+        $c->stash->{'template'} = 'verlag/delete_success.tt2';
+    }
+
+}
+
+#-------------------------------------------------------
+
 sub do_save_verlag : Private {
 
     my ( $self, $c ) = @_;
index fdca38a39abb61ea9cfa8c0ec95f882b6ac5974c..d2fefa255c980666b9a293c969f3a26288af061e 100644 (file)
@@ -24,6 +24,7 @@ BEGIN {
     @EXPORT = qw(
         &get_category_list
         &save_category
+        &delete_category
     );
 
     #%EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
@@ -330,6 +331,52 @@ ENDE
 
 #-----------------------------------------------------------------------------------
 
+=head2 delete_category( $c, $category_id )
+
+Loescht die Kategorie mit der uebergebenen Kategorie-Id
+
+=cut
+
+sub delete_category {
+
+    my $c      = shift;
+    my $cat_id = shift;
+    my $K      = ( caller(0) )[3] . "(): ";
+
+    $c->log->debug( $K . "aufgerufen fuer Kategorie-Id " . ( defined $cat_id ? $cat_id : '<undef>' ) . "." ) if $c->stash->{'debug_level'} > 2;
+
+    return undef unless $cat_id and to_int($cat_id);
+    $cat_id = to_int($cat_id);
+
+    my $schema =  $c->model('Schema')->{'schema'};
+
+       # Raus, wenn die Kategorie noch Buecher hat ...
+       if ( $c->model('Schema::Buch2kategorie')->count( { 'kategorie_id' => $cat_id, } ) ) {
+               my $msg = 'Es existieren noch Buecher dieser Kategorie.';
+               die $msg . "\n";
+       }
+
+       # Das eigentliche Löschen
+    my $coderef = sub {
+        $c->model('Schema::Kategorien')->search( { 'id' => $cat_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
index 19011219cd0ba7e1127d6e640d132484e886ab58..06874c34981338c29b443d24e8b29e80a3659448 100644 (file)
@@ -1,4 +1,4 @@
-[%#
+<!-- [%#
 
     Template für Kategorieangaben
 
@@ -9,7 +9,7 @@
 
 -%]
 
-<!-- Kategorie-Formular -->
+Kategorie-Formular -->
 
 <form method="post" name="category_form" action="[% self_url %]">
 <input type="hidden" name="category_form_sent" value="sent" />
diff --git a/root/src/category/delete.tt2 b/root/src/category/delete.tt2
new file mode 100644 (file)
index 0000000..2fd187f
--- /dev/null
@@ -0,0 +1,48 @@
+<!-- [%# 
+
+    Template zum Löschen einer Kategorie
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+    Übergebene Struktur in [kategorie]:
+
+    $kategorie = {
+        'id'          => 1,
+        'name'        => 'Fantasy',
+        'count_books' => 22,
+    };
+-%]
+
+Kategorie löschen -->
+
+<form method="post" name="category_form" action="[% self_url %]">
+<input type="hidden" name="really_delete_category" value="yes" />
+<input type="hidden" name="delete_category_id" value="[% kategorie.id | html %]" />
+
+<table class="ftable" cellspacing="0">
+  <tr>
+    <th colspan="2" class="title">Möchten Sie die Kategorie '[% kategorie.name | html %]' wirklich löschen?</th>
+  </tr><tr>
+    <td colspan="2" class="empty"></td>
+  </tr><tr>
+    <th>Name der Kategorie:</th>
+    <td>[% kategorie.name | html %]</td>
+  </tr><tr>
+    <td colspan="2" class="empty"></td>
+  </tr><tr>
+      <th colspan="2" class="button"><input type="submit" name="do_delete" value="  Löschen  " /></th>
+</table>
+
+[%- IF error_message %]
+<div class="error">
+<span class="bold">Fehler:</span>&nbsp;[% error_message %]
+</div>
+[% END -%]
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+
diff --git a/root/src/category/delete_success.tt2 b/root/src/category/delete_success.tt2
new file mode 100644 (file)
index 0000000..18eb62c
--- /dev/null
@@ -0,0 +1,30 @@
+<!-- [%# 
+
+    Template zum Melden des erfolgreichen Löschen einer Kategorie
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+    Übergebene Struktur in [kategorie]:
+
+    $kategorie = {
+        'id'          => 1,
+        'name'        => 'J.R.R. Tolkien',
+        'count_books' => 0,
+    };
+-%]
+
+Kategorie wurde gelöscht -->
+
+<div style="text-align: center">
+
+Die Kategorie <b>&quot;[% kategorie.name | html %]&quot;</b> wurde erfolgreich gelöscht.
+
+</div>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'OK' %]</a></h2>
+</div>
+
diff --git a/root/src/category/edit.tt2 b/root/src/category/edit.tt2
new file mode 100644 (file)
index 0000000..6a0f1bc
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- [%#
+    Template zum Ändern der Angaben einer Kategorie
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+-%]
+[%- category_form_title = 'Kategorie ändern' %]
+[% category_form_title %]
+-->
+[% PROCESS category/cat_form.tt2 %]
+<div class="back">
+<h2><a href="[% return_target_category_save %]">[% 'Zurück' %]</a></h2>
+</div>
index ae5c535368b244c37345f50142bf0ada1e98b438..4849a542a4c3823ec4b2649694ac335671122f6e 100644 (file)
@@ -1,10 +1,11 @@
-[%#
+/* [%#
    # Template fuer Stylesheets Kategorieformulare
    #
    # $Id$
    # $URL$
    #
 -%]
-/*  Stylesheets Kategorie-Formulare */
+Stylesheets Kategorie-Formulare */
 
+[% PROCESS ftable.css %]
 
index 3fd7d2cadb40cd379ec7148af3a41346cbdce0f3..0e39f70865c8cceb3abde8c36250a6f6825b25e8 100644 (file)
@@ -1,4 +1,4 @@
-[%#
+<!-- [%#
 
     Template für neue Kategorie
 
@@ -8,9 +8,9 @@
     $URL$
 
 -%]
-[%- book_form_title = 'Neue Kategorie' -%]
+[%- category_form_title = 'Neue Kategorie' -%]
+-->
 [% PROCESS category/cat_form.tt2 %]
-
 <div class="back">
 <h2><a href="[% return_target_category_save %]">[% 'Zurück' %]</a></h2>
 </div>
diff --git a/root/src/verlag/delete.tt2 b/root/src/verlag/delete.tt2
new file mode 100644 (file)
index 0000000..f706286
--- /dev/null
@@ -0,0 +1,52 @@
+<!-- [%# 
+
+    Template zum Löschen eines Verlags
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+    Übergebene Struktur in [verlag]:
+
+    $verlag = {
+        'id'          => 1,
+        'name'        => 'Heyne',
+        'name_long'   => 'Wilhelm Heyne Verlag München',
+        'count_books' => 0,
+    };
+-%]
+
+Verlag löschen -->
+
+<form method="post" name="verlag_form" action="[% self_url %]">
+<input type="hidden" name="really_delete_verlag" value="yes" />
+<input type="hidden" name="delete_verlag_id" value="[% verlag.id | html %]" />
+
+<table class="ftable" cellspacing="0">
+  <tr>
+    <th colspan="2" class="title">Möchten Sie den Verlag '[% verlag.name | html %]' wirklich löschen?</th>
+  </tr><tr>
+    <td colspan="2" class="empty"></td>
+  </tr><tr>
+    <th>Name des Verlags:</th>
+    <td>[% verlag.name | html %]</td>
+  </tr><tr>
+    <th>Ausführlicher Verlagsname:</th>
+    <td>[% verlag.name_long | html %]</td>
+  </tr><tr>
+    <td colspan="2" class="empty"></td>
+  </tr><tr>
+      <th colspan="2" class="button"><input type="submit" name="do_delete" value="  Löschen  " /></th>
+</table>
+
+[%- IF error_message %]
+<div class="error">
+<span class="bold">Fehler:</span>&nbsp;[% error_message %]
+</div>
+[% END -%]
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+
diff --git a/root/src/verlag/delete_success.tt2 b/root/src/verlag/delete_success.tt2
new file mode 100644 (file)
index 0000000..f6a0a84
--- /dev/null
@@ -0,0 +1,31 @@
+<!-- [%# 
+
+    Template zum Melden des erfolgreichen Löschens eines Verlags
+
+    vim: noai : ts=4 fenc=utf-8 filetype=html expandtab :
+
+    $Id$
+    $URL$
+
+    Übergebene Struktur in [verlag]:
+
+    $verlag = {
+        'id'          => 1,
+        'name'        => 'Heyne',
+        'name_long'   => 'Wilhelm Heyne Verlag München',
+        'count_books' => 0,
+    };
+-%]
+
+Verlag wurde gelöscht -->
+
+<div style="text-align: center">
+
+Der Verlag <b>&quot;[% verlag.name | html %]&quot;</b> wurde erfolgreich gelöscht.
+
+</div>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'OK' %]</a></h2>
+</div>
+