diff options
Diffstat (limited to 'lib/RHRD/rddb.pm')
-rwxr-xr-x | lib/RHRD/rddb.pm | 78 |
1 files changed, 72 insertions, 6 deletions
diff --git a/lib/RHRD/rddb.pm b/lib/RHRD/rddb.pm index 7937643..6730127 100755 --- a/lib/RHRD/rddb.pm +++ b/lib/RHRD/rddb.pm @@ -198,12 +198,18 @@ sub check_log_exists return (1, 'OK', 'log exists'); } +sub get_log_table_name +{ + my ($ctx, $logname) = @_; + $logname=~s/ /_/g; + return $ctx->{'dbh'}->quote_identifier($logname . '_LOG'); +} + sub create_log_table { my ($ctx, $logname) = @_; - $logname=~s/ /_/g; - $logname = $ctx->{'dbh'}->quote_identifier($logname . '_LOG'); + $logname = get_log_table_name($ctx, $logname); my $sql = qq{ create table if not exists $logname (ID INT NOT NULL PRIMARY KEY, @@ -265,8 +271,7 @@ sub fill_log_table my $logname = shift; my @carts = @_; - $logname=~s/ /_/g; - $logname = $ctx->{'dbh'}->quote_identifier($logname . '_LOG'); + $logname = get_log_table_name($ctx, $logname); my $sql = qq{insert into $logname (ID, COUNT, START_TIME, CART_NUMBER, TRANS_TYPE) values (?, ?, ?, ?, ?);}; my $sth = $ctx->{'dbh'}->prepare($sql) @@ -283,6 +288,19 @@ sub fill_log_table return ($cnt+1, 'OK', 'success'); } +sub drop_log_table +{ + my ($ctx, $logname) = @_; + + $logname = get_log_table_name($ctx, $logname); + my $sql = qq{drop table $logname;}; + + $ctx->{'dbh'}->do($sql) + or return (undef, 'ERROR', "Database Error: " . $ctx->{'dbh'}->errstr); + + return (1, 'OK', 'success'); +} + ########################### TOKEN handling ########################### sub get_token @@ -971,8 +989,7 @@ sub get_show_carts return (undef, 'ERROR', "Log with name '$log' does not exist") } - $log=~s/ /_/g; - $log = $ctx->{'dbh'}->quote_identifier($log . '_LOG'); + $log = get_log_table_name($ctx, $log); my $sql = qq{select COUNT,CART_NUMBER from $log order by COUNT;}; my $sth = $ctx->{'dbh'}->prepare($sql) @@ -1113,6 +1130,55 @@ sub create_show_dropbox return ($cnt, 'OK', 'success'); } +sub remove_show +{ + my ($ctx, $showid) = @_; + + my ($title, $logname, $status, $errorstring) = get_show_title_and_log($ctx, $showid); + unless (defined $title && defined $logname) { + return (undef, $status, $errorstring); + } + + my @actions = ({ + # Delete Dropbox + sql => qq{delete from DROPBOXES where TO_CART = ?;}, + param => $showid, + name => 'dropboxes', + cnt => 0 + }, { + # Delete Macro Carts + sql => qq{delete from CART where NUMBER = ?;}, + param => $showid, + name => 'macro carts', + cnt => 0 + }, { + # Delete Log Entry + sql => qq{delete from LOGS where NAME = ?;}, + param => $logname, + name => 'log entries', + cnt => 0 + }); + + for my $href (@actions) { + my $sth = $ctx->{'dbh'}->prepare($href->{sql}) + or return (undef, 'ERROR', "Database Error: " . $ctx->{'dbh'}->errstr); + delete($href->{sql}); + + $href->{cnt} = $sth->execute($href->{param}) + or return (undef, 'ERROR', "Database Error: " . $sth->errstr); + + $sth->finish(); + } + + (my $cnt, $status, $errorstring) = drop_log_table($ctx, $logname); + unless (defined $cnt) { + return (undef, $status, $errorstring); + } + push @actions, { name => 'log tables', cnt => $cnt }; + + return @actions; +} + ########################### MUSICPOOL handling ########################### sub get_musicpools_cart_range |