Upgrade 4.0.17 clean.
[usit-rt.git] / share / html / Elements / EditCustomFieldSelect
CommitLineData
84fb5b46
MKG
1%# BEGIN BPS TAGGED BLOCK {{{
2%#
3%# COPYRIGHT:
4%#
403d7b0b 5%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
84fb5b46
MKG
6%# <sales@bestpractical.com>
7%#
8%# (Except where explicitly superseded by other copyright notices)
9%#
10%#
11%# LICENSE:
12%#
13%# This work is made available to you under the terms of Version 2 of
14%# the GNU General Public License. A copy of that license should have
15%# been provided with this software, but in any event can be snarfed
16%# from www.gnu.org.
17%#
18%# This work is distributed in the hope that it will be useful, but
19%# WITHOUT ANY WARRANTY; without even the implied warranty of
20%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21%# General Public License for more details.
22%#
23%# You should have received a copy of the GNU General Public License
24%# along with this program; if not, write to the Free Software
25%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26%# 02110-1301 or visit their web page on the internet at
27%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28%#
29%#
30%# CONTRIBUTION SUBMISSION POLICY:
31%#
32%# (The following paragraph is not intended to limit the rights granted
33%# to you to modify and distribute this software under the terms of
34%# the GNU General Public License and is only of importance to you if
35%# you choose to contribute your changes and enhancements to the
36%# community by submitting them to Best Practical Solutions, LLC.)
37%#
38%# By intentionally submitting any modifications, corrections or
39%# derivatives to this work, or any other work intended for use with
40%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41%# you are the copyright holder for those contributions and you grant
42%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43%# royalty-free, perpetual, license to use, copy, create derivative
44%# works based on those contributions, and sublicense and distribute
45%# those contributions and any derivatives thereof.
46%#
47%# END BPS TAGGED BLOCK }}}
48%# Build up the set of cascading select boxes as "guides"
49%# each one limits the options of the final one a bit
50%# (perhaps by tweaking the .display style?)
51% my $selected = 0;
52% my @category;
53% my $id = $NamePrefix . $CustomField->Id;
54% my $out = $m->scomp('SELF:options', %ARGS, SelectedRef => \$selected, CategoryRef => \@category);
55% if (!$HideCategory and @category and not $CustomField->BasedOnObj->id) {
56 <script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/cascaded.js"></script>
57%# XXX - Hide this select from w3m?
58 <select onchange="filter_cascade(<% "$id-Values" |n,j%>, this.value)" name="<% $id %>-Category" class="CF-<%$CustomField->id%>-Edit">
59 <option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>-</&></option>
60% foreach my $cat (@category) {
61% my ($depth, $name) = @$cat;
62 <option value="<% $name %>"><% '&nbsp;' x $depth |n %><% $name %></option>
63% }
64 </select><br />
65% } elsif ($CustomField->BasedOnObj->id) {
66<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/cascaded.js"></script>
67<script type="text/javascript"><!--
68jQuery( function () {
69 var basedon = document.getElementById(<% $NamePrefix . $CustomField->BasedOnObj->id . "-Values" |n,j%>);
70 if (basedon != null) {
71 var oldchange = basedon.onchange;
72 basedon.onchange = function () {
73 filter_cascade(
74 <% "$id-Values" |n,j%>,
75 basedon.value,
76 1
77 );
78 if (oldchange != null)
79 oldchange();
80 };
81 basedon.onchange();
82 }
83});
84--></script>
85% }
86% if (@category) {
87%# this hidden select is to supply a full list of values,
88%# see filter_cascade() in js/cascaded.js
89 <select name="<%$id%>-Values-Complete" id="<%$id%>-Values-Complete" class="hidden" disabled="disabled">
90 <option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>(no value)</&></option>
91% $m->out($out);
92 </select>
93% }
94
95% if ( $RenderType eq 'List' ) {
96<fieldset class="cfedit">
97% if ( $checktype eq 'radio' ) {
98 <input type="<% $checktype %>" name="<% $name %>" id="<% $name %>-none" value="" <% keys %default ? '' : ' checked="checked"' |n%> />
99 <label for="<% $name %>-none"><&|/l&>(no value)</&></label><br />
100% }
101% my $CFVs = $CustomField->Values;
102% while ( my $value = $CFVs->Next ) {
103% my $content = $value->Name;
104% my $labelid = "$name-". $value->id;
105 <input type="<% $checktype %>" name="<% $name %>" id="<% $labelid %>" value="<% $content %>" <% $default{ lc $content }? ' checked="checked"' : '' |n%> />
106 <label for="<% $labelid %>"><% $content %></label><br />
107% }
108</fieldset>
109% } else {
110<select
111 name="<%$id%>-Values" id="<%$id%>-Values" class="CF-<%$CustomField->id%>-Edit"
112% if ( $Rows && ( $Multiple || !@category ) ) {
113 size="<% $Rows %>"
114% }
115<% $Multiple && qq[multiple="multiple"] |n %> >
116<option value=""<% !$selected && qq[ selected="selected"] |n %>><&|/l&>(no value)</&></option>
117% $m->out($out);
118</select>
119% }
120<%init>
121# Handle render types
122$RenderType ||= $CustomField->RenderType;
123if ( $RenderType eq 'Dropdown' ) {
124 # Turn it into a dropdown
125 $Rows = 0;
126}
127
128# The following is for rendering checkboxes / radio buttons only
129my ($checktype, $name);
130if ( $MaxValues == 1 ) {
131 ($checktype, $name) = ('radio', $NamePrefix . $CustomField->Id . '-Value');
132} else {
133 ($checktype, $name) = ('checkbox', $NamePrefix . $CustomField->Id . '-Values');
134}
135
136@Default = grep defined && length, @Default;
137if ( !@Default && $Values ) {
138 @Default = map $_->Content, @{ $Values->ItemsArrayRef };
139}
140my %default = map {lc $_ => 1} @Default;
141</%init>
142<%ARGS>
143$Object => undef
144$CustomField => undef
145$NamePrefix => undef
146@Default => ()
147$Values => undef
148$Multiple => 0
149$Rows => undef
150$HideCategory => 0
151$RenderType => undef
152$MaxValues => 1
153</%ARGS>
154
155<%METHOD options>
156% @Default = grep defined && length, @Default;
157% # $Values->HasEntry is too slow here
158% if ( !@Default && $Values ) {
159% @Default = map $_->Content, @{$Values->ItemsArrayRef};
160% }
161% $_ = lc $_ foreach @Default;
162% my $selected;
163% my $CFVs = $CustomField->Values;
164% my @levels;
165% while ( my $value = $CFVs->Next ) {
166% my $name = $value->Name;
167% my $category = $value->Category || '';
168% my $level = (split /:/, $category, 2)[0] || '';
169% while (@levels) {
170% if ($levels[-1] eq $level) {
171% $level = '';
172% last;
173% } elsif (index($level, $levels[-1]) != 0) {
174% $m->out('</optgroup>');
175% pop @levels;
176% } else {
177% last;
178% }
179% }
180% if ( length $level ) {
181% push @$CategoryRef, [0+@levels, $level];
182 <optgroup style="padding-left: <% @levels/2 %>em" label="<% $category %>">
183% push @levels, $level;
184% }
185 <option value="<% $name %>"
186% if ( grep $_ eq lc $name, @Default )
187% {
188% $$SelectedRef = 1;
189 selected="selected"
190% }
191 ><% $name %></option>
192% }
193% for (@levels) {
194 </optgroup>
195% }
196<%ARGS>
197$CustomField => undef
198@Default => ()
199$Values => undef
200$SelectedRef => undef
201$CategoryRef => undef
202</%ARGS>
203</%METHOD>