X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FREST%2F1.0%2FForms%2Fticket%2Fdefault;h=33a8935d635afc680f20290405bca13347549f6f;hb=ed1f84b4e8f626245995ecda5afcf83092c153b2;hp=9a2212b55ef90b2f9e326d39eb0f99f0a6eea491;hpb=c24d6e2242ae0e026684b8f95decf156aba6e75e;p=freeside.git diff --git a/rt/share/html/REST/1.0/Forms/ticket/default b/rt/share/html/REST/1.0/Forms/ticket/default index 9a2212b55..33a8935d6 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/default +++ b/rt/share/html/REST/1.0/Forms/ticket/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -67,7 +67,7 @@ my @dates = qw(Created Starts Started Due Resolved Told LastUpdated); my @people = qw(Requestors Cc AdminCc); my @create = qw(Queue Requestor Subject Cc AdminCc Owner Status Priority InitialPriority FinalPriority TimeEstimated TimeWorked - TimeLeft Starts Started Due Resolved); + TimeLeft Starts Started Due Resolved Content-Type); my @simple = qw(Subject Status Priority Disabled TimeEstimated TimeWorked TimeLeft InitialPriority FinalPriority); my %dates = map {lc $_ => $_} @dates; @@ -82,7 +82,7 @@ if ($id ne 'new') { return [ "# Ticket $id does not exist.", [], {}, 1 ]; } elsif ( %data ) { - if ( $data{status} && $data{status} eq 'deleted' && ! grep { $_ ne 'id' && $_ ne 'status' } keys %data ) { + if ( $data{status} && lc $data{status} eq 'deleted' && ! grep { $_ ne 'id' && $_ ne 'status' } keys %data ) { if ( !$ticket->CurrentUserHasRight('DeleteTicket') ) { return [ "# You are not allowed to delete ticket $id.", [], {}, 1 ]; } @@ -110,7 +110,7 @@ else { return [ "# Required: id, Queue", [ qw(id Queue Requestor Subject Cc AdminCc Owner Status Priority - InitialPriority FinalPriority TimeEstimated Starts Due Text) ], + InitialPriority FinalPriority TimeEstimated Starts Due Attachment Text) ], { id => "ticket/new", Queue => $queue->Name, @@ -126,6 +126,7 @@ else { TimeEstimated => 0, Starts => $starts->ISO, Due => $due->ISO, + Attachment => '', Text => "", }, 0 @@ -134,7 +135,7 @@ else { else { # We'll create a new ticket, and fall through to set fields that # can't be set in the call to Create(). - my (%v, $text); + my (%v, $text, @atts); foreach my $k (keys %data) { # flexibly parse any dates @@ -167,18 +168,44 @@ else { elsif (lc $k eq 'text') { $text = delete $data{$k}; } + elsif (lc $k eq 'attachment') { + push @atts, @{ vsplit(delete $data{$k}) }; + } + elsif ( $k !~ /^(?:id|requestors)$/i ) { + $e = 1; + push @$o, $k; + push(@comments, "# $k: Unknown field"); + } + } + + if ( $e ) { + unshift @comments, "# Could not create ticket."; + $k = \%data; + goto DONE; } # people fields allow multiple values $v{$_} = vsplit($v{$_}) foreach ( grep $create{lc $_}, @people ); - if ($text) { + if ($text || @atts) { $v{MIMEObj} = MIME::Entity->build( - From => $session{CurrentUser}->EmailAddress, - Subject => $v{Subject}, - Data => $text + Type => "multipart/mixed", + From => Encode::encode( "UTF-8", $session{CurrentUser}->EmailAddress ), + Subject => Encode::encode( "UTF-8", $v{Subject}), + 'X-RT-Interface' => 'REST', ); + $v{MIMEObj}->attach( + Type => $v{'Content-Type'} || 'text/plain', + Charset => "UTF-8", + Data => Encode::encode( "UTF-8", $text ), + ) if $text; + my ($status, $msg) = process_attachments($v{'MIMEObj'}, @atts); + unless ($status) { + push(@comments, "# $msg"); + goto DONE; + } + $v{MIMEObj}->make_singlepart; } my($tid,$trid,$terr) = $ticket->Create(%v); @@ -267,6 +294,7 @@ if (!keys(%data)) { } else { my ($get, $set, $key, $val, $n, $s); + my $updated; foreach $key (keys %data) { $val = $data{$key}; @@ -292,8 +320,10 @@ else { elsif (exists $simple{$key}) { $key = $simple{$key}; $set = "Set$key"; + my $current = $ticket->$key; + $current = '' unless defined $current; - next if (($val eq ($ticket->$key||''))|| ($ticket->$key =~ /^\d+$/ && $val =~ /^\d+$/ && $val == $ticket->$key)); + next if ($val eq $current) or ($current =~ /^\d+$/ && $val =~ /^\d+$/ && $val == $current); ($n, $s) = $ticket->$set("$val"); } elsif (exists $dates{$key}) { @@ -331,13 +361,6 @@ else { } } foreach $p (keys %new) { - # XXX: This is a stupid test. - unless ($p =~ /^[\w.+-]+\@([\w.-]+\.)*\w+.?$/) { - $s = 0; - $n = "$p is not a valid email address."; - push @msgs, [ $s, $n ]; - next; - } unless ($ticket->IsWatcher(Type => $type, Email => $p)) { ($s, $n) = $ticket->AddWatcher(Type => $type, Email => $p); @@ -369,11 +392,18 @@ else { else { my $vals = $ticket->CustomFieldValues($cf->id); - if ( $cf->SingleValue ) { + if ( !defined $val || !length $val ) { + while ( my $val = $vals->Next ) { + ($n, $s) = $ticket->DeleteCustomFieldValue( + Field => $cf, ValueId => $val->id, + ); + $s =~ s/^# // if defined $s; + } + } + elsif ( $cf->SingleValue ) { my $old = $vals->Next; if ( $old ) { if ( $val ne $old->Content ) { - $old->Delete; ($n, $s) = $ticket->AddCustomFieldValue( Field => $cf, Value => $val ); $s =~ s/^# // if defined $s; @@ -402,14 +432,14 @@ else { $s =~ s/\\'/'/g; push @new, $s; } - elsif ( $a =~ /^q{/ ) { + elsif ( $a =~ /^q\{/ ) { my $s = $a; - while ( $a !~ /}$/ ) { + while ( $a !~ /\}$/ ) { ( $a, $b ) = split /\s*,\s*/, $b, 2; $s .= ',' . $a; } - $s =~ s/^q{//; - $s =~ s/}//; + $s =~ s/^q\{//; + $s =~ s/\}//; push @new, $s; } else { @@ -427,7 +457,7 @@ else { $new{$c}--; } else { - $v->Delete(); + $ticket->DeleteCustomFieldValue( Field => $cf, ValueId => $v->id ); } } for ( @new ) { @@ -440,7 +470,7 @@ else { } } } - elsif ($key ne 'id' && $key ne 'type' && $key ne 'creator') { + elsif ($key ne 'id' && $key ne 'type' && $key ne 'creator' && $key ne 'content-type' ) { $n = 0; $s = "Unknown field."; } @@ -455,8 +485,11 @@ else { $k = $changes; } } + else { + $updated ||= 1; + } } - push(@comments, "# Ticket ".$ticket->id." updated.") unless $n == 0; + push(@comments, "# Ticket ".$ticket->id." updated.") if $updated; } DONE: