Files
scripts/Perl OTRS/Kernel/Output/HTML/Templates/Standard/AdminCustomerUser.tt
2024-10-14 00:08:40 +02:00

405 lines
24 KiB
Plaintext

# --
# 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.
# --
[% RenderBlockStart("Overview") %]
<div class="MainBox ARIARoleMain LayoutFixedSidebar SidebarFirst">
<h1 class="InvisibleText">[% Translate("Customer User Management") | html %]</h1>
[% BreadcrumbPath = [
{
Name => Translate('Customer User Management'),
Link => Env("Action"),
},
]
%]
[% SWITCH Data.Action %]
[% CASE 'Add' %]
[% BreadcrumbPath.push({ Name => Translate('Add Customer User'),}) %]
[% CASE 'Change' %]
[% USE EditTitle = String(Translate("Edit Customer User")) %]
[% BreadcrumbPath.push({ Name => EditTitle.append( ': ', Data.ID ) }) %]
[% END %]
[% INCLUDE "Breadcrumb.tt" Path = BreadcrumbPath %]
<div class="Clear"></div>
<div class="SidebarColumn">
[% RenderBlockStart("ActionList") %]
<div class="WidgetSimple">
<div class="Header">
<h2>[% Translate("Actions") | html %]</h2>
</div>
<div class="Content">
<ul class="ActionList">
[% RenderBlockStart("ActionOverview") %]
<li>
<a href="[% Env("Baselink") %]Action=[% Env("Action") %];Nav=[% Data.Nav | uri %]" class="CallForAction Fullsize Center"><span><i class="fa fa-caret-left"></i>[% Translate("Go to overview") | html %]</span></a>
</li>
<li>
<a href="[% Env("Baselink") %]Action=[% Env("Action") %];Subaction=Search;Search=[% Data.Search | uri %]" class="CallForAction Fullsize Center"><span><i class="fa fa-caret-left"></i>[% Translate("Back to search results") | html %]</span></a>
</li>
[% RenderBlockEnd("ActionOverview") %]
[% RenderBlockStart("ActionSearch") %]
<li>
<form class="SearchBox" action="[% Env("CGIHandle") %]" method="post">
<input type="hidden" name="Action" value="[% Env("Action") %]"/>
<input type="hidden" name="Subaction" value="Search"/>
<input type="hidden" name="Nav" value="[% Data.Nav | html %]"/>
<input type="text" name="Search" value="[% Data.Search | html %]" id="Search" title="[% Translate("Search") | html %]"/>
<button type="submit" value="[% Translate("Search") | html %]" title="[% Translate("Search") | html %]"><i class="fa fa-search"></i></button>
</form>
<p class="FieldExplanation">
[% Translate("Wildcards like '*' are allowed.") | html %]
</p>
</li>
[% RenderBlockEnd("ActionSearch") %]
[% RenderBlockStart("ActionAdd") %]
<li>
<form action="[% Env("CGIHandle") %]" method="post">
<input type="hidden" name="Action" value="[% Env("Action") %]"/>
<input type="hidden" name="Subaction" value="Add"/>
<input type="hidden" name="Nav" value="[% Data.Nav | html %]"/>
<button class="CallForAction Fullsize Center" type="submit"><span><i class="fa fa-plus-square"></i> [% Translate("Add Customer User") | html %]</span></button>
<br/>
<label class="InvisibleText" for="Source">[% Translate("Select") | html %]</label>
[% Data.SourceOption %]
</form>
</li>
[% RenderBlockEnd("ActionAdd") %]
</ul>
</div>
</div>
[% RenderBlockEnd("ActionList") %]
<div class="WidgetSimple">
<div class="Header">
<h2>[% Translate("Hint") | html %]</h2>
</div>
<div class="Content">
<p>
[% Translate("Customer user are needed to have a customer history and to login via customer panel.") | html %]
</p>
</div>
</div>
</div>
<div class="ContentColumn">
<div class="WidgetSimple">
[% RenderBlockStart("OverviewHeader") %]
<div class="Header">
<h2>
[% IF Data.ListAll && Data.Limit && Data.ListAll > Data.Limit %]
[% Translate("List (only %s shown - more available)", Data.SearchListSize) | html %]
[% ELSE %]
[% Translate("List (%s total)", Data.ListAll) | html %]
[% END %]
</h2>
</div>
[% RenderBlockEnd("OverviewHeader") %]
[% RenderBlockStart("NoSearchTerms") %]
<div class="Content">
<p>[% Translate("Please enter a search term to look for customers.") | html %]</p>
</div>
[% RenderBlockEnd("NoSearchTerms") %]
[% RenderBlockStart("OverviewResult") %]
<div class="Content ">
<table class="DataTable" id="CustomerTable">
<thead>
<tr>
<th>[% Translate("Username") | html %]</th>
<th>[% Translate("Name") | html %]</th>
<th>[% Translate("Email") | html %]</th>
<th>[% Translate("Customer ID") | html %]</th>
<th>[% Translate("Last Login") | html %]</th>
[% RenderBlockStart("OverviewResultSwitchToCustomer") %]
<th>[% Translate("Login as") | html %]</th>
[% RenderBlockEnd("OverviewResultSwitchToCustomer") %]
<th>[% Translate("Validity") | html %]</th>
</tr>
</thead>
<tbody>
[% RenderBlockStart("NoDataFoundMsg") %]
<tr>
<td colspan="[% Data.ColSpan | html %]">
[% Translate("No data found.") | html %]
</td>
</tr>
[% RenderBlockEnd("NoDataFoundMsg") %]
[% RenderBlockStart("OverviewResultRow") %]
<tr [% IF Data.ValidID && Data.ValidID != 1 %]class="Invalid"[% END %]>
[% RenderBlockStart("OverviewResultRowLink") %]
<td><a class="AsBlock" href="[% Env("Baselink") %]Action=[% Env("Action") %];Subaction=Change;ID=[% Data.CustomerKey | uri %];Search=[% Data.Search | uri %];Nav=[% Data.Nav | uri %]">[% Data.UserLogin | html %]</a></td>
[% RenderBlockEnd("OverviewResultRowLink") %]
[% RenderBlockStart("OverviewResultRowLinkNone") %]
<td><a class="AsBlock" href="#">[% Data.UserLogin | html %]</a></td>
[% RenderBlockEnd("OverviewResultRowLinkNone") %]
<td>[% Data.UserFullname | html %]</td>
<td>[% Data.UserEmail | html %]</td>
<td>[% Data.UserCustomerID | html %]</td>
<td>[% Data.UserLastLoginTimestamp | Localize("TimeShort") %]</td>
[% RenderBlockStart("OverviewResultRowSwitchToCustomer") %]
<td>
<a class="AsBlock" href="[% Env("Baselink") %]Action=[% Env("Action") %];Subaction=Switch;ID=[% Data.UserLogin | uri %];[% Env("ChallengeTokenParam") | html %]" target="_blank">[% Translate("Switch to customer") | html %]</a>
</td>
[% RenderBlockEnd("OverviewResultRowSwitchToCustomer") %]
<td>[% Translate(Data.Valid) | html %]</td>
</tr>
[% RenderBlockEnd("OverviewResultRow") %]
</tbody>
</table>
</div>
[% RenderBlockEnd("OverviewResult") %]
[% RenderBlockStart("OverviewUpdate") %]
<div class="Header">
[% IF Data.Action == 'Add' %]
<h2>[% Translate("Add Customer User") | html %]</h2>
[% ELSE %]
<h2>[% Translate("Edit Customer User") | html %]</h2>
[% END %]
</div>
<div class="Content">
[% IF Config(Data.Source).ReadOnly == 1 || Config(Data.Source).Module.match('LDAP') %]
<div class="WidgetMessage Top Warning">
<p><strong>[% Translate("Please note") | html %]</strong>: [% Translate("This customer backend is read only, but the customer user preferences can be changed!") | html %]</p>
</div>
[% END %]
<form action="[% Env("CGIHandle") %]" enctype="multipart/form-data" method="post" name="compose" class="Validate PreventMultipleSubmits">
<input type="hidden" name="Action" value="[% Env("Action") %]"/>
<input type="hidden" name="Subaction" value="[% Data.Action | html %]Action"/>
<input type="hidden" name="ID" value="[% Data.ID | html %]"/>
<input type="hidden" name="Source" value="[% Data.Source | html %]"/>
<input type="hidden" name="Nav" value="[% Data.Nav | html %]"/>
<input type="hidden" name="Search" value="[% Data.Search | html %]"/>
[% IF Data.Action == 'Change' %]
<input type="hidden" name="ContinueAfterSave" id="ContinueAfterSave" value=""/>
[% END %]
<fieldset class="TableLike">
[% RenderBlockStart("PreferencesGeneric") %]
[% RenderBlockStart("PreferencesGenericInputHidden") %]
<div class="Field">
<input type="hidden" name="[% Data.Name | html %]" value="[% Data.Value | html %]"[% IF ReadOnly %] readonly="readonly"[% END %]/>
</div>
[% RenderBlockEnd("PreferencesGenericInputHidden") %]
[% RenderBlockStart("PreferencesGenericInput") %]
<label class="[% Data.RequiredLabelClass | html %]" for="[% Data.Name | html %]"><span class="Marker">[% Data.RequiredLabelCharacter | html %]</span> [% Translate(Data.Item) | html %]:</label>
<div class="Field">
<input type="[% IF Data.RequiredClass.match('Validate_Email') %]email[% ELSE %]text[% END %]" id="[% Data.Name | html %]" name="[% Data.Name | html %]" class="W50pc [% Data.RequiredClass | html %] [% Data.InvalidField | html %]" value="[% Data.Value | html %]"[% IF Data.ReadOnly %] readonly="readonly"[% END %]/>
[% RenderBlockStart("PreferencesGenericErrorMsg") %]
<div id="[% Data.Name | html %]Error" class="TooltipErrorMessage"><p>[% Translate("This field is required.") | html %]</p></div>
[% RenderBlockEnd("PreferencesGenericErrorMsg") %]
[% RenderBlockStart("PreferencesUserEmailErrorMsg") %]
<div id="[% Data.Name | html %]Error" class="TooltipErrorMessage"><p>[% Translate("This field is required and needs to be a valid email address.") | html %]</p></div>
[% RenderBlockEnd("PreferencesUserEmailErrorMsg") %]
[% RenderBlockStart("PreferencesGenericServerErrorMsg") %]
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage"><p>[% Translate("This field is required.") | html %]</p></div>
[% RenderBlockEnd("PreferencesGenericServerErrorMsg") %]
[% RenderBlockStart("PreferencesUserEmailInvalidConfigServerErrorMsg") %]
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage"><p>[% Translate("This email address is not allowed due to the system configuration.") | html %]</p></div>
[% RenderBlockEnd("PreferencesUserEmailInvalidConfigServerErrorMsg") %]
[% RenderBlockStart("PreferencesUserEmailInvalidMXServerErrorMsg") %]
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage"><p>[% Translate("This email address failed MX check.") | html %]</p></div>
[% RenderBlockEnd("PreferencesUserEmailInvalidMXServerErrorMsg") %]
[% RenderBlockStart("PreferencesUserEmailInvalidDNSServerErrorMsg") %]
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage"><p>[% Translate("DNS problem, please check your configuration and the error log.") | html %]</p></div>
[% RenderBlockEnd("PreferencesUserEmailInvalidDNSServerErrorMsg") %]
[% RenderBlockStart("PreferencesUserEmailInvalidSyntaxServerErrorMsg") %]
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage"><p>[% Translate("The syntax of this email address is incorrect.") | html %]</p></div>
[% RenderBlockEnd("PreferencesUserEmailInvalidSyntaxServerErrorMsg") %]
</div>
<div class="Clear"></div>
[% RenderBlockEnd("PreferencesGenericInput") %]
[% RenderBlockStart("PreferencesGenericPassword") %]
<label class="[% Data.RequiredLabelClass | html %]" for="[% Data.Name | html %]"><span class="Marker">[% Data.RequiredLabelCharacter | html %]</span> [% Translate(Data.Item) | html %]:</label>
<div class="Field">
<input type="password" id="[% Data.Name | html %]" name="[% Data.Name | html %]" class="W50pc [% Data.RequiredClass | html %] [% Data.InvalidField | html %]" value="" maxlength="100" [% IF Data.ReadOnly %] readonly="readonly"[% END %]/>
<div id="[% Data.Name | html %]Error" class="TooltipErrorMessage"><p>[% Translate("This field is required.") | html %]</p></div>
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage"><p>[% Translate("This field is required.") | html %]</p></div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("PreferencesGenericPassword") %]
[% RenderBlockStart("PreferencesGenericOption") %]
<label class="[% Data.RequiredLabelClass | html %]" for="[% Data.Name | html %]"><span class="Marker">[% Data.RequiredLabelCharacter | html %]</span> [% Translate(Data.Item) | html %]:</label>
<div class="Field">
[% Data.Option %]
<div id="[% Data.Name | html %]Error" class="TooltipErrorMessage"><p>[% Translate("This field is required.") | html %]</p></div>
<div id="[% Data.Name | html %]ServerError" class="TooltipErrorMessage">
[% IF Data.Name == 'UserCustomerID' %]
<p>[% Translate("This CustomerID is invalid.") | html %]</p>
[% ELSE %]
<p>[% Translate("This field is required.") | html %]</p>
[% END %]
</div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("PreferencesGenericOption") %]
[% RenderBlockEnd("PreferencesGeneric") %]
[% RenderBlockStart("Item") %]
[% RenderBlockStart("InputKey") %]
<label for="[% Data.Name | html %]">[% Translate(Data.Label) | html %]:</label>
<div class="Field">
<input id="[% Data.Name | html %]"type="text" name="[% Data.Name | html %]" class="W50pc" value="[% Data.SelectedID | html %]"/>
<div class="FieldExplanation"> [% Translate(Data.Key) | html %] </div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("InputKey") %]
[% RenderBlockStart("Input") %]
<label for="[% Data.Name | html %]">[% Translate(Data.Label) | html %]:</label>
<div class="Field">
<input id="[% Data.Name | html %]" type="text" name="[% Data.Name | html %]" class="W50pc" value="[% Data.SelectedID | html %]"/>
<div class="FieldExplanation">[% Translate(Data.Desc) | html %][% Translate(Data.Key) | html %]</div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("Input") %]
[% RenderBlockStart("Option") %]
<label for="[% Data.Name | html %]">[% Translate(Data.Label) | html %]:</label>
<div class="Field">
[% Data.Option %]
<div class="FieldExplanation">[% Translate(Data.Desc) | html %][% Translate(Data.Key) | html %]</div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("Option") %]
[% RenderBlockStart("Upload") %]
<label for="[% Data.Name | html %]">[% Translate(Data.Label) | html %]:</label>
<div class="Field">
<input id="[% Data.Name | html %]" name="[% Data.Name | html %]" type="file"/>
<div class="FieldExplanation">[% Translate(Data.Desc) | html %][% Translate(Data.Key) | html %]</div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("Upload") %]
[% RenderBlockStart("Password") %]
<label for="[% Data.Name | html %]">[% Translate(Data.Label) | html %]:</label>
<div class="Field">
<input id="[% Data.Name | html %]" type="password" name="[% Data.Name | html %]" class="W50pc" value="[% Data.SelectedID | html %]" autocomplete="off" />
<div>[% Translate(Data.Key) | html %]</div>
</div>
<div class="Clear"></div>
[% RenderBlockEnd("Password") %]
[% RenderBlockStart("DynamicField") %]
<div class="Row Row_DynamicField_[% Data.Name | html %]">
[% Data.Label %]
<div class="Field">
[% Data.Field %]
</div>
<div class="Clear"></div>
</div>
[% RenderBlockEnd("DynamicField") %]
[% RenderBlockEnd("Item") %]
<div class="Field SpacingTop">
[% IF Data.Action == 'Change' %]
<button class="CallForAction Primary" id="SubmitAndContinue" type="button" value="[% Translate("Save") | html %]"><span>[% Translate("Save") | html %]</span></button>
[% Translate("or") | html %]
<button class="CallForAction Primary" id="Submit" type="submit" value="[% Translate("Save") | html %]"><span>[% Translate("Save and finish") | html %]</span></button>
[% ELSE %]
<button class="CallForAction Primary" id="Submit" type="submit" value="[% Translate("Save") | html %]"><span>[% Translate("Save") | html %]</span></button>
[% END %]
[% Translate("or") | html %]
<a href="[% Env("Baselink") %]Action=[% Env("Action") %];Nav=[% Data.Nav | uri %]">[% Translate("Cancel") | html %]</a>
</div>
<div class="Clear"></div>
</fieldset>
</form>
</div>
[% RenderBlockEnd("OverviewUpdate") %]
</div>
[% RenderBlockStart("EffectivePermissions") %]
<div class="WidgetSimple">
<div class="Header">
<h2>[% Translate("Effective Permissions for Customer User") | html %]</h2>
</div>
<div class="Content">
<dl>
<dt>[% Translate("Group Permissions") | html %]</dt>
<dd>
<table class="DataTable VariableWidth SpacingTopSmall" id="GroupPermissionsTable">
<thead>
<tr>
<th>[% Translate("Group") | html %]</th>
[% RenderBlockStart("HeaderGroupPermissionType") %]
<th class="Center">[% Translate(Data.Type) | html %]</th>
[% RenderBlockEnd("HeaderGroupPermissionType") %]
</tr>
</thead>
<tbody>
[% RenderBlockStart("NoGroupPermissionsFoundMsg") %]
<tr>
<td>
[% Translate("This customer user has no group permissions.") | html %]
</td>
</tr>
[% RenderBlockEnd("NoGroupPermissionsFoundMsg") %]
[% RenderBlockStart("GroupPermissionTableRow") %]
<tr>
<td><a href="[% Env("Baselink") %]Action=AdminGroup;Subaction=Change;ID=[% Data.ID | uri %]">[% Data.Name | html %]</a></td>
[% RenderBlockStart("GroupPermissionMark") %]
[% RenderBlockStart("GroupPermissionMarkOn") %]
<td class="Center [% Data.Highlight | html %]"><i class="fa fa-check" style="color: green;" /></td>
[% RenderBlockEnd("GroupPermissionMarkOn") %]
[% RenderBlockStart("GroupPermissionMarkOff") %]
<td class="Center [% Data.Highlight | html %]"><i class="fa fa-times" style="color: lightgray;" /></td>
[% RenderBlockEnd("GroupPermissionMarkOff") %]
[% RenderBlockEnd("GroupPermissionMark") %]
</tr>
[% RenderBlockEnd("GroupPermissionTableRow") %]
</tbody>
</table>
<p class="FieldExplanation">
[% Translate("Table above shows effective group permissions for the customer user. The matrix takes into account all inherited permissions (e.g. via customer groups). Note: The table does not consider changes made to this form without submitting it.") | html %]
</p>
</dd>
<dt>[% Translate("Customer Access") | html %]</dt>
<dd>
<table class="DataTable VariableWidth SpacingTopSmall" id="CustomerPermissionsTable">
<thead>
<tr>
<th>[% Translate("Customer") | html %]</th>
[% RenderBlockStart("HeaderCustomerAccessContext") %]
<th class="Center">[% Translate(Data.Name) | html %]</th>
[% RenderBlockEnd("HeaderCustomerAccessContext") %]
</tr>
</thead>
<tbody>
[% RenderBlockStart("NoCustomerAccessFoundMsg") %]
<tr>
<td>
[% Translate("This customer user has no customer access.") | html %]
</td>
</tr>
[% RenderBlockEnd("NoCustomerAccessFoundMsg") %]
[% RenderBlockStart("CustomerAccessTableRow") %]
<tr>
<td><a href="[% Env("Baselink") %]Action=AdminCustomerCompany;Subaction=Change;CustomerID=[% Data.ID | uri %]">[% Data.Name | html %]</a></td>
[% RenderBlockStart("CustomerAccessMark") %]
[% RenderBlockStart("CustomerAccessMarkOn") %]
<td class="Center"><i class="fa fa-check" style="color: green;" /></td>
[% RenderBlockEnd("CustomerAccessMarkOn") %]
[% RenderBlockStart("CustomerAccessMarkOff") %]
<td class="Center"><i class="fa fa-times" style="color: lightgray;" /></td>
[% RenderBlockEnd("CustomerAccessMarkOff") %]
[% RenderBlockEnd("CustomerAccessMark") %]
</tr>
[% RenderBlockEnd("CustomerAccessTableRow") %]
</tbody>
</table>
<p class="FieldExplanation">
[% Translate("Table above shows granted customer access for the customer user by permission context. The matrix takes into account all inherited access (e.g. via customer groups). Note: The table does not consider changes made to this form without submitting it.") | html %]
</p>
</dd>
</dl>
</div>
</div>
[% RenderBlockEnd("EffectivePermissions") %]
</div>
<div class="Clear"></div>
</div>
[% RenderBlockEnd("Overview") %]