First public release. - docs: document the audit log, user offboarding, CSV export and the "require a reason for destructive actions" setting across README, docs/ and CLAUDE/AGENTS.md; note retention for panel_audit - docs: fill the publishing placeholders (repo URL, security contact, issue-template links) and add a semantic-versioning policy - move agent/contributor context into CLAUDE/ (AGENTS.md + a README); root CLAUDE.md is now a thin @-import pointer - add a favicon (shield-lock, matching the login screen) to the login page and the app layout - CHANGELOG: promote [Unreleased] to [1.0.0]; keep the earlier internal build as [0.1.0] Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfuvfwexztdS7LDpGuKsuK
253 lines
10 KiB
PHP
253 lines
10 KiB
PHP
<?php
|
||
|
||
return [
|
||
'title' => 'Users',
|
||
'heading' => 'User management',
|
||
'subtitle' => 'Overview of user accounts registered in Active Directory',
|
||
|
||
'ou_tree_title' => 'OU structure',
|
||
'ou_refresh_counts' => 'Refresh tree (recalculate counters)',
|
||
|
||
'toolbar' => [
|
||
'add' => 'Add user',
|
||
'move_ou' => 'Move OU',
|
||
'reset_password' => 'Reset password',
|
||
'password_expiry' => 'Password expiry',
|
||
'set_enabled' => 'Account state',
|
||
'group' => 'Group',
|
||
'force_password_change' => 'Force password change',
|
||
'unlock' => 'Unlock',
|
||
'bulk_attributes' => 'Edit attributes',
|
||
'offboard' => 'Offboarding',
|
||
'export' => 'CSV export',
|
||
],
|
||
|
||
'status_filter' => [
|
||
'all' => 'Account status: all',
|
||
],
|
||
|
||
'saved_filters' => [
|
||
'button' => 'Filters',
|
||
'save_current' => 'Save current view',
|
||
'prompt_name' => 'Name for the saved filter:',
|
||
'empty' => 'No saved filters.',
|
||
'delete' => 'Delete',
|
||
],
|
||
|
||
// Labels for filters coming from dashboard tiles (?filter=...).
|
||
'dashboard_filter' => [
|
||
'active' => 'Dashboard filter:',
|
||
'clear' => 'Clear filter',
|
||
'locked' => 'Locked-out accounts',
|
||
'pwd_never' => 'Password never expires',
|
||
'pwd_expiring' => 'Passwords expiring in ≤ 7 days',
|
||
'pwd_expired' => 'Passwords already expired',
|
||
'inactive' => 'Inactive ≥ 90 days',
|
||
'account_expired' => 'Accounts past expiry date',
|
||
'no_manager' => 'Accounts without a manager',
|
||
],
|
||
|
||
'table' => [
|
||
'empty' => 'No users match the criteria.',
|
||
'password_never_expires' => 'Never expires',
|
||
'account_never_expires' => 'Never expires',
|
||
],
|
||
|
||
'row_actions' => [
|
||
'view_edit' => 'View / Edit',
|
||
'reset_password' => 'Reset password',
|
||
'move_ou' => 'Move to OU',
|
||
'password_expiry' => 'Password expiry',
|
||
'enable' => 'Unlock account',
|
||
'disable' => 'Disable account',
|
||
'force_password_change' => 'Force password change',
|
||
'unlock' => 'Unlock (clear lockout)',
|
||
'offboard' => 'Offboarding',
|
||
],
|
||
|
||
'js' => [
|
||
'select_at_least_one' => 'Select at least one user in the table.',
|
||
'selected_users' => ':count selected users',
|
||
'profile_title' => 'User profile: :name',
|
||
'no_groups' => 'No groups.',
|
||
'managers_chain' => 'Managers: ',
|
||
'no_manager' => 'No manager assigned.',
|
||
'no_reports' => 'No direct reports.',
|
||
'structure_load_error' => 'Failed to load the structure.',
|
||
'remove_from_group_confirm' => 'Remove from this group?',
|
||
'template_loading' => 'Loading template...',
|
||
'template_loaded' => 'Template: :name — OU and organisational data pre-filled, groups: :count.',
|
||
'template_load_error' => 'Failed to load the template.',
|
||
'photo_saving' => 'Saving...',
|
||
'photo_saved' => 'Saved. Refreshing...',
|
||
'photo_save_error' => 'Failed to save the photo.',
|
||
'photo_choose_file' => 'Choose a file.',
|
||
'connection_error' => 'Connection error.',
|
||
],
|
||
|
||
'pwd' => [
|
||
'toggle' => 'Show / hide',
|
||
'generate' => 'Generate password',
|
||
'copy' => 'Copy',
|
||
],
|
||
|
||
'add_modal' => [
|
||
'title' => 'Add a new AD user',
|
||
'template_label' => 'Create like... (template - optional)',
|
||
'template_placeholder' => 'Type the name / login of the person to copy from...',
|
||
'copy_attributes' => 'Copy organisational data (department, company, title, address, manager)',
|
||
'copy_groups' => 'Copy group membership',
|
||
'given_name' => 'First name',
|
||
'given_name_placeholder' => 'e.g. Piotr',
|
||
'surname' => 'Last name',
|
||
'surname_placeholder' => 'e.g. Zieliński',
|
||
'samaccountname' => 'Logon name (sAMAccountName)',
|
||
'samaccountname_placeholder' => 'pzielinski',
|
||
'email' => 'E-mail',
|
||
'email_placeholder' => 'p.zielinski@example.com',
|
||
'ou' => 'Organisational unit (OU)',
|
||
'initial_password' => 'Initial password',
|
||
'password_hint' => 'Min. 8 characters. Generator in the panel configuration.',
|
||
'must_change_password' => 'User must change password at next logon',
|
||
'account_enabled' => 'Account enabled immediately',
|
||
'submit' => 'Create user',
|
||
|
||
'groups_section' => 'Groups',
|
||
'groups_placeholder' => 'Type a group name and pick from the list...',
|
||
|
||
'summary_title' => 'Account :name created:',
|
||
'summary_enabled' => 'account enabled',
|
||
'summary_disabled' => 'account disabled',
|
||
'summary_must_change' => 'password change at first logon',
|
||
'summary_groups' => 'added to groups: :list',
|
||
'summary_groups_failed' => 'could not add to groups: :list',
|
||
],
|
||
|
||
'reset_modal' => [
|
||
'title' => 'Reset password',
|
||
'applies_to' => 'Applies to:',
|
||
'new_password' => 'New password',
|
||
'must_change_password' => 'User must change password at next logon',
|
||
'unlock_account' => 'Unlock account (clear the logon lockout)',
|
||
'submit' => 'Reset password',
|
||
],
|
||
|
||
'move_modal' => [
|
||
'title' => 'Move to OU',
|
||
'applies_to' => 'Applies to:',
|
||
'target_ou' => 'Target organisational unit',
|
||
'submit' => 'Move',
|
||
],
|
||
|
||
'expiry_modal' => [
|
||
'title' => 'Password and account expiry',
|
||
'applies_to' => 'Applies to:',
|
||
'password_section' => 'Password',
|
||
'password_never' => 'Password never expires',
|
||
'account_section' => 'Account (accountExpires)',
|
||
'account_never' => 'Account never expires (clear the date)',
|
||
'account_on_date' => 'or the account expires on (single-user action only):',
|
||
],
|
||
|
||
'enabled_modal' => [
|
||
'title' => 'Account state',
|
||
'applies_to' => 'Applies to:',
|
||
'enable' => 'Enable account (and clear the logon lockout)',
|
||
'disable' => 'Disable account',
|
||
],
|
||
|
||
'group_modal' => [
|
||
'title' => 'Group membership',
|
||
'applies_to' => 'Applies to:',
|
||
'group' => 'Group',
|
||
'mode_add' => 'Add to group',
|
||
'mode_remove' => 'Remove from group',
|
||
],
|
||
|
||
'force_pwd_modal' => [
|
||
'title' => 'Force password change',
|
||
'applies_to' => 'Applies to:',
|
||
'hint' => 'At next logon the user will have to set a new password. The current password is not changed.',
|
||
'submit' => 'Force change',
|
||
],
|
||
|
||
'unlock_modal' => [
|
||
'title' => 'Unlock account',
|
||
'applies_to' => 'Applies to:',
|
||
'hint' => 'Clears the logon lockout (lockoutTime). Does not change the account enabled state or the password.',
|
||
'submit' => 'Unlock',
|
||
],
|
||
|
||
'bulk_attr_modal' => [
|
||
'title' => 'Bulk attribute edit',
|
||
'applies_to' => 'Applies to:',
|
||
'hint' => 'Tick the fields you want to change. Unticked fields are left as they are. Ticked and empty clears the attribute.',
|
||
'value_placeholder' => 'New value',
|
||
'submit' => 'Apply',
|
||
],
|
||
|
||
'offboard_modal' => [
|
||
'title' => 'Account offboarding',
|
||
'applies_to' => 'Applies to:',
|
||
'hint' => 'Tick the steps to run. Order: attribute changes → group removal → OU move (last, changes the DN).',
|
||
'step_disable' => 'Disable the account and set a random password',
|
||
'step_groups' => 'Remove from all groups',
|
||
'step_groups_keep_primary' => 'Keep the primary group',
|
||
'step_move' => 'Move to an organisational unit',
|
||
'step_expire' => 'Set the account expiry date and append to the description',
|
||
'expire_hint' => 'Appends to the "description" field: "Offboarded YYYY-MM-DD by <login>".',
|
||
'submit' => 'Run offboarding',
|
||
],
|
||
|
||
'view_modal' => [
|
||
'title' => 'User profile',
|
||
'tab_structure' => 'Structure',
|
||
'tab_groups' => 'Groups (membership)',
|
||
'tab_photo' => 'Photo',
|
||
'manager_placeholder' => 'Type the manager\'s name or login...',
|
||
'manager_dn_placeholder' => 'Manager DN (filled in after selection)',
|
||
'manager_clear' => 'Clear manager',
|
||
'account_expiry_hint' => 'Empty = account never expires.',
|
||
'structure_intro' => 'Structure built from the :from → :to relationship.',
|
||
'structure_full_link' => 'Full organisational structure',
|
||
'group_add_label' => 'Add to group:',
|
||
'group_add_placeholder' => 'Type a group name...',
|
||
'group_member_of' => 'Member of the following Active Directory groups:',
|
||
'photo_alt' => 'No photo',
|
||
'photo_upload_label' => 'Upload a photo (JPG/PNG, square, up to 2 MB - it will be scaled to 96×96 and stored in <code>thumbnailPhoto</code>)',
|
||
'photo_upload' => 'Upload',
|
||
'photo_remove' => 'Remove photo',
|
||
],
|
||
|
||
'flash' => [
|
||
'created' => 'User :name has been created:suffix.',
|
||
'created_suffix' => ' (template: :template:groups)',
|
||
'created_suffix_groups' => ', groups copied: :count',
|
||
'updated' => 'User data has been saved.',
|
||
'password_reset' => 'Password for user :name has been reset.',
|
||
'expiry_updated' => 'Password / account expiry policy has been updated.',
|
||
'moved' => 'User has been moved to the selected OU.',
|
||
'unlocked' => 'The account has been unlocked.',
|
||
'locked' => 'The account has been disabled.',
|
||
'deleted' => 'User has been deleted.',
|
||
'photo_removed' => 'The photo has been removed.',
|
||
'photo_saved' => 'The photo has been saved.',
|
||
'bulk_password_reset' => 'Password has been reset for :count users.',
|
||
'bulk_moved' => ':count users have been moved to the selected OU.',
|
||
'bulk_expiry_updated' => 'Password policy has been updated for :count users.',
|
||
'group_added' => 'Added to group :group.',
|
||
'group_removed' => 'Removed from the group.',
|
||
'bulk_enabled' => 'Enabled :count accounts.',
|
||
'bulk_disabled' => 'Disabled :count accounts.',
|
||
'bulk_group_added' => 'Added :count users to group :group.',
|
||
'bulk_group_removed' => 'Removed :count users from group :group.',
|
||
'force_pwd_change' => 'Forced a password change for :name at next logon.',
|
||
'bulk_force_pwd_change' => 'Forced a password change for :count users at next logon.',
|
||
'unlocked_one' => 'Account :name has been unlocked.',
|
||
'bulk_unlocked' => 'Unlocked :count accounts.',
|
||
'bulk_attributes' => 'Updated :fields fields for :count accounts.',
|
||
'offboarded' => 'Offboarding of account :name completed.',
|
||
'bulk_offboarded' => 'Offboarding completed for :count accounts.',
|
||
],
|
||
];
|