init III
This commit is contained in:
777
Perl OTRS/Kernel/System/ProcessManagement/DB/Activity.pm
Normal file
777
Perl OTRS/Kernel/System/ProcessManagement/DB/Activity.pm
Normal file
@@ -0,0 +1,777 @@
|
||||
# --
|
||||
# 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::ProcessManagement::DB::Activity;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::Cache',
|
||||
'Kernel::System::DB',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::ProcessManagement::DB::ActivityDialog',
|
||||
'Kernel::System::YAML',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::ProcessManagement::DB::Activity
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Process Management DB Activity backend
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $ActivityObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::Activity');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get the cache TTL (in seconds)
|
||||
$Self->{CacheTTL} = int( $Kernel::OM->Get('Kernel::Config')->Get('Process::CacheTTL') || 3600 );
|
||||
|
||||
# set lower if database is case sensitive
|
||||
$Self->{Lower} = '';
|
||||
if ( $Kernel::OM->Get('Kernel::System::DB')->GetDatabaseFunction('CaseSensitive') ) {
|
||||
$Self->{Lower} = 'LOWER';
|
||||
}
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 ActivityAdd()
|
||||
|
||||
add new Activity
|
||||
|
||||
returns the id of the created activity if success or undef otherwise
|
||||
|
||||
my $ID = $ActivityObject->ActivityAdd(
|
||||
EntityID => 'A1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfActivity', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, activity configuration to be stored in YAML
|
||||
# format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$ID = 567;
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityAdd {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id
|
||||
FROM pm_activity
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)",
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{EntityID} already exists for an activity!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format
|
||||
if ( ref $Param{Config} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
INSERT INTO pm_activity (entity_id, name, config, create_time, create_by, change_time,
|
||||
change_by)
|
||||
VALUES (?, ?, ?, current_timestamp, ?, current_timestamp, ?)',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{UserID},
|
||||
],
|
||||
);
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => 'SELECT id FROM pm_activity WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
);
|
||||
|
||||
my $ID;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
$ID = $Row[0];
|
||||
}
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
);
|
||||
|
||||
return if !$ID;
|
||||
|
||||
return $ID;
|
||||
}
|
||||
|
||||
=head2 ActivityDelete()
|
||||
|
||||
delete an Activity
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $ActivityObject->ActivityDelete(
|
||||
ID => 123,
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDelete {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check if exists
|
||||
my $Activity = $Self->ActivityGet(
|
||||
ID => $Param{ID},
|
||||
UserID => 1,
|
||||
);
|
||||
return if !IsHashRefWithData($Activity);
|
||||
|
||||
# delete activity
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => 'DELETE FROM pm_activity WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 ActivityGet()
|
||||
|
||||
get Activity attributes
|
||||
|
||||
my $Activity = $ActivityObject->ActivityGet(
|
||||
ID => 123, # ID or EntityID is needed
|
||||
EntityID => 'A1',
|
||||
ActivityDialogNames => 1, # default 0, 1 || 0, if 0 returns an ActivityDialogs array
|
||||
# with the activity dialog entity IDs, if 1 returns an
|
||||
# ActivitiDialogs hash with the activity entity IDs as
|
||||
# keys and ActivityDialog Names as values
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$Activity = {
|
||||
ID => 123,
|
||||
EntityID => 'A1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
ActiviyDialogs => ['AD1','AD2','AD3'],
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
};
|
||||
|
||||
$Activity = {
|
||||
ID => 123,
|
||||
EntityID => 'P1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
ActivityDialogs => {
|
||||
'AD1' => 'ActivityDialog1',
|
||||
'AD2' => 'ActivityDialog2',
|
||||
'AD3' => 'ActivityDialog3',
|
||||
};
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
};
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{ID} && !$Param{EntityID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need ID or EntityID!'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
my $ActivityDialogNames = 0;
|
||||
if ( defined $Param{ActivityDialogNames} && $Param{ActivityDialogNames} == 1 ) {
|
||||
$ActivityDialogNames = 1;
|
||||
}
|
||||
|
||||
# check cache
|
||||
my $CacheKey;
|
||||
if ( $Param{ID} ) {
|
||||
$CacheKey = 'ActivityGet::ID::' . $Param{ID} . '::ActivityDialogNames::'
|
||||
. $ActivityDialogNames;
|
||||
}
|
||||
else {
|
||||
$CacheKey = 'ActivityGet::EntityID::' . $Param{EntityID} . '::ActivityDialogNames::'
|
||||
. $ActivityDialogNames;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
if ( $Param{ID} ) {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_activity
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
else {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_activity
|
||||
WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
|
||||
# get yaml object
|
||||
my $YAMLObject = $Kernel::OM->Get('Kernel::System::YAML');
|
||||
|
||||
my %Data;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
|
||||
my $Config = $YAMLObject->Load( Data => $Data[3] );
|
||||
|
||||
%Data = (
|
||||
ID => $Data[0],
|
||||
EntityID => $Data[1],
|
||||
Name => $Data[2],
|
||||
Config => $Config,
|
||||
CreateTime => $Data[4],
|
||||
ChangeTime => $Data[5],
|
||||
);
|
||||
}
|
||||
|
||||
return if !$Data{ID};
|
||||
|
||||
# create the ActivityDialogsList
|
||||
if ($ActivityDialogNames) {
|
||||
|
||||
my %ActivityDialogs;
|
||||
if ( IsHashRefWithData( $Data{Config}->{ActivityDialog} ) ) {
|
||||
|
||||
# get activity dialog object
|
||||
my $ActivityDialogObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::ActivityDialog');
|
||||
|
||||
my $ActivityDialogList = $ActivityDialogObject->ActivityDialogList(
|
||||
UseEntities => 1,
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
for my $ActivityOrder ( sort { $a <=> $b } keys %{ $Data{Config}->{ActivityDialog} } ) {
|
||||
$ActivityDialogs{ $Data{Config}->{ActivityDialog}->{$ActivityOrder} }
|
||||
= $ActivityDialogList->{ $Data{Config}->{ActivityDialog}->{$ActivityOrder} };
|
||||
}
|
||||
}
|
||||
$Data{ActivityDialogs} = \%ActivityDialogs;
|
||||
}
|
||||
else {
|
||||
my @ActivityDialogList;
|
||||
|
||||
if ( IsHashRefWithData( $Data{Config}->{ActivityDialog} ) ) {
|
||||
@ActivityDialogList = map { $Data{Config}->{ActivityDialog}->{$_} }
|
||||
sort { $a <=> $b } keys %{ $Data{Config}->{ActivityDialog} };
|
||||
}
|
||||
$Data{ActivityDialogs} = \@ActivityDialogList;
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 ActivityUpdate()
|
||||
|
||||
update Activity attributes
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $ActivityObject->ActivityUpdate(
|
||||
ID => 123, # mandatory
|
||||
EntityID => 'A1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfProcess', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, process configuration to be stored in YAML
|
||||
# format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityUpdate {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id FROM pm_activity
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)
|
||||
AND id != ?",
|
||||
Bind => [ \$Param{EntityID}, \$Param{ID} ],
|
||||
LIMIT => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{Name} already exists for a activity!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format
|
||||
if ( ref $Param{Config} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# check if need to update db
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT entity_id, name, config
|
||||
FROM pm_activity
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $CurrentEntityID;
|
||||
my $CurrentName;
|
||||
my $CurrentConfig;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$CurrentEntityID = $Data[0];
|
||||
$CurrentName = $Data[1];
|
||||
$CurrentConfig = $Data[2];
|
||||
}
|
||||
|
||||
if ($CurrentEntityID) {
|
||||
|
||||
return 1 if $CurrentEntityID eq $Param{EntityID}
|
||||
&& $CurrentName eq $Param{Name}
|
||||
&& $CurrentConfig eq $Config;
|
||||
}
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
UPDATE pm_activity
|
||||
SET entity_id = ?, name = ?, config = ?, change_time = current_timestamp, change_by = ?
|
||||
WHERE id = ?',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID},
|
||||
\$Param{ID},
|
||||
],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 ActivityList()
|
||||
|
||||
get an Activity list
|
||||
|
||||
my $List = $ActivityObject->ActivityList(
|
||||
UseEntities => 0, # default 0, 1 || 0. if 0 the return hash keys are
|
||||
# the activity IDs otherwise keys are the
|
||||
# activity entity IDs
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = {
|
||||
1 => 'Activity1',
|
||||
}
|
||||
|
||||
or
|
||||
|
||||
$List = {
|
||||
'A1' => 'Activity1',
|
||||
}
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityList {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need UserID!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $UseEntities = 0;
|
||||
if ( defined $Param{UseEntities} && $Param{UseEntities} ) {
|
||||
$UseEntities = 1;
|
||||
}
|
||||
my $CacheKey = 'ActivityList::UseEntities::' . $UseEntities;
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if ref $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name
|
||||
FROM pm_activity',
|
||||
);
|
||||
|
||||
my %Data;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
if ( !$UseEntities ) {
|
||||
$Data{ $Row[0] } = $Row[2];
|
||||
}
|
||||
else {
|
||||
$Data{ $Row[1] } = $Row[2];
|
||||
}
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 ActivityListGet()
|
||||
|
||||
get an Activity list with all activity details
|
||||
|
||||
my $List = $ActivityObject->ActivityListGet(
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = [
|
||||
{
|
||||
ID => 123,
|
||||
EntityID => 'A1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
ActiviyDialogs => ['AD1','AD2','AD3'],
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
}
|
||||
{
|
||||
ID => 456,
|
||||
EntityID => 'A2',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
ActiviyDialogs => ['AD3','AD4','AD5'],
|
||||
CreateTime => '2012-07-04 15:09:00',
|
||||
ChangeTime => '2012-07-04 15:09:00',
|
||||
}
|
||||
];
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityListGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey = 'ActivityListGet';
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id
|
||||
FROM pm_activity
|
||||
ORDER BY id',
|
||||
);
|
||||
|
||||
my @ActivityIDs;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
push @ActivityIDs, $Row[0];
|
||||
}
|
||||
|
||||
my @Data;
|
||||
for my $ItemID (@ActivityIDs) {
|
||||
|
||||
my $ActivityData = $Self->ActivityGet(
|
||||
ID => $ItemID,
|
||||
UserID => 1,
|
||||
);
|
||||
push @Data, $ActivityData;
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_Activity',
|
||||
Key => $CacheKey,
|
||||
Value => \@Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
=head2 ActivitySearch()
|
||||
|
||||
search activities by process name
|
||||
|
||||
my $ActivityEntityIDs = $ActivityObject->ActivitySearch(
|
||||
ActivityName => 'SomeText', # e. g. "SomeText*", "Some*ext" or ['*SomeTest1*', '*SomeTest2*']
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$ActivityEntityIDs = [ 'Activity-e11e2e9aa83344a235279d4f6babc6ec', 'Activity-f8194a25ab0ccddefeb4240c281c1f56' ];
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivitySearch {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{ActivityName} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need ActivityName!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
my $SQL = 'SELECT DISTINCT entity_id
|
||||
FROM pm_activity ';
|
||||
|
||||
# if it's no ref, put it to array ref
|
||||
if ( ref $Param{ActivityName} eq '' ) {
|
||||
$Param{ActivityName} = [ $Param{ActivityName} ];
|
||||
}
|
||||
|
||||
if ( IsArrayRefWithData( $Param{ActivityName} ) ) {
|
||||
$SQL .= ' WHERE' if IsArrayRefWithData( $Param{ActivityName} );
|
||||
}
|
||||
|
||||
my @QuotedSearch;
|
||||
my $SQLOR = 0;
|
||||
|
||||
VALUE:
|
||||
for my $Value ( @{ $Param{ActivityName} } ) {
|
||||
|
||||
next VALUE if !defined $Value || !length $Value;
|
||||
|
||||
$Value = '%' . $DBObject->Quote( $Value, 'Like' ) . '%';
|
||||
$Value =~ s/\*/%/g;
|
||||
$Value =~ s/%%/%/gi;
|
||||
|
||||
if ($SQLOR) {
|
||||
$SQL .= ' OR';
|
||||
}
|
||||
|
||||
$SQL .= ' name LIKE ? ';
|
||||
|
||||
push @QuotedSearch, $Value;
|
||||
$SQLOR = 1;
|
||||
|
||||
}
|
||||
|
||||
if ( IsArrayRefWithData( $Param{ActivityName} ) ) {
|
||||
$SQL .= $DBObject->GetDatabaseFunction('LikeEscapeString');
|
||||
}
|
||||
$SQL .= ' ORDER BY entity_id';
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => $SQL,
|
||||
Bind => [ \(@QuotedSearch) ]
|
||||
);
|
||||
|
||||
my @Data;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
push @Data, $Row[0];
|
||||
}
|
||||
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
689
Perl OTRS/Kernel/System/ProcessManagement/DB/ActivityDialog.pm
Normal file
689
Perl OTRS/Kernel/System/ProcessManagement/DB/ActivityDialog.pm
Normal file
@@ -0,0 +1,689 @@
|
||||
# --
|
||||
# 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::ProcessManagement::DB::ActivityDialog;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::Cache',
|
||||
'Kernel::System::DB',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::YAML',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::ProcessManagement::DB::ActivityDialog
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Process Management DB ActivityDialog backend
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $ActivityDialogObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::ActivityDialog');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get the cache TTL (in seconds)
|
||||
$Self->{CacheTTL} = int( $Kernel::OM->Get('Kernel::Config')->Get('Process::CacheTTL') || 3600 );
|
||||
|
||||
# set lower if database is case sensitive
|
||||
$Self->{Lower} = '';
|
||||
if ( $Kernel::OM->Get('Kernel::System::DB')->GetDatabaseFunction('CaseSensitive') ) {
|
||||
$Self->{Lower} = 'LOWER';
|
||||
}
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 ActivityDialogAdd()
|
||||
|
||||
add new ActivityDialog
|
||||
|
||||
returns the id of the created activity dialog if success or undef otherwise
|
||||
|
||||
my $ID = $ActivityDialogObject->ActivityDialogAdd(
|
||||
EntityID => 'AD1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfActivityDialog', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, activity dialog configuration to be
|
||||
# stored in YAML format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$ID = 567;
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDialogAdd {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id
|
||||
FROM pm_activity_dialog
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)",
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{EntityID} already exists for an activity dialog!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format (at least it must contain the description short, fields and field
|
||||
# order)
|
||||
if ( !IsHashRefWithData( $Param{Config} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
for my $Needed (qw(DescriptionShort Fields FieldOrder)) {
|
||||
if ( !$Param{Config}->{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed in Config!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check config formats
|
||||
if ( ref $Param{Config}->{Fields} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Fields must be a Hash!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( ref $Param{Config}->{FieldOrder} ne 'ARRAY' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Fields must be an Array!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump layout and config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
INSERT INTO pm_activity_dialog ( entity_id, name, config, create_time,
|
||||
create_by, change_time, change_by )
|
||||
VALUES (?, ?, ?, current_timestamp, ?, current_timestamp, ?)',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{UserID},
|
||||
],
|
||||
);
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => 'SELECT id FROM pm_activity_dialog WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
);
|
||||
|
||||
my $ID;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
$ID = $Row[0];
|
||||
}
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
);
|
||||
|
||||
return if !$ID;
|
||||
|
||||
return $ID;
|
||||
}
|
||||
|
||||
=head2 ActivityDialogDelete()
|
||||
|
||||
delete an ActivityDialog
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $ActivityDialogObject->ActivityDialogDelete(
|
||||
ID => 123,
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDialogDelete {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check if exists
|
||||
my $ActivityDialog = $Self->ActivityDialogGet(
|
||||
ID => $Param{ID},
|
||||
UserID => 1,
|
||||
);
|
||||
return if !IsHashRefWithData($ActivityDialog);
|
||||
|
||||
# delete activity dialog
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => 'DELETE FROM pm_activity_dialog WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 ActivityDialogGet()
|
||||
|
||||
get Activity Dialog attributes
|
||||
|
||||
my $ActivityDialog = $ActivityDialogObject->ActivityDialogGet(
|
||||
ID => 123, # ID or EntityID is needed
|
||||
EntityID => 'P1',
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$ActivityDialog = {
|
||||
ID => 123,
|
||||
EntityID => 'AD1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
};
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDialogGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{ID} && !$Param{EntityID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need ID or EntityID!'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey;
|
||||
if ( $Param{ID} ) {
|
||||
$CacheKey = 'ActivityDialogGet::ID::' . $Param{ID};
|
||||
}
|
||||
else {
|
||||
$CacheKey = 'ActivityDialogGet::EntityID::' . $Param{EntityID};
|
||||
}
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
if ( $Param{ID} ) {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_activity_dialog
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
else {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_activity_dialog
|
||||
WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
|
||||
# get yaml object
|
||||
my $YAMLObject = $Kernel::OM->Get('Kernel::System::YAML');
|
||||
|
||||
my %Data;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
|
||||
my $Config = $YAMLObject->Load( Data => $Data[3] );
|
||||
|
||||
%Data = (
|
||||
ID => $Data[0],
|
||||
EntityID => $Data[1],
|
||||
Name => $Data[2],
|
||||
Config => $Config,
|
||||
CreateTime => $Data[4],
|
||||
ChangeTime => $Data[5],
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
return if !$Data{ID};
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 ActivityDialogUpdate()
|
||||
|
||||
update ActivityDialog attributes
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $ActivityDialogObject->ActivityDialogUpdate(
|
||||
ID => 123, # mandatory
|
||||
EntityID => 'AD1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfActivityDialog', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, actvity dialog configuration to be
|
||||
# stored in YAML format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDialogUpdate {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id FROM pm_activity_dialog
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)
|
||||
AND id != ?",
|
||||
Bind => [ \$Param{EntityID}, \$Param{ID} ],
|
||||
LIMIT => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{Name} already exists for an ActivityDialog!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format (at least it must contain the description)
|
||||
if ( !IsHashRefWithData( $Param{Config} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
for my $Needed (qw(DescriptionShort Fields FieldOrder)) {
|
||||
if ( !$Param{Config}->{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed in Config!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check config formats
|
||||
if ( ref $Param{Config}->{Fields} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Fields must be a Hash!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( ref $Param{Config}->{FieldOrder} ne 'ARRAY' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Fields must be an Array!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump layout and config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# check if need to update db
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT entity_id, name, config
|
||||
FROM pm_activity_dialog
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $CurrentEntityID;
|
||||
my $CurrentName;
|
||||
my $CurrentConfig;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$CurrentEntityID = $Data[0];
|
||||
$CurrentName = $Data[1];
|
||||
$CurrentConfig = $Data[2];
|
||||
}
|
||||
|
||||
if ($CurrentEntityID) {
|
||||
|
||||
return 1 if $CurrentEntityID eq $Param{EntityID}
|
||||
&& $CurrentName eq $Param{Name}
|
||||
&& $CurrentConfig eq $Config;
|
||||
}
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
UPDATE pm_activity_dialog
|
||||
SET entity_id = ?, name = ?, config = ?, change_time = current_timestamp,
|
||||
change_by = ?
|
||||
WHERE id = ?',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{ID},
|
||||
],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 ActivityDialogList()
|
||||
|
||||
get an ActivityDialog list
|
||||
|
||||
my $List = $ActivityDialogObject->ActivityDialogList(
|
||||
UseEntities => 0, # default 0, 1 || 0. if 0 the return hash keys are
|
||||
# the activity dialog IDs otherwise keys are the
|
||||
# activity dialog entity IDs
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = {
|
||||
1 => 'NameOfActivityDialog',
|
||||
}
|
||||
|
||||
or
|
||||
|
||||
$List = {
|
||||
'AD1' => 'NameOfActivityDialog',
|
||||
}
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDialogList {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need UserID!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check cache
|
||||
my $UseEntities = 0;
|
||||
if ( defined $Param{UseEntities} && $Param{UseEntities} ) {
|
||||
$UseEntities = 1;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
my $CacheKey = 'ActivityDialogList::UseEntities::' . $UseEntities;
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if ref $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
my $SQL = '
|
||||
SELECT id, entity_id, name
|
||||
FROM pm_activity_dialog';
|
||||
|
||||
return if !$DBObject->Prepare( SQL => $SQL );
|
||||
|
||||
my %Data;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
if ( !$UseEntities ) {
|
||||
$Data{ $Row[0] } = $Row[2];
|
||||
}
|
||||
else {
|
||||
$Data{ $Row[1] } = $Row[2];
|
||||
}
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 ActivityDialogListGet()
|
||||
|
||||
get an Activity Dialog list with all activity dialog details
|
||||
|
||||
my $List = $ActivityDialogObject->ActivityDialogListGet(
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = [
|
||||
{
|
||||
ID => 123,
|
||||
EntityID => 'AD1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
}
|
||||
{
|
||||
ID => 456,
|
||||
EntityID => 'AD2',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:09:00',
|
||||
ChangeTime => '2012-07-04 15:09:00',
|
||||
}
|
||||
];
|
||||
|
||||
=cut
|
||||
|
||||
sub ActivityDialogListGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey = 'ActivityDialogListGet';
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id
|
||||
FROM pm_activity_dialog
|
||||
ORDER BY id',
|
||||
);
|
||||
|
||||
my @ActivityDialogIDs;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
push @ActivityDialogIDs, $Row[0];
|
||||
}
|
||||
|
||||
my @Data;
|
||||
for my $ItemID (@ActivityDialogIDs) {
|
||||
|
||||
my $ActivityDialogData = $Self->ActivityDialogGet(
|
||||
ID => $ItemID,
|
||||
UserID => 1,
|
||||
);
|
||||
push @Data, $ActivityDialogData;
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_ActivityDialog',
|
||||
Key => $CacheKey,
|
||||
Value => \@Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
454
Perl OTRS/Kernel/System/ProcessManagement/DB/Entity.pm
Normal file
454
Perl OTRS/Kernel/System/ProcessManagement/DB/Entity.pm
Normal file
@@ -0,0 +1,454 @@
|
||||
# --
|
||||
# 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::ProcessManagement::DB::Entity;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::System::DB',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::Main',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::ProcessManagement::DB::Entity
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Process Management DB Entity backend
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $EntityObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::Entity');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
$Self->{ValidEntities} = {
|
||||
'Process' => 1,
|
||||
'Activity' => 1,
|
||||
'ActivityDialog' => 1,
|
||||
'Transition' => 1,
|
||||
'TransitionAction' => 1,
|
||||
};
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 EntityIDGenerate()
|
||||
|
||||
generate unique Entity ID
|
||||
|
||||
my $EntityID = $EntityObject->EntityIDGenerate(
|
||||
EntityType => 'Process', # mandatory, 'Process' || 'Activity' || 'ActivityDialog'
|
||||
# || 'Transition' || 'TransitionAction'
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$EntityID = 'P1';
|
||||
|
||||
=cut
|
||||
|
||||
sub EntityIDGenerate {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(EntityType UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check entity type
|
||||
if ( !$Self->{ValidEntities}->{ $Param{EntityType} } ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityType:$Param{EntityType} is invalid!"
|
||||
);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
# this is not a 'proper' GUID as defined in RFC 4122 but it's close enough for
|
||||
# our purposes and we can replace it later if needed
|
||||
my $GUID = $Kernel::OM->Get('Kernel::System::Main')->GenerateRandomString(
|
||||
Length => 32,
|
||||
Dictionary => [ 0 .. 9, 'a' .. 'f' ], # hexadecimal
|
||||
);
|
||||
|
||||
my $EntityID = $Param{EntityType} . '-' . $GUID;
|
||||
|
||||
return $EntityID;
|
||||
}
|
||||
|
||||
=head2 EntitySyncStateSet()
|
||||
|
||||
set sync state for an entity.
|
||||
|
||||
my $Success = $EntityObject->EntitySyncStateSet(
|
||||
EntityType => 'Process', # 'Process' || 'Activity' || 'ActivityDialog'
|
||||
# || 'Transition' || 'TransitionAction', type of the
|
||||
# entity
|
||||
EntityID => 'P1',
|
||||
SyncState => 'not_sync', # the sync state to set
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub EntitySyncStateSet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Needed (qw(EntityType EntityID SyncState UserID)) {
|
||||
if ( !$Param{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check entity type
|
||||
if ( !$Self->{ValidEntities}->{ $Param{EntityType} } ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityType:$Param{EntityType} is invalid!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# create new
|
||||
if ( !%{ $Self->EntitySyncStateGet(%Param) || {} } ) {
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
INSERT INTO pm_entity_sync
|
||||
(entity_type, entity_id, sync_state, create_time, change_time)
|
||||
VALUES (?, ?, ?, current_timestamp, current_timestamp)',
|
||||
Bind => [
|
||||
\$Param{EntityType}, \$Param{EntityID}, \$Param{SyncState},
|
||||
],
|
||||
);
|
||||
}
|
||||
else { # update existing
|
||||
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
UPDATE pm_entity_sync
|
||||
SET sync_state = ?, change_time = current_timestamp
|
||||
WHERE entity_type = ?
|
||||
AND entity_id = ?',
|
||||
Bind => [
|
||||
\$Param{SyncState}, \$Param{EntityType}, \$Param{EntityID},
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 EntitySyncStateGet()
|
||||
|
||||
gets the sync state of an entity
|
||||
|
||||
my $EntitySyncState = $EntityObject->EntitySyncStateGet(
|
||||
EntityType => 'Process', # 'Process' || 'Activity' || 'ActivityDialog'
|
||||
# || 'Transition' || 'TransitionAction', type of the
|
||||
# entity
|
||||
EntityID => 'P1',
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
If sync state was found, returns:
|
||||
|
||||
$EntitySyncState = {
|
||||
EntityType => 'Process',
|
||||
EntityID => 'P1',
|
||||
SyncState => 'not_sync',
|
||||
CreateTime => '2011-02-08 15:08:00',
|
||||
ChangeTime => '2011-02-08 15:08:00',
|
||||
};
|
||||
|
||||
If no sync state was found, returns undef.
|
||||
|
||||
=cut
|
||||
|
||||
sub EntitySyncStateGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Needed (qw(EntityType EntityID UserID)) {
|
||||
if ( !$Param{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check entity type
|
||||
if ( !$Self->{ValidEntities}->{ $Param{EntityType} } ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityType:$Param{EntityType} is invalid!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT entity_type, entity_id, sync_state, create_time, change_time
|
||||
FROM pm_entity_sync
|
||||
WHERE entity_type =?
|
||||
AND entity_id = ?',
|
||||
Bind => [
|
||||
\$Param{EntityType}, \$Param{EntityID},
|
||||
],
|
||||
);
|
||||
|
||||
my %Result;
|
||||
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
|
||||
%Result = (
|
||||
EntityType => $Data[0],
|
||||
EntityID => $Data[1],
|
||||
SyncState => $Data[2],
|
||||
CreateTime => $Data[3],
|
||||
ChangeTime => $Data[4],
|
||||
);
|
||||
}
|
||||
|
||||
return if !IsHashRefWithData( \%Result );
|
||||
|
||||
return \%Result;
|
||||
}
|
||||
|
||||
=head2 EntitySyncStateDelete()
|
||||
|
||||
deletes sync state of an entity.
|
||||
|
||||
my $Success = $EntityObject->EntitySyncStateDelete(
|
||||
EntityType => 'Process', # 'Process' || 'Activity' || 'ActivityDialog'
|
||||
# || 'Transition' || 'TransitionAction', type of the
|
||||
# entity
|
||||
EntityID => 'P1',
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub EntitySyncStateDelete {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(EntityType EntityID UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check entity type
|
||||
if ( !$Self->{ValidEntities}->{ $Param{EntityType} } ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityType:$Param{EntityType} is invalid!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
return if ( !%{ $Self->EntitySyncStateGet(%Param) || {} } );
|
||||
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => '
|
||||
DELETE FROM pm_entity_sync
|
||||
WHERE entity_type = ?
|
||||
AND entity_id = ?',
|
||||
Bind => [
|
||||
\$Param{EntityType}, \$Param{EntityID},
|
||||
],
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 EntitySyncStatePurge()
|
||||
|
||||
deletes all entries .
|
||||
|
||||
my $Success = $EntityObject->EntitySyncStatePurge(
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub EntitySyncStatePurge {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Needed (qw(UserID)) {
|
||||
if ( !$Param{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => '
|
||||
DELETE FROM pm_entity_sync',
|
||||
Bind => [],
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 EntitySyncStateList()
|
||||
|
||||
gets a list of sync states.
|
||||
|
||||
my $EntitySyncStateList = $EntityObject->EntitySyncStateList(
|
||||
EntityType => 'Process', # optional, 'Process' || 'Activity' || 'ActivityDialog'
|
||||
# || 'Transition' || 'TransitionAction', type of the
|
||||
# entity
|
||||
SyncState => 'not_sync', # optional, only entries with this sync state
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$EntitySyncStateList = [
|
||||
{
|
||||
EntityType => 'Process',
|
||||
EntityID => 'P1',
|
||||
SyncState => 'sync_started',
|
||||
CreateTime => '2011-02-08 15:08:00',
|
||||
ChangeTime => '2011-02-08 15:08:00',
|
||||
},
|
||||
...
|
||||
];
|
||||
|
||||
=cut
|
||||
|
||||
sub EntitySyncStateList {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Needed (qw(UserID)) {
|
||||
if ( !$Param{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $Param{EntityType} ) {
|
||||
|
||||
# check entity type
|
||||
if ( !$Self->{ValidEntities}->{ $Param{EntityType} } ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityType:$Param{EntityType} is invalid!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
my $SQL = '
|
||||
SELECT entity_type, entity_id, sync_state, create_time, change_time
|
||||
FROM pm_entity_sync';
|
||||
|
||||
my @Bind;
|
||||
|
||||
if ( $Param{EntityType} ) {
|
||||
$SQL .= ' WHERE entity_type = ?';
|
||||
push @Bind, \$Param{EntityType};
|
||||
|
||||
if ( $Param{SyncState} ) {
|
||||
$SQL .= ' AND sync_state = ?';
|
||||
push @Bind, \$Param{SyncState};
|
||||
}
|
||||
}
|
||||
elsif ( $Param{SyncState} ) {
|
||||
$SQL .= ' WHERE sync_state = ?';
|
||||
push @Bind, \$Param{SyncState};
|
||||
}
|
||||
|
||||
$SQL .= ' ORDER BY entity_id ASC';
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => $SQL,
|
||||
Bind => \@Bind,
|
||||
);
|
||||
|
||||
my @Result;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
|
||||
push @Result, {
|
||||
EntityType => $Data[0],
|
||||
EntityID => $Data[1],
|
||||
SyncState => $Data[2],
|
||||
CreateTime => $Data[3],
|
||||
ChangeTime => $Data[4],
|
||||
};
|
||||
}
|
||||
|
||||
return \@Result;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
2197
Perl OTRS/Kernel/System/ProcessManagement/DB/Process.pm
Normal file
2197
Perl OTRS/Kernel/System/ProcessManagement/DB/Process.pm
Normal file
File diff suppressed because it is too large
Load Diff
155
Perl OTRS/Kernel/System/ProcessManagement/DB/Process/State.pm
Normal file
155
Perl OTRS/Kernel/System/ProcessManagement/DB/Process/State.pm
Normal file
@@ -0,0 +1,155 @@
|
||||
# --
|
||||
# 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::ProcessManagement::DB::Process::State;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::Language qw(Translatable);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::System::Log',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::ProcessManagement::DB::Process::State
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Process Management DB State backend
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $ProcessStateObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::Process::State');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# create States list
|
||||
$Self->{StateList} = {
|
||||
'S1' => Translatable('Active'),
|
||||
'S2' => Translatable('Inactive'),
|
||||
'S3' => Translatable('FadeAway'),
|
||||
};
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 StateList()
|
||||
|
||||
get a State list
|
||||
|
||||
my $List = $StateObject->StateList(
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = {
|
||||
'S1' => 'Active',
|
||||
'S2' => 'Inactive',
|
||||
'S3' => 'FadeAway',
|
||||
}
|
||||
|
||||
=cut
|
||||
|
||||
sub StateList {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need UserID!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
return $Self->{StateList};
|
||||
}
|
||||
|
||||
=head2 StateLookup()
|
||||
|
||||
get State name or State EntityID
|
||||
|
||||
my $Name = $StateObject->StateLookup(
|
||||
EntityID => 'S1',
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
Returns:
|
||||
$Name = 'Active';
|
||||
|
||||
my $EntityID = $StateObject->StateLookup(
|
||||
Name => 'Active',
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
Returns:
|
||||
$EntityID = 'S1';
|
||||
|
||||
=cut
|
||||
|
||||
sub StateLookup {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need UserID!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !$Param{EntityID} && !$Param{Name} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "EntityID or Name is required!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# return state name
|
||||
my $Result;
|
||||
if ( $Param{EntityID} ) {
|
||||
$Result = $Self->{StateList}->{ $Param{EntityID} };
|
||||
}
|
||||
|
||||
# return state entity ID
|
||||
else {
|
||||
my %ReversedStateList = reverse %{ $Self->{StateList} };
|
||||
$Result = $ReversedStateList{ $Param{Name} };
|
||||
}
|
||||
|
||||
return $Result;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
675
Perl OTRS/Kernel/System/ProcessManagement/DB/Transition.pm
Normal file
675
Perl OTRS/Kernel/System/ProcessManagement/DB/Transition.pm
Normal file
@@ -0,0 +1,675 @@
|
||||
# --
|
||||
# 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::ProcessManagement::DB::Transition;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::Cache',
|
||||
'Kernel::System::DB',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::YAML',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::ProcessManagement::DB::Transition
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Process Management DB Transition backend
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $TransitionObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::Transition');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get the cache TTL (in seconds)
|
||||
$Self->{CacheTTL} = int( $Kernel::OM->Get('Kernel::Config')->Get('Process::CacheTTL') || 3600 );
|
||||
|
||||
# set lower if database is case sensitive
|
||||
$Self->{Lower} = '';
|
||||
if ( $Kernel::OM->Get('Kernel::System::DB')->GetDatabaseFunction('CaseSensitive') ) {
|
||||
$Self->{Lower} = 'LOWER';
|
||||
}
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 TransitionAdd()
|
||||
|
||||
add new Trnsition
|
||||
|
||||
returns the id of the created Transition if success or undef otherwise
|
||||
|
||||
my $ID = $TransitionObject->TransitionAdd(
|
||||
EntityID => 'T1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfTransition', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, transition configuration to be stored in
|
||||
# YAML format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$ID = 567;
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionAdd {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id
|
||||
FROM pm_transition
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)",
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{EntityID} already exists for a transition!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format (at least it must contain the description short, fields and field
|
||||
# order)
|
||||
if ( !IsHashRefWithData( $Param{Config} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
for my $Needed (qw(Condition)) {
|
||||
if ( !$Param{Config}->{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed in Config!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check config formats
|
||||
if ( ref $Param{Config}->{Condition} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Fields must be a Hash!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump layout and config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
INSERT INTO pm_transition ( entity_id, name, config, create_time,
|
||||
create_by, change_time, change_by )
|
||||
VALUES (?, ?, ?, current_timestamp, ?, current_timestamp, ?)',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{UserID},
|
||||
],
|
||||
);
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => 'SELECT id FROM pm_transition WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
);
|
||||
|
||||
my $ID;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
$ID = $Row[0];
|
||||
}
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
);
|
||||
|
||||
return if !$ID;
|
||||
|
||||
return $ID;
|
||||
}
|
||||
|
||||
=head2 TransitionDelete()
|
||||
|
||||
delete an Transition
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $TransitionObject->TransitionDelete(
|
||||
ID => 123,
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionDelete {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check if exists
|
||||
my $Transition = $Self->TransitionGet(
|
||||
ID => $Param{ID},
|
||||
UserID => 1,
|
||||
);
|
||||
return if !IsHashRefWithData($Transition);
|
||||
|
||||
# delete transition
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => 'DELETE FROM pm_transition WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 TransitionGet()
|
||||
|
||||
get Transition attributes
|
||||
|
||||
my $Transition = $TransitionObject->TransitionGet(
|
||||
ID => 123, # ID or EntityID is needed
|
||||
EntityID => 'T1',
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$Transition = {
|
||||
ID => 123,
|
||||
EntityID => 'T1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
};
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{ID} && !$Param{EntityID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need ID or EntityID!'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey;
|
||||
if ( $Param{ID} ) {
|
||||
$CacheKey = 'TransitionGet::ID::' . $Param{ID};
|
||||
}
|
||||
else {
|
||||
$CacheKey = 'TransitionGet::EntityID::' . $Param{EntityID};
|
||||
}
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
if ( $Param{ID} ) {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_transition
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
else {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_transition
|
||||
WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
|
||||
# get yaml object
|
||||
my $YAMLObject = $Kernel::OM->Get('Kernel::System::YAML');
|
||||
|
||||
my %Data;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
|
||||
my $Config = $YAMLObject->Load( Data => $Data[3] );
|
||||
|
||||
%Data = (
|
||||
ID => $Data[0],
|
||||
EntityID => $Data[1],
|
||||
Name => $Data[2],
|
||||
Config => $Config,
|
||||
CreateTime => $Data[4],
|
||||
ChangeTime => $Data[5],
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
return if !$Data{ID};
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 TransitionUpdate()
|
||||
|
||||
update Transition attributes
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $TransitionObject->TransitionUpdate(
|
||||
ID => 123, # mandatory
|
||||
EntityID => 'T1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfTransition', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, transition configuration to be stored in
|
||||
# YAML format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionUpdate {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id FROM pm_transition
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)
|
||||
AND id != ?",
|
||||
Bind => [ \$Param{EntityID}, \$Param{ID} ],
|
||||
LIMIT => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{Name} already exists for a Transition!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format (at least it must contain the condition
|
||||
if ( !IsHashRefWithData( $Param{Config} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
for my $Needed (qw(Condition)) {
|
||||
if ( !$Param{Config}->{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed in Config!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check config formats
|
||||
if ( ref $Param{Config}->{Condition} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Fields must be a Hash!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump layout and config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# check if need to update db
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT entity_id, name, config
|
||||
FROM pm_transition
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $CurrentEntityID;
|
||||
my $CurrentName;
|
||||
my $CurrentConfig;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$CurrentEntityID = $Data[0];
|
||||
$CurrentName = $Data[1];
|
||||
$CurrentConfig = $Data[2];
|
||||
}
|
||||
|
||||
if ($CurrentEntityID) {
|
||||
|
||||
return 1 if $CurrentEntityID eq $Param{EntityID}
|
||||
&& $CurrentName eq $Param{Name}
|
||||
&& $CurrentConfig eq $Config;
|
||||
}
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
UPDATE pm_transition
|
||||
SET entity_id = ?, name = ?, config = ?, change_time = current_timestamp,
|
||||
change_by = ?
|
||||
WHERE id = ?',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{ID},
|
||||
],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 TransitionList()
|
||||
|
||||
get an Transition list
|
||||
|
||||
my $List = $TransitionObject->TransitionList(
|
||||
UseEntities => 0, # default 0, 1 || 0. if 0 the return hash keys are
|
||||
# the transition IDs otherwise keys are the
|
||||
# transition entity IDs
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = {
|
||||
1 => 'NameOfTransition',
|
||||
}
|
||||
|
||||
or
|
||||
|
||||
$List = {
|
||||
'T1' => 'NameOfTransition',
|
||||
}
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionList {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need UserID!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check cache
|
||||
my $UseEntities = 0;
|
||||
if ( defined $Param{UseEntities} && $Param{UseEntities} ) {
|
||||
$UseEntities = 1;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
my $CacheKey = 'TransitionList::UseEntities::' . $UseEntities;
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if ref $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
my $SQL = '
|
||||
SELECT id, entity_id, name
|
||||
FROM pm_transition';
|
||||
|
||||
return if !$DBObject->Prepare( SQL => $SQL );
|
||||
|
||||
my %Data;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
if ( !$UseEntities ) {
|
||||
$Data{ $Row[0] } = $Row[2];
|
||||
}
|
||||
else {
|
||||
$Data{ $Row[1] } = $Row[2];
|
||||
}
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 TransitionListGet()
|
||||
|
||||
get a Transition list with all Transition details
|
||||
|
||||
my $List = $TransitionObject->TransitionListGet(
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = [
|
||||
{
|
||||
ID => 123,
|
||||
EntityID => 'T1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
}
|
||||
{
|
||||
ID => 456,
|
||||
EntityID => 'T2',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:09:00',
|
||||
ChangeTime => '2012-07-04 15:09:00',
|
||||
}
|
||||
];
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionListGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey = 'TransitionListGet';
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id
|
||||
FROM pm_transition
|
||||
ORDER BY id',
|
||||
);
|
||||
|
||||
my @TransitionIDs;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
push @TransitionIDs, $Row[0];
|
||||
}
|
||||
|
||||
my @Data;
|
||||
for my $ItemID (@TransitionIDs) {
|
||||
|
||||
my $TransitionData = $Self->TransitionGet(
|
||||
ID => $ItemID,
|
||||
UserID => 1,
|
||||
);
|
||||
push @Data, $TransitionData;
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_Transition',
|
||||
Key => $CacheKey,
|
||||
Value => \@Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
688
Perl OTRS/Kernel/System/ProcessManagement/DB/TransitionAction.pm
Normal file
688
Perl OTRS/Kernel/System/ProcessManagement/DB/TransitionAction.pm
Normal file
@@ -0,0 +1,688 @@
|
||||
# --
|
||||
# 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::ProcessManagement::DB::TransitionAction;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::System::Cache',
|
||||
'Kernel::System::DB',
|
||||
'Kernel::System::Log',
|
||||
'Kernel::System::YAML',
|
||||
);
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Kernel::System::ProcessManagement::DB::TransitionAction
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Process Management DB TransitionAction backend
|
||||
|
||||
=head1 PUBLIC INTERFACE
|
||||
|
||||
=head2 new()
|
||||
|
||||
Don't use the constructor directly, use the ObjectManager instead:
|
||||
|
||||
my $TransitionActionObject = $Kernel::OM->Get('Kernel::System::ProcessManagement::DB::TransitionAction');
|
||||
|
||||
=cut
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get the cache TTL (in seconds)
|
||||
$Self->{CacheTTL} = int( $Kernel::OM->Get('Kernel::Config')->Get('Process::CacheTTL') || 3600 );
|
||||
|
||||
# set lower if database is case sensitive
|
||||
$Self->{Lower} = '';
|
||||
if ( $Kernel::OM->Get('Kernel::System::DB')->GetDatabaseFunction('CaseSensitive') ) {
|
||||
$Self->{Lower} = 'LOWER';
|
||||
}
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
=head2 TransitionActionAdd()
|
||||
|
||||
add new TransitionAction
|
||||
|
||||
returns the id of the created TransitionAction if success or undef otherwise
|
||||
|
||||
my $ID = $TransitionActionObject->TransitionActionAdd(
|
||||
EntityID => 'TA1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfTransitionAction', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, transition action configuration to be
|
||||
# stored in YAML format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$ID = 567;
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionActionAdd {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id
|
||||
FROM pm_transition_action
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)",
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{EntityID} already exists for a transition action!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format (at least it must contain another config hash inside)
|
||||
if ( !IsHashRefWithData( $Param{Config} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
for my $Needed (qw(Module Config)) {
|
||||
if ( !$Param{Config}->{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed in Config!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check config formats
|
||||
if ( !IsStringWithData( $Param{Config}->{Module} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Module must be a non empty String!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( ref $Param{Config}->{Config} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config Config must be a Hash!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump layout and config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
INSERT INTO pm_transition_action ( entity_id, name, config, create_time,
|
||||
create_by, change_time, change_by )
|
||||
VALUES (?, ?, ?, current_timestamp, ?, current_timestamp, ?)',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{UserID},
|
||||
],
|
||||
);
|
||||
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => 'SELECT id FROM pm_transition_action WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
);
|
||||
|
||||
my $ID;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
$ID = $Row[0];
|
||||
}
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
);
|
||||
|
||||
return if !$ID;
|
||||
|
||||
return $ID;
|
||||
}
|
||||
|
||||
=head2 TransitionActionDelete()
|
||||
|
||||
delete an TransitionAction
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $TransitionActionObject->TransitionActionDelete(
|
||||
ID => 123,
|
||||
UserID => 123,
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionActionDelete {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check if exists
|
||||
my $TransitionAction = $Self->TransitionActionGet(
|
||||
ID => $Param{ID},
|
||||
UserID => 1,
|
||||
);
|
||||
return if !IsHashRefWithData($TransitionAction);
|
||||
|
||||
# delete transition action
|
||||
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
|
||||
SQL => 'DELETE FROM pm_transition_action WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 TransitionActionGet()
|
||||
|
||||
get TransitionAction attributes
|
||||
|
||||
my $TransitionAction = $TransitionActionObject->TransitionActionGet(
|
||||
ID => 123, # ID or EntityID is needed
|
||||
EntityID => 'P1',
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$TransitionAction = {
|
||||
ID => 123,
|
||||
EntityID => 'TA1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
};
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionActionGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{ID} && !$Param{EntityID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need ID or EntityID!'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey;
|
||||
if ( $Param{ID} ) {
|
||||
$CacheKey = 'TransitionActionGet::ID::' . $Param{ID};
|
||||
}
|
||||
else {
|
||||
$CacheKey = 'TransitionActionGet::EntityID::' . $Param{EntityID};
|
||||
}
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
if ( $Param{ID} ) {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_transition_action
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
else {
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id, name, config, create_time, change_time
|
||||
FROM pm_transition_action
|
||||
WHERE entity_id = ?',
|
||||
Bind => [ \$Param{EntityID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
}
|
||||
|
||||
# get yaml object
|
||||
my $YAMLObject = $Kernel::OM->Get('Kernel::System::YAML');
|
||||
|
||||
my %Data;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
|
||||
my $Config = $YAMLObject->Load( Data => $Data[3] );
|
||||
|
||||
%Data = (
|
||||
ID => $Data[0],
|
||||
EntityID => $Data[1],
|
||||
Name => $Data[2],
|
||||
Config => $Config,
|
||||
CreateTime => $Data[4],
|
||||
ChangeTime => $Data[5],
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
return if !$Data{ID};
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 TransitionActionUpdate()
|
||||
|
||||
update TransitionAction attributes
|
||||
|
||||
returns 1 if success or undef otherwise
|
||||
|
||||
my $Success = $TransitionActionObject->TransitionActionUpdate(
|
||||
ID => 123, # mandatory
|
||||
EntityID => 'TA1' # mandatory, exportable unique identifier
|
||||
Name => 'NameOfTransitionAction', # mandatory
|
||||
Config => $ConfigHashRef, # mandatory, actvity dialog configuration to be
|
||||
# stored in YAML format
|
||||
UserID => 123, # mandatory
|
||||
);
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionActionUpdate {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Key (qw(ID EntityID Name Config UserID)) {
|
||||
if ( !$Param{$Key} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Key!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# check if EntityID already exists
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => "
|
||||
SELECT id FROM pm_transition_action
|
||||
WHERE $Self->{Lower}(entity_id) = $Self->{Lower}(?)
|
||||
AND id != ?",
|
||||
Bind => [ \$Param{EntityID}, \$Param{ID} ],
|
||||
LIMIT => 1,
|
||||
);
|
||||
|
||||
my $EntityExists;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$EntityExists = 1;
|
||||
}
|
||||
|
||||
if ($EntityExists) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "The EntityID:$Param{Name} already exists for a TransitionAction!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check config valid format (at least it must contain another config hash)
|
||||
if ( !IsHashRefWithData( $Param{Config} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config needs to be a valid Hash reference!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
for my $Needed (qw(Module Config)) {
|
||||
if ( !$Param{Config}->{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need $Needed in Config!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# check config formats
|
||||
if ( !IsStringWithData( $Param{Config}->{Module} ) ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config->Config must be a non empty string!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( ref $Param{Config}->{Config} ne 'HASH' ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Config->Config must be a Hash!",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# dump layout and config as string
|
||||
my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} );
|
||||
|
||||
# Make sure the resulting string has the UTF-8 flag. YAML only sets it if
|
||||
# part of the data already had it.
|
||||
utf8::upgrade($Config);
|
||||
|
||||
# check if need to update db
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT entity_id, name, config
|
||||
FROM pm_transition_action
|
||||
WHERE id = ?',
|
||||
Bind => [ \$Param{ID} ],
|
||||
Limit => 1,
|
||||
);
|
||||
|
||||
my $CurrentEntityID;
|
||||
my $CurrentName;
|
||||
my $CurrentConfig;
|
||||
while ( my @Data = $DBObject->FetchrowArray() ) {
|
||||
$CurrentEntityID = $Data[0];
|
||||
$CurrentName = $Data[1];
|
||||
$CurrentConfig = $Data[2];
|
||||
}
|
||||
|
||||
if ($CurrentEntityID) {
|
||||
|
||||
return 1 if $CurrentEntityID eq $Param{EntityID}
|
||||
&& $CurrentName eq $Param{Name}
|
||||
&& $CurrentConfig eq $Config;
|
||||
}
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Do(
|
||||
SQL => '
|
||||
UPDATE pm_transition_action
|
||||
SET entity_id = ?, name = ?, config = ?, change_time = current_timestamp,
|
||||
change_by = ?
|
||||
WHERE id = ?',
|
||||
Bind => [
|
||||
\$Param{EntityID}, \$Param{Name}, \$Config, \$Param{UserID}, \$Param{ID},
|
||||
],
|
||||
);
|
||||
|
||||
# delete cache
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
=head2 TransitionActionList()
|
||||
|
||||
get an TransitionAction list
|
||||
|
||||
my $List = $TransitionActionObject->TransitionActionList(
|
||||
UseEntities => 0, # default 0, 1 || 0. if 0 the return hash keys are
|
||||
# the transition action IDs otherwise keys are
|
||||
# the transition action entity IDs
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = {
|
||||
1 => 'NameOfTransitionAction',
|
||||
}
|
||||
|
||||
or
|
||||
|
||||
$List = {
|
||||
'AD1' => 'NameOfTransitionAction',
|
||||
}
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionActionList {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "Need UserID!"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# check cache
|
||||
my $UseEntities = 0;
|
||||
if ( defined $Param{UseEntities} && $Param{UseEntities} ) {
|
||||
$UseEntities = 1;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
my $CacheKey = 'TransitionActionList::UseEntities::' . $UseEntities;
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if ref $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
my $SQL = '
|
||||
SELECT id, entity_id, name
|
||||
FROM pm_transition_action';
|
||||
|
||||
return if !$DBObject->Prepare( SQL => $SQL );
|
||||
|
||||
my %Data;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
if ( !$UseEntities ) {
|
||||
$Data{ $Row[0] } = $Row[2];
|
||||
}
|
||||
else {
|
||||
$Data{ $Row[1] } = $Row[2];
|
||||
}
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \%Data;
|
||||
}
|
||||
|
||||
=head2 TransitionActionListGet()
|
||||
|
||||
get an Transition Action list with all Transition Action details
|
||||
|
||||
my $List = $TransitionActionObject->TransitionActionListGet(
|
||||
UserID => 1,
|
||||
);
|
||||
|
||||
Returns:
|
||||
|
||||
$List = [
|
||||
{
|
||||
ID => 123,
|
||||
EntityID => 'TA1',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:08:00',
|
||||
ChangeTime => '2012-07-04 15:08:00',
|
||||
}
|
||||
{
|
||||
ID => 456,
|
||||
EntityID => 'TA2',
|
||||
Name => 'some name',
|
||||
Config => $ConfigHashRef,
|
||||
CreateTime => '2012-07-04 15:09:00',
|
||||
ChangeTime => '2012-07-04 15:09:00',
|
||||
}
|
||||
];
|
||||
|
||||
=cut
|
||||
|
||||
sub TransitionActionListGet {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
if ( !$Param{UserID} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => 'Need UserID!',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
# check cache
|
||||
my $CacheKey = 'TransitionActionListGet';
|
||||
|
||||
my $Cache = $CacheObject->Get(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
return $Cache if $Cache;
|
||||
|
||||
# get database object
|
||||
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
|
||||
|
||||
# sql
|
||||
return if !$DBObject->Prepare(
|
||||
SQL => '
|
||||
SELECT id, entity_id
|
||||
FROM pm_transition_action
|
||||
ORDER BY id',
|
||||
);
|
||||
|
||||
my @TransitionActionIDs;
|
||||
while ( my @Row = $DBObject->FetchrowArray() ) {
|
||||
push @TransitionActionIDs, $Row[0];
|
||||
}
|
||||
|
||||
my @Data;
|
||||
for my $ItemID (@TransitionActionIDs) {
|
||||
|
||||
my $TransitionActionData = $Self->TransitionActionGet(
|
||||
ID => $ItemID,
|
||||
UserID => 1,
|
||||
);
|
||||
push @Data, $TransitionActionData;
|
||||
}
|
||||
|
||||
# set cache
|
||||
$CacheObject->Set(
|
||||
Type => 'ProcessManagement_TransitionAction',
|
||||
Key => $CacheKey,
|
||||
Value => \@Data,
|
||||
TTL => $Self->{CacheTTL},
|
||||
);
|
||||
|
||||
return \@Data;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 TERMS AND CONDITIONS
|
||||
|
||||
This software is part of the OTRS project (L<https://otrs.org/>).
|
||||
|
||||
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user