NewTicketWizardRestrictedService.pm 3.96 KB
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
#
# Frontend module for customizing service restrictions - SeTIC - UFSC - http://setic.ufsc.br/
# Rodrigo Gonçalves - rodrigo.g@ufsc.br
#
# Version 2017-01-18 - First version
#
# --
package Kernel::Modules::NewTicketWizardRestrictedService;

use strict;
use warnings;

use Kernel::System::VariableCheck qw(:all);
use Data::Dumper;

our @ObjectDependencies = (
	"Kernel::System::Web::Request", "Kernel::System::DB",
	"Kernel::Output::HTML::Layout", "KerneL::System::Log",
	"Kernel::Config",               "Kernel::System::DynamicField::Backend",
	"Kernel::System::Service",      "Kernel::System::ServiceForm",
	"Kernel::System::SystemAddress"
);

sub new {
	my ( $Type, %Param ) = @_;

	# allocate new hash for object
	my $Self = {%Param};
	bless( $Self, $Type );

	return $Self;
}

sub Run {
	my ( $Self, %Param ) = @_;

	my $ParamObject       = $Kernel::OM->Get("Kernel::System::Web::Request");
	my $subaction = $ParamObject->GetParam( Param => "SubAction" );
	
	if ( $subaction ) {
		if ( $subaction eq 'Update' ) {
			return $Self->UpdateRestrictions();
		}
	}
	return $Self->Overview();
}

sub Overview {

	my ( $Self, %Param ) = @_;

	my %Data = ();

	my $LayoutObject  = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
	my $ServiceObject = $Kernel::OM->Get("Kernel::System::Service");
	my $LanguageObject = $Kernel::OM->Get("Kernel::Language");
	my $RestrictedServiceObject       = $Kernel::OM->Get("Kernel::System::RestrictedService");
	
	my @restrictedServices = $RestrictedServiceObject->GetRestrictedServices();
	
	my $ServiceList = $ServiceObject->ServiceListGet(
        Valid  => 1,
        UserID => 1
    );

	# build output
	$LayoutObject->Block(
		Name => 'Overview',
		Data => { %Param, },
	);

	$LayoutObject->Block(
		Name => 'OverviewList',
		Data => { %Param, },
	);
	
	$Self->Debug(Dumper(\@restrictedServices));

	# if there are any services defined, they are shown
	if ( @{$ServiceList} ) {

		# sort the service list by long service name
		@{$ServiceList} =
		  sort { $a->{Name} . '::' cmp $b->{Name} . '::' } @{$ServiceList};

		for my $ServiceData ( @{$ServiceList} ) {
			if ( !grep { index( $_->{Name}, $ServiceData->{Name} . "::" ) >= 0 }
				@{$ServiceList} )
			{

				my %serviceDataMap = %{$ServiceData};
				
				if ($ServiceData->{ServiceID} ~~ @restrictedServices) {
					$serviceDataMap{Restricted} = "selected";	
				} else {
					$serviceDataMap{Public} = "selected";
				}
				
				# output row
				$LayoutObject->Block(
					Name => 'OverviewListRow',
					Data => { %serviceDataMap },
				);
			}
		}
	}
	
	$Data{Updated} = $Param{Updated};

	my $Output = $LayoutObject->Header(
		Title => $LanguageObject->Translate("Restritect Services") );

	$Output .= $LayoutObject->NavigationBar();
	$Output .= $LayoutObject->Output(
		Data         => \%Data,
		TemplateFile => 'NewTicketWizardRestrictedService',
	);
	$Output .= $LayoutObject->Footer();
	return $Output;
}

sub UpdateRestrictions {
	my ( $Self, %Param ) = @_;

	my $ServiceObject = $Kernel::OM->Get("Kernel::System::Service");
	my $LanguageObject = $Kernel::OM->Get("Kernel::Language");
	my $RestrictedServiceObject       = $Kernel::OM->Get("Kernel::System::RestrictedService");
	my $ParamObject       = $Kernel::OM->Get("Kernel::System::Web::Request");
	
	my $ServiceList = $ServiceObject->ServiceListGet(
        Valid  => 1,
        UserID => 1
    );

	my @restrictedServices = ();

	for my $ServiceData ( @{$ServiceList} ) {
		if ($ParamObject->GetParam(Param => "Service" . $ServiceData->{ServiceID}) eq "Restricted") {
			push @restrictedServices, $ServiceData->{ServiceID};
		}		
	}
	
	$RestrictedServiceObject->SetRestrictedServices(@restrictedServices);
	
	return $Self->Overview();	
}

sub Debug {
	my $Self = shift;
	my $msg  = shift;
	$Kernel::OM->Get("Kernel::System::Log")
	  ->Log( Priority => 'debug', Message => $msg );
}

1;