# -- # Kernel/Modules/AdminCustomerUser.pm - to add/update/delete customer user and preferences # Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/ # -- # $Id: AdminCustomerUser.pm,v 1.48 2007/04/16 11:28:50 martin Exp $ # -- # 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 http://www.gnu.org/licenses/gpl.txt. # -- package Kernel::Modules::AdminCustomerUser; use strict; use Kernel::System::CustomerUser; use Kernel::System::CustomerCompany; use Kernel::System::Valid; use vars qw($VERSION); $VERSION = '$Revision: 1.48 $ '; $VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/; sub new { my $Type = shift; my %Param = @_; # allocate new hash for object my $Self = {}; bless ($Self, $Type); # allocate new hash for objects foreach (keys %Param) { $Self->{$_} = $Param{$_}; } # check all needed objects foreach (qw(ParamObject DBObject LayoutObject ConfigObject LogObject UserObject)) { if (!$Self->{$_}) { $Self->{LayoutObject}->FatalError(Message => "Got no $_!"); } } $Self->{CustomerUserObject} = Kernel::System::CustomerUser->new(%Param); $Self->{CustomerCompanyObject} = Kernel::System::CustomerCompany->new(%Param); $Self->{ValidObject} = Kernel::System::Valid->new(%Param); return $Self; } sub Run { my $Self = shift; my %Param = @_; my $NavBar = ''; my $Nav = $Self->{ParamObject}->GetParam(Param => 'Nav') || 0; my $Source = $Self->{ParamObject}->GetParam(Param => 'Source') || 'CustomerUser'; my $Search = $Self->{ParamObject}->GetParam(Param => 'Search'); my $Screen = $Self->{ParamObject}->GetParam(Param => 'Screen') || ''; if ($Screen eq 'Remember' && $Self->{LastScreenEdit}) { $Self->{SessionObject}->UpdateSessionID( SessionID => $Self->{SessionID}, Key => 'CustomerEditReturn', Value => $Self->{LastScreenEdit}, ); $Self->{LayoutObject}->SetEnv( Key => 'CustomerEditReturn', Value => $Self->{LastScreenEdit}, ); } elsif ($Screen eq 'Return') { # redirect $Self->{SessionObject}->UpdateSessionID( SessionID => $Self->{SessionID}, Key => 'CustomerEditReturn', Value => '', ); return $Self->{LayoutObject}->Redirect( OP => $Self->{CustomerEditReturn}, ); } # check nav bar if (!$Nav) { if ($ENV{HTTP_REFERER} && $ENV{HTTP_REFERER} !~ /Admin/) { $Nav = 'Agent'; } else { $Nav = 'Admin'; } } if ($Nav eq 'Admin') { $NavBar = $Self->{LayoutObject}->Header(); $NavBar .= $Self->{LayoutObject}->NavigationBar(); } elsif ($Nav eq 'None') { $NavBar = $Self->{LayoutObject}->Header(Type => 'Small'); } else { $NavBar = $Self->{LayoutObject}->Header(); $NavBar .= $Self->{LayoutObject}->NavigationBar(Type => $Self->{LastNavBarName}); } # search user list if ($Self->{Subaction} eq 'Search') { $Self->_Overview( Nav => $Nav, Search => $Search, ); my $Output = $NavBar; $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminCustomerUserForm', Data => \%Param, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ------------------------------------------------------------ # # download file preferences # ------------------------------------------------------------ # elsif ($Self->{Subaction} eq 'Download') { my $Group = $Self->{ParamObject}->GetParam(Param => 'Group') || ''; my $User = $Self->{ParamObject}->GetParam(Param => 'ID') || ''; my $File = $Self->{ParamObject}->GetParam(Param => 'File') || ''; # get user data my %UserData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $User); my %Preferences = %{$Self->{ConfigObject}->Get('CustomerPreferencesGroups')}; my $Module = $Preferences{$Group}->{Module}; if ($Self->{MainObject}->Require($Module)) { my $Object = $Module->new( %{$Self}, ConfigItem => $Preferences{$Group}, UserObject => $Self->{CustomerUserObject}, Debug => $Self->{Debug}, ); my %File = $Object->Download(UserData => \%UserData); return $Self->{LayoutObject}->Attachment(%File); } else { return $Self->{LayoutObject}->FatalError(); } } # ------------------------------------------------------------ # # change # ------------------------------------------------------------ # elsif ($Self->{Subaction} eq 'Change') { my $User = $Self->{ParamObject}->GetParam(Param => 'ID') || ''; # get user data my %UserData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $User); my $Output = $NavBar.$Self->_Edit( Nav => $Nav, Action => "Change", Source => $Source, Nav => $Nav, Search => $Search, ID => $User, %UserData, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ------------------------------------------------------------ # # change action # ------------------------------------------------------------ # elsif ($Self->{Subaction} eq 'ChangeAction') { my $Note = ''; my %GetParam; foreach my $Entry (@{$Self->{ConfigObject}->Get($Source)->{Map}}) { $GetParam{$Entry->[0]} = $Self->{ParamObject}->GetParam(Param => $Entry->[0]) || ''; } foreach (qw(ID)) { $GetParam{$_} = $Self->{ParamObject}->GetParam(Param => $_) || ''; } # update user if ($Self->{CustomerUserObject}->CustomerUserUpdate(%GetParam, UserID => $Self->{UserID})) { # update preferences my %Preferences = %{$Self->{ConfigObject}->Get('CustomerPreferencesGroups')}; foreach my $Group (keys %Preferences) { if ($Group eq 'Password') { next; } # get user data my %UserData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $GetParam{UserLogin}); my $Module = $Preferences{$Group}->{Module}; if ($Self->{MainObject}->Require($Module)) { my $Object = $Module->new( %{$Self}, ConfigItem => $Preferences{$Group}, UserObject => $Self->{CustomerUserObject}, Debug => $Self->{Debug}, ); my @Params = $Object->Param(UserData => \%UserData); if (@Params) { my %GetParam = (); foreach my $ParamItem (@Params) { my @Array = $Self->{ParamObject}->GetArray(Param => $ParamItem->{Name}); $GetParam{$ParamItem->{Name}} = \@Array; } if (!$Object->Run(GetParam => \%GetParam, UserData => \%UserData)) { $Note .= $Self->{LayoutObject}->Notify(Info => $Object->Error()); } } } else { return $Self->{LayoutObject}->FatalError(); } } # get user data and show screen again if (!$Note) { $Self->_Overview( Nav => $Nav, Search => $Search, ); my $Output = $NavBar.$Note; $Output .= $Self->{LayoutObject}->Notify(Info => 'Customer updated!'); $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminCustomerUserForm', Data => \%Param, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } } # something has gone wrong my $Output = $NavBar; $Output .= $Self->{LayoutObject}->Notify(Priority => 'Error'); $Output .= $Note; $Output .= $Self->_Edit( Nav => $Nav, Action => "Change", Nav => $Nav, Source => $Source, Search => $Search, %GetParam, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ------------------------------------------------------------ # # add # ------------------------------------------------------------ # elsif ($Self->{Subaction} eq 'Add') { my %GetParam; foreach (qw(UserLogin)) { $GetParam{$_} = $Self->{ParamObject}->GetParam(Param => $_) || ''; } my $Output = $NavBar.$Self->_Edit( Nav => $Nav, Action => "Add", Source => $Source, Search => $Search, %GetParam, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ------------------------------------------------------------ # # add action # ------------------------------------------------------------ # elsif ($Self->{Subaction} eq 'AddAction') { my $Note = ''; my %GetParam; foreach my $Entry (@{$Self->{ConfigObject}->Get($Source)->{Map}}) { $GetParam{$Entry->[0]} = $Self->{ParamObject}->GetParam(Param => $Entry->[0]) || ''; } # add user if (my $User = $Self->{CustomerUserObject}->CustomerUserAdd(%GetParam, UserID => $Self->{UserID}, Source => $Source)) { # update preferences my %Preferences = %{$Self->{ConfigObject}->Get('CustomerPreferencesGroups')}; foreach my $Group (keys %Preferences) { if ($Group eq 'Password') { next; } # get user data my %UserData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $GetParam{UserLogin}); my $Module = $Preferences{$Group}->{Module}; if ($Self->{MainObject}->Require($Module)) { my $Object = $Module->new( %{$Self}, ConfigItem => $Preferences{$Group}, UserObject => $Self->{CustomerUserObject}, Debug => $Self->{Debug}, ); my @Params = $Object->Param(%{$Preferences{$Group}}, UserData => \%UserData); if (@Params) { my %GetParam = (); foreach my $ParamItem (@Params) { my @Array = $Self->{ParamObject}->GetArray(Param => $ParamItem->{Name}); $GetParam{$ParamItem->{Name}} = \@Array; } if (!$Object->Run(GetParam => \%GetParam, UserData => \%UserData)) { $Note .= $Self->{LayoutObject}->Notify(Info => $Object->Error()); } } } else { return $Self->{LayoutObject}->FatalError(); } } # get user data and show screen again if (!$Note) { $Self->_Overview( Nav => $Nav, Search => $Search, ); my $Output = $NavBar.$Note; my $OnClick = ''; if ($Nav eq 'None') { $OnClick = " onclick=\"updateMessage('$User')\""; } my $URL = ''; if ($Self->{ConfigObject}->Get('Frontend::Module')->{AgentTicketPhone}) { $URL .= "". $Self->{LayoutObject}->{LanguageObject}->Get('PhoneView').""; } if ($Self->{ConfigObject}->Get('Frontend::Module')->{AgentTicketEmail}) { if ($URL) { $URL .= " - "; } $URL .= "". $Self->{LayoutObject}->{LanguageObject}->Get('Compose Email').""; } if ($URL) { $Output .= $Self->{LayoutObject}->Notify( Data => $Self->{LayoutObject}->{LanguageObject}->Get('Added User "%s"", "'.$User). " ( $URL )!", ); } else { $Output .= $Self->{LayoutObject}->Notify( Data => $Self->{LayoutObject}->{LanguageObject}->Get('Added User "%s"", "'.$User)."!", ); } $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminCustomerUserForm', Data => \%Param, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } } # something has gone wrong my $Output = $NavBar; $Output .= $Self->{LayoutObject}->Notify(Priority => 'Error'); $Output .= $Note; $Output .= $Self->_Edit( Nav => $Nav, Action => "Add", Nav => $Nav, Source => $Source, Search => $Search, %GetParam, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ------------------------------------------------------------ # # overview # ------------------------------------------------------------ # else { $Self->_Overview( Nav => $Nav, Search => $Search, ); my $Output = $NavBar; $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminCustomerUserForm', Data => \%Param, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } } sub _Overview { my $Self = shift; my %Param = @_; my $Output = ''; # build source string $Param{'SourceOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => {$Self->{CustomerUserObject}->CustomerSourceList()}, Name => 'Source', SelectedID => $Param{Source} || '', ); $Self->{LayoutObject}->Block( Name => 'Overview', Data => \%Param, ); $Self->{LayoutObject}->Block( Name => 'OverviewResult', Data => \%Param, ); if ($Param{Search}) { my %List = $Self->{CustomerUserObject}->CustomerSearch( Search => $Param{Search}, Valid => 0, ); if (%List) { # get valid list my %ValidList = $Self->{ValidObject}->ValidList(); my $CssClass = ''; foreach (sort keys %List) { # set output class if ($CssClass && $CssClass eq 'searchactive') { $CssClass = 'searchpassive'; } else { $CssClass = 'searchactive'; } my %UserData = $Self->{CustomerUserObject}->CustomerUserDataGet(User => $_); $Self->{LayoutObject}->Block( Name => 'OverviewResultRow', Data => { Valid => $ValidList{$UserData{ValidID} || ''} || '-', CssClass => $CssClass, Search => $Param{Search}, %UserData, }, ); if ($Param{Nav} eq 'None') { $Self->{LayoutObject}->Block( Name => 'OverviewResultRowLinkNone', Data => { CssClass => $CssClass, Search => $Param{Search}, %UserData, }, ); } else { $Self->{LayoutObject}->Block( Name => 'OverviewResultRowLink', Data => { CssClass => $CssClass, Search => $Param{Search}, %UserData, }, ); } } } } } sub _Edit { my $Self = shift; my %Param = @_; my $Output = ''; # build source string $Param{'CompanyOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => {$Self->{CustomerCompanyObject}->CustomerCompanyList()}, Name => 'CustomerID', SelectedID => $Param{CustomerID}, ); # build source string $Param{'SourceOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => {$Self->{CustomerUserObject}->CustomerSourceList()}, Name => 'Source', SelectedID => $Param{Source}, ); $Self->{LayoutObject}->Block( Name => 'Overview', Data => \%Param, ); $Self->{LayoutObject}->Block( Name => 'OverviewUpdate', Data => \%Param, ); foreach my $Entry (@{$Self->{ConfigObject}->Get($Param{Source})->{Map}}) { if ($Entry->[0]) { my $Block = 'Input'; # check input type if ($Entry->[0] =~ /^UserPasswor/i) { $Block = 'Password'; } # check if login auto creation if ($Self->{ConfigObject}->Get($Param{Source})->{AutoLoginCreation} && $Entry->[0] =~ /^UserLogin$/) { $Block = 'InputHidden'; } if ($Entry->[7]) { $Param{ReadOnlyType} = 'readonly'; $Param{ReadOnly} = '*'; } else { $Param{ReadOnlyType} = ''; $Param{ReadOnly} = ''; } # build selections or input fields if ($Self->{ConfigObject}->Get($Param{Source})->{Selections}->{$Entry->[0]}) { $Block = 'Option'; $Param{Option} = $Self->{LayoutObject}->OptionStrgHashRef( Data => $Self->{ConfigObject}->Get($Param{Source})->{Selections}->{$Entry->[0]}, Name => $Entry->[0], LanguageTranslation => 0, SelectedID => $Param{$Entry->[0]}, ); } elsif ($Entry->[0] =~ /^ValidID/i) { # build ValidID string $Block = 'Option'; $Param{Option} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{ValidObject}->ValidList(), }, Name => $Entry->[0], SelectedID => defined ($Param{$Entry->[0]}) ? $Param{$Entry->[0]} : 1, ); } elsif ($Entry->[0] =~ /^UserCustomerID/i && $Self->{ConfigObject}->Get($Param{Source})->{CustomerCompanySupport}) { my %Company = (); my %CompanyList = ($Self->{CustomerCompanyObject}->CustomerCompanyList(), '' => '-'); if ($Param{$Entry->[0]}) { %Company = $Self->{CustomerCompanyObject}->CustomerCompanyGet(CustomerID => $Param{$Entry->[0]}); if (!%Company) { $CompanyList{$Param{$Entry->[0]}} = $Param{$Entry->[0]}. ' (-)'; } } $Block = 'Option'; $Param{Option} = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%CompanyList, Name => $Entry->[0], SelectedID => $Param{$Entry->[0]}, ); } else { $Param{Value} = $Param{$Entry->[0]} || ''; } # show required flag if ($Entry->[4]) { $Param{Required} = '*'; } else { $Param{Required} = ''; } # add form option if ($Param{Type} && $Param{Type} eq 'hidden') { $Param{Preferences} .= $Param{Value}; } else { $Self->{LayoutObject}->Block( Name => 'PreferencesGeneric', Data => { Item => $Entry->[1], %Param}, ); $Self->{LayoutObject}->Block( Name => "PreferencesGeneric$Block", Data => { Item => $Entry->[1], Name => $Entry->[0], %Param, }, ); } } } my $PreferencesUsed = $Self->{ConfigObject}->Get($Param{Source})->{AdminSetPreferences}; if ((defined($PreferencesUsed) && $PreferencesUsed != 0) || !defined($PreferencesUsed)) { my @Groups = @{$Self->{ConfigObject}->Get('CustomerPreferencesView')}; foreach my $Colum (@Groups) { my %Data = (); my %Preferences = %{$Self->{ConfigObject}->Get('CustomerPreferencesGroups')}; foreach my $Group (keys %Preferences) { if ($Preferences{$Group}->{Colum} eq $Colum) { if ($Data{$Preferences{$Group}->{Prio}}) { foreach (1..151) { $Preferences{$Group}->{Prio}++; if (!$Data{$Preferences{$Group}->{Prio}}) { $Data{$Preferences{$Group}->{Prio}} = $Group; last; } } } $Data{$Preferences{$Group}->{Prio}} = $Group; } } # sort foreach my $Key (keys %Data) { $Data{sprintf("%07d", $Key)} = $Data{$Key}; delete $Data{$Key}; } # show each preferences setting foreach my $Prio (sort keys %Data) { my $Group = $Data{$Prio}; if (!$Self->{ConfigObject}->{CustomerPreferencesGroups}->{$Group}) { next; } my %Preference = %{$Self->{ConfigObject}->{CustomerPreferencesGroups}->{$Group}}; if ($Group eq 'Password') { next; } my $Module = $Preference{Module} || 'Kernel::Output::HTML::CustomerPreferencesGeneric'; # load module if ($Self->{MainObject}->Require($Module)) { my $Object = $Module->new( %{$Self}, ConfigItem => \%Preference, UserObject => $Self->{CustomerUserObject}, Debug => $Self->{Debug}, ); my @Params = $Object->Param(UserData => \%Param); if (@Params) { foreach my $ParamItem (@Params) { $Self->{LayoutObject}->Block( Name => 'Item', Data => { %Param }, ); if (ref($ParamItem->{Data}) eq 'HASH' || ref($Preference{Data}) eq 'HASH') { $ParamItem->{'Option'} = $Self->{LayoutObject}->OptionStrgHashRef( %Preference, %{$ParamItem}, ); } $Self->{LayoutObject}->Block( Name => $ParamItem->{Block} || $Preference{Block} || 'Option', Data => { Group => $Group, %Param, %Data, %Preference, %{$ParamItem}, }, ); } } } else { return $Self->{LayoutObject}->FatalError(); } } } } return $Self->{LayoutObject}->Output(TemplateFile => 'AdminCustomerUserForm', Data => \%Param); } 1;