diff options
Diffstat (limited to 'httemplate/elements/select-cgp_rule_condition.html')
-rw-r--r-- | httemplate/elements/select-cgp_rule_condition.html | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/httemplate/elements/select-cgp_rule_condition.html b/httemplate/elements/select-cgp_rule_condition.html new file mode 100644 index 0000000..bc96ab4 --- /dev/null +++ b/httemplate/elements/select-cgp_rule_condition.html @@ -0,0 +1,200 @@ +% unless ( $opt{'js_only'} ) { + + <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>"> + + <% include( 'select.html', + 'field' => $name.'_conditionname', + 'id' => $id.'_conditionname', + 'options' => \@conditions, + 'curr_value' => $conditionname, + 'labels' => { '' => 'Select Condition' }, + 'onchange' => $name.'_changed', + ) + %> + + <% include( 'select.html', + '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', + '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"> +% } +% unless ( $opt{'html_only'} ) { + + function opt(what,value,text) { + var optionName = new Option(text, value, false, false); + var length = what.length; + what.options[length] = optionName; + } + + function <% $name %>_changed(what) { + + <% $onchange %> + + var <% $name %>_value = what.options[what.selectedIndex].value; + + 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 ( <%$name%>_value == '' || <%$name%>_value == 'Human Generated' ) { + op_Element.disabled = true; + op_Element.style.visibility = "hidden"; + params_Element.disabled = true; + params_Element.style.visibility = "hidden"; + return true; + } + + var OpArray = [ 'is', 'is not' ]; + + // if lt_ge, add em + 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 ( <%$name%>_value != 'Message Size' && <%$name%>_value != 'Current Date' && <%$name%>_value != 'Existing Mailbox' ) { + OpArray.push('in'); + OpArray.push('not in'); + } + + // blank the current op list + for ( var i = op_Element.length; i >= 0; i-- ) + op_Element.options[i] = null; + + // update the _op select with this new array + for ( var s = 0; s < OpArray.length; 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; + op_Element.style.visibility = "visible"; + params_Element.disabled = false; + params_Element.style.visibility = "visible"; + + } +% } +% unless ( $opt{'html_only'} || $opt{'js_only'} ) { + </SCRIPT> +% } +<%once> + +my @conditions = ( + '', + + #generic http://www.communigate.com/CommunigatePro/Rules.html#Conditions + 'Submit Address', + 'Time of Day', + 'Current Date', + 'Current Day', + 'Preference', + 'FreeBusy', + 'Existing Mailbox', + + #email http://www.communigate.com/CommunigatePro/QueueRules.html#Conditions + 'From', + 'Sender', + 'To', + 'Cc', + 'Reply-To', + 'Any To or Cc', + 'Each To or Cc', + 'Return-Path', + "'From' Name", + 'Subject', + 'Message-ID', + 'Message Size', + 'Human Generated', + 'Header Field', + 'Any Recipient', + 'Each Recipient', + 'Source', + 'Security', + 'Any Route', + 'Each Route' +); + +my %bool = ( map { $_=>1 } ( #hide the op and valud dropdowns entirely + '', + 'Human Generated', +)); + +my %no_in = ( map { $_=>1 } ( #hide in/not in + 'Message Size', + 'Current Date', + 'Existing Mailbox', +)); + +my %lt_gt = ( map { $_=>1 } ( #add less than/greater than + 'Message Size', + 'Time of Day', + 'Current Date', +)); + +my $cond2op = sub { + my $cond = shift; + return () if $bool{$cond}; + my @op = ( 'is', 'is not' ); + push @op, 'less than', 'greater than' if $lt_gt{$cond}; + push @op, 'in', 'not in' unless $no_in{$cond}; + @op; +}; + +</%once> +<%init> + +my %opt = @_; + +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 $conditionname = scalar($cgi->param($name.'_conditionname')) + || $cgp_rule_condition->conditionname; + +my @op = &$cond2op($conditionname); + +my $disabled = scalar(@op) ? '' : 1; +my $style = $disabled ? 'visibility:hidden' : ''; + +</%init> |