~ubuntu-branches/ubuntu/lucid/request-tracker3.8/lucid-security

« back to all changes in this revision

Viewing changes to share/html/Search/Bulk.html

  • Committer: Bazaar Package Importer
  • Author(s): Dominic Hargreaves, Dominic Hargreaves, Christian Perrier
  • Date: 2009-06-16 21:46:59 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090616214659-5ji9k1n3qyc2br3n
Tags: 3.8.4-1
[ Dominic Hargreaves ]
* Add missing comma in Depends (fixes FTBFS on etch)
* Update debconf translations: pt.po, ja.po, sv.po, it.po, cs.po, ru.po
  (Closes: #519885, #519922, #520603, #520759, #521199, #521926)
* Document preference for not using SQLite in production
  (Closes: #512750)

[ Christian Perrier ]
* Debconf templates and debian/control reviewed by the debian-l10n-
  english team as part of the Smith review project.
  (Closes: #522367, #520959)
* [Debconf translation updates]
  - Japanese. Closes: #522896
  - German. Closes: #520958
  - Portuguese. Closes: #523481
  - Galician. Closes: #524256
  - Galician. Closes: #524256
  - Spanish. Closes: #524449
  - Italian. Closes: #524715
  - Russian. Closes: #524894
  - Swedish. Closes: #525171
  - French. Closes: #525281

[ Dominic Hargreaves ]
* Don't tell dbconfig to comment out unused variables, since this
  breaks MySQL and Postgres database configuration (Closes: #523090)
* Update Standards-Version (no changes)
* Switch dependency on sysklogd to rsyslog (Closes: #526914)
* New upstream release; includes
  - Minor security fix (Closes: #533069)
  - Add missing Postgres index (Closes: #512653)
* Patch webmux.pl to provide a better error message when the wrong
  major version of RT is in @INC (for example in a mod_perl context).
  (Closes: #518692)
* Add some more example Exim 4 configuration (Closes: #238345)
* Don't apply database ACLs in databases managed by dbconfig-common.
* Remove unused ACL patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
107
107
<tr><td class="label"> <&|/l&>Make subject</&>: </td>
108
108
<td class="value"> <input name="Subject" size="20" /> </td></tr>
109
109
<tr><td class="label"> <&|/l&>Make priority</&>: </td>
110
 
<td class="value"> <input name="Priority" size="4" /> </td></tr>
 
110
<td class="value"> <& /Elements/SelectPriority, Name => "Priority" &> </td></tr>
111
111
<tr><td class="label"> <&|/l&>Make queue</&>: </td>
112
112
<td class="value"> <& /Elements/SelectQueue, Name => "Queue" &> </td></tr>
113
113
<tr><td class="label"> <&|/l&>Make Status</&>: </td>
146
146
    &><em><% $CF->FriendlyType %></em></td>
147
147
</td></tr>
148
148
% } # end if while
149
 
 <tr><td align="right"><&|/l&>Attach</&>:</td><td><input name="UpdateAttachment" type="file" /></td></tr>
 
149
% if (exists $session{'Attachments'}) {
 
150
<tr><td><&|/l&>Attached file</&>:</td>
 
151
<td>
 
152
<&|/l&>Check box to delete</&><br />
 
153
% foreach my $attach_name (keys %{$session{'Attachments'}}) {
 
154
<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
 
155
% } # end of foreach
 
156
</td>
 
157
</tr>
 
158
% } # end of if
 
159
 
 
160
 <tr><td align="right"><&|/l&>Attach</&>:</td><td><input name="Attach" type="file" />
 
161
    <input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" />
 
162
    <input type="hidden" class="hidden" name="UpdateAttach" value="1" /></td></tr>
150
163
 <tr><td class="labeltop"><&|/l&>Message</&>:</td><td>
151
164
 <& /Elements/MessageBox, Name=>"UpdateContent"&>
152
165
 </td></tr>
170
183
</tr>
171
184
% while (my $cf = $cfs->Next()) {
172
185
<tr>
173
 
<td class="label"><%$cf->Name%><br />
 
186
<td class="label"><% loc($cf->Name) %><br />
174
187
<em>(<%$cf->FriendlyType%>)</em></td>
175
188
% my $rows = 5;
176
189
% my @add = (NamePrefix => 'Bulk-Add-CustomField-', CustomField => $cf, Rows => $rows, Multiple => ($cf->MaxValues ==1 ? 0 : 1) , Cols => 25);
219
232
 
220
233
my (@results);
221
234
 
 
235
# {{{ deal with deleting uploaded attachments
 
236
foreach my $key (keys %ARGS) {
 
237
    if ($key =~ m/^DeleteAttach-(.+)$/) {
 
238
        delete $session{'Attachments'}{$1};
 
239
    }
 
240
    $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
 
241
}
 
242
# }}}
 
243
 
 
244
# {{{ store the uploaded attachment in session
 
245
if ($ARGS{'Attach'}) {            # attachment?
 
246
    my $attachment = MakeMIMEEntity(
 
247
        AttachmentFieldName => 'Attach'
 
248
    );
 
249
 
 
250
    my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
 
251
    $session{'Attachments'} = {
 
252
        %{$session{'Attachments'} || {}},
 
253
        $file_path => $attachment,
 
254
    };
 
255
}
 
256
# }}}
 
257
 
 
258
# delete temporary storage entry to make WebUI clean
 
259
unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
 
260
    delete $session{'Attachments'};
 
261
}
 
262
# }}}
 
263
 
222
264
$Page ||= 1;
223
265
 
224
266
$Format ||= RT->Config->Get('DefaultSearchResultFormat');
254
296
while ( my $ticket = $Tickets->Next ) {
255
297
    next if $seen_queues->{ $ticket->Queue }++;
256
298
 
257
 
    my $custom_fields = $ticket->QueueObj->TicketCustomFields;
 
299
    my $custom_fields = $ticket->CustomFields;
258
300
    while ( my $field = $custom_fields->Next ) {
259
301
        $fields->{ $field->id } = $field;
260
302
    }
273
315
my $cf_add_keys;
274
316
@$cf_add_keys = grep { /^Bulk-Add-CustomField/ } keys %ARGS;
275
317
 
276
 
 
277
 
while ( my $Ticket = $Tickets->Next ) {
278
 
    next unless ( $ARGS{ "UpdateTicket" . $Ticket->Id } );
279
 
 
280
 
    #Update the links
281
 
    $ARGS{'id'} = $Ticket->id;
282
 
    $queues{ $Ticket->QueueObj->Id }++;
283
 
 
284
 
    my @updateresults, ProcessUpdateMessage(
285
 
            TicketObj => $Ticket,
286
 
            ARGSRef   => \%ARGS,
 
318
unless ( $ARGS{'AddMoreAttach'} ) {
 
319
    # Add session attachments if any to be processed by ProcessUpdateMessage
 
320
    $ARGS{'UpdateAttachments'} = $session{'Attachments'} if ( $session{'Attachments'} );
 
321
 
 
322
    while ( my $Ticket = $Tickets->Next ) {
 
323
        next unless ( $ARGS{ "UpdateTicket" . $Ticket->Id } );
 
324
 
 
325
        #Update the links
 
326
        $ARGS{'id'} = $Ticket->id;
 
327
        $queues{ $Ticket->QueueObj->Id }++;
 
328
 
 
329
        my @updateresults, ProcessUpdateMessage(
 
330
                TicketObj => $Ticket,
 
331
                ARGSRef   => \%ARGS,
 
332
            );
 
333
 
 
334
        #Update the basics.
 
335
        my @basicresults =
 
336
          ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
 
337
        my @dateresults =
 
338
          ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS );
 
339
 
 
340
        #Update the watchers
 
341
        my @watchresults =
 
342
          ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS );
 
343
 
 
344
        foreach my $type qw(MergeInto DependsOn MemberOf RefersTo) {
 
345
            $ARGS{ $Ticket->id . "-" . $type } = $ARGS{"Ticket-$type"};
 
346
            $ARGS{ $type . "-" . $Ticket->id } = $ARGS{"$type-Ticket"};
 
347
        }
 
348
        @linkresults =
 
349
          ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
 
350
        foreach my $type qw(MergeInto DependsOn MemberOf RefersTo) {
 
351
            delete $ARGS{ $type . "-" . $Ticket->id };
 
352
            delete $ARGS{ $Ticket->id . "-" . $type };
 
353
        }
 
354
 
 
355
        my @cfresults;
 
356
 
 
357
        foreach my $list ( $cf_add_keys, $cf_del_keys ) {
 
358
            next unless $list->[0];
 
359
 
 
360
 
 
361
            my $op;
 
362
            if ( $list->[0] =~ /Add/ ) {
 
363
                $op = 'add';
 
364
 
 
365
            }
 
366
            elsif ( $list->[0] =~ /Del/ ) {
 
367
                $op = 'del';
 
368
            }
 
369
            else {
 
370
                $RT::Logger->crit(
 
371
                    "Got an op that was neither add nor delete. can never happen"
 
372
                      . $list->[0] );
 
373
                last;
 
374
            }
 
375
 
 
376
            foreach my $key (@$list) {
 
377
                my ( $cfid, $cf );
 
378
                next if $key =~ /CustomField-(\d+)-Category$/;
 
379
                if ( $key =~ /CustomField-(\d+)-/ ) {
 
380
                    $cfid = $1;
 
381
                    $cf   = RT::CustomField->new( $session{'CurrentUser'} );
 
382
                    $cf->Load($cfid);
 
383
                }
 
384
                else {next}
 
385
                my @values =
 
386
                  ref( $ARGS{$key} ) eq 'ARRAY'
 
387
                  ? @{ $ARGS{$key} }
 
388
                  : ( $ARGS{$key} );
 
389
                map { s/(\r\n|\r)/\n/g; } @values;    # fix the newlines
 
390
                     # now break the multiline values into multivalues
 
391
                @values = map { split( /\n/, $_ ) } @values
 
392
                  unless ( $cf->SingleValue );
 
393
 
 
394
                my $current_values = $Ticket->CustomFieldValues($cfid);
 
395
                foreach my $value (@values) {
 
396
                    if ( $op eq 'del' && $current_values->HasEntry($value) ) {
 
397
                        my ( $id, $msg ) = $Ticket->DeleteCustomFieldValue(
 
398
                            Field => $cfid,
 
399
                            Value => $value
 
400
                        );
 
401
                        push @cfresults, $msg;
 
402
                    }
 
403
 
 
404
                    elsif ( $op eq 'add' && !$current_values->HasEntry($value) ) {
 
405
                        my ( $id, $msg ) = $Ticket->AddCustomFieldValue(
 
406
                            Field => $cfid,
 
407
                            Value => $value
 
408
                        );
 
409
                        push @cfresults, $msg;
 
410
                    }
 
411
                }
 
412
            }
 
413
        }
 
414
        my @tempresults = (
 
415
            @watchresults,  @basicresults, @dateresults,
 
416
            @updateresults, @linkresults,  @cfresults
287
417
        );
288
418
 
289
 
    #Update the basics.
290
 
    my @basicresults =
291
 
      ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
292
 
    my @dateresults =
293
 
      ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS );
294
 
 
295
 
    #Update the watchers
296
 
    my @watchresults =
297
 
      ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS );
298
 
 
299
 
    foreach my $type qw(MergeInto DependsOn MemberOf RefersTo) {
300
 
        $ARGS{ $Ticket->id . "-" . $type } = $ARGS{"Ticket-$type"};
301
 
        $ARGS{ $type . "-" . $Ticket->id } = $ARGS{"$type-Ticket"};
302
 
    }
303
 
    @linkresults =
304
 
      ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS );
305
 
    foreach my $type qw(MergeInto DependsOn MemberOf RefersTo) {
306
 
        delete $ARGS{ $type . "-" . $Ticket->id };
307
 
        delete $ARGS{ $Ticket->id . "-" . $type };
308
 
    }
309
 
 
310
 
    my @cfresults;
311
 
 
312
 
    foreach my $list ( $cf_add_keys, $cf_del_keys ) {
313
 
        next unless $list->[0];
314
 
 
315
 
 
316
 
        my $op;
317
 
        if ( $list->[0] =~ /Add/ ) {
318
 
            $op = 'add';
319
 
 
320
 
        }
321
 
        elsif ( $list->[0] =~ /Del/ ) {
322
 
            $op = 'del';
323
 
        }
324
 
        else {
325
 
            $RT::Logger->crit(
326
 
                "Got an op that was neither add nor delete. can never happen"
327
 
                  . $list->[0] );
328
 
            last;
329
 
        }
330
 
 
331
 
        foreach my $key (@$list) {
332
 
            my ( $cfid, $cf );
333
 
            next if $key =~ /CustomField-(\d+)-Category$/;
334
 
            if ( $key =~ /CustomField-(\d+)-/ ) {
335
 
                $cfid = $1;
336
 
                $cf   = RT::CustomField->new( $session{'CurrentUser'} );
337
 
                $cf->Load($cfid);
338
 
            }
339
 
            else {next}
340
 
            my @values =
341
 
              ref( $ARGS{$key} ) eq 'ARRAY'
342
 
              ? @{ $ARGS{$key} }
343
 
              : ( $ARGS{$key} );
344
 
            map { s/(\r\n|\r)/\n/g; } @values;    # fix the newlines
345
 
                 # now break the multiline values into multivalues
346
 
            @values = map { split( /\n/, $_ ) } @values
347
 
              unless ( $cf->SingleValue );
348
 
 
349
 
            my $current_values = $Ticket->CustomFieldValues($cfid);
350
 
            foreach my $value (@values) {
351
 
                if ( $op eq 'del' && $current_values->HasEntry($value) ) {
352
 
                    my ( $id, $msg ) = $Ticket->DeleteCustomFieldValue(
353
 
                        Field => $cfid,
354
 
                        Value => $value
355
 
                    );
356
 
                    push @cfresults, $msg;
357
 
                }
358
 
 
359
 
                elsif ( $op eq 'add' && !$current_values->HasEntry($value) ) {
360
 
                    my ( $id, $msg ) = $Ticket->AddCustomFieldValue(
361
 
                        Field => $cfid,
362
 
                        Value => $value
363
 
                    );
364
 
                    push @cfresults, $msg;
365
 
                }
366
 
            }
367
 
        }
368
 
    }
369
 
    my @tempresults = (
370
 
        @watchresults,  @basicresults, @dateresults,
371
 
        @updateresults, @linkresults,  @cfresults
372
 
    );
373
 
 
374
 
    @tempresults =
375
 
      map { loc( "Ticket [_1]: [_2]", $Ticket->Id, $_ ) } @tempresults;
376
 
 
377
 
    @results = ( @results, @tempresults );
 
419
        @tempresults =
 
420
          map { loc( "Ticket [_1]: [_2]", $Ticket->Id, $_ ) } @tempresults;
 
421
 
 
422
        @results = ( @results, @tempresults );
 
423
    }
 
424
 
 
425
    # Cleanup WebUI
 
426
    delete $session{'Attachments'};
378
427
}
379
428
 
380
429
my $TxnCFs = RT::CustomFields->new( $session{CurrentUser} );