From 0607d77e9f6c5e2302a1e040965ff84b46735956 Mon Sep 17 00:00:00 2001 From: erickson Date: Tue, 3 Feb 2009 16:26:58 +0000 Subject: [PATCH] added a cascading survey delete operation. git-svn-id: svn://svn.open-ils.org/ILS/trunk@12043 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/extras/ils_events.xml | 3 ++ .../perlmods/OpenILS/Application/Circ/Survey.pm | 38 +++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/extras/ils_events.xml b/Open-ILS/src/extras/ils_events.xml index 77deb2d573..1d31af54d5 100644 --- a/Open-ILS/src/extras/ils_events.xml +++ b/Open-ILS/src/extras/ils_events.xml @@ -719,6 +719,9 @@ An authority record queue with the same name already exists + + Responses to this survey exist + diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Survey.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Survey.pm index 643d5e6d1a..4631b8bf97 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Survey.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Survey.pm @@ -19,6 +19,7 @@ use strict; use warnings; use OpenSRF::EX qw/:try/; use OpenILS::Application::AppUtils; use Data::Dumper; +use OpenILS::Event; use Time::HiRes qw(time); use OpenILS::Utils::CStoreEditor qw/:funcs/; @@ -395,17 +396,52 @@ sub get_random_survey_global { } +__PACKAGE__->register_method ( + method => 'delete_survey', + api_name => 'open-ils.circ.survey.delete.cascade' +); +__PACKAGE__->register_method ( + method => 'delete_survey', + api_name => 'open-ils.circ.survey.delete.cascade.override' +); +sub delete_survey { + my($self, $conn, $auth, $survey_id) = @_; + my $e = new_editor(authtoken => $auth, xact => 1); + return $e->die_event unless $e->checkauth; + my $survey = $e->retrieve_action_survey($survey_id) + or return $e->die_event; + return $e->die_event unless $e->allowed('ADMIN_SURVEY', $survey->owner); + my $questions = $e->search_action_survey_question({survey => $survey_id}); + my @answers; + push(@answers, @{$e->search_action_survey_answer({question => $_->id})}) for @$questions; + my $responses = $e->search_action_survey_response({survey => $survey_id}); + return OpenILS::Event->new('SURVEY_RESPONSES_EXIST') + if @$responses and $self->api_name =! /override/; + for my $resp (@$responses) { + $e->delete_action_survey_response($resp) or return $e->die_event; + } + for my $ans (@answers) { + $e->delete_action_survey_answer($ans) or return $e->die_event; + } + for my $quest (@$questions) { + $e->delete_action_survey_question($quest) or return $e->die_event; + } -1; + $e->delete_action_survey($survey) or return $e->die_event; + + $e->commit; + return 1; +} +1; -- 2.11.0