ConvertMultiSelectToCheckboxes

From Request Tracker Wiki
Jump to: navigation, search

This has been tested on RT 3.4.4 with scriptactulous.js already loaded in Header.

Replace EditCustomFieldSelect with the following, or see RT::Extension::CustomField::Checkbox

%# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC %# <jesse@bestpractical.com> %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <code><pre> &lt;select name="&lt;%$NamePrefix%&gt;&lt;%$CustomField-&gt;Id%&gt;-Values" size="&lt;%$Rows%&gt;" id="&lt;%$id%&gt;" &lt;% $Multiple &amp;&amp; 'MULTIPLE' %&gt;&gt; </pre></code> % my $selected; % my $CFVs = $CustomField->Values; % while ($CFVs and my $value = $CFVs->Next ) { <option value="<%$value->Name%>" % if ($Values) { <% $Values->HasEntry($value->Name) && ($selected = 1) && 'SELECTED' %> % } elsif ($Default) { <% ($Default eq $value->Name) && ($selected = 1) && 'SELECTED' %> % } ><% $value->Name%></option> % } <option value="" <% !$selected && 'SELECTED' %>><&|/l&>(no value)</&></option> </select> %if ($Checkboxes) { % # create a checkbox interface for the selection <script type="text/javascript"> Element.hide('<%$id%>'); $('<%$id%>').checbox_interface = Builder.node('div'); $('<%$id%>').parentNode.insertBefore($('<%$id%>').checbox_interface, $('<%$id%>')); for (var idx in $('<%$id%>').options) { <code><pre> var option = $('&lt;%$id%&gt;').options[idx]; if (option.value) { var new_checkbox = Builder.node('input',{type:'checkbox'}); $('&lt;%$id%&gt;').checbox_interface.appendChild(Builder.node('div', {}, [ new_checkbox, option.value ])); new_checkbox.selected = option.selected; Event.observe(new_checkbox, 'click', function(event) { if (this.selected) { this.selected = false; } else { this.selected = true; } }.bindAsEventListener(option)); } else { option.selected = false; } </pre></code> } </script> % } <%INIT> my $id = $NamePrefix . $CustomField->Id; </%INIT> <%ARGS> $Object => undef $CustomField => undef $NamePrefix => undef $Default => undef $Values => undef $Multiple => 0 $Checkboxes => undef $Cols $Rows </%ARGS>