# --
# 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::Console::Command::Maint::FormDraft::Delete;
use strict;
use warnings;
use Kernel::System::VariableCheck qw(IsArrayRefWithData);
use parent qw(Kernel::System::Console::BaseCommand);
our @ObjectDependencies = (
'Kernel::Config',
'Kernel::System::FormDraft',
'Kernel::System::DateTime',
);
sub Configure {
my ( $Self, %Param ) = @_;
$Self->Description('Delete draft entries.');
$Self->AddOption(
Name => 'expired',
Description => 'Delete only drafts which are expired by TTL.',
Required => 0,
HasValue => 0,
);
$Self->AddOption(
Name => 'object-type',
Description => 'Define the object type of draft which should be deleted (e.g. Ticket).',
Required => 1,
HasValue => 1,
ValueRegex => qr/.*/smx,
);
return;
}
sub Run {
my ( $Self, %Param ) = @_;
my %Options;
$Options{Expired} = $Self->GetOption('expired');
$Options{ObjectType} = $Self->GetOption('object-type');
my $FormDraftObject = $Kernel::OM->Get('Kernel::System::FormDraft');
my $FormDraftList = $FormDraftObject->FormDraftListGet(
ObjectType => $Options{ObjectType},
UserID => 1,
);
$Self->Print("Deleting drafts...\n");
if ( IsArrayRefWithData($FormDraftList) ) {
my %ExpiryTargetTimeByObjectType;
if ( $Options{Expired} ) {
my $DateTimeObject = $Kernel::OM->Create(
'Kernel::System::DateTime'
);
my $SystemTime = $DateTimeObject->ToEpoch();
my $FormDraftTTL = $Kernel::OM->Get('Kernel::Config')->Get('FormDraftTTL');
for my $ObjectType ( sort keys %{$FormDraftTTL} ) {
$ExpiryTargetTimeByObjectType{$ObjectType} = $SystemTime - $FormDraftTTL->{$ObjectType} * 60;
}
}
DRAFT:
for my $FormDraft ( @{$FormDraftList} ) {
if ( $Options{Expired} && $ExpiryTargetTimeByObjectType{ $FormDraft->{ObjectType} } ) {
# FormDrafts are considered expired if their change time is smaller than target time (current time - ttl).
my $FormDraftSystemTimeObject = $Kernel::OM->Create(
'Kernel::System::DateTime',
ObjectParams => {
String => $FormDraft->{ChangeTime},
}
);
my $FormDraftSystemTime = $FormDraftSystemTimeObject->ToEpoch();
next DRAFT if $FormDraftSystemTime > $ExpiryTargetTimeByObjectType{ $FormDraft->{ObjectType} };
}
return $Self->ExitCodeError() if !$FormDraftObject->FormDraftDelete(
FormDraftID => $FormDraft->{FormDraftID},
UserID => 1,
);
}
}
$Self->Print("Done.\n");
return $Self->ExitCodeOk();
}
1;