$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'};
#-------------------------------------------------------
+=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' => "Ä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ültige Kategorie-Id ü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 ü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ültige Kategorie-Id ü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 ü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 ü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 ) = @_;
$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' => "Ändern"
};
#-------------------------------------------------------
+=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ültige Verlags-Id ü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 ü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 ü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 ) = @_;
@EXPORT = qw(
&get_category_list
&save_category
+ &delete_category
);
#%EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
#-----------------------------------------------------------------------------------
+=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
-[%#
+<!-- [%#
Template für Kategorieangaben
-%]
-<!-- Kategorie-Formular -->
+Kategorie-Formular -->
<form method="post" name="category_form" action="[% self_url %]">
<input type="hidden" name="category_form_sent" value="sent" />
--- /dev/null
+<!-- [%#
+
+ 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> [% error_message %]
+</div>
+[% END -%]
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+
--- /dev/null
+<!-- [%#
+
+ 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>"[% kategorie.name | html %]"</b> wurde erfolgreich gelöscht.
+
+</div>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'OK' %]</a></h2>
+</div>
+
--- /dev/null
+<!-- [%#
+ 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>
-[%#
+/* [%#
# Template fuer Stylesheets Kategorieformulare
#
# $Id$
# $URL$
#
-%]
-/* Stylesheets Kategorie-Formulare */
+Stylesheets Kategorie-Formulare */
+[% PROCESS ftable.css %]
-[%#
+<!-- [%#
Template für neue Kategorie
$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>
--- /dev/null
+<!-- [%#
+
+ 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> [% error_message %]
+</div>
+[% END -%]
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'Zurück' %]</a></h2>
+</div>
+
--- /dev/null
+<!-- [%#
+
+ 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>"[% verlag.name | html %]"</b> wurde erfolgreich gelöscht.
+
+</div>
+
+<div class="back">
+<h2><a href="[% return_target %]">[% 'OK' %]</a></h2>
+</div>
+