diff options
author | ivan <ivan> | 2010-04-29 07:40:47 +0000 |
---|---|---|
committer | ivan <ivan> | 2010-04-29 07:40:47 +0000 |
commit | 6f402df348017146e248ecaae2c71c0a9d708ea4 (patch) | |
tree | e89756960a29daf9da95d802c746c2cfa96a64de /httemplate | |
parent | 2070eba260962b206f936e46c64d8072c58b2194 (diff) |
communigate (phase 2): rules: adding conditions and actions to rule edit. RT#7514
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/edit/cgp_rule.html | 32 | ||||
-rw-r--r-- | httemplate/edit/process/cgp_rule.html | 14 | ||||
-rw-r--r-- | httemplate/elements/input-text.html | 8 | ||||
-rw-r--r-- | httemplate/elements/select-cgp_rule_action.html | 99 | ||||
-rw-r--r-- | httemplate/elements/select-cgp_rule_condition.html | 113 | ||||
-rw-r--r-- | httemplate/elements/select.html | 16 |
6 files changed, 204 insertions, 78 deletions
diff --git a/httemplate/edit/cgp_rule.html b/httemplate/edit/cgp_rule.html index 6f2d801..adf993f 100644 --- a/httemplate/edit/cgp_rule.html +++ b/httemplate/edit/cgp_rule.html @@ -10,29 +10,31 @@ }, 'fields' => [ 'name', 'comment', - { 'field' => 'priority', - 'type' => 'select', - 'options' => [ 0 .. 10 ], - 'labels' => { 0 => 'Inactive' }, + { 'field' => 'priority', + 'type' => 'select', + 'options' => [ 0 .. 10 ], + 'labels' => { 0 => 'Inactive' }, }, - { 'field' => 'svcnum', 'type' => 'hidden', }, - { 'type' => 'tablebreak-tr-title', - 'value' => 'Conditions', + { 'field' => 'svcnum', 'type' => 'hidden', }, + { 'type' => 'tablebreak-tr-title', + 'value' => 'Conditions', }, - { 'field' => 'ruleconditionnum', - 'type' => 'select-cgp_rule_condition', + { 'field' => 'ruleconditionnum', + 'type' => 'select-cgp_rule_condition', 'o2m_table' => 'cgp_rule_condition', - 'm2_label' => 'Condition', + 'm2_label' => 'Condition', #XXX m2_error_callback + 'm2_error_callback' => sub {}, }, - { 'type' => 'tablebreak-tr-title', - 'value' => 'Actions', + { 'type' => 'tablebreak-tr-title', + 'value' => 'Actions', }, - { 'field' => 'ruleactionnum', - 'type' => 'select-cgp_rule_action', + { 'field' => 'ruleactionnum', + 'type' => 'select-cgp_rule_action', 'o2m_table' => 'cgp_rule_action', - 'm2_label' => 'Action', + 'm2_label' => 'Action', #XXX m2_error_callback + 'm2_error_callback' => sub {}, }, ], 'new_callback' => sub { my( $cgi, $cgp_rule ) = @_; diff --git a/httemplate/edit/process/cgp_rule.html b/httemplate/edit/process/cgp_rule.html index 3880b56..f427b6c 100644 --- a/httemplate/edit/process/cgp_rule.html +++ b/httemplate/edit/process/cgp_rule.html @@ -1,6 +1,16 @@ <% include( 'elements/process.html', - 'table' => 'cgp_rule', - 'redirect' => $redirect, + 'table' => 'cgp_rule', + 'redirect' => $redirect, + 'process_o2m' => [ + { + 'table' => 'cgp_rule_condition', + 'fields' => [qw( condition op params )], + }, + { + 'table' => 'cgp_rule_action', + 'fields' => [qw( action params )], + }, + ], ) %> <%init> diff --git a/httemplate/elements/input-text.html b/httemplate/elements/input-text.html index 9db0643..fb50a50 100644 --- a/httemplate/elements/input-text.html +++ b/httemplate/elements/input-text.html @@ -31,13 +31,17 @@ $opt{'disabled'} = &{ $opt{'disabled'} }( \%opt ) $opt{'disabled'} = 'DISABLED' if $opt{'disabled'} && $opt{'disabled'} !~ /disabled/i; # uuh... yeah? -my @style = (); +my @style = ref($opt{'style'}) + ? @{ $opt{'style'} } + : $opt{'style'} + ? ( $opt{'style'} ) + : (); push @style, 'text-align: '. $opt{'text-align'} if $opt{'text-align'}; push @style, 'background-color: #dddddd' - if $opt{'disabled'}; + if $opt{'disabled'} && ! $opt{'nodarken_disabled'}; my $style = scalar(@style) ? 'STYLE="'. join(';', @style). '"' : ''; diff --git a/httemplate/elements/select-cgp_rule_action.html b/httemplate/elements/select-cgp_rule_action.html index 25c3a25..9ac9306 100644 --- a/httemplate/elements/select-cgp_rule_action.html +++ b/httemplate/elements/select-cgp_rule_action.html @@ -1,22 +1,59 @@ -%# XXX CSS to verticially align the select vs. the textarea -<% include( 'select.html', - %opt, - 'options' => \@actions, #reverse order if we ever need to specify - 'labels' => { '' => 'Select Action' }, - ) -%> - <TEXTAREA NAME = "<% $opt{field} %>_params" -%# ID = "<% $opt{id} %>" -%# <% $rows %> -%# <% $cols %> -%# <% $onchange %> -%# ><% $curr_value |h %></TEXTAREA> - > -%# XXX curr value - </TEXTAREA> -<%init> +% unless ( $opt{'js_only'} ) { -my %opt = @_; + <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<%$curr_value%>"> + + <% include( 'select.html', + 'field' => $name.'_action', + 'id' => $id.'_action', + 'options' => \@actions, + 'curr_value' => scalar($cgi->param($name.'_action')) + || $cgp_rule_action->action, + 'labels' => { '' => 'Select Action' }, + 'onchange' => $name.'_changed', + 'style' => 'vertical-align:top', + ) + %> + + <TEXTAREA NAME = "<% $name %>_params" + ID = "<% $id %>_params" + <% $disabled %> + <% $style %> +%# <% $rows %> +%# <% $cols %> +%# <% $onchange %> + ><% scalar($cgi->param($name.'_params')) || $cgp_rule_action->params |h %></TEXTAREA> + +% } +% unless ( $opt{'html_only'} || $opt{'js_only'} ) { + <SCRIPT TYPE="text/javascript"> +% } +% unless ( $opt{'html_only'} ) { + + function <% $name %>_changed(what) { + + <% $opt{'onchange'} %> + + var <% $name %>_value = what.options[what.selectedIndex].value; + + var params_Element = what.form.<% $name %>_params; + + // if bool, hide/disable _op and _params entirely + if ( <%$name%>_value == '' || <%$name%>_value == 'Stop Processing' || <%$name%>_value == 'Discard' ) { + params_Element.disabled = true; + params_Element.style.visibility = "hidden"; + } else { + params_Element.disabled = false; + params_Element.style.visibility = "visible"; + + } + + } + +% } +% unless ( $opt{'html_only'} || $opt{'js_only'} ) { + </SCRIPT> +% } +<%once> my @actions = ( '', @@ -50,6 +87,28 @@ my @actions = ( 'Accept Request', ); -#XXX hmm, hide textarea w/Stop Processing,Discard like _condition.html +my %noparam = ( map { $_=>1 } '', 'Stop Processing', 'Discard' ); + +</%once> +<%init> + +my %opt = @_; + +my $name = $opt{'element_name'} || $opt{'field'} || 'ruleactionnum'; +#my $id = $opt{'id'} || 'contactnum'; +my $id = $opt{'id'} || $opt{'field'} || 'ruleactionnum'; + +my $curr_value = $opt{'curr_value'} || $opt{'value'}; + +my $cgp_rule_action; +if ( $curr_value ) { + $cgp_rule_action = qsearchs('cgp_rule_action', + { 'ruleactionnum' => $curr_value } ); +} else { + $cgp_rule_action = new FS::cgp_rule_action {}; +} + +my $disabled = $noparam{$curr_value} ? 'DISABLED' : ''; +my $style = $disabled ? 'STYLE="visibility:hidden"' : ''; -</%Init> +</%init> diff --git a/httemplate/elements/select-cgp_rule_condition.html b/httemplate/elements/select-cgp_rule_condition.html index eaf7211..0c305d9 100644 --- a/httemplate/elements/select-cgp_rule_condition.html +++ b/httemplate/elements/select-cgp_rule_condition.html @@ -1,25 +1,42 @@ % unless ( $opt{'js_only'} ) { + + <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>"> + <% include( 'select.html', - %opt, - 'options' => \@conditions, - 'labels' => { '' => 'Select Condition' }, - 'onchange' => $key.'_changed', + 'field' => $name.'_condition', + 'id' => $id.'_condition', + 'options' => \@conditions, + 'curr_value' => scalar($cgi->param($name.'_condition')) + || $cgp_rule_condition->condition, + 'labels' => { '' => 'Select Condition' }, + 'onchange' => $name.'_changed', ) %> + <% include( 'select.html', - 'name' => $opt{'field'}.'_op', - 'id' => $key.'_op', - 'options' => \@op, - #XXX curr op + 'field' => $name.'_op', + 'id' => $id.'_op', + 'options' => \@op, + 'curr_value' => scalar($cgi->param($name.'_op')) + || $cgp_rule_condition->op, + 'disabled' => $disabled, + 'style' => $style, ) %> + <% include( 'input-text.html', - 'name' => $opt{'field'}.'_params', - 'id' => $key.'_params', - #XXX curr value... anything else? + 'field' => $name.'_params', + 'id' => $id.'_params', + 'curr_value' => scalar($cgi->param($name.'_params')) + || $cgp_rule_condition->params, + 'disabled' => $disabled, + 'style' => $style, + 'nodarken_disabled' => 1, ) %> + % # could add more UI sugar for date/time ranges, string #lists, etc. + % } % unless ( $opt{'html_only'} || $opt{'js_only'} ) { <SCRIPT TYPE="text/javascript"> @@ -32,20 +49,19 @@ what.options[length] = optionName; } - function <% $key %>_changed(what) { + function <% $name %>_changed(what) { - <% $opt{'onchange'} %> + <% $onchange %> - var <% $key %>_value = what.options[what.selectedIndex].value; - //alert ("condition changed to " + <% $key %>_value ); + var <% $name %>_value = what.options[what.selectedIndex].value; - var op_Element = what.form.<% $key %>_op; - var params_Element = what.form.<% $key %>_params; + var op_Element = what.form.<% $name %>_op; + var params_Element = what.form.<% $name %>_params; //cond2op in javascript... not as elegant cause my js << my perl // if bool, hide/disable _op and _params entirely - if ( <%$key%>_value == '' || <%$key%>_value == 'Human Generated' ) { + if ( <%$name%>_value == '' || <%$name%>_value == 'Human Generated' ) { op_Element.disabled = true; op_Element.style.visibility = "hidden"; params_Element.disabled = true; @@ -56,13 +72,13 @@ var OpArray = [ 'is', 'is not' ]; // if lt_ge, add em - if ( <%$key%>_value == 'Message Size' || <%$key%>_value == 'Time of Day' || <%$key%>_value == 'Current Date' ) { + if ( <%$name%>_value == 'Message Size' || <%$name%>_value == 'Time of Day' || <%$name%>_value == 'Current Date' ) { OpArray.push('less than'); OpArray.push('greater than'); } // unless no_in, add em - if ( <%$key%>_value != 'Message Size' && <%$key%>_value != 'Current Date' && <%$key%>_value != 'Existing Mailbox' ) { + if ( <%$name%>_value != 'Message Size' && <%$name%>_value != 'Current Date' && <%$name%>_value != 'Existing Mailbox' ) { OpArray.push('in'); OpArray.push('not in'); } @@ -73,7 +89,7 @@ // update the _op select with this new array for ( var s = 0; s < OpArray.length; s++ ) - opt(what.form.<% $key %>_op, OpArray[s], OpArray[s]); + opt(what.form.<% $name %>_op, OpArray[s], OpArray[s]); // show _op and _params (in case we were a bool before) op_Element.disabled = false; @@ -123,22 +139,22 @@ my @conditions = ( 'Each Route' ); -my %bool = ( #hide the op and valud dropdowns entirely - '' => 1, #XXX hide _op and _params on "Select Condition" - 'Human Generated' => 1, -); +my %bool = ( map { $_=>1 } ( #hide the op and valud dropdowns entirely + '', + 'Human Generated', +)); -my %no_in = ( #hide in/not in - 'Message Size' => 1, - 'Current Date' => 1, - 'Existing Mailbox' => 1, -); +my %no_in = ( map { $_=>1 } ( #hide in/not in + 'Message Size', + 'Current Date', + 'Existing Mailbox', +)); -my %lt_gt = ( #add less than/greater than - 'Message Size' => 1, - 'Time of Day', => 1, - 'Current Date', => 1, -); +my %lt_gt = ( map { $_=>1 } ( #add less than/greater than + 'Message Size', + 'Time of Day', + 'Current Date', +)); my $cond2op = sub { my $cond = shift; @@ -154,10 +170,29 @@ my $cond2op = sub { my %opt = @_; -my $key = $opt{'field'} || $opt{'id'}; +my $name = $opt{'element_name'} || $opt{'field'} || 'ruleconditionnum'; +#my $id = $opt{'id'} || 'contactnum'; +my $id = $opt{'id'} || $opt{'field'} || 'ruleconditionnum'; + +my $curr_value = $opt{'curr_value'} || $opt{'value'}; + +my $onchange = ''; +if ( $opt{'onchange'} ) { + $onchange = $opt{'onchange'}; + $onchange .= '(what)' unless $onchange =~ /\(\w*\);?$/; +} + +my $cgp_rule_condition; +if ( $curr_value ) { + $cgp_rule_condition = qsearchs('cgp_rule_condition', + { 'ruleconditionnum' => $curr_value } ); +} else { + $cgp_rule_condition = new FS::cgp_rule_condition {}; +} + +my @op = &$cond2op($curr_value); -#XXX curr value -> hidden op / param / param selects depending -#my @op = &$cond2op($curr_value); -my @op = &$cond2op(); +my $disabled = scalar(@op) ? '' : 1; +my $style = $disabled ? 'visibility:hidden' : ''; </%init> diff --git a/httemplate/elements/select.html b/httemplate/elements/select.html index 268e0d2..5249a6d 100644 --- a/httemplate/elements/select.html +++ b/httemplate/elements/select.html @@ -4,6 +4,8 @@ ID = "<% $opt{id} %>" previousValue = "<% $curr_value %>" previousText = "<% $labels->{$curr_value} || $curr_value %>" + <% $style %> + <% $opt{disabled} %> <% $onchange %> > @@ -60,4 +62,18 @@ if ( $opt{'onchange'} ) { $onchange = 'onChange="'. $onchange. '"' unless $onchange =~ /^onChange=/i; } +$opt{'disabled'} = &{ $opt{'disabled'} }( \%opt ) + if ref($opt{'disabled'}) eq 'CODE'; +$opt{'disabled'} = 'DISABLED' + if $opt{'disabled'} && $opt{'disabled'} !~ /disabled/i; # uuh... yeah? + +my @style = ref($opt{'style'}) + ? @{ $opt{'style'} } + : $opt{'style'} + ? ( $opt{'style'} ) + : (); + +my $style = scalar(@style) ? 'STYLE="'. join(';', @style). '"' : ''; + + </%init> |