summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2010-04-29 07:40:46 +0000
committerivan <ivan>2010-04-29 07:40:46 +0000
commit2ac302e18d723563692cdbbd74f3e9e5331a3014 (patch)
treece25a3f91382098fa749f0d8c5dde7c77699b631
parentfa6176ab2df85c4b66026e9fe2a7242293d20ce5 (diff)
communigate (phase 2): rules: adding conditions and actions to rule edit. RT#7514
-rw-r--r--FS/FS/cgp_rule.pm2
-rw-r--r--httemplate/edit/cgp_rule.html32
-rw-r--r--httemplate/edit/process/cgp_rule.html14
-rw-r--r--httemplate/elements/input-text.html8
-rw-r--r--httemplate/elements/select-cgp_rule_action.html99
-rw-r--r--httemplate/elements/select-cgp_rule_condition.html113
-rw-r--r--httemplate/elements/select.html16
7 files changed, 205 insertions, 79 deletions
diff --git a/FS/FS/cgp_rule.pm b/FS/FS/cgp_rule.pm
index 7e5c9fe..82e7122 100644
--- a/FS/FS/cgp_rule.pm
+++ b/FS/FS/cgp_rule.pm
@@ -1,7 +1,7 @@
package FS::cgp_rule;
use strict;
-use base qw( FS::Record );
+use base qw( FS::o2m_Common FS::Record );
use FS::Record qw( qsearch qsearchs dbh );
use FS::cust_svc;
use FS::cgp_rule_condition;
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>