# --
# Kernel/Modules/AdminResponseAttachment.pm - queue <-> responses
# Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/
# --
# $Id: AdminResponseAttachment.pm,v 1.16 2007/01/20 22:03:08 mh Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
# --
package Kernel::Modules::AdminResponseAttachment;
use strict;
use Kernel::System::StdAttachment;
use Kernel::System::StdResponse;
use vars qw($VERSION);
$VERSION = '$Revision: 1.16 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
sub new {
my $Type = shift;
my %Param = @_;
# allocate new hash for object
my $Self = {};
bless ($Self, $Type);
# get common opjects
foreach (keys %Param) {
$Self->{$_} = $Param{$_};
}
# check all needed objects
foreach (qw(ParamObject DBObject LayoutObject ConfigObject LogObject)) {
if (!$Self->{$_}) {
$Self->{LayoutObject}->FatalError(Message => "Got no $_!");
}
}
# lib object
$Self->{StdResponseObject} = Kernel::System::StdResponse->new(%Param);
$Self->{StdAttachmentObject} = Kernel::System::StdAttachment->new(%Param);
return $Self;
}
sub Run {
my $Self = shift;
my %Param = @_;
my $Output = '';
my $ID = $Self->{ParamObject}->GetParam(Param => 'ID') || '';
$ID = $Self->{DBObject}->Quote($ID, 'Integer') if ($ID);
my $NextScreen = 'AdminResponseAttachment';
# get StdResponses data
my %StdResponses = $Self->{StdResponseObject}->GetAllStdResponses(Valid => 1);
# get queue data
my %StdAttachments = $Self->{StdAttachmentObject}->GetAllStdAttachments(Valid => 1);
# user <-> group 1:n
if ($Self->{Subaction} eq 'Response') {
$Output .= $Self->{LayoutObject}->Header();
$Output .= $Self->{LayoutObject}->NavigationBar();
# get StdResponses data
my %StdResponsesData = $Self->{DBObject}->GetTableData(
Table => 'standard_response',
What => 'id, name',
Where => "id = $ID",
);
my %Data = $Self->{DBObject}->GetTableData(
Table => 'standard_response_attachment',
What => 'standard_attachment_id, standard_response_id',
Where => "standard_response_id = $ID",
);
$Output .= $Self->_MaskChange(
FirstData => \%StdResponsesData,
SecondData => \%StdAttachments,
Data => \%Data,
Type => 'Response',
);
$Output .= $Self->{LayoutObject}->Footer();
}
# group <-> user n:1
elsif ($Self->{Subaction} eq 'Attachment') {
$Output .= $Self->{LayoutObject}->Header();
$Output .= $Self->{LayoutObject}->NavigationBar();
# get queue data
my %AttachmentData = $Self->{DBObject}->GetTableData(
Table => 'standard_attachment',
What => 'id, name, filename',
Clamp => 1,
Where => "id = $ID",
);
my %Data = $Self->{DBObject}->GetTableData(
Table => 'standard_response_attachment',
What => 'standard_response_id, standard_attachment_id',
Where => "standard_attachment_id = $ID"
);
$Output .= $Self->_MaskChange(
FirstData => \%AttachmentData,
SecondData => \%StdResponses,
Data => \%Data,
Type => 'Attachment',
);
$Output .= $Self->{LayoutObject}->Footer();
}
# update responses of attachment
elsif ($Self->{Subaction} eq 'ChangeAttachment') {
my @NewIDs = $Self->{ParamObject}->GetArray(Param => 'IDs');
$Self->{DBObject}->Do(
SQL => "DELETE FROM standard_response_attachment WHERE standard_attachment_id = $ID",
);
foreach my $NewID (@NewIDs) {
# db quote
$NewID = $Self->{DBObject}->Quote($NewID, 'Integer');
my $SQL = "INSERT INTO standard_response_attachment (standard_attachment_id, ".
"standard_response_id, create_time, create_by, " .
" change_time, change_by)" .
" VALUES " .
" ($ID, $NewID, current_timestamp, $Self->{UserID}, current_timestamp, $Self->{UserID})";
$Self->{DBObject}->Do(SQL => $SQL);
}
$Output .= $Self->{LayoutObject}->Redirect(OP => "Action=$NextScreen");
}
# update attachments of response
elsif ($Self->{Subaction} eq 'ChangeResponse') {
my @NewIDs = $Self->{ParamObject}->GetArray(Param => 'IDs');
$Self->{StdAttachmentObject}->SetStdAttachmentsOfResponseID(
AttachmentIDsRef => \@NewIDs,
ID => $ID,
UserID => $Self->{UserID},
);
$Output .= $Self->{LayoutObject}->Redirect(OP => "Action=$NextScreen");
}
# else ! print form
else {
$Output .= $Self->{LayoutObject}->Header();
$Output .= $Self->{LayoutObject}->NavigationBar();
$Output .= $Self->_Mask(
FirstData => \%StdResponses,
SecondData => \%StdAttachments,
);
$Output .= $Self->{LayoutObject}->Footer();
}
return $Output;
}
sub _Mask {
my $Self = shift;
my %Param = @_;
my $UserData = $Param{FirstData};
my %UserDataTmp = %$UserData;
my $GroupData = $Param{SecondData};
my %GroupDataTmp = %$GroupData;
my $BaseLink = $Self->{LayoutObject}->{Baselink} . "Action=AdminResponseAttachment&";
foreach (sort {$UserDataTmp{$a} cmp $UserDataTmp{$b}} keys %UserDataTmp) {
$UserDataTmp{$_} = $Self->{LayoutObject}->Ascii2Html(
Text => $UserDataTmp{$_},
HTMLQuote => 1,
LanguageTranslation => 0,
) || '';
$Param{AnswerQueueStrg} .= "$UserDataTmp{$_}
";
}
foreach (sort {$GroupDataTmp{$a} cmp $GroupDataTmp{$b}} keys %GroupDataTmp) {
$GroupDataTmp{$_} = $Self->{LayoutObject}->Ascii2Html(
Text => $GroupDataTmp{$_},
HTMLQuote => 1,
LanguageTranslation => 0,
) || '';
$Param{QueueAnswerStrg}.= "$GroupDataTmp{$_}
";
}
return $Self->{LayoutObject}->Output(TemplateFile => 'AdminResponseAttachmentForm', Data => \%Param);
}
sub _MaskChange {
my $Self = shift;
my %Param = @_;
my $FirstData = $Param{FirstData};
my %FirstDataTmp = %$FirstData;
my $SecondData = $Param{SecondData};
my %SecondDataTmp = %$SecondData;
my $Data = $Param{Data};
my %DataTmp = %$Data;
$Param{Type} = $Param{Type} || 'Response';
my $NeType = 'Response';
$NeType = 'Attachment' if ($Param{Type} eq 'Response');
foreach (sort keys %FirstDataTmp) {
$FirstDataTmp{$_} = $Self->{LayoutObject}->Ascii2Html(
Text => $FirstDataTmp{$_},
HTMLQuote => 1,
LanguageTranslation => 0,
) || '';
$Param{OptionStrg0} .= "$Param{Type}: {LayoutObject}->{Baselink}Action=Admin$Param{Type}&Subaction=Change&ID=$_\">" .
"$FirstDataTmp{$_} (id=$_)
";
$Param{OptionStrg0} .= "
\n";
}
$Param{OptionStrg0} .= "$NeType:
\n";
return $Self->{LayoutObject}->Output(TemplateFile => 'AdminResponseAttachmentChangeForm', Data => \%Param);
}
1;