projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
RT 4.0.19
[freeside.git]
/
rt
/
share
/
html
/
REST
/
1.0
/
Forms
/
ticket
/
default
diff --git
a/rt/share/html/REST/1.0/Forms/ticket/default
b/rt/share/html/REST/1.0/Forms/ticket/default
index
9a2212b
..
2a0c7ef
100755
(executable)
--- 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:
%#
%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-201
2
Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-201
4
Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%# <sales@bestpractical.com>
%#
%# (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
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;
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 ) {
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 ];
}
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
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,
{
id => "ticket/new",
Queue => $queue->Name,
@@
-126,6
+126,7
@@
else {
TimeEstimated => 0,
Starts => $starts->ISO,
Due => $due->ISO,
TimeEstimated => 0,
Starts => $starts->ISO,
Due => $due->ISO,
+ Attachment => '',
Text => "",
},
0
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().
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
foreach my $k (keys %data) {
# flexibly parse any dates
@@
-167,18
+168,43
@@
else {
elsif (lc $k eq 'text') {
$text = delete $data{$k};
}
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 );
}
# people fields allow multiple values
$v{$_} = vsplit($v{$_}) foreach ( grep $create{lc $_}, @people );
- if ($text) {
+ if ($text
|| @atts
) {
$v{MIMEObj} =
MIME::Entity->build(
$v{MIMEObj} =
MIME::Entity->build(
+ Type => "multipart/mixed",
From => $session{CurrentUser}->EmailAddress,
Subject => $v{Subject},
From => $session{CurrentUser}->EmailAddress,
Subject => $v{Subject},
- Data => $text
+ 'X-RT-Interface' => 'REST',
);
);
+ $v{MIMEObj}->attach(
+ Data => $text,
+ 'Content-Type' => $v{'Content-Type'} || 'text/plain',
+ ) 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);
}
my($tid,$trid,$terr) = $ticket->Create(%v);
@@
-267,6
+293,7
@@
if (!keys(%data)) {
}
else {
my ($get, $set, $key, $val, $n, $s);
}
else {
my ($get, $set, $key, $val, $n, $s);
+ my $updated;
foreach $key (keys %data) {
$val = $data{$key};
foreach $key (keys %data) {
$val = $data{$key};
@@
-292,8
+319,10
@@
else {
elsif (exists $simple{$key}) {
$key = $simple{$key};
$set = "Set$key";
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}) {
($n, $s) = $ticket->$set("$val");
}
elsif (exists $dates{$key}) {
@@
-331,13
+360,6
@@
else {
}
}
foreach $p (keys %new) {
}
}
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);
unless ($ticket->IsWatcher(Type => $type, Email => $p)) {
($s, $n) = $ticket->AddWatcher(Type => $type,
Email => $p);
@@
-369,11
+391,18
@@
else {
else {
my $vals = $ticket->CustomFieldValues($cf->id);
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 ) {
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;
($n, $s) = $ticket->AddCustomFieldValue(
Field => $cf, Value => $val );
$s =~ s/^# // if defined $s;
@@
-402,14
+431,14
@@
else {
$s =~ s/\\'/'/g;
push @new, $s;
}
$s =~ s/\\'/'/g;
push @new, $s;
}
- elsif ( $a =~ /^q{/ ) {
+ elsif ( $a =~ /^q
\
{/ ) {
my $s = $a;
my $s = $a;
- while ( $a !~ /}$/ ) {
+ while ( $a !~ /
\
}$/ ) {
( $a, $b ) = split /\s*,\s*/, $b, 2;
$s .= ',' . $a;
}
( $a, $b ) = split /\s*,\s*/, $b, 2;
$s .= ',' . $a;
}
- $s =~ s/^q{//;
- $s =~ s/}//;
+ $s =~ s/^q
\
{//;
+ $s =~ s/
\
}//;
push @new, $s;
}
else {
push @new, $s;
}
else {
@@
-427,7
+456,7
@@
else {
$new{$c}--;
}
else {
$new{$c}--;
}
else {
- $
v->Delete(
);
+ $
ticket->DeleteCustomFieldValue( Field => $cf, ValueId => $v->id
);
}
}
for ( @new ) {
}
}
for ( @new ) {
@@
-440,7
+469,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.";
}
$n = 0;
$s = "Unknown field.";
}
@@
-455,8
+484,11
@@
else {
$k = $changes;
}
}
$k = $changes;
}
}
+ else {
+ $updated ||= 1;
+ }
}
}
- push(@comments, "# Ticket ".$ticket->id." updated.")
unless $n == 0
;
+ push(@comments, "# Ticket ".$ticket->id." updated.")
if $updated
;
}
DONE:
}
DONE: