1%# BEGIN BPS TAGGED BLOCK {{{
2%#
3%# COPYRIGHT:
4%#
5%# This software is Copyright (c) 1996-2021 Best Practical Solutions, LLC
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<%ARGS>
49$Name => undef
50$Attr => undef
51$GenericMap => {}
52</%ARGS>
53<%ONCE>
54my $COLUMN_MAP = {
55    Disabled => {
56        title     => 'Status', # loc
57        attribute => 'Disabled',
58        value     => sub { return $_[0]->Disabled? $_[0]->loc('Disabled'): $_[0]->loc('Enabled') },
59    },
60
61    map(
62        { my $c = $_; $c => {
63            title     => $c, attribute => $c,
64            value     => sub { return $_[0]->$c() },
65        } }
66        qw(Name Description Type LookupType Pattern EntryHint RenderType ValuesClass CanonicalizeClass)
67    ),
68    map(
69        { my $c = $_; my $short = $c; $short =~ s/^Friendly//;
70          $c => {
71            title     => $short, attribute => $short,
72            value     => sub { return $_[0]->$c() },
73        } }
74        qw(FriendlyLookupType FriendlyType FriendlyPattern)
75    ),
76    BasedOn => {
77        title     => 'Based On',
78        attribute => 'BasedOn',
79        value     => sub { return $_[0]->BasedOnObj->Name },
80    },
81    MaxValues => {
82        title     => 'MaxValues', # loc
83        attribute => 'MaxValues',
84        value     => sub {
85            my $v = $_[0]->MaxValues;
86            return !$v ? $_[0]->loc('unlimited') : $v == 0 ? $_[0]->loc('one') : $v;
87        },
88    },
89    UniqueValues => {
90        title     => 'UniqueValues', # loc
91        attribute => 'UniqueValues',
92        value     => sub { return $_[0]->UniqueValues ? $_[0]->loc('Unique values') : '' },
93    },
94    AddedTo => {
95        title     => 'Added', # loc
96        value     => sub {
97            if ( $_[0]->IsGlobal ) {
98                return $_[0]->loc('Global');
99            }
100
101            my $collection = $_[0]->AddedTo;
102            return '' unless $collection;
103
104            $collection->RowsPerPage(10);
105
106            my $found = 0;
107            my $res = '';
108            while ( my $record = $collection->Next ) {
109                $res .= ', ' if $res;
110
111                my $id = '';
112                $id = $record->Name if $record->_Accessible('Name','read');
113                $id ||= "#". $record->id;
114                $res .= $id;
115
116                $found++;
117            }
118            $res .= ', ...' if $found >= 10;
119            return $res;
120        },
121
122    },
123    RemoveCheckBox => {
124        title => sub {
125            my $name = 'RemoveCustomField';
126            my $checked = $DECODED_ARGS->{ $name .'All' }? 'checked="checked"': '';
127
128            return \qq{<input type="checkbox" name="}, $name, \qq{All" value="1" $checked
129                              onclick="setCheckbox(this, },
130                              $m->interp->apply_escapes($name,'j'),
131                              \qq{)" />};
132        },
133        value => sub {
134            my $id = $_[0]->id;
135            return '' if $_[0]->IsGlobal;
136
137            my $name = 'RemoveCustomField';
138            my $arg = $DECODED_ARGS->{ $name };
139
140            my $checked = '';
141            if ( $arg && ref $arg ) {
142                $checked = 'checked="checked"' if grep $_ == $id, @$arg;
143            }
144            elsif ( $arg ) {
145                $checked = 'checked="checked"' if $arg == $id;
146            }
147            return \qq{<input type="checkbox" name="}, $name, \qq{" value="$id" $checked />}
148        },
149    },
150    MoveCF => {
151        title => 'Move',
152        value => sub {
153            my $id = $_[0]->id;
154
155            my $context = $_[2] || 0;
156            return '' unless $_[0]->IsAdded( $context );
157
158            my $name = 'MoveCustomField';
159            my $args = $m->caller_args( 1 );
160            my @pass = ref $args->{'PassArguments'}
161                ? @{$args->{'PassArguments'}}
162                : ($args->{'PassArguments'});
163            my %pass = map { $_ => $args->{$_} } grep exists $args->{$_}, @pass;
164
165            my $uri = RT->Config->Get('WebPath') . $m->request_path;
166
167            my @res = (
168                \'<a href="',
169                $uri .'?'. $m->comp("/Elements/QueryString", %pass, MoveCustomFieldUp => $id ),
170                \'">', loc('~[Up~]'), \'</a>',
171                \' <a href="',
172                $uri .'?'. $m->comp("/Elements/QueryString", %pass, MoveCustomFieldDown => $id ),
173                \'">', loc('~[Down~]'), \'</a>'
174            );
175
176            return @res;
177        },
178    },
179};
180
181$COLUMN_MAP->{'AppliedTo'} = $COLUMN_MAP->{'AddedTo'};
182
183</%ONCE>
184<%INIT>
185$m->callback( GenericMap => $GenericMap, COLUMN_MAP => $COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
186return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr );
187</%INIT>
188