This commit is contained in:
2024-10-14 00:08:40 +02:00
parent dbfba56f66
commit 1462d52e13
4572 changed files with 2658864 additions and 0 deletions

View File

@@ -0,0 +1,287 @@
# --
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
# --
# 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 https://www.gnu.org/licenses/gpl-3.0.txt.
# --
package Kernel::Modules::AdminEmail;
use strict;
use warnings;
our $ObjectManagerDisabled = 1;
use Kernel::Language qw(Translatable);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $Note = '';
my ( %GetParam, %Errors );
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
my $UserObject = $Kernel::OM->Get('Kernel::System::User');
my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');
for my $Parameter (qw(From Subject Body Bcc GroupPermission NotifyCustomerUsers)) {
$Param{$Parameter} = $ParamObject->GetParam( Param => $Parameter )
|| $Param{$Parameter}
|| '';
}
# ------------------------------------------------------------ #
# send email
# ------------------------------------------------------------ #
if ( $Self->{Subaction} eq 'Send' ) {
# challenge token check for write action
$LayoutObject->ChallengeTokenCheck();
# check needed stuff
for my $Needed (qw(From Subject Body GroupPermission)) {
if ( !$Param{$Needed} ) {
$Errors{ $Needed . 'Invalid' } = 'ServerError';
}
}
# get array params
for my $Parameter (qw(UserIDs GroupIDs RoleIDs)) {
if ( $ParamObject->GetArray( Param => $Parameter ) ) {
@{ $GetParam{$Parameter} } = $ParamObject->GetArray( Param => $Parameter );
}
}
if ( !%Errors ) {
# get user recipients address
my %Bcc;
for my $UserID ( $ParamObject->GetArray( Param => 'UserIDs' ) ) {
my %UserData = $UserObject->GetUserData(
UserID => $UserID,
Valid => 1,
);
if ( $UserData{UserEmail} ) {
$Bcc{ $UserData{UserLogin} } = $UserData{UserEmail};
}
}
# get group recipients address
for my $GroupID ( $ParamObject->GetArray( Param => 'GroupIDs' ) ) {
my %UserList = $GroupObject->PermissionGroupGet(
GroupID => $GroupID,
Type => $Param{GroupPermission},
);
my @GroupMemberList = sort keys %UserList;
for my $GroupMember (@GroupMemberList) {
my %UserData = $UserObject->GetUserData(
UserID => $GroupMember,
Valid => 1,
);
if ( $UserData{UserEmail} && $UserData{UserID} != 1 ) {
$Bcc{ $UserData{UserLogin} } = $UserData{UserEmail};
}
}
}
# get customerusers that are a member of the groups
if ( $Param{NotifyCustomerUsers} ) {
for my $GroupID ( $ParamObject->GetArray( Param => 'GroupIDs' ) ) {
my @GroupCustomerUserMemberList
= $Kernel::OM->Get('Kernel::System::CustomerGroup')->GroupMemberList(
Result => 'ID',
Type => $Param{GroupPermission},
GroupID => $GroupID,
);
for my $GoupCustomerUserMember (@GroupCustomerUserMemberList) {
my %CustomerUserData = $Kernel::OM->Get('Kernel::System::CustomerUser')->CustomerUserDataGet(
User => $GoupCustomerUserMember,
Valid => 1,
);
if ( $CustomerUserData{UserEmail} ) {
$Bcc{ $CustomerUserData{UserLogin} } = $CustomerUserData{UserEmail};
}
}
}
}
# get role recipients addresses
for my $RoleID ( $ParamObject->GetArray( Param => 'RoleIDs' ) ) {
my %RoleMemberList = $GroupObject->PermissionRoleUserGet(
RoleID => $RoleID,
);
for my $RoleMember ( sort keys %RoleMemberList ) {
my %UserData = $UserObject->GetUserData(
UserID => $RoleMember,
Valid => 1,
);
if ( $UserData{UserEmail} ) {
$Bcc{ $UserData{UserLogin} } = $UserData{UserEmail};
}
}
}
for my $BccKey ( sort keys %Bcc ) {
$Param{Bcc} .= $Bcc{$BccKey} . ', ';
}
# check needed stuff
if ( !$Param{Bcc} ) {
$Note = $LayoutObject->Notify(
Priority => 'Error',
Info => Translatable('Select at least one recipient.'),
);
$Errors{BccInvalid} = 'ServerError';
}
# if no errors occurred
if ( !%Errors ) {
# clean up
$Param{Body} =~ s/(\r\n|\n\r)/\n/g;
$Param{Body} =~ s/\r/\n/g;
# get content type
my $ContentType = 'text/plain';
if ( $LayoutObject->{BrowserRichText} ) {
$ContentType = 'text/html';
# verify html document
$Param{Body} = $LayoutObject->RichTextDocumentComplete(
String => $Param{Body},
);
}
# send mail
my $Sent = $Kernel::OM->Get('Kernel::System::Email')->Send(
From => $Param{From},
Bcc => $Param{Bcc},
Subject => $Param{Subject},
Charset => $LayoutObject->{UserCharset},
MimeType => $ContentType,
Body => $Param{Body},
);
if ( !$Sent->{Success} ) {
return $LayoutObject->ErrorScreen();
}
my $BccText = $Param{Bcc};
$BccText =~ s{(.*?),\s$}{$1}gsmx;
$BccText .= ".";
$LayoutObject->Block(
Name => 'Sent',
Data => {
%Param,
Bcc => $BccText,
},
);
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminEmail',
Data => \%Param,
);
$Output .= $LayoutObject->Footer();
return $Output;
}
}
}
# ------------------------------------------------------------ #
# show mask
# ------------------------------------------------------------ #
# add rich text editor
if ( $LayoutObject->{BrowserRichText} ) {
# set up rich text editor
$LayoutObject->SetRichTextParameters(
Data => \%Param,
);
}
$Param{UserOption} = $LayoutObject->BuildSelection(
Data => {
$UserObject->UserList(
Valid => 1,
Type => 'Long',
),
},
Name => 'UserIDs',
Size => 6,
Multiple => 1,
Translation => 0,
Class => 'Modernize ' . ( $Errors{BccInvalid} || '' ),
);
$Param{GroupOption} = $LayoutObject->BuildSelection(
Data => { $GroupObject->GroupList( Valid => 1 ) },
Size => 6,
Name => 'GroupIDs',
Multiple => 1,
Translation => 0,
Class => 'Modernize ' . ( $Errors{BccInvalid} || '' ),
);
my %RoleList = $GroupObject->RoleList( Valid => 1 );
$Param{RoleOption} = $LayoutObject->BuildSelection(
Data => \%RoleList,
Size => 6,
Name => 'RoleIDs',
Multiple => 1,
Translation => 0,
Class => 'Modernize ' . ( $Errors{BccInvalid} || '' ),
);
$LayoutObject->Block(
Name => 'Form',
Data => {
%Param,
%Errors,
},
);
if (%RoleList) {
$LayoutObject->Block(
Name => 'RoleRecipients',
Data => \%Param,
);
}
if ( $Kernel::OM->Get('Kernel::Config')->Get('CustomerGroupSupport') ) {
$LayoutObject->Block(
Name => 'CustomerUserGroups',
Data => \%Param,
);
}
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
$Output .= $Note;
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminEmail',
Data => {
%Param,
%Errors,
},
);
$Output .= $LayoutObject->Footer();
return $Output;
}
1;