Hello
I have recently installed RT in our NOC. The staff love webRT interface but the
sysadmin wanted a CLI and there was some problems (and a bug) in RT CLI.
I changed 2/3 little things to bin/rt and lib/RT/Interface/CLI.pm
As it may interrest somebody, I post the patch.
The changes are :
-
when the --reply command is used, the edited file is prefiled with
the last reply made on the ticket -
when --reply or --comment is used, the signature is added
-
there was a bug with the “Content” argument of GetMessageContent() :
if a content was specified, all \n where destroyed (split (/\n/, $string) destroys the /n.
@tab=() don’t) As Content was not used, it was not a real problem.
I added a loop to change that because I wanted to use the Content
argument. -
when the editor is used, if the user don’t write anything (:q! with
vi for example) the comment (or the reply) is not added (mutt has the
same behaviour)
*** bin/rt.old Fri Dec 6 23:19:12 2002
— bin/rt Fri Dec 27 20:47:22 2002
*** 941,973 ****
# {{{ Perform ticket comments/replies
if ($reply) {
$RT::Logger->debug("Replying to ticket ".$Ticket->Id);
my $linesref = GetMessageContent( Edit => $edit, Source => $source,
! CurrentUser => $CurrentUser
);
! #TODO build this entity
! require MIME::Entity;
! my $MIMEObj = MIME::Entity->build(Data => $linesref);
!
! $Ticket->Correspond( MIMEObj => $MIMEObj ,
! TimeTaken => $time_taken);
}
elsif ($comment) {
$RT::Logger->debug("Commenting on ticket ".$Ticket->Id);
my $linesref =GetMessageContent(Edit => $edit, Source => $source,
CurrentUser => $CurrentUser);
! #TODO build this entity
! require MIME::Entity;
! my $MIMEObj = MIME::Entity->build(Data => $linesref);
! $Ticket->Comment( MIMEObj => $MIMEObj,
! TimeTaken => $time_taken);
}
# }}}
# {{{ Display whatever we need to display
— 941,983 ----
# {{{ Perform ticket comments/replies
if ($reply) {
$RT::Logger->debug("Replying to ticket ".$Ticket->Id);
-
my $content="";
-
if(!$source){
-
$content=&ShowLastReply($Ticket);
-
} my $linesref = GetMessageContent( Edit => $edit, Source => $source,
! CurrentUser => $CurrentUser, Content => $content
);
-
if($linesref) {
-
#TODO build this entity
-
require MIME::Entity;
-
my $MIMEObj = MIME::Entity->build(Data => $linesref);
! $Ticket->Correspond( MIMEObj => $MIMEObj ,
! TimeTaken => $time_taken);
! }
}
elsif ($comment) {
$RT::Logger->debug("Commenting on ticket ".$Ticket->Id);
my $linesref =GetMessageContent(Edit => $edit, Source => $source,
CurrentUser => $CurrentUser);
! if($linesref) {
! #TODO build this entity
! require MIME::Entity;
! my $MIMEObj = MIME::Entity->build(Data => $linesref);
! $Ticket->Comment( MIMEObj => $MIMEObj,
! TimeTaken => $time_taken);
! }
}
# }}}
# {{{ Display whatever we need to display
*** 1259,1268 ****
— 1269,1298 ----
print $message->ContentType, " not shown";
}
}
print “\n”;
return();
- }
-
}}}
-
{{{ sub ShowLastReply
- sub ShowLastReply {
- my $Ticket = shift;
- my $Transaction;
- my $Transactions = $Ticket->Transactions;
- my $Result = "> ";
- my $LastTransaction;
- while ($Transaction = $Transactions->Next) {
-
if($Transaction->Type eq "Create" || $Transaction->Type eq "Correspond"){
-
$LastTransaction=$Transaction;
-
}
- }
- $Result=$LastTransaction->Content(Quote => 1);
- return($Result);
}
}}}
{{{ sub BuildListingFormat
*** lib/RT/Interface/CLI.pm.old Fri Dec 27 17:26:40 2002
— lib/RT/Interface/CLI.pm Fri Dec 27 20:37:03 2002
*** 169,198 ****
@lines = (
close (SOURCE);
}
elsif ($args{‘Content’}) {
@lines = split(‘\n’,$args{‘Content’});
}
#get us a tempfile.
my ($fh, $filename) = tempfile();
#write to a tmpfile
for (@lines) {
print $fh $_;
}
close ($fh);
!
#Edit the file if we need to
if ($edit) {
unless ($ENV{‘EDITOR’}) {
$RT::Logger->crit(‘No $EDITOR variable defined’. “\n”);
return undef;
}
system ($ENV{‘EDITOR’}, $filename);
}
!
open (READ, “<$filename”);
my @newlines = ();
close (READ);
unlink ($filename) unless (debug());
— 169,213 ----
@lines = (
close (SOURCE);
}
elsif ($args{‘Content’}) {
@lines = split(‘\n’,$args{‘Content’});
- for(my $i=0;$i<@lines;$i++){
-
$lines[$i].="\n";
-
print $fh $_;} } #get us a tempfile. my ($fh, $filename) = tempfile(); #write to a tmpfile for (@lines) {
} -
if ($currentuser->UserObj->Signature) {
-
printf $fh "-- \n".$currentuser->UserObj->Signature;
-
} close ($fh);
!
! my $oldtime = -M $filename;
! my $newtime = -M $filename;
!
#Edit the file if we need to
if ($edit) {
unless ($ENV{‘EDITOR’}) {
$RT::Logger->crit(‘No $EDITOR variable defined’. “\n”);
return undef;
}
system ($ENV{‘EDITOR’}, $filename);
-
$newtime = -M $filename; }
!
! # If the file was not changed, we do nothing
! if($oldtime eq $newtime) {
! unlink ($filename) unless (debug());
! return 0;
! }
!
open (READ, “<$filename”);
my @newlines = ();
close (READ);
unlink ($filename) unless (debug());
Xavier Henner
Ing�nieur Syst�me
Nerim – Fournisseur d’acc�s � Internet
URL: http://www.nerim.net/