1# -- 2# Copyright (C) 2001-2020 OTRS AG, https://otrs.com/ 3# -- 4# This software comes with ABSOLUTELY NO WARRANTY. For details, see 5# the enclosed file COPYING for license information (GPL). If you 6# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. 7# -- 8 9package Kernel::Modules::AdminRole; 10 11use strict; 12use warnings; 13 14use Kernel::Language qw(Translatable); 15 16our $ObjectManagerDisabled = 1; 17 18sub new { 19 my ( $Type, %Param ) = @_; 20 21 # allocate new hash for object 22 my $Self = {%Param}; 23 bless( $Self, $Type ); 24 25 return $Self; 26} 27 28sub Run { 29 my ( $Self, %Param ) = @_; 30 31 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 32 my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request'); 33 my $LogObject = $Kernel::OM->Get('Kernel::System::Log'); 34 my $GroupObject = $Kernel::OM->Get('Kernel::System::Group'); 35 my $Notification = $ParamObject->GetParam( Param => 'Notification' ) || ''; 36 37 # ------------------------------------------------------------ # 38 # change 39 # ------------------------------------------------------------ # 40 if ( $Self->{Subaction} eq 'Change' ) { 41 my $ID = $ParamObject->GetParam( Param => 'ID' ) 42 || $ParamObject->GetParam( Param => 'RoleID' ) 43 || ''; 44 my %Data = $GroupObject->RoleGet( 45 ID => $ID, 46 ); 47 my $Output = $LayoutObject->Header(); 48 $Output .= $LayoutObject->NavigationBar(); 49 $Output .= $LayoutObject->Notify( Info => Translatable('Role updated!') ) 50 if ( $Notification && $Notification eq 'Update' ); 51 $Self->_Edit( 52 Action => 'Change', 53 %Data, 54 ); 55 $Output .= $LayoutObject->Output( 56 TemplateFile => 'AdminRole', 57 Data => \%Param, 58 ); 59 $Output .= $LayoutObject->Footer(); 60 return $Output; 61 } 62 63 # ------------------------------------------------------------ # 64 # change action 65 # ------------------------------------------------------------ # 66 elsif ( $Self->{Subaction} eq 'ChangeAction' ) { 67 68 # challenge token check for write action 69 $LayoutObject->ChallengeTokenCheck(); 70 71 my $Note = ''; 72 my ( %GetParam, %Errors ); 73 for my $Parameter (qw(ID Name Comment ValidID)) { 74 $GetParam{$Parameter} = $ParamObject->GetParam( Param => $Parameter ) || ''; 75 } 76 77 # check for needed data 78 if ( !$GetParam{Name} ) { 79 $Errors{NameInvalid} = 'ServerError'; 80 } 81 82 # if no errors occurred 83 if ( !%Errors ) { 84 85 # update group 86 my $RoleUpdate = $GroupObject->RoleUpdate( 87 %GetParam, 88 UserID => $Self->{UserID} 89 ); 90 91 if ($RoleUpdate) { 92 93 # if the user would like to continue editing the role, just redirect to the edit screen 94 # otherwise return to overview 95 if ( 96 defined $ParamObject->GetParam( Param => 'ContinueAfterSave' ) 97 && ( $ParamObject->GetParam( Param => 'ContinueAfterSave' ) eq '1' ) 98 ) 99 { 100 return $LayoutObject->Redirect( 101 OP => "Action=$Self->{Action};Subaction=Change;ID=$GetParam{ID};Notification=Update" 102 ); 103 } 104 else { 105 return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Notification=Update" ); 106 } 107 } 108 else { 109 $Note = $LogObject->GetLogEntry( 110 Type => 'Error', 111 What => 'Message', 112 ); 113 } 114 } 115 116 # something went wrong 117 my $Output = $LayoutObject->Header(); 118 $Output .= $LayoutObject->NavigationBar(); 119 $Output .= $Note 120 ? $LayoutObject->Notify( 121 Priority => 'Error', 122 Info => $Note, 123 ) 124 : ''; 125 $Self->_Edit( 126 Action => 'Change', 127 %GetParam, 128 %Errors, 129 ); 130 $Output .= $LayoutObject->Output( 131 TemplateFile => 'AdminRole', 132 Data => \%Param, 133 ); 134 $Output .= $LayoutObject->Footer(); 135 return $Output; 136 } 137 138 # ------------------------------------------------------------ # 139 # add 140 # ------------------------------------------------------------ # 141 elsif ( $Self->{Subaction} eq 'Add' ) { 142 my %GetParam = (); 143 $GetParam{Name} = $ParamObject->GetParam( Param => 'Name' ); 144 my $Output = $LayoutObject->Header(); 145 $Output .= $LayoutObject->NavigationBar(); 146 $Self->_Edit( 147 Action => 'Add', 148 %GetParam, 149 ); 150 $Output .= $LayoutObject->Output( 151 TemplateFile => 'AdminRole', 152 Data => \%Param, 153 ); 154 $Output .= $LayoutObject->Footer(); 155 return $Output; 156 } 157 158 # ------------------------------------------------------------ # 159 # add action 160 # ------------------------------------------------------------ # 161 elsif ( $Self->{Subaction} eq 'AddAction' ) { 162 163 # challenge token check for write action 164 $LayoutObject->ChallengeTokenCheck(); 165 166 my $Note = ''; 167 my ( %GetParam, %Errors ); 168 for my $Parameter (qw(ID Name Comment ValidID)) { 169 $GetParam{$Parameter} = $ParamObject->GetParam( Param => $Parameter ) || ''; 170 } 171 172 # check for needed data 173 if ( !$GetParam{Name} ) { 174 $Errors{NameInvalid} = 'ServerError'; 175 } 176 177 # if no errors occurred 178 if ( !%Errors ) { 179 180 # add role 181 my $RoleID = $GroupObject->RoleAdd( 182 %GetParam, 183 UserID => $Self->{UserID} 184 ); 185 186 if ($RoleID) { 187 $Self->_Overview(); 188 my $Output = $LayoutObject->Header(); 189 $Output .= $LayoutObject->NavigationBar(); 190 $Output .= $LayoutObject->Notify( Info => Translatable('Role added!') ); 191 $Output .= $LayoutObject->Output( 192 TemplateFile => 'AdminRole', 193 Data => \%Param, 194 ); 195 $Output .= $LayoutObject->Footer(); 196 return $Output; 197 } 198 else { 199 $Note = $LogObject->GetLogEntry( 200 Type => 'Error', 201 What => 'Message', 202 ); 203 } 204 } 205 my $Output = $LayoutObject->Header(); 206 $Output .= $Note 207 ? $LayoutObject->Notify( 208 Priority => 'Error', 209 Info => $Note, 210 ) 211 : ''; 212 $Output .= $LayoutObject->NavigationBar(); 213 $Self->_Edit( 214 Action => 'Add', 215 %GetParam, 216 %Errors, 217 ); 218 $Output .= $LayoutObject->Output( 219 TemplateFile => 'AdminRole', 220 Data => \%Param, 221 ); 222 $Output .= $LayoutObject->Footer(); 223 return $Output; 224 } 225 226 # ------------------------------------------------------------ 227 # overview 228 # ------------------------------------------------------------ 229 else { 230 $Self->_Overview(); 231 232 my $Output = $LayoutObject->Header(); 233 $Output .= $LayoutObject->NavigationBar(); 234 $Output .= $LayoutObject->Notify( Info => Translatable('Role updated!') ) 235 if ( $Notification && $Notification eq 'Update' ); 236 237 $Output .= $LayoutObject->Output( 238 TemplateFile => 'AdminRole', 239 Data => \%Param, 240 ); 241 $Output .= $LayoutObject->Footer(); 242 return $Output; 243 } 244 245} 246 247sub _Edit { 248 my ( $Self, %Param ) = @_; 249 250 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 251 252 $LayoutObject->Block( 253 Name => 'Overview', 254 Data => \%Param, 255 ); 256 257 $LayoutObject->Block( Name => 'ActionList' ); 258 $LayoutObject->Block( Name => 'ActionOverview' ); 259 260 # get valid list 261 my %ValidList = $Kernel::OM->Get('Kernel::System::Valid')->ValidList(); 262 my %ValidListReverse = reverse %ValidList; 263 264 $Param{ValidOption} = $LayoutObject->BuildSelection( 265 Data => \%ValidList, 266 Name => 'ValidID', 267 Class => 'Modernize', 268 SelectedID => $Param{ValidID} || $ValidListReverse{valid}, 269 ); 270 271 $LayoutObject->Block( 272 Name => 'OverviewUpdate', 273 Data => \%Param, 274 ); 275 276 return 1; 277} 278 279sub _Overview { 280 my ( $Self, %Param ) = @_; 281 282 my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); 283 my $GroupObject = $Kernel::OM->Get('Kernel::System::Group'); 284 285 $LayoutObject->Block( 286 Name => 'Overview', 287 Data => \%Param, 288 ); 289 290 $LayoutObject->Block( Name => 'ActionList' ); 291 $LayoutObject->Block( Name => 'ActionAdd' ); 292 $LayoutObject->Block( Name => 'Filter' ); 293 294 my %List = $GroupObject->RoleList( 295 ValidID => 0, 296 ); 297 my $ListSize = keys %List; 298 299 $LayoutObject->Block( 300 Name => 'OverviewHeader', 301 Data => { 302 AllItemsCount => $ListSize, 303 }, 304 ); 305 306 # if there is data available, it is shown 307 if (%List) { 308 $LayoutObject->Block( 309 Name => 'OverviewResult', 310 Data => \%Param, 311 ); 312 313 # get valid list 314 my %ValidList = $Kernel::OM->Get('Kernel::System::Valid')->ValidList(); 315 for my $KeyList ( sort { $List{$a} cmp $List{$b} } keys %List ) { 316 317 my %Data = $GroupObject->RoleGet( ID => $KeyList ); 318 $LayoutObject->Block( 319 Name => 'OverviewResultRow', 320 Data => { 321 Valid => $ValidList{ $Data{ValidID} }, 322 %Data, 323 }, 324 ); 325 } 326 } 327 328 # otherwise, a message is displayed 329 else { 330 $LayoutObject->Block( 331 Name => 'NoRolesDefined', 332 Data => {}, 333 ); 334 } 335 return 1; 336} 337 3381; 339