From 517ad7e0c5bd5a6329dfd3ef9c35f69afea9fc49 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Sat, 16 Nov 2013 18:22:39 -0800 Subject: [PATCH] UI to disable message templates, #26035 --- FS/FS/part_event/Action/letter.pm | 1 + FS/FS/part_event/Action/notice.pm | 1 + FS/FS/part_event/Action/notice_to.pm | 1 + FS/FS/part_event/Action/svc_acct_notice.pm | 1 + FS/FS/part_export/rt_ticket.pm | 2 +- FS/FS/part_export/send_email.pm | 2 +- httemplate/browse/msg_template.html | 29 ++++++++--- httemplate/misc/disable-msg_template.cgi | 77 ++++++++++++++++++++++++++++++ httemplate/misc/email-customers.html | 1 + 9 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 httemplate/misc/disable-msg_template.cgi diff --git a/FS/FS/part_event/Action/letter.pm b/FS/FS/part_event/Action/letter.pm index 57b7b7783..835dec2b9 100644 --- a/FS/FS/part_event/Action/letter.pm +++ b/FS/FS/part_event/Action/letter.pm @@ -20,6 +20,7 @@ sub option_fields { 'type' => 'select-table', 'table' => 'msg_template', 'name_col' => 'msgname', + 'hashref' => { disabled => '' }, 'disable_empty' => 1, }, ); diff --git a/FS/FS/part_event/Action/notice.pm b/FS/FS/part_event/Action/notice.pm index 8e22c6844..7c8ed1682 100644 --- a/FS/FS/part_event/Action/notice.pm +++ b/FS/FS/part_event/Action/notice.pm @@ -19,6 +19,7 @@ sub option_fields { 'msgnum' => { 'label' => 'Template', 'type' => 'select-table', 'table' => 'msg_template', + 'hashref' => { disabled => '' }, 'name_col' => 'msgname', 'disable_empty' => 1, }, diff --git a/FS/FS/part_event/Action/notice_to.pm b/FS/FS/part_event/Action/notice_to.pm index 194aeb84f..d300e3385 100644 --- a/FS/FS/part_event/Action/notice_to.pm +++ b/FS/FS/part_event/Action/notice_to.pm @@ -24,6 +24,7 @@ sub option_fields { 'type' => 'select-table', 'table' => 'msg_template', 'name_col' => 'msgname', + 'hashref' => { disabled => '' }, 'disable_empty' => 1, }, ); diff --git a/FS/FS/part_event/Action/svc_acct_notice.pm b/FS/FS/part_event/Action/svc_acct_notice.pm index d71a1371a..97a4ad686 100644 --- a/FS/FS/part_event/Action/svc_acct_notice.pm +++ b/FS/FS/part_event/Action/svc_acct_notice.pm @@ -18,6 +18,7 @@ sub option_fields { 'type' => 'select-table', 'table' => 'msg_template', 'name_col' => 'msgname', + 'hashref' => { disabled => '' }, 'disable_empty' => 1, }, ); diff --git a/FS/FS/part_export/rt_ticket.pm b/FS/FS/part_export/rt_ticket.pm index 7ae6105a0..72e387c56 100644 --- a/FS/FS/part_export/rt_ticket.pm +++ b/FS/FS/part_export/rt_ticket.pm @@ -21,7 +21,7 @@ my %template_select = ( %templates = (0 => '', map { $_->msgnum, $_->msgname } qsearch({ table => 'msg_template', - hashref => {}, + hashref => { disabled => '' }, order_by => 'ORDER BY msgnum ASC' }) ); diff --git a/FS/FS/part_export/send_email.pm b/FS/FS/part_export/send_email.pm index 6ba131f18..1fcb828b7 100644 --- a/FS/FS/part_export/send_email.pm +++ b/FS/FS/part_export/send_email.pm @@ -21,7 +21,7 @@ my %template_select = ( %templates = (0 => '', map { $_->msgnum, $_->msgname } qsearch({ table => 'msg_template', - hashref => {}, + hashref => { disabled => 1 }, order_by => 'ORDER BY msgnum ASC' }) ); diff --git a/httemplate/browse/msg_template.html b/httemplate/browse/msg_template.html index bb5ac94a0..ef0b2dafd 100644 --- a/httemplate/browse/msg_template.html +++ b/httemplate/browse/msg_template.html @@ -5,14 +5,15 @@ 'query' => { 'table' => 'msg_template', }, 'count_query' => 'SELECT COUNT(*) FROM msg_template', 'disableable' => 1, - 'disabled_statuspos' => 2, + 'disabled_statuspos' => (scalar(@locales) + 3), 'agent_virt' => 1, 'agent_null_right' => ['View global templates','Edit global templates'], 'agent_pos' => 1, - 'header' => [ 'Name', '', map '', @locales ], - 'fields' => [ 'msgname', @locales ], - 'links' => [ $link, @locale_links ], - 'cell_style' => [ '', '', map $locale_style, @locales ], + 'header' => [ 'Name', '', map ('', @locales), '' ], + 'fields' => [ 'msgname', @locales, $disable_link_label ], + 'links' => [ $link, @locale_links, '' ], + 'link_onclicks' => [ '', map('', @locale_links), $disable_link ], + 'cell_style' => [ '', '', map ($locale_style, @locales), $locale_style ], ) %> <%init> @@ -30,7 +31,7 @@ if ( $curuser->access_right(['Edit templates', 'Edit global templates']) ) { my $link = [ "${p}edit/msg_template.html?msgnum=", 'msgnum' ]; -my $locale_style = 'font-size:0.8em; padding:3px; background-color:'; +my $locale_style = 'font-size:0.8em; padding:3px'; my (@locales, @locale_links); foreach my $l ( FS::Locales->locales ) { @@ -44,6 +45,20 @@ foreach my $l ( FS::Locales->locales ) { [ "${p}edit/msg_template.html?locale=$l;msgnum=", 'msgnum' ]; }; } - + +my $disable_link = sub { + my $template = shift; + include('/elements/popup_link_onclick.html', + action => $p.'misc/disable-msg_template.cgi?msgnum=' . + $template->msgnum . + ($template->disabled ? ';enable=1' : ''), + actionlabel => 'Disable lemplate', + ); +}; + +my $disable_link_label = sub { + my $template = shift; + $template->disabled ? '(enable)' : '(disable)' ; +}; diff --git a/httemplate/misc/disable-msg_template.cgi b/httemplate/misc/disable-msg_template.cgi new file mode 100644 index 000000000..1eb4d25e5 --- /dev/null +++ b/httemplate/misc/disable-msg_template.cgi @@ -0,0 +1,77 @@ +% if ( @error ) { +<& /elements/errorpage-popup.html, @error &> +% } else { +<& /elements/header-popup.html, "Template ${actioned}" &> + + + +% } +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; +my $conf = FS::Conf->new; +my @error; +my $actioned; + +die "access denied" + unless $curuser->access_right([ 'Edit templates', 'Edit global templates' ]); + +my $msgnum = $cgi->param('msgnum'); +$msgnum =~ /^\d+$/ or die "bad msgnum '$msgnum'"; +my $msg_template = qsearchs({ + table => 'msg_template', + hashref => { msgnum => $msgnum }, + extra_sql => ' AND '. + $curuser->agentnums_sql(null_right => 'Edit global templates'), +}); +die "unknown msgnum $msgnum" unless $msg_template; + +if ( $cgi->param('enable') ) { + $actioned = 'enabled'; + $msg_template->set('disabled' => ''); +} else { + $actioned = 'disabled'; + # make sure it's not in use anywhere + my @inuse; + + # notice, letter, notice_to events (if they're enabled) + my @events = qsearch({ + table => 'part_event_option', + addl_from => ' JOIN part_event USING (eventpart)', + hashref => { + optionname => 'msgnum', + optionvalue => $msgnum, + }, + extra_sql => ' AND disabled IS NULL', + }); + push @inuse, map {"Billing event #".$_->eventpart} @events; + + # send_email and rt_ticket exports + my @exports = qsearch( 'part_export_option', { + optionname => { op => 'LIKE', value => '%_template' }, + optionvalue => $msgnum, + }); + push @inuse, map {"Export #".$_->exportnum} @exports; + + # payment_receipt_msgnum, decline_msgnum, etc. + my @confs = qsearch( 'conf', { + name => { op => 'LIKE', value => '%_msgnum' }, + value => $msgnum, + }); + push @inuse, map {"Configuration setting ".$_->name} @confs; + # XXX pending queue jobs? + if (@inuse) { + @error = ("This template is in use. Check the following settings:", + @inuse); + } + + # good to go + $msg_template->set(disabled => 'Y'); +} +if (!@error) { + my $error = $msg_template->replace; + push @error, $error if $error; +} + diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html index ad67b8d7e..3b2ac3c5f 100644 --- a/httemplate/misc/email-customers.html +++ b/httemplate/misc/email-customers.html @@ -98,6 +98,7 @@ Template: <% include('/elements/select-table.html', 'label' => 'Template:', 'table' => 'msg_template', + 'hashref' => { disabled => '' }, 'name_col' => 'msgname', 'empty_label' => '(none)', 'onchange' => 'toggle(this)', -- 2.11.0