summaryrefslogtreecommitdiff
path: root/httemplate/elements/select-cgp_rule_condition.html
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/elements/select-cgp_rule_condition.html')
-rw-r--r--httemplate/elements/select-cgp_rule_condition.html200
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>