[Rt-commit] rt branch, 4.2/web-attachs-processing, updated. rt-3.9.7-1234-gcb5ff36
Ruslan Zakirov
ruz at bestpractical.com
Sat Jan 22 09:50:20 EST 2011
The branch, 4.2/web-attachs-processing has been updated
via cb5ff367d24a7bd6f25f01f882f53a453de173ad (commit)
via 1c705e20c4b6f8de4573ff396b85debc1785e96d (commit)
via 6710d8b81a21227bf247389eaaa4a1d90fdfcb98 (commit)
via f468779e3681c05f715308cd81ddc7a51a062496 (commit)
via 8a3c2774b4733c4f2b18536e31827989dc6e5cdb (commit)
via 06a5b1acc5b8e07d364b9a600902d30d2a903812 (commit)
via 60081ba2970bfd5cb05f66f4e2dced673abd3332 (commit)
via 688c3be3225ed9cbb7e9de22d7e8b33b99bfb70b (commit)
from 41c47e09eedd22f046b8dc5c0cb45b166730cbff (commit)
Summary of changes:
lib/RT/Interface/Web.pm | 70 +++++++++++++++----
share/html/Search/Bulk.html | 37 ++--------
share/html/SelfService/Display.html | 111 +++++++----------------------
share/html/Ticket/Create.html | 24 +------
share/html/Ticket/Display.html | 11 +--
share/html/Ticket/Elements/AddAttachments | 2 +-
share/html/Ticket/ModifyAll.html | 33 +--------
share/html/Ticket/Update.html | 25 +------
share/html/m/ticket/create | 34 ++-------
share/html/m/ticket/reply | 28 +-------
share/html/m/ticket/show | 7 +--
11 files changed, 107 insertions(+), 275 deletions(-)
- Log -----------------------------------------------------------------
commit 688c3be3225ed9cbb7e9de22d7e8b33b99bfb70b
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 02:34:55 2011 +0300
process attachments in CreateTicket and UpdateMessage
diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index 6062aca..34800b4 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -1178,18 +1178,21 @@ sub CreateTicket {
Type => $ARGS{'ContentType'},
);
- if ( $ARGS{'Attachments'} ) {
- my $rv = $MIMEObj->make_multipart;
- $RT::Logger->error("Couldn't make multipart message")
- if !$rv || $rv !~ /^(?:DONE|ALREADY)$/;
+ my @attachments;
+ if ( my $tmp = $session{'Attachments'}{ $ARGS{'Token'} || '' } ) {
+ push @attachments, grep $_, values %$tmp;
- foreach ( values %{ $ARGS{'Attachments'} } ) {
- unless ($_) {
- $RT::Logger->error("Couldn't add empty attachemnt");
- next;
- }
- $MIMEObj->add_part($_);
- }
+ delete $session{'Attachments'}{ $ARGS{'Token'} || '' }
+ unless $ARGS{'KeepAttachments'};
+ $session{'Attachment'} = $session{'Attachment'}
+ if @attachments;
+ }
+ if ( $ARGS{'Attachments'} ) {
+ push @attachments, grep $_, values %{ $ARGS{'Attachments'} };
+ }
+ if ( @attachments ) {
+ $MIMEObj->make_multipart;
+ $MIMEObj->add_part( $_ ) foreach @attachments;
}
foreach my $argument (qw(Encrypt Sign)) {
@@ -1414,9 +1417,21 @@ sub ProcessUpdateMessage {
);
}
- if ( $args{ARGSRef}->{'UpdateAttachments'} ) {
+ my @attachments;
+ if ( my $tmp = $session{'Attachments'}{ $args{'ARGSRef'}{'Token'} || '' } ) {
+ push @attachments, grep $_, values %$tmp;
+
+ delete $session{'Attachments'}{ $args{'ARGSRef'}{'Token'} || '' }
+ unless $args{'KeepAttachments'};
+ $session{'Attachment'} = $session{'Attachment'}
+ if @attachments;
+ }
+ if ( $args{ARGSRef}{'UpdateAttachments'} ) {
+ push @attachments, grep $_, values %{ $args{ARGSRef}{'UpdateAttachments'} };
+ }
+ if ( @attachments ) {
$Message->make_multipart;
- $Message->add_part($_) foreach values %{ $args{ARGSRef}->{'UpdateAttachments'} };
+ $Message->add_part( $_ ) foreach @attachments;
}
if ( $args{ARGSRef}->{'AttachTickets'} ) {
commit 60081ba2970bfd5cb05f66f4e2dced673abd3332
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 02:36:38 2011 +0300
ProcessAttachments function in ::Interface::Web
diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index 34800b4..15b33e3 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -1518,7 +1518,36 @@ sub _ProcessUpdateMessageRecipients {
}
}
+sub ProcessAttachments {
+ my %args = (
+ ARGSRef => {},
+ Token => '',
+ @_
+ );
+
+ my $token = $args{'Token'};
+
+ my $update_session = 0;
+
+ # deal with deleting uploaded attachments
+ if ( my $del = $args{'ARGSRef'}{'DeleteAttach'} ) {
+ delete $session{'Attachments'}{ $token }{ $_ }
+ foreach ref $del? @$del : ($del);
+ $update_session = 1;
+ }
+
+ # store the uploaded attachment in session
+ if ( my $new = $args{'ARGSRef'}{'Attach'} ) { # attachment?
+ my $attachment = MakeMIMEEntity(
+ AttachmentFieldName => 'Attach'
+ );
+
+ my $file_path = Encode::decode_utf8("$new");
+ $session{'Attachments'}{ $token }{ $file_path } = $attachment;
+ }
+ $session{'Attachments'} = $session{'Attachments'} if $update_session;
+}
=head2 MakeMIMEEntity PARAMHASH
commit 06a5b1acc5b8e07d364b9a600902d30d2a903812
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 02:37:38 2011 +0300
use ProcessAttachments and shrink repeated code
diff --git a/share/html/Search/Bulk.html b/share/html/Search/Bulk.html
index c8ee552..ea946e6 100755
--- a/share/html/Search/Bulk.html
+++ b/share/html/Search/Bulk.html
@@ -230,30 +230,7 @@ my (@results);
$ARGS{'Token'} ||= $Token ||= Digest::MD5::md5_hex( rand(1024) );
-# deal with deleting uploaded attachments
-foreach my $key (keys %ARGS) {
- if ($key =~ m/^DeleteAttach-(.+)$/) {
- delete $session{'Attachments'}{ $Token }{ $1 };
- }
- $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
-}
-
-# store the uploaded attachment in session
-if ($ARGS{'Attach'}) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
-
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- # force session save
- $session{'Attachments'} = $session{'Attachments'} || {};
- $session{'Attachments'}{ $Token }{ $file_path } = $attachment;
-}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}{ $Token }} and $ARGS{'UpdateAttach'}) {
- delete $session{'Attachments'}{ $Token };
-}
+ProcessAttachments( ARGSRef => \%ARGS, Token => $Token );
$Page ||= 1;
@@ -310,10 +287,6 @@ my $cf_add_keys;
@$cf_add_keys = grep { /^Bulk-Add-CustomField/ } keys %ARGS;
unless ( $ARGS{'AddMoreAttach'} ) {
- # Add session attachments if any to be processed by ProcessUpdateMessage
- $ARGS{'UpdateAttachments'} = $session{'Attachments'}{ $Token }
- if $session{'Attachments'}{ $Token };
-
while ( my $Ticket = $Tickets->Next ) {
next unless ( $ARGS{ "UpdateTicket" . $Ticket->Id } );
@@ -322,9 +295,10 @@ unless ( $ARGS{'AddMoreAttach'} ) {
$queues{ $Ticket->QueueObj->Id }++;
my @updateresults = ProcessUpdateMessage(
- TicketObj => $Ticket,
- ARGSRef => \%ARGS,
- );
+ TicketObj => $Ticket,
+ ARGSRef => \%ARGS,
+ KeepAttachments => 1,
+ );
#Update the basics.
my @basicresults =
@@ -417,7 +391,6 @@ unless ( $ARGS{'AddMoreAttach'} ) {
@results = ( @results, @tempresults );
}
- # Cleanup WebUI
delete $session{'Attachments'}{ $Token };
}
diff --git a/share/html/Ticket/Create.html b/share/html/Ticket/Create.html
index 24c7561..f8085e7 100755
--- a/share/html/Ticket/Create.html
+++ b/share/html/Ticket/Create.html
@@ -375,29 +375,7 @@ my $ValidCFs = $m->comp(
$ARGS{'Token'} ||= $Token ||= Digest::MD5::md5_hex( rand(1024) );
-# deal with deleting uploaded attachments
-foreach my $key (keys %ARGS) {
- if ($key =~ m/^DeleteAttach-(.+)$/) {
- delete $session{'Attachments'}{ $Token }{$1};
- }
- $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
-}
-
-# store the uploaded attachment in session
-if ($ARGS{'Attach'}) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
-
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- $session{'Attachments'} = $session{'Attachments'} || {};
- $session{'Attachments'}{ $Token }{ $file_path } = $attachment;
-}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}{$Token}} and $ARGS{'id'} eq 'new') {
- delete $session{'Attachments'}{$Token};
-}
+ProcessAttachments( ARGSRef => \%ARGS, Token => $Token );
my $checks_failure = 0;
diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index 9bc3ad0..37f35cb 100755
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -124,10 +124,7 @@ if ($ARGS{'id'} eq 'new') {
Abort('You have no permission to create tickets in that queue.');
}
- ($TicketObj, @Actions) = CreateTicket(
- Attachments => delete $session{'Attachments'}{ $ARGS{'Token'} || '' },
- %ARGS,
- );
+ ($TicketObj, @Actions) = CreateTicket( %ARGS );
unless ( $TicketObj->CurrentUserHasRight('ShowTicket') ) {
Abort("No permission to view newly created ticket #".$TicketObj->id.".");
}
@@ -152,13 +149,11 @@ if ($ARGS{'id'} eq 'new') {
ARGSRef => \%ARGS,
Actions => \@Actions);
- $ARGS{UpdateAttachments} = delete $session{'Attachments'}{ $ARGS{'Token'} || '' };
- push @Actions,
- ProcessUpdateMessage(
+ push @Actions, ProcessUpdateMessage(
ARGSRef => \%ARGS,
Actions => \@Actions,
TicketObj => $TicketObj,
- );
+ );
#Process status updates
push @Actions, ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj => $TicketObj );
diff --git a/share/html/Ticket/Elements/AddAttachments b/share/html/Ticket/Elements/AddAttachments
index db4c659..d0a8b53 100644
--- a/share/html/Ticket/Elements/AddAttachments
+++ b/share/html/Ticket/Elements/AddAttachments
@@ -50,7 +50,7 @@
<td>
<&|/l&>Check box to delete</&><br />
% foreach my $attach_name ( keys %$attachments ) {
-<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+<input type="checkbox" class="checkbox" name="DeleteAttach" value="<% $attach_name %>" /><% $attach_name %><br />
% } # end of foreach
</td>
</tr>
diff --git a/share/html/Ticket/ModifyAll.html b/share/html/Ticket/ModifyAll.html
index af703a4..436b7cf 100755
--- a/share/html/Ticket/ModifyAll.html
+++ b/share/html/Ticket/ModifyAll.html
@@ -154,31 +154,7 @@ $CanComment = 1 if ( $Ticket->CurrentUserHasRight('CommentOnTicket') or
$ARGS{'Token'} ||= $Token ||= Digest::MD5::md5_hex( rand(1024) );
-# deal with deleting uploaded attachments
-foreach my $key (keys %ARGS) {
- if ($key =~ m/^DeleteAttach-(.+)$/) {
- delete $session{'Attachments'}{$Token}{$1};
- }
- $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
-}
-
-# store the uploaded attachment in session
-if ($ARGS{'Attach'}) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
-
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- # force session save
- $session{'Attachments'} = $session{'Attachments'} || {};
- $session{'Attachments'}{ $Token }{ $file_path } = $attachment;
-}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}{$Token}} and $ARGS{'UpdateAttach'}) {
- delete $session{'Attachments'}{ $Token };
-}
-
+ProcessAttachments( ARGSRef => \%ARGS, Token => $Token );
$m->callback( TicketObj => $Ticket, ARGSRef => \%ARGS );
my @results;
@@ -197,14 +173,7 @@ unless ($OnlySearchForPeople or $OnlySearchForGroup or $ARGS{'AddMoreAttach'} )
push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS);
push @results, ProcessObjectCustomFieldUpdates( Object => $Ticket, ARGSRef => \%ARGS);
push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS);
-
- # Add session attachments if any to be processed by ProcessUpdateMessage
- $ARGS{'UpdateAttachments'} = $session{'Attachments'}{ $Token }
- if $session{'Attachments'}{ $Token };
push @results, ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef=>\%ARGS );
- # Cleanup WebUI
- delete $session{'Attachments'}{ $Token };
-
push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS );
push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS);
}
diff --git a/share/html/Ticket/Update.html b/share/html/Ticket/Update.html
index ae49c11..6d39be0 100755
--- a/share/html/Ticket/Update.html
+++ b/share/html/Ticket/Update.html
@@ -243,30 +243,7 @@ $CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or
$ARGS{'Token'} ||= $Token ||= Digest::MD5::md5_hex( rand(1024) );
-# deal with deleting uploaded attachments
-foreach my $key (keys %ARGS) {
- if ($key =~ m/^DeleteAttach-(.+)$/) {
- delete $session{'Attachments'}{$Token}{$1};
- }
- $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
-}
-
-# store the uploaded attachment in session
-if ($ARGS{'Attach'}) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
-
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- # force session save
- $session{'Attachments'} = $session{'Attachments'} || {};
- $session{'Attachments'}{ $Token }{ $file_path } = $attachment;
-}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}{$Token}} and $ARGS{'UpdateAttach'}) {
- delete $session{'Attachments'}{ $Token };
-}
+ProcessAttachments( ARGSRef => \%ARGS, Token => $Token );
my $gnupg_widget = $m->comp('/Elements/GnuPG/SignEncryptWidget:new', Arguments => \%ARGS );
$m->comp( '/Elements/GnuPG/SignEncryptWidget:Process',
commit 8a3c2774b4733c4f2b18536e31827989dc6e5cdb
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 03:15:04 2011 +0300
indent
diff --git a/share/html/SelfService/Display.html b/share/html/SelfService/Display.html
index 3223aac..8ebec1f 100755
--- a/share/html/SelfService/Display.html
+++ b/share/html/SelfService/Display.html
@@ -112,9 +112,7 @@ if ( $ARGS{'Attach'} ) { # attachment?
$session{'Attachments'}{ $Token }{ $file_path } = $attachment;
}
-if ( defined ($id[0]) && $id[0] eq 'new' ) {
-
- # {{{ Create a new ticket
+if ( ($id[0]||'') eq 'new' ) {
my $Queue = RT::Queue->new( $session{'CurrentUser'} );
unless ( $Queue->Load( $ARGS{'Queue'} ) ) {
@@ -135,22 +133,22 @@ if ( defined ($id[0]) && $id[0] eq 'new' ) {
unless ( $Ticket->id ) {
$m->comp( 'Error.html', Why => join( "\n", @results ));
- $m->abort();
- }
+ $m->abort();
+ }
- # delete temporary storage entry to make WebUI clean
- unless ( keys %{ $session{'Attachments'}{ $Token } } and $ARGS{'UpdateAttach'} ) {
- delete $session{'Attachments'}{ $Token };
- }
+ # delete temporary storage entry to make WebUI clean
+ unless ( keys %{ $session{'Attachments'}{ $Token } } and $ARGS{'UpdateAttach'} ) {
+ delete $session{'Attachments'}{ $Token };
+ }
+}
+else {
+ unless ( $Ticket->Load( $id[0] ) ) {
+ $m->comp( 'Error.html',
+ Why => loc( "Couldn't load ticket '[_1]'", $id ) );
+ $m->abort();
}
- else {
- unless ( $Ticket->Load( $id[0] ) ) {
- $m->comp( 'Error.html',
- Why => loc( "Couldn't load ticket '[_1]'", $id ) );
- $m->abort();
- }
my ( $code, $msg );
@@ -190,36 +188,35 @@ if ( defined ($id[0]) && $id[0] eq 'new' ) {
}
- }
+}
- # This code does automatic redirection if any updates happen.
+# This code does automatic redirection if any updates happen.
- unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
- $m->comp( 'Error.html',
- Why => loc("No permission to display that ticket") );
- # XXX: Why abort? then we loose footer //ruz
- $m->abort();
- }
+unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
+ $m->comp( 'Error.html',
+ Why => loc("No permission to display that ticket") );
+ # XXX: Why abort? then we loose footer //ruz
+ $m->abort();
+}
- if (@results) {
- # We've done something, so we need to clear the decks to avoid
- # resubmission on refresh.
- # But we need to store Actions somewhere too, so we don't lose them.
- my $key = Digest::MD5::md5_hex(rand(1024));
- push @{ $session{"Actions"}->{$key} ||= [] }, @results;
- $session{'i'}++;
- RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."SelfService/Display.html?id=". $Ticket->id."&results=".$key);
- }
+if (@results) {
+ # We've done something, so we need to clear the decks to avoid
+ # resubmission on refresh.
+ # But we need to store Actions somewhere too, so we don't lose them.
+ my $key = Digest::MD5::md5_hex(rand(1024));
+ push @{ $session{"Actions"}->{$key} ||= [] }, @results;
+ $session{'i'}++;
+ RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."SelfService/Display.html?id=". $Ticket->id."&results=".$key);
+}
- my $Transactions = $Ticket->Transactions;
+my $Transactions = $Ticket->Transactions;
- my $attachments =
- $m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket );
+my $attachments = $m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket );
- my $LinkBasicsTitle = $Ticket->CurrentUserHasRight('ModifyTicket')
- || $Ticket->CurrentUserHasRight('ReplyToTicket');
- my $title_box_link = RT->Config->Get('WebPath')."/SelfService/Update.html?id=".$Ticket->Id;
- $m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS, title_box_link => \$title_box_link);
+my $LinkBasicsTitle = $Ticket->CurrentUserHasRight('ModifyTicket')
+ || $Ticket->CurrentUserHasRight('ReplyToTicket');
+my $title_box_link = RT->Config->Get('WebPath')."/SelfService/Update.html?id=".$Ticket->Id;
+$m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS, title_box_link => \$title_box_link);
</%INIT>
commit f468779e3681c05f715308cd81ddc7a51a062496
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 03:20:49 2011 +0300
switch SelfService/Display.html over new attachments processing
diff --git a/share/html/SelfService/Display.html b/share/html/SelfService/Display.html
index 8ebec1f..5aa7c57 100755
--- a/share/html/SelfService/Display.html
+++ b/share/html/SelfService/Display.html
@@ -100,17 +100,7 @@ my @id = ( ref $id eq 'ARRAY' ) ? @{$id} : ($id);
my $Ticket = RT::Ticket->new( $session{'CurrentUser'} );
-# store the uploaded attachment in session
-if ( $ARGS{'Attach'} ) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
-
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- # force session save
- $session{'Attachments'} = $session{'Attachments'} || {};
- $session{'Attachments'}{ $Token }{ $file_path } = $attachment;
-}
+ProcessAttachments( Token => $Token, ARGSRef => \%ARGS );
if ( ($id[0]||'') eq 'new' ) {
@@ -128,20 +118,12 @@ if ( ($id[0]||'') eq 'new' ) {
}
- ( $Ticket, @results ) =
- CreateTicket( Attachments => $session{'Attachments'}{$Token}, %ARGS, Status => 'new' );
+ ( $Ticket, @results ) = CreateTicket( %ARGS, Status => 'new' );
unless ( $Ticket->id ) {
$m->comp( 'Error.html', Why => join( "\n", @results ));
$m->abort();
}
-
-
- # delete temporary storage entry to make WebUI clean
- unless ( keys %{ $session{'Attachments'}{ $Token } } and $ARGS{'UpdateAttach'} ) {
- delete $session{'Attachments'}{ $Token };
- }
-
}
else {
unless ( $Ticket->Load( $id[0] ) ) {
@@ -150,44 +132,23 @@ else {
$m->abort();
}
- my ( $code, $msg );
-
-
- if (
- $session{'Attachments'}{ $Token }
- || ( defined $ARGS{'UpdateContent'}
- && $ARGS{'UpdateContent'} ne ''
- && $ARGS{'UpdateContent'} ne "-- \n"
- . $session{'CurrentUser'}->UserObj->Signature )
- )
- {
- $ARGS{UpdateAttachments} = $session{'Attachments'}{ $Token };
- }
push @results, ProcessUpdateMessage(
ARGSRef => \%ARGS,
TicketObj => $Ticket
);
- delete $session{'Attachments'}{ $Token };
-
- # delete temporary storage entry to make WebUI clean
- unless ( keys %{ $session{'Attachments'}{ $Token } } and $ARGS{'UpdateAttach'} ) {
- delete $session{'Attachments'}{ $Token };
- }
my @cfupdates = ProcessObjectCustomFieldUpdates(Object => $Ticket, ARGSRef => \%ARGS);
push (@results, @cfupdates);
-
#Update the status
if ( ( defined $ARGS{'Status'} )
and $ARGS{'Status'}
and ( $ARGS{'Status'} ne $Ticket->Status ) )
{
- ( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} );
+ my ($code, $msg) = $Ticket->SetStatus( $ARGS{'Status'} );
push @results, "$msg";
}
-
}
# This code does automatic redirection if any updates happen.
commit 6710d8b81a21227bf247389eaaa4a1d90fdfcb98
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 03:26:30 2011 +0300
use may be redirect
diff --git a/share/html/SelfService/Display.html b/share/html/SelfService/Display.html
index 5aa7c57..cb49e35 100755
--- a/share/html/SelfService/Display.html
+++ b/share/html/SelfService/Display.html
@@ -160,15 +160,10 @@ unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
$m->abort();
}
-if (@results) {
- # We've done something, so we need to clear the decks to avoid
- # resubmission on refresh.
- # But we need to store Actions somewhere too, so we don't lose them.
- my $key = Digest::MD5::md5_hex(rand(1024));
- push @{ $session{"Actions"}->{$key} ||= [] }, @results;
- $session{'i'}++;
- RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."SelfService/Display.html?id=". $Ticket->id."&results=".$key);
-}
+MaybeRedirectForResults(
+ Actions => \@results,
+ Arguments => { 'id' => $Ticket->id },
+);
my $Transactions = $Ticket->Transactions;
commit 1c705e20c4b6f8de4573ff396b85debc1785e96d
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 16:05:59 2011 +0300
use Abort()
diff --git a/share/html/SelfService/Display.html b/share/html/SelfService/Display.html
index cb49e35..6b0f724 100755
--- a/share/html/SelfService/Display.html
+++ b/share/html/SelfService/Display.html
@@ -106,30 +106,23 @@ if ( ($id[0]||'') eq 'new' ) {
my $Queue = RT::Queue->new( $session{'CurrentUser'} );
unless ( $Queue->Load( $ARGS{'Queue'} ) ) {
- $m->comp( 'Error.html', Why => loc('Queue not found') );
- $m->abort;
+ Abort( loc('Queue not found') );
}
unless ( $Queue->CurrentUserHasRight('CreateTicket') ) {
- $m->comp( 'Error.html',
- Why =>
- loc('You have no permission to create tickets in that queue.') );
- $m->abort;
+ Abort( loc('You have no permission to create tickets in that queue.') );
}
( $Ticket, @results ) = CreateTicket( %ARGS, Status => 'new' );
unless ( $Ticket->id ) {
- $m->comp( 'Error.html', Why => join( "\n", @results ));
- $m->abort();
+ Abort( join "\n", @results );
}
}
else {
unless ( $Ticket->Load( $id[0] ) ) {
- $m->comp( 'Error.html',
- Why => loc( "Couldn't load ticket '[_1]'", $id ) );
- $m->abort();
+ Abort( loc( "Couldn't load ticket '[_1]'", $id ) );
}
push @results, ProcessUpdateMessage(
@@ -154,10 +147,7 @@ else {
# This code does automatic redirection if any updates happen.
unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
- $m->comp( 'Error.html',
- Why => loc("No permission to display that ticket") );
- # XXX: Why abort? then we loose footer //ruz
- $m->abort();
+ Abort( loc("No permission to display that ticket") );
}
MaybeRedirectForResults(
commit cb5ff367d24a7bd6f25f01f882f53a453de173ad
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Sat Jan 22 16:17:49 2011 +0300
process attachments in mobile UI
diff --git a/share/html/m/ticket/create b/share/html/m/ticket/create
index 994108e..de0b6bd 100644
--- a/share/html/m/ticket/create
+++ b/share/html/m/ticket/create
@@ -46,6 +46,7 @@
%#
%# END BPS TAGGED BLOCK }}}
<%ARGS>
+$Token => ''
$QuoteTransaction => undef
$CloneTicket => undef
</%ARGS>
@@ -165,31 +166,9 @@ my $ValidCFs = $m->comp(
ARGSRef => \%ARGS
);
-# deal with deleting uploaded attachments
-foreach my $key (keys %ARGS) {
- if ($key =~ m/^DeleteAttach-(.+)$/) {
- delete $session{'Attachments'}{$1};
- }
- $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
-}
-
-# store the uploaded attachment in session
-if ($ARGS{'Attach'}) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
+$ARGS{'Token'} ||= $Token ||= Digest::MD5::md5_hex( rand(1024) );
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- $session{'Attachments'} = {
- %{$session{'Attachments'} || {}},
- $file_path => $attachment,
- };
-}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') {
- delete $session{'Attachments'};
-}
+ProcessAttachments( ARGSRef => \%ARGS, Token => $Token );
my $checks_failure = 0;
@@ -252,6 +231,7 @@ if ((!exists $ARGS{'AddMoreAttach'}) and (defined($ARGS{'id'}) and $ARGS{'id'} e
<& /Elements/ListActions, actions => \@results &>
<form action="<% RT->Config->Get('WebPath') %>/m/ticket/create" method="post" enctype="multipart/form-data" name="TicketCreate" id="ticket-create">
<input type="hidden" class="hidden" name="id" value="new" />
+<input type="hidden" class="hidden" name="Token" value="<% $Token %>" />
% $m->callback( CallbackName => 'FormStart', QueueObj => $QueueObj, ARGSRef => \%ARGS );
% if ($gnupg_widget) {
<& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &>
@@ -339,13 +319,13 @@ $m->comp("/Ticket/Elements/EditCustomFields", %ARGS, QueueObj => $QueueObj );
$m->comp("/Ticket/Elements/EditTransactionCustomFields", %ARGS, QueueObj => $QueueObj );
</%perl>
-% if (exists $session{'Attachments'}) {
+% if ( my $attachments = $session{'Attachments'}{'Token'}) {
<%loc("Attached file") %>
<%loc("Check box to delete")%><br />
-% foreach my $attach_name (keys %{$session{'Attachments'}}) {
-<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br />
+% foreach my $attach_name ( keys %$attachments ) {
+<input type="checkbox" class="checkbox" name="DeleteAttach" value="<% $attach_name %>" /><%$attach_name%><br />
% } # end of foreach
diff --git a/share/html/m/ticket/reply b/share/html/m/ticket/reply
index 67856fb..f581c5c 100644
--- a/share/html/m/ticket/reply
+++ b/share/html/m/ticket/reply
@@ -160,32 +160,9 @@ $CanRespond = 1 if ( $t->CurrentUserHasRight('ReplyToTicket') or
$CanComment = 1 if ( $t->CurrentUserHasRight('CommentOnTicket') or
$t->CurrentUserHasRight('ModifyTicket') );
+$ARGS{'Token'} ||= $Token ||= Digest::MD5::md5_hex( rand(1024) );
-# deal with deleting uploaded attachments
-foreach my $key (keys %ARGS) {
- if ($key =~ m/^DeleteAttach-(.+)$/) {
- delete $session{'Attachments'}{$1};
- }
- $session{'Attachments'} = { %{$session{'Attachments'} || {}} };
-}
-
-# store the uploaded attachment in session
-if ($ARGS{'Attach'}) { # attachment?
- my $attachment = MakeMIMEEntity(
- AttachmentFieldName => 'Attach'
- );
-
- my $file_path = Encode::decode_utf8("$ARGS{'Attach'}");
- $session{'Attachments'} = {
- %{$session{'Attachments'} || {}},
- $file_path => $attachment,
- };
-}
-
-# delete temporary storage entry to make WebUI clean
-unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) {
- delete $session{'Attachments'};
-}
+ProcessAttachments( ARGSRef => \%ARGS, Token => $Token );
# check email addresses for RT's
{
@@ -210,6 +187,7 @@ if ( !$checks_failure && exists $ARGS{SubmitTicket} ) {
<%ARGS>
$id => undef
+$Token => ''
$Action => 'Respond'
$DefaultStatus => undef
</%ARGS>
diff --git a/share/html/m/ticket/show b/share/html/m/ticket/show
index 14933f6..d11fbf5 100644
--- a/share/html/m/ticket/show
+++ b/share/html/m/ticket/show
@@ -69,10 +69,7 @@ if ($ARGS{'id'} eq 'new') {
Abort('You have no permission to create tickets in that queue.');
}
- ($Ticket, @Actions) = CreateTicket(
- Attachments => delete $session{'Attachments'},
- %ARGS,
- );
+ ($Ticket, @Actions) = CreateTicket( %ARGS );
unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
Abort("No permission to view newly created ticket #".$Ticket->id.".");
}
@@ -95,14 +92,12 @@ if ($ARGS{'id'} eq 'new') {
ARGSRef => \%ARGS,
Actions => \@Actions);
- $ARGS{UpdateAttachments} = $session{'Attachments'};
push @Actions,
ProcessUpdateMessage(
ARGSRef => \%ARGS,
Actions => \@Actions,
TicketObj => $Ticket,
);
- delete $session{'Attachments'};
#Process status updates
push @Actions, ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj => $Ticket );
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list