405 lines
24 KiB
Plaintext
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") %]
|