init III
This commit is contained in:
268
Perl OTRS/Kernel/System/Web/UploadCache/DB.pm
Normal file
268
Perl OTRS/Kernel/System/Web/UploadCache/DB.pm
Normal file
@@ -0,0 +1,268 @@
|
||||
# --
|
||||
# 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::System::Web::UploadCache::DB;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use MIME::Base64;
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::DB',
|
||||
'Kernel::System::Encode',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::Main',
|
||||
);
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub FormIDCreate {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# return requested form id
|
||||
return time() . '.' . rand(12341241);
|
||||
}
|
||||
|
||||
sub FormIDRemove {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
for (qw(FormID)) {
|
||||
if ( !$Param{$_} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $_!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => '
|
||||
DELETE FROM web_upload_cache
|
||||
WHERE form_id = ?',
|
||||
Bind => [ \$Param{FormID} ],
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub FormIDAddFile {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
for (qw(FormID Filename ContentType)) {
|
||||
if ( !$Param{$_} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $_!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$Param{Content} = '' if !defined( $Param{Content} );
|
||||
|
||||
# get file size
|
||||
$Param{Filesize} = bytes::length( $Param{Content} );
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# encode attachment if it's a postgresql backend!!!
|
||||
if ( !$DBObject->GetDatabaseFunction('DirectBlob') ) {
|
||||
|
||||
$Kernel::OM->Get('Kernel::System::Encode')->EncodeOutput( \$Param{Content} );
|
||||
|
||||
$Param{Content} = encode_base64( $Param{Content} );
|
||||
}
|
||||
|
||||
# create content id
|
||||
my $ContentID = $Param{ContentID};
|
||||
my $Disposition = $Param{Disposition} || '';
|
||||
if ( !$ContentID && lc $Disposition eq 'inline' ) {
|
||||
|
||||
my $Random = rand 999999;
|
||||
my $FQDN = $Kernel::OM->Get('Kernel::Config')->Get('FQDN');
|
||||
|
||||
$ContentID = "$Disposition$Random.$Param{FormID}\@$FQDN";
|
||||
}
|
||||
|
||||
# write attachment to db
|
||||
my $Time = time();
|
||||
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
INSERT INTO web_upload_cache (form_id, filename, content_type, content_size, content,
|
||||
create_time_unix, content_id, disposition)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
Bind => [
|
||||
\$Param{FormID}, \$Param{Filename}, \$Param{ContentType}, \$Param{Filesize},
|
||||
\$Param{Content}, \$Time, \$ContentID, \$Param{Disposition}
|
||||
],
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub FormIDRemoveFile {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
for (qw(FormID FileID)) {
|
||||
if ( !$Param{$_} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $_!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
my @Index = @{ $Self->FormIDGetAllFilesMeta(%Param) };
|
||||
|
||||
# finish if files have been already removed by other process
|
||||
return if !@Index;
|
||||
|
||||
my $ID = $Param{FileID} - 1;
|
||||
$Param{Filename} = $Index[$ID]->{Filename};
|
||||
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => '
|
||||
DELETE FROM web_upload_cache
|
||||
WHERE form_id = ?
|
||||
AND filename = ?',
|
||||
Bind => [ \$Param{FormID}, \$Param{Filename} ],
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub FormIDGetAllFilesData {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
my $Counter = 0;
|
||||
my @Data;
|
||||
for (qw(FormID)) {
|
||||
if ( !$Param{$_} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $_!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT filename, content_type, content_size, content, content_id, disposition
|
||||
FROM web_upload_cache
|
||||
WHERE form_id = ?
|
||||
ORDER BY create_time_unix',
|
||||
Bind => [ \$Param{FormID} ],
|
||||
Encode => [ 1, 1, 1, 0, 1, 1 ],
|
||||
);
|
||||
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
$Counter++;
|
||||
|
||||
# encode attachment if it's a postgresql backend!!!
|
||||
if ( !$DBObject->GetDatabaseFunction('DirectBlob') ) {
|
||||
$Row[3] = decode_base64( $Row[3] );
|
||||
}
|
||||
|
||||
# add the info
|
||||
push(
|
||||
@Data,
|
||||
{
|
||||
Content => $Row[3],
|
||||
ContentID => $Row[4],
|
||||
ContentType => $Row[1],
|
||||
Filename => $Row[0],
|
||||
Filesize => $Row[2],
|
||||
Disposition => $Row[5],
|
||||
FileID => $Counter,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
sub FormIDGetAllFilesMeta {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
my $Counter = 0;
|
||||
my @Data;
|
||||
for (qw(FormID)) {
|
||||
if ( !$Param{$_} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $_!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT filename, content_type, content_size, content_id, disposition
|
||||
FROM web_upload_cache
|
||||
WHERE form_id = ?
|
||||
ORDER BY create_time_unix',
|
||||
Bind => [ \$Param{FormID} ],
|
||||
);
|
||||
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
$Counter++;
|
||||
|
||||
# add the info
|
||||
push(
|
||||
@Data,
|
||||
{
|
||||
ContentID => $Row[3],
|
||||
ContentType => $Row[1],
|
||||
Filename => $Row[0],
|
||||
Filesize => $Row[2],
|
||||
Disposition => $Row[4],
|
||||
FileID => $Counter,
|
||||
}
|
||||
);
|
||||
}
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
sub FormIDCleanUp {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
my $CurrentTile = time() - ( 60 * 60 * 24 * 1 );
|
||||
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => '
|
||||
DELETE FROM web_upload_cache
|
||||
WHERE create_time_unix < ?',
|
||||
Bind => [ \$CurrentTile ],
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user